<\/p>/g, '
+ Please report this error in our
+ Discord channel. You can copy the
+ error message by clicking the "Copy" button below.
+
'))
.replaceAll(/\n\n
\n\n/g, '
\n\n')
- vModel.value = markdown
+ vModel.value = props.isFormField && markdown === '
' ? '' : markdown
},
editable: !props.readOnly,
+ autofocus: props.autofocus,
+ onFocus: () => {
+ isFocused.value = true
+ },
+ onBlur: (e) => {
+ if (!(e?.event?.relatedTarget as HTMLElement)?.closest('.bubble-menu, .nc-textarea-rich-editor')) {
+ isFocused.value = false
+ }
+ },
})
const setEditorContent = (contentMd: any, focusEndOfDoc?: boolean) => {
@@ -153,21 +175,43 @@ const setEditorContent = (contentMd: any, focusEndOfDoc?: boolean) => {
}
if (props.syncValueChange) {
- watch(vModel, () => {
+ watch([vModel, editor], () => {
setEditorContent(vModel.value)
})
}
+if (props.isFormField) {
+ watch([props, editor], () => {
+ if (props.readOnly) {
+ editor.value?.setEditable(false)
+ } else {
+ editor.value?.setEditable(true)
+ }
+ })
+}
+
watch(editorDom, () => {
if (!editorDom.value) return
setEditorContent(vModel.value, true)
+ if (props.isFormField) return
// Focus editor after editor is mounted
setTimeout(() => {
editor.value?.chain().focus().run()
}, 50)
})
+
+useEventListener(
+ editorDom,
+ 'focusout',
+ (e: FocusEvent) => {
+ if (!(e?.relatedTarget as HTMLElement)?.closest('.bubble-menu, .nc-textarea-rich-editor')) {
+ isFocused.value = false
+ }
+ },
+ true,
+)
@@ -177,34 +221,51 @@ watch(editorDom, () => {
'flex flex-col flex-grow nc-rich-text-full': fullMode,
'nc-rich-text-embed flex flex-col pl-1 w-full': !fullMode,
'readonly': readOnly,
+ 'nc-form-rich-text-field !p-0': isFormField,
}"
- :tabindex="readOnlyCell ? -1 : 0"
+ :tabindex="readOnlyCell || isFormField ? -1 : 0"
>
- Oops! Something unexpected happened :/
+
+
+
- {{ formViewData.heading }}
-
-
-
- {{ formViewData.subheading }}
-
-
+ {{ formViewData.heading }}
+
+
+