diff --git a/GUI/src/components/FormElements/FormRichText/index.tsx b/GUI/src/components/FormElements/FormRichText/index.tsx index d686788d6..286ac1333 100644 --- a/GUI/src/components/FormElements/FormRichText/index.tsx +++ b/GUI/src/components/FormElements/FormRichText/index.tsx @@ -1,4 +1,4 @@ -import { FC, Ref } from 'react'; +import { FC, Ref, useEffect } from 'react'; import ReactQuill from 'react-quill'; import 'react-quill/dist/quill.snow.css'; import './FormRichText.scss'; @@ -19,6 +19,27 @@ const FormRichText: FC = ({ defaultValue, onChange, quill }) ], }; + useEffect(() => { + if (!quill || !('current' in quill) || !quill.current) return; + + const quillInstance = quill.current.getEditor(); + const editorElement = quillInstance.root; + + const handleTabKey = (e: KeyboardEvent) => { + if (e.key === 'Tab' && !e.shiftKey && !e.ctrlKey && !e.metaKey && !e.altKey) { + e.preventDefault(); + const selection = quillInstance.getSelection(true); + if (selection) { + quillInstance.insertText(selection.index, ' ', 'user'); + quillInstance.setSelection({ index: selection.index + 4, length: 0 }); + } + } + }; + + editorElement.addEventListener('keydown', handleTabKey, true); + return () => editorElement.removeEventListener('keydown', handleTabKey, true); + }, [quill]); + return ( [\]_*#().!`=<\\])/g, String.raw`\\$1`); + + let finalMessage = markdownMessage; + const trimmedMessage = markdownMessage.trim().toLowerCase(); + + if (trimmedMessage === 'yes' || trimmedMessage === 'no') { + finalMessage = `\${"${trimmedMessage}"}`; + } + finishedFlow.set(parentStepName, { assign: { res: { - result: `${htmlToMarkdown.translate( - typeof parentNode.data.message === 'string' - ? parentNode.data.message.replace('{{', '${').replace('}}', '}') - : '', - )}`, + result: finalMessage, }, }, next: childNode ? toSnakeCase(childNode.data.label ?? 'format_messages') : 'format_messages',