fix(react/dialogs): revisions not refreshing after deleting an item

This commit is contained in:
Elian Doran 2025-08-10 17:48:17 +03:00
parent 71dd428919
commit 5db7997a17
No known key found for this signature in database

View File

@ -25,6 +25,7 @@ function RevisionsDialogComponent() {
const [ revisions, setRevisions ] = useState<RevisionItem[]>(); const [ revisions, setRevisions ] = useState<RevisionItem[]>();
const [ currentRevision, setCurrentRevision ] = useState<RevisionItem>(); const [ currentRevision, setCurrentRevision ] = useState<RevisionItem>();
const [ shown, setShown ] = useState(false); const [ shown, setShown ] = useState(false);
const [ refreshCounter, setRefreshCounter ] = useState(0);
useTriliumEvent("showRevisions", async ({ noteId }) => { useTriliumEvent("showRevisions", async ({ noteId }) => {
const note = await getNote(noteId); const note = await getNote(noteId);
@ -40,7 +41,7 @@ function RevisionsDialogComponent() {
} else { } else {
setRevisions(undefined); setRevisions(undefined);
} }
}, [ note?.noteId ]); }, [ note?.noteId, refreshCounter ]);
if (revisions?.length && !currentRevision) { if (revisions?.length && !currentRevision) {
setCurrentRevision(revisions[0]); setCurrentRevision(revisions[0]);
@ -60,8 +61,8 @@ function RevisionsDialogComponent() {
if (note && await dialog.confirm(text)) { if (note && await dialog.confirm(text)) {
await server.remove(`notes/${note.noteId}/revisions`); await server.remove(`notes/${note.noteId}/revisions`);
setRevisions([]);
setShown(false); setCurrentRevision(undefined);
toast.showMessage(t("revisions.revisions_deleted")); toast.showMessage(t("revisions.revisions_deleted"));
} }
}}/>) }}/>)
@ -91,7 +92,13 @@ function RevisionsDialogComponent() {
flexDirection: "column", flexDirection: "column",
minWidth: 0 minWidth: 0
}}> }}>
<RevisionPreview revisionItem={currentRevision} setShown={setShown} /> <RevisionPreview
revisionItem={currentRevision}
setShown={setShown}
onRevisionDeleted={() => {
setRefreshCounter(c => c + 1);
setCurrentRevision(undefined);
}} />
</div> </div>
</Modal> </Modal>
) )
@ -111,18 +118,20 @@ function RevisionsList({ revisions, onSelect }: { revisions: RevisionItem[], onS
</FormList>); </FormList>);
} }
function RevisionPreview({ revisionItem, setShown }: { revisionItem?: RevisionItem, setShown: Dispatch<StateUpdater<boolean>>}) { function RevisionPreview({ revisionItem, setShown, onRevisionDeleted }: {
revisionItem?: RevisionItem,
setShown: Dispatch<StateUpdater<boolean>>,
onRevisionDeleted?: () => void
}) {
const [ fullRevision, setFullRevision ] = useState<RevisionPojo>(); const [ fullRevision, setFullRevision ] = useState<RevisionPojo>();
const [ needsRefresh, setNeedsRefresh ] = useState<boolean>();
useEffect(() => { useEffect(() => {
setNeedsRefresh(false);
if (revisionItem) { if (revisionItem) {
server.get<RevisionPojo>(`revisions/${revisionItem.revisionId}`).then(setFullRevision); server.get<RevisionPojo>(`revisions/${revisionItem.revisionId}`).then(setFullRevision);
} else { } else {
setFullRevision(undefined); setFullRevision(undefined);
} }
}, [revisionItem, needsRefresh]); }, [revisionItem]);
return ( return (
<> <>
@ -148,8 +157,8 @@ function RevisionPreview({ revisionItem, setShown }: { revisionItem?: RevisionIt
onClick={async () => { onClick={async () => {
if (await dialog.confirm(t("revisions.confirm_delete"))) { if (await dialog.confirm(t("revisions.confirm_delete"))) {
await server.remove(`revisions/${revisionItem.revisionId}`); await server.remove(`revisions/${revisionItem.revisionId}`);
setNeedsRefresh(true);
toast.showMessage(t("revisions.revision_deleted")); toast.showMessage(t("revisions.revision_deleted"));
onRevisionDeleted?.();
} }
}} /> }} />
&nbsp; &nbsp;