fix(ribbon): not refreshing if note is temporarily edited

This commit is contained in:
Elian Doran 2025-11-09 20:14:51 +02:00
parent 532df6559a
commit 6f245ec8d5
No known key found for this signature in database
3 changed files with 11 additions and 5 deletions

View File

@ -7,7 +7,6 @@ import protectedSessionService from "../services/protected_session.js";
import options from "../services/options.js"; import options from "../services/options.js";
import froca from "../services/froca.js"; import froca from "../services/froca.js";
import utils from "../services/utils.js"; import utils from "../services/utils.js";
import LlmChatPanel from "../widgets/llm_chat_panel.js";
import toastService from "../services/toast.js"; import toastService from "../services/toast.js";
import noteCreateService from "../services/note_create.js"; import noteCreateService from "../services/note_create.js";

View File

@ -199,6 +199,7 @@ export function useNoteContext() {
const [ notePath, setNotePath ] = useState<string | null | undefined>(); const [ notePath, setNotePath ] = useState<string | null | undefined>();
const [ note, setNote ] = useState<FNote | null | undefined>(); const [ note, setNote ] = useState<FNote | null | undefined>();
const [ , setViewMode ] = useState<ViewMode>(); const [ , setViewMode ] = useState<ViewMode>();
const [ isReadOnlyTemporarilyDisabled, setIsReadOnlyTemporarilyDisabled ] = useState<boolean | null | undefined>(noteContext?.viewScope?.isReadOnly);
const [ refreshCounter, setRefreshCounter ] = useState(0); const [ refreshCounter, setRefreshCounter ] = useState(0);
useEffect(() => { useEffect(() => {
@ -218,6 +219,11 @@ export function useNoteContext() {
setRefreshCounter(refreshCounter + 1); setRefreshCounter(refreshCounter + 1);
} }
}); });
useTriliumEvent("readOnlyTemporarilyDisabled", ({ noteContext: eventNoteContext }) => {
if (eventNoteContext.ntxId === noteContext?.ntxId) {
setIsReadOnlyTemporarilyDisabled(eventNoteContext?.viewScope?.readOnlyTemporarilyDisabled);
}
});
const parentComponent = useContext(ParentComponent) as ReactWrappedWidget; const parentComponent = useContext(ParentComponent) as ReactWrappedWidget;
useDebugValue(() => `notePath=${notePath}, ntxId=${noteContext?.ntxId}`); useDebugValue(() => `notePath=${notePath}, ntxId=${noteContext?.ntxId}`);
@ -231,7 +237,8 @@ export function useNoteContext() {
viewScope: noteContext?.viewScope, viewScope: noteContext?.viewScope,
componentId: parentComponent.componentId, componentId: parentComponent.componentId,
noteContext, noteContext,
parentComponent parentComponent,
isReadOnlyTemporarilyDisabled
}; };
} }
@ -749,4 +756,4 @@ async function isNoteReadOnly(note: FNote, noteContext: NoteContext) {
} }
return true; return true;
} }

View File

@ -16,7 +16,7 @@ interface ComputedTab extends Indexed<TabConfiguration> {
} }
export default function Ribbon() { export default function Ribbon() {
const { note, ntxId, hoistedNoteId, notePath, noteContext, componentId } = useNoteContext(); const { note, ntxId, hoistedNoteId, notePath, noteContext, componentId, isReadOnlyTemporarilyDisabled } = useNoteContext();
const noteType = useNoteProperty(note, "type"); const noteType = useNoteProperty(note, "type");
const [ activeTabIndex, setActiveTabIndex ] = useState<number | undefined>(); const [ activeTabIndex, setActiveTabIndex ] = useState<number | undefined>();
const [ computedTabs, setComputedTabs ] = useState<ComputedTab[]>(); const [ computedTabs, setComputedTabs ] = useState<ComputedTab[]>();
@ -39,7 +39,7 @@ export default function Ribbon() {
useEffect(() => { useEffect(() => {
refresh(); refresh();
}, [ note, noteType ]); }, [ note, noteType, isReadOnlyTemporarilyDisabled ]);
// Automatically activate the first ribbon tab that needs to be activated whenever a note changes. // Automatically activate the first ribbon tab that needs to be activated whenever a note changes.
useEffect(() => { useEffect(() => {