diff --git a/apps/client/src/widgets/note_title.tsx b/apps/client/src/widgets/note_title.tsx index 55769cfee..eefb71184 100644 --- a/apps/client/src/widgets/note_title.tsx +++ b/apps/client/src/widgets/note_title.tsx @@ -1,7 +1,7 @@ import { useEffect, useRef, useState } from "preact/hooks"; import { t } from "../services/i18n"; import FormTextBox from "./react/FormTextBox"; -import { useNoteContext, useSpacedUpdate, useTriliumEventBeta } from "./react/hooks"; +import { useNoteContext, useNoteProperty, useSpacedUpdate, useTriliumEventBeta } from "./react/hooks"; import protected_session_holder from "../services/protected_session_holder"; import server from "../services/server"; import "./note_title.css"; @@ -9,9 +9,8 @@ import "./note_title.css"; export default function NoteTitleWidget() { const { note, noteId, componentId } = useNoteContext(); const [ title, setTitle ] = useState(note?.title); - const [ isProtected, setProtected ] = useState(note?.isProtected); + const isProtected = useNoteProperty(note, "isProtected"); useEffect(() => setTitle(note?.title), [ note?.noteId ]); - useEffect(() => setProtected(note?.isProtected), [ note?.isProtected ]); const spacedUpdate = useSpacedUpdate(async () => { if (!note) { @@ -21,10 +20,7 @@ export default function NoteTitleWidget() { await server.put(`notes/${noteId}/title`, { title: title }, componentId); }); - useTriliumEventBeta("entitiesReloaded", ({ loadResults }) => { - if (loadResults.isNoteReloaded(noteId) && note) { - setProtected(note.isProtected); - } + useTriliumEventBeta("entitiesReloaded", ({ loadResults }) => { if (loadResults.isNoteReloaded(noteId, componentId)) { setTitle(note?.title); } diff --git a/apps/client/src/widgets/react/hooks.tsx b/apps/client/src/widgets/react/hooks.tsx index d592a48a1..bc96b780b 100644 --- a/apps/client/src/widgets/react/hooks.tsx +++ b/apps/client/src/widgets/react/hooks.tsx @@ -8,6 +8,7 @@ import utils, { reloadFrontendApp } from "../../services/utils"; import Component from "../../components/component"; import NoteContext from "../../components/note_context"; import { ReactWrappedWidget } from "../basic_widget"; +import FNote from "../../entities/fnote"; type TriliumEventHandler = (data: EventData) => void; const registeredHandlers: Map[]>> = new Map(); @@ -261,4 +262,19 @@ export function useNoteContext() { componentId: parentComponent.componentId }; +} + +export function useNoteProperty(note: FNote | null | undefined, property: T) { + if (!note) { + return null; + } + + const [ value, setValue ] = useState(note[property]); + useEffect(() => setValue(value), [ note[property] ]); + useTriliumEventBeta("entitiesReloaded", ({ loadResults }) => { + if (loadResults.isNoteReloaded(note.noteId)) { + setValue(note[property]); + } + }); + return value; } \ No newline at end of file