diff --git a/apps/client/src/widgets/collections/calendar/api.ts b/apps/client/src/widgets/collections/calendar/api.ts index 934edcb2e..eef391108 100644 --- a/apps/client/src/widgets/collections/calendar/api.ts +++ b/apps/client/src/widgets/collections/calendar/api.ts @@ -58,8 +58,6 @@ export async function changeEvent(note: FNote, { startDate, endDate, startTime, startAttribute = note.getAttributes("label").filter(attr => attr.name == "calendar:startTime").shift()?.value||"startTime"; endAttribute = note.getAttributes("label").filter(attr => attr.name == "calendar:endTime").shift()?.value||"endTime"; - if (startTime && endTime) { - setAttribute(note, "label", startAttribute, startTime); - setAttribute(note, "label", endAttribute, endTime); - } + setAttribute(note, "label", startAttribute, startTime); + setAttribute(note, "label", endAttribute, endTime); } diff --git a/apps/client/src/widgets/react/CKEditor.tsx b/apps/client/src/widgets/react/CKEditor.tsx index 8b8839a38..84df2d059 100644 --- a/apps/client/src/widgets/react/CKEditor.tsx +++ b/apps/client/src/widgets/react/CKEditor.tsx @@ -6,9 +6,9 @@ export interface CKEditorApi { focus(): void; /** * Imperatively sets the text in the editor. - * + * * Prefer setting `currentValue` prop where possible. - * + * * @param text text to set in the editor */ setText(text: string): void; @@ -27,15 +27,16 @@ interface CKEditorOpts { onClick?: (e: MouseEvent, pos?: ModelPosition | null) => void; onKeyDown?: (e: KeyboardEvent) => void; onBlur?: () => void; + onInitialized?: (editorInstance: CKTextEditor) => void; } -export default function CKEditor({ apiRef, currentValue, editor, config, disableNewlines, disableSpellcheck, onChange, onClick, ...restProps }: CKEditorOpts) { - const editorContainerRef = useRef(null); +export default function CKEditor({ apiRef, currentValue, editor, config, disableNewlines, disableSpellcheck, onChange, onClick, onInitialized, ...restProps }: CKEditorOpts) { + const editorContainerRef = useRef(null); const textEditorRef = useRef(null); useImperativeHandle(apiRef, () => { return { focus() { - editorContainerRef.current?.focus(); + textEditorRef.current?.editing.view.focus(); textEditorRef.current?.model.change((writer) => { const documentRoot = textEditorRef.current?.editing.model.document.getRoot(); if (documentRoot) { @@ -83,6 +84,8 @@ export default function CKEditor({ apiRef, currentValue, editor, config, disable if (currentValue) { textEditor.setData(currentValue); } + + onInitialized?.(textEditor); }); }, []); @@ -103,4 +106,4 @@ export default function CKEditor({ apiRef, currentValue, editor, config, disable {...restProps} /> ) -} \ No newline at end of file +} diff --git a/apps/client/src/widgets/ribbon/OwnedAttributesTab.tsx b/apps/client/src/widgets/ribbon/OwnedAttributesTab.tsx index 1bdb6c1c0..ae3d90c07 100644 --- a/apps/client/src/widgets/ribbon/OwnedAttributesTab.tsx +++ b/apps/client/src/widgets/ribbon/OwnedAttributesTab.tsx @@ -26,4 +26,4 @@ export default function OwnedAttributesTab({ note, hidden, activate, ntxId, ...r )} ) -} \ No newline at end of file +} diff --git a/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx b/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx index 380241df8..bf0aa9428 100644 --- a/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx +++ b/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx @@ -238,11 +238,6 @@ export default function AttributeEditor({ api, note, componentId, notePath, ntxI } }); - // Focus on show. - useEffect(() => { - setTimeout(() => editorRef.current?.focus(), 0); - }, []); - // Interaction with CKEditor. useLegacyImperativeHandlers(useMemo(() => ({ loadReferenceLinkTitle: async ($el: JQuery, href: string) => { @@ -363,6 +358,7 @@ export default function AttributeEditor({ api, note, componentId, notePath, ntxI }} onKeyDown={() => attributeDetailWidget.hide()} onBlur={() => save()} + onInitialized={() => editorRef.current?.focus()} disableNewlines disableSpellcheck />