fix: Unable to add emoji exactly where the cursor is at (#5865)
* fix: Unable to add emoji exactly where the cursor is at * chore: Minor fixes * chore: Review fixes * chore: Code clean up * chore: Review fixes * chore: Minor fixes * chore: Review fixes
This commit is contained in:
parent
0b5c82ad5f
commit
613fb0b064
2 changed files with 42 additions and 1 deletions
|
@ -65,6 +65,7 @@ export default {
|
||||||
placeholder: { type: String, default: '' },
|
placeholder: { type: String, default: '' },
|
||||||
isPrivate: { type: Boolean, default: false },
|
isPrivate: { type: Boolean, default: false },
|
||||||
enableSuggestions: { type: Boolean, default: true },
|
enableSuggestions: { type: Boolean, default: true },
|
||||||
|
updateSelectionWith: { type: String, default: '' },
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -162,6 +163,25 @@ export default {
|
||||||
isPrivate() {
|
isPrivate() {
|
||||||
this.reloadState();
|
this.reloadState();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
updateSelectionWith(newValue, oldValue) {
|
||||||
|
if (!this.editorView) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (newValue !== oldValue) {
|
||||||
|
if (this.updateSelectionWith !== '') {
|
||||||
|
const node = this.editorView.state.schema.text(
|
||||||
|
this.updateSelectionWith
|
||||||
|
);
|
||||||
|
const tr = this.editorView.state.tr.replaceSelectionWith(node);
|
||||||
|
this.editorView.focus();
|
||||||
|
this.state = this.editorView.state.apply(tr);
|
||||||
|
this.emitOnChange();
|
||||||
|
this.$emit('clear-selection');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.state = createState(this.value, this.placeholder, this.plugins);
|
this.state = createState(this.value, this.placeholder, this.plugins);
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
class="input"
|
class="input"
|
||||||
:is-private="isOnPrivateNote"
|
:is-private="isOnPrivateNote"
|
||||||
:placeholder="messagePlaceHolder"
|
:placeholder="messagePlaceHolder"
|
||||||
|
:update-selection-with="updateEditorSelectionWith"
|
||||||
:min-height="4"
|
:min-height="4"
|
||||||
@typing-off="onTypingOff"
|
@typing-off="onTypingOff"
|
||||||
@typing-on="onTypingOn"
|
@typing-on="onTypingOn"
|
||||||
|
@ -67,6 +68,7 @@
|
||||||
@blur="onBlur"
|
@blur="onBlur"
|
||||||
@toggle-user-mention="toggleUserMention"
|
@toggle-user-mention="toggleUserMention"
|
||||||
@toggle-canned-menu="toggleCannedMenu"
|
@toggle-canned-menu="toggleCannedMenu"
|
||||||
|
@clear-selection="clearEditorSelection"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="hasAttachments" class="attachment-preview-box" @paste="onPaste">
|
<div v-if="hasAttachments" class="attachment-preview-box" @paste="onPaste">
|
||||||
|
@ -215,6 +217,7 @@ export default {
|
||||||
ccEmails: '',
|
ccEmails: '',
|
||||||
doAutoSaveDraft: () => {},
|
doAutoSaveDraft: () => {},
|
||||||
showWhatsAppTemplatesModal: false,
|
showWhatsAppTemplatesModal: false,
|
||||||
|
updateEditorSelectionWith: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -707,8 +710,26 @@ export default {
|
||||||
}
|
}
|
||||||
this.$nextTick(() => this.$refs.messageInput.focus());
|
this.$nextTick(() => this.$refs.messageInput.focus());
|
||||||
},
|
},
|
||||||
|
clearEditorSelection() {
|
||||||
|
this.updateEditorSelectionWith = '';
|
||||||
|
},
|
||||||
|
insertEmoji(emoji, selectionStart, selectionEnd) {
|
||||||
|
const { message } = this;
|
||||||
|
const newMessage =
|
||||||
|
message.slice(0, selectionStart) +
|
||||||
|
emoji +
|
||||||
|
message.slice(selectionEnd, message.length);
|
||||||
|
this.message = newMessage;
|
||||||
|
},
|
||||||
emojiOnClick(emoji) {
|
emojiOnClick(emoji) {
|
||||||
this.message = `${this.message}${emoji} `;
|
if (this.showRichContentEditor) {
|
||||||
|
this.updateEditorSelectionWith = emoji;
|
||||||
|
this.onFocus();
|
||||||
|
}
|
||||||
|
if (!this.showRichContentEditor) {
|
||||||
|
const { selectionStart, selectionEnd } = this.$refs.messageInput.$el;
|
||||||
|
this.insertEmoji(emoji, selectionStart, selectionEnd);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
clearMessage() {
|
clearMessage() {
|
||||||
this.message = '';
|
this.message = '';
|
||||||
|
|
Loading…
Reference in a new issue