diff --git a/src/components/input/editor/TipTap.vue b/src/components/input/editor/TipTap.vue index 21d356f9b..b7da770b7 100644 --- a/src/components/input/editor/TipTap.vue +++ b/src/components/input/editor/TipTap.vue @@ -162,6 +162,7 @@ import BaseButton from '@/components/base/BaseButton.vue' import XButton from '@/components/input/button.vue' import {Placeholder} from '@tiptap/extension-placeholder' import {eventToHotkeyString} from '@github/hotkey' +import {useBaseStore} from '@/stores/base' const {t} = useI18n() @@ -205,6 +206,8 @@ const { editShortcut?: string, }>() +const baseStore = useBaseStore() + const emit = defineEmits(['update:modelValue', 'save']) const inputHTML = ref('') @@ -363,6 +366,12 @@ const editor = useEditor({ // JSON // this.$emit('update:modelValue', this.editor.getJSON()) }, + onFocus() { + baseStore.setEditorFocused(true) + }, + onBlur() { + baseStore.setEditorFocused(false) + }, }) watch(inputHTML, (value) => { @@ -475,7 +484,7 @@ function handleImagePaste(event) { function setFocusToEditor(event) { const hotkeyString = eventToHotkeyString(event) if (!hotkeyString) return - if (hotkeyString !== editShortcut || editor.value?.isFocused) return + if (hotkeyString !== editShortcut || baseStore.editorFocused) return event.preventDefault() editor.value?.commands.focus() diff --git a/src/stores/base.ts b/src/stores/base.ts index f861376cc..67f65f7d1 100644 --- a/src/stores/base.ts +++ b/src/stores/base.ts @@ -30,6 +30,7 @@ export const useBaseStore = defineStore('base', () => { const quickActionsActive = ref(false) const logoVisible = ref(true) const updateAvailable = ref(false) + const editorFocused = ref(false) // To allow tracking over multiple instances of the editor function setLoading(newLoading: boolean) { loading.value = newLoading @@ -92,6 +93,10 @@ export const useBaseStore = defineStore('base', () => { updateAvailable.value = value } + function setEditorFocused(value: boolean) { + editorFocused.value = value + } + async function handleSetCurrentProject( {project, forceUpdate = false}: {project: IProject | null, forceUpdate?: boolean}, ) { @@ -150,6 +155,7 @@ export const useBaseStore = defineStore('base', () => { quickActionsActive: readonly(quickActionsActive), logoVisible: readonly(logoVisible), updateAvailable: readonly(updateAvailable), + editorFocused: readonly(editorFocused), setLoading, setReady, @@ -161,6 +167,7 @@ export const useBaseStore = defineStore('base', () => { setBlurHash, setLogoVisible, setUpdateAvailable, + setEditorFocused, handleSetCurrentProject, loadApp,