From fb5520a3c5f4f7abcc1fb8f0ac7c84448752fc4a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Apr 2026 17:17:02 +0300 Subject: [PATCH] feat(revisions): relocate the description --- apps/client/src/widgets/dialogs/revisions.css | 5 ++ apps/client/src/widgets/dialogs/revisions.tsx | 82 ++++++++++--------- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/apps/client/src/widgets/dialogs/revisions.css b/apps/client/src/widgets/dialogs/revisions.css index e3240635a6..b61cced865 100644 --- a/apps/client/src/widgets/dialogs/revisions.css +++ b/apps/client/src/widgets/dialogs/revisions.css @@ -177,6 +177,11 @@ body.desktop .revisions-dialog { } + .revision-description-icon { + opacity: 0.5; + flex-shrink: 0; + } + .revision-description-editor { display: flex; gap: 5px; diff --git a/apps/client/src/widgets/dialogs/revisions.tsx b/apps/client/src/widgets/dialogs/revisions.tsx index 2e073f349f..3578599151 100644 --- a/apps/client/src/widgets/dialogs/revisions.tsx +++ b/apps/client/src/widgets/dialogs/revisions.tsx @@ -116,20 +116,21 @@ export default function RevisionsDialog() { setRefreshCounter(c => c + 1); setCurrentRevision(undefined); }} + onDescriptionUpdated={(revisionId, description) => { + setRevisions(prev => prev?.map(r => + r.revisionId === revisionId ? { ...r, description } : r + )); + if (currentRevision?.revisionId === revisionId) { + setCurrentRevision({ ...currentRevision, description }); + } + }} />
{ - setRevisions(prev => prev?.map(r => - r.revisionId === revisionId ? { ...r, description } : r - )); - if (currentRevision?.revisionId === revisionId) { - setCurrentRevision({ ...currentRevision, description }); - } - }} /> + />
); @@ -301,15 +302,22 @@ function RevisionsList({ revisions, onSelect, currentRevision }: { revisions: Re ); } -function RevisionToolbar({ revisionItem, showDiff, setShowDiff, setShown, onRevisionDeleted }: { +function RevisionToolbar({ revisionItem, showDiff, setShowDiff, setShown, onRevisionDeleted, onDescriptionUpdated }: { revisionItem?: RevisionItem, showDiff: boolean, setShowDiff: Dispatch>, setShown: Dispatch>, onRevisionDeleted?: () => void, + onDescriptionUpdated?: (revisionId: string, description: string) => void, }) { const canShowDiff = ["text", "code", "mermaid"].includes(revisionItem?.type ?? ""); const canInteract = revisionItem && (!revisionItem.isProtected || protected_session_holder.isProtectedSessionAvailable()); + const [ editingDescription, setEditingDescription ] = useState(false); + const [ descriptionDraft, setDescriptionDraft ] = useState(""); + + useEffect(() => { + setEditingDescription(false); + }, [revisionItem]); return (
@@ -359,35 +367,6 @@ function RevisionToolbar({ revisionItem, showDiff, setShowDiff, setShown, onRevi )}
)} - - ); -} - -function RevisionPreview({noteContent, revisionItem, showDiff, onDescriptionUpdated }: { - noteContent?: string, - revisionItem?: RevisionItem, - showDiff: boolean, - onDescriptionUpdated?: (revisionId: string, description: string) => void -}) { - const [ fullRevision, setFullRevision ] = useState(); - const [ editingDescription, setEditingDescription ] = useState(false); - const [ descriptionDraft, setDescriptionDraft ] = useState(""); - - useEffect(() => { - if (revisionItem) { - server.get(`revisions/${revisionItem.revisionId}`).then(setFullRevision); - } else { - setFullRevision(undefined); - } - setEditingDescription(false); - }, [revisionItem]); - - return ( -
-

{revisionItem?.title ?? t("revisions.no_revisions")}

{revisionItem && ( setEditingDescription(false)} /> )} +
+ ); +} + +function RevisionPreview({noteContent, revisionItem, showDiff }: { + noteContent?: string, + revisionItem?: RevisionItem, + showDiff: boolean, +}) { + const [ fullRevision, setFullRevision ] = useState(); + + useEffect(() => { + if (revisionItem) { + server.get(`revisions/${revisionItem.revisionId}`).then(setFullRevision); + } else { + setFullRevision(undefined); + } + }, [revisionItem]); + + return ( +
+

{revisionItem?.title ?? t("revisions.no_revisions")}

); @@ -424,6 +428,7 @@ function RevisionDescription({ revisionItem, editing, draft, onEdit, onDraftChan if (editing) { return (
+ + {revisionItem.description || t("revisions.description_placeholder")}