diff --git a/packages/react/src/hooks/useShowCommands.js b/packages/react/src/hooks/useShowCommands.js index 1379f267c4..7ea1ddeb21 100644 --- a/packages/react/src/hooks/useShowCommands.js +++ b/packages/react/src/hooks/useShowCommands.js @@ -9,7 +9,11 @@ const useShowCommands = (commands, setFilteredCommands, setShowCommandList) => const cursor = e.target.selectionStart; const tokens = e.target.value.slice(0, cursor).split(/\s+/); - if (tokens.length === 1 && tokens[0].startsWith('/')) { + if ( + tokens.length === 1 && + tokens[0].startsWith('/') && + getFilteredCommands(tokens[0]).length > 0 + ) { setFilteredCommands(getFilteredCommands(tokens[0])); setShowCommandList(true); } else { diff --git a/packages/react/src/views/ChatInput/ChatInput.js b/packages/react/src/views/ChatInput/ChatInput.js index e753b689ae..d8927a0631 100644 --- a/packages/react/src/views/ChatInput/ChatInput.js +++ b/packages/react/src/views/ChatInput/ChatInput.js @@ -354,8 +354,25 @@ const ChatInput = ({ scrollToBottom, clearUnreadDividerRef }) => { const handleCommandExecution = async (message) => { const execCommand = async (command, params) => { - await RCInstance.execCommand({ command, params, tmid: threadId }); - setFilteredCommands([]); + try { + const result = await RCInstance.execCommand({ + command, + params, + tmid: threadId, + }); + if (!result.success) { + dispatchToastMessage({ + type: 'error', + message: result.error || 'No such command', + }); + } + setFilteredCommands([]); + } catch (e) { + dispatchToastMessage({ + type: 'error', + message: 'No such command', + }); + } }; const [command, ...paramsArray] = message.split(' '); @@ -366,7 +383,14 @@ const ChatInput = ({ scrollToBottom, clearUnreadDividerRef }) => { setDisableButton(true); setEditMessage({}); await execCommand(command.replace('/', ''), params); + return true; } + + messageRef.current.value = ''; + setDisableButton(true); + setEditMessage({}); + await execCommand(command.replace('/', ''), params); + return true; }; const sendMessage = async () => { @@ -392,7 +416,7 @@ const ChatInput = ({ scrollToBottom, clearUnreadDividerRef }) => { return; } if (message.startsWith('/')) { - handleCommandExecution(message); + await handleCommandExecution(message); return; } diff --git a/packages/react/src/views/CommandList/CommandsList.js b/packages/react/src/views/CommandList/CommandsList.js index ad4d9f1d45..3aff1faa9c 100644 --- a/packages/react/src/views/CommandList/CommandsList.js +++ b/packages/react/src/views/CommandList/CommandsList.js @@ -51,7 +51,9 @@ function CommandsList({ switch (event.key) { case 'Enter': { const selectedItem = filteredCommands[commandIndex]; - handleCommandClick(selectedItem); + if (selectedItem) { + handleCommandClick(selectedItem); + } break; } case 'ArrowDown':