diff --git a/apps/client/src/services/utils.ts b/apps/client/src/services/utils.ts index aeb9abe47..065969df8 100644 --- a/apps/client/src/services/utils.ts +++ b/apps/client/src/services/utils.ts @@ -740,7 +740,7 @@ function isUpdateAvailable(latestVersion: string | null | undefined, currentVers return compareVersions(latestVersion, currentVersion) > 0; } -function isLaunchBarConfig(noteId: string) { +export function isLaunchBarConfig(noteId: string) { return ["_lbRoot", "_lbAvailableLaunchers", "_lbVisibleLaunchers", "_lbMobileRoot", "_lbMobileAvailableLaunchers", "_lbMobileVisibleLaunchers"].includes(noteId); } diff --git a/apps/client/src/widgets/note_title.bak b/apps/client/src/widgets/note_title.bak index 059e4b4d1..4b7218760 100644 --- a/apps/client/src/widgets/note_title.bak +++ b/apps/client/src/widgets/note_title.bak @@ -46,18 +46,6 @@ export default class NoteTitleWidget extends NoteContextAwareWidget { }); } - async refreshWithNote(note: FNote) { - const isReadOnly = - (note.isProtected && !protectedSessionHolder.isProtectedSessionAvailable()) - || utils.isLaunchBarConfig(note.noteId) - || this.noteContext?.viewScope?.viewMode !== "default"; - - this.$noteTitle.val(isReadOnly ? (await this.noteContext?.getNavigationTitle()) || "" : note.title); - this.$noteTitle.prop("readonly", isReadOnly); - - this.setProtectedStatus(note); - } - async beforeNoteSwitchEvent({ noteContext }: EventData<"beforeNoteSwitch">) { if (this.isNoteContext(noteContext.ntxId)) { await this.spacedUpdate.updateNowIfNecessary(); diff --git a/apps/client/src/widgets/note_title.tsx b/apps/client/src/widgets/note_title.tsx index c23cea833..267d8ff27 100644 --- a/apps/client/src/widgets/note_title.tsx +++ b/apps/client/src/widgets/note_title.tsx @@ -1,17 +1,36 @@ -import { useRef } from "preact/hooks"; +import { useEffect, useRef, useState } from "preact/hooks"; import { t } from "../services/i18n"; import FormTextBox from "./react/FormTextBox"; import { useNoteContext, useNoteProperty, useSpacedUpdate } from "./react/hooks"; import protected_session_holder from "../services/protected_session_holder"; import server from "../services/server"; import "./note_title.css"; +import { isLaunchBarConfig } from "../services/utils"; export default function NoteTitleWidget() { - const { note, noteId, componentId } = useNoteContext(); - const title = useNoteProperty(note, "title", componentId); + const { note, noteId, componentId, viewScope, noteContext } = useNoteContext(); + const title = useNoteProperty(note, "title", componentId); const isProtected = useNoteProperty(note, "isProtected"); const newTitle = useRef(""); + const [ isReadOnly, setReadOnly ] = useState(false); + const [ navigationTitle, setNavigationTitle ] = useState(null); + + useEffect(() => { + const isReadOnly = note === null + || note === undefined + || (note.isProtected && !protected_session_holder.isProtectedSessionAvailable()) + || isLaunchBarConfig(note.noteId) + || viewScope?.viewMode !== "default"; + setReadOnly(isReadOnly); + }, [ note?.noteId, note?.isProtected, viewScope?.viewMode ]); + + useEffect(() => { + if (isReadOnly) { + noteContext?.getNavigationTitle().then(setNavigationTitle); + } + }, [isReadOnly]); + const spacedUpdate = useSpacedUpdate(async () => { if (!note) { return; @@ -24,10 +43,11 @@ export default function NoteTitleWidget() {
{ newTitle.current = newValue; spacedUpdate.scheduleUpdate(); diff --git a/apps/client/src/widgets/react/hooks.tsx b/apps/client/src/widgets/react/hooks.tsx index 1097f7d9c..7526bbd61 100644 --- a/apps/client/src/widgets/react/hooks.tsx +++ b/apps/client/src/widgets/react/hooks.tsx @@ -259,7 +259,9 @@ export function useNoteContext() { notePath: noteContext?.notePath, hoistedNoteId: noteContext?.hoistedNoteId, ntxId: noteContext?.ntxId, - componentId: parentComponent.componentId + viewScope: noteContext?.viewScope, + componentId: parentComponent.componentId, + noteContext: noteContext }; } @@ -288,6 +290,6 @@ export function useNoteProperty(note: FNote | null | unde setValue(note[property]); } }); - + return value; } \ No newline at end of file