@@ -724,7 +724,7 @@ export default {
724724 true
725725 ).filter (user => user ._id !== this .currentUserId )
726726 },
727- selectUserTag (user ) {
727+ selectUserTag (user , editMode = false ) {
728728 const { position , endPosition } = this .getCharPosition (' @' )
729729
730730 const space = this .message .substr (endPosition, endPosition).length
@@ -739,8 +739,11 @@ export default {
739739
740740 this .selectedUsersTag = [... this .selectedUsersTag , { ... user }]
741741
742- this .cursorRangePosition =
743- position + user .username .length + space .length + 1
742+ if (! editMode) {
743+ this .cursorRangePosition =
744+ position + user .username .length + space .length + 1
745+ }
746+
744747 this .focusTextarea ()
745748 },
746749 resetFooterList (tagChar = null ) {
@@ -879,7 +882,35 @@ export default {
879882 this .resetMessage ()
880883
881884 this .editedMessage = { ... message }
882- this .message = message .content
885+
886+ let messageContent = message .content
887+
888+ const res = [
889+ ... messageContent .matchAll (new RegExp (' <usertag>' , ' gi' ))
890+ ].map (a => a .index )
891+
892+ if (res .length ) {
893+ const firstTag = ' <usertag>'
894+ const secondTag = ' </usertag>'
895+
896+ res .forEach (r => {
897+ const userId = messageContent .substring (
898+ messageContent .indexOf (firstTag) + firstTag .length ,
899+ messageContent .indexOf (secondTag)
900+ )
901+
902+ const user = this .room .users .find (user => user ._id === userId)
903+
904+ messageContent = messageContent .replace (
905+ ` ${ firstTag}${ userId}${ secondTag} ` ,
906+ ` @${ user .username || ' unknown' } `
907+ )
908+
909+ this .selectUserTag (user, true )
910+ })
911+ }
912+
913+ this .message = messageContent
883914
884915 if (message .files ) {
885916 this .files = [... message .files ]
0 commit comments