From 0419eff230a75620bf1d1287f4abc99bcc71400d Mon Sep 17 00:00:00 2001 From: Luke Barnard <lukeb@openmarket.com> Date: Thu, 20 Jul 2017 15:46:36 +0100 Subject: [PATCH] Insert pill onClick of timeline profile When clicking someone in the timeline, insert a user pill instead of the plaintext "displayname:" --- src/components/views/messages/TextualBody.js | 3 +-- src/components/views/rooms/EventTile.js | 4 ++-- .../views/rooms/MessageComposerInput.js | 18 +++++++++++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/components/views/messages/TextualBody.js b/src/components/views/messages/TextualBody.js index 85cc85be49..d45813cb17 100644 --- a/src/components/views/messages/TextualBody.js +++ b/src/components/views/messages/TextualBody.js @@ -297,10 +297,9 @@ module.exports = React.createClass({ onEmoteSenderClick: function(event) { const mxEvent = this.props.mxEvent; - const name = mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender(); dis.dispatch({ action: 'insert_displayname', - displayname: name.replace(' (IRC)', ''), + user_id: mxEvent.getSender(), }); }, diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 68ef3a1f44..32f0739795 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -357,10 +357,10 @@ module.exports = withMatrixClient(React.createClass({ }, onSenderProfileClick: function(event) { - var mxEvent = this.props.mxEvent; + const mxEvent = this.props.mxEvent; dis.dispatch({ action: 'insert_displayname', - displayname: (mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender()).replace(' (IRC)', ''), + user_id: mxEvent.getSender(), }); }, diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index d5a486bb39..29f627180b 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -275,15 +275,23 @@ export default class MessageComposerInput extends React.Component { case 'focus_composer': editor.focus(); break; - - // TODO change this so we insert a complete user alias - case 'insert_displayname': { + const entityKey = Entity.create( + 'LINK', 'IMMUTABLE', + { url: `https://matrix.to/#/${payload.user_id}`}, + ); + const selection = this.state.editorState.getSelection(); contentState = Modifier.replaceText( contentState, - this.state.editorState.getSelection(), - `${payload.displayname}: `, + selection, + `${payload.user_id}`, + null, + entityKey, ); + + const suffix = selection.getStartOffset() === 0 ? ': ' : ' '; + contentState = Modifier.replaceText(contentState, contentState.getSelectionAfter(), suffix); + let editorState = EditorState.push(this.state.editorState, contentState, 'insert-characters'); editorState = EditorState.forceSelection(editorState, contentState.getSelectionAfter()); this.onEditorContentChanged(editorState);