|
|
|
@ -832,8 +832,19 @@ class CompositionBoxInner extends React.Component<Props, State> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async onKeyDown(event: any) {
|
|
|
|
|
if (event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing) {
|
|
|
|
|
// If shift, newline. If in IME composing mode, leave it to IME. Else send message.
|
|
|
|
|
const isEnter = event.key === 'Enter';
|
|
|
|
|
const isShiftEnter = event.shiftKey && isEnter;
|
|
|
|
|
const isEnterNewLineSetting = (window.getSettingValue(SettingsKey.settingsEnterKeyFunction) as string) === 'enterNewLine';
|
|
|
|
|
const isNotComposing = !event.nativeEvent.isComposing;
|
|
|
|
|
|
|
|
|
|
if (isEnterNewLineSetting && isEnter && isNotComposing) {
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
if (isShiftEnter) {
|
|
|
|
|
await this.onSendMessage();
|
|
|
|
|
} else {
|
|
|
|
|
this.insertNewLine();
|
|
|
|
|
}
|
|
|
|
|
} else if (isEnter && !event.shiftKey && isNotComposing) {
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
await this.onSendMessage();
|
|
|
|
|
} else if (event.key === 'Escape' && this.state.showEmojiPanel) {
|
|
|
|
@ -845,6 +856,32 @@ class CompositionBoxInner extends React.Component<Props, State> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private insertNewLine() {
|
|
|
|
|
const messageBox = this.textarea.current;
|
|
|
|
|
if (!messageBox) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { draft } = this.state;
|
|
|
|
|
const { selectedConversationKey } = this.props;
|
|
|
|
|
|
|
|
|
|
if (!selectedConversationKey) {
|
|
|
|
|
return; // add this check to prevent undefined from being used
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const currentSelectionStart = Number(messageBox.selectionStart);
|
|
|
|
|
const realSelectionStart = getSelectionBasedOnMentions(draft, currentSelectionStart);
|
|
|
|
|
|
|
|
|
|
const before = draft.slice(0, realSelectionStart);
|
|
|
|
|
const after = draft.slice(realSelectionStart);
|
|
|
|
|
|
|
|
|
|
this.setState({ draft: `${before}\n${after}` });
|
|
|
|
|
updateDraftForConversation({
|
|
|
|
|
conversationKey: selectedConversationKey,
|
|
|
|
|
draft: `${before}\n${after}`,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async onKeyUp() {
|
|
|
|
|
if (!this.props.selectedConversationKey) {
|
|
|
|
|
throw new Error('selectedConversationKey is needed');
|
|
|
|
|