коммит произвёл
GitHub
родитель
e99d92dc66
Коммит
422df51d77
@@ -10,11 +10,12 @@ import {getBool} from 'mattermost-redux/selectors/entities/preferences';
|
|||||||
import {emitShortcutReactToLastPostFrom} from 'actions/post_actions';
|
import {emitShortcutReactToLastPostFrom} from 'actions/post_actions';
|
||||||
import {editLatestPost} from 'actions/views/create_comment';
|
import {editLatestPost} from 'actions/views/create_comment';
|
||||||
import {replyToLatestPostInChannel} from 'actions/views/rhs';
|
import {replyToLatestPostInChannel} from 'actions/views/rhs';
|
||||||
|
import {getIsRhsExpanded} from 'selectors/rhs';
|
||||||
|
|
||||||
import type {TextboxElement} from 'components/textbox';
|
import type {TextboxElement} from 'components/textbox';
|
||||||
import type TextboxClass from 'components/textbox/textbox';
|
import type TextboxClass from 'components/textbox/textbox';
|
||||||
|
|
||||||
import Constants, {Locations, Preferences} from 'utils/constants';
|
import Constants, {A11yClassNames, Locations, Preferences} from 'utils/constants';
|
||||||
import * as Keyboard from 'utils/keyboard';
|
import * as Keyboard from 'utils/keyboard';
|
||||||
import {type ApplyMarkdownOptions} from 'utils/markdown/apply_markdown';
|
import {type ApplyMarkdownOptions} from 'utils/markdown/apply_markdown';
|
||||||
import {pasteHandler} from 'utils/paste';
|
import {pasteHandler} from 'utils/paste';
|
||||||
@@ -52,6 +53,7 @@ const useKeyHandler = (
|
|||||||
const ctrlSend = useSelector((state: GlobalState) => getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'));
|
const ctrlSend = useSelector((state: GlobalState) => getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'));
|
||||||
const codeBlockOnCtrlEnter = useSelector((state: GlobalState) => getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, 'code_block_ctrl_enter', true));
|
const codeBlockOnCtrlEnter = useSelector((state: GlobalState) => getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, 'code_block_ctrl_enter', true));
|
||||||
const messageHistory = useSelector((state: GlobalState) => state.entities.posts.messagesHistory.messages);
|
const messageHistory = useSelector((state: GlobalState) => state.entities.posts.messagesHistory.messages);
|
||||||
|
const rhsExpanded = useSelector(getIsRhsExpanded);
|
||||||
|
|
||||||
const timeoutId = useRef<number>();
|
const timeoutId = useRef<number>();
|
||||||
const messageHistoryIndex = useRef(messageHistory.length);
|
const messageHistoryIndex = useRef(messageHistory.length);
|
||||||
@@ -361,6 +363,41 @@ const useKeyHandler = (
|
|||||||
};
|
};
|
||||||
}, [location, draft.message, caretPosition]);
|
}, [location, draft.message, caretPosition]);
|
||||||
|
|
||||||
|
const reactToLastMessage = useCallback((e: KeyboardEvent) => {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
const noModalsAreOpen = document.getElementsByClassName(A11yClassNames.MODAL).length === 0;
|
||||||
|
const noPopupsDropdownsAreOpen = document.getElementsByClassName(A11yClassNames.POPUP).length === 0;
|
||||||
|
|
||||||
|
// Block keyboard shortcut react to last message when :
|
||||||
|
// - RHS is completely expanded
|
||||||
|
// - Any dropdown/popups are open
|
||||||
|
// - Any modals are open
|
||||||
|
if (!rhsExpanded && noModalsAreOpen && noPopupsDropdownsAreOpen) {
|
||||||
|
dispatch(emitShortcutReactToLastPostFrom(Locations.CENTER));
|
||||||
|
}
|
||||||
|
}, [dispatch, rhsExpanded]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const documentKeyHandler = (e: KeyboardEvent) => {
|
||||||
|
const ctrlOrMetaKeyPressed = e.ctrlKey || e.metaKey;
|
||||||
|
const lastMessageReactionKeyCombo = ctrlOrMetaKeyPressed && e.shiftKey && Keyboard.isKeyPressed(e, KeyCodes.BACK_SLASH);
|
||||||
|
if (lastMessageReactionKeyCombo) {
|
||||||
|
reactToLastMessage(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!postId) {
|
||||||
|
document.addEventListener('keydown', documentKeyHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
if (!postId) {
|
||||||
|
document.removeEventListener('keydown', documentKeyHandler);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}, [postId, reactToLastMessage]);
|
||||||
|
|
||||||
// Reset history index
|
// Reset history index
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (messageHistoryIndex.current === messageHistory.length) {
|
if (messageHistoryIndex.current === messageHistory.length) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user