diff --git a/apps/client/src/widgets/dialogs/revisions.css b/apps/client/src/widgets/dialogs/revisions.css index a3ca80de8d..e3240635a6 100644 --- a/apps/client/src/widgets/dialogs/revisions.css +++ b/apps/client/src/widgets/dialogs/revisions.css @@ -70,6 +70,8 @@ body.desktop .revisions-dialog { .revisions-dialog { .modal-body { padding: 0; + display: flex; + flex-direction: column; } .modal-sidebar { @@ -94,27 +96,20 @@ body.desktop .revisions-dialog { } .revision-toolbar { - display: flex; - align-items: center; - gap: 4px; flex-shrink: 0; - - .revision-title { - font-size: 1.2em; - margin: 3px; - flex-grow: 1; - min-width: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } + border-bottom: 1px solid var(--main-border-color); + padding: 8px 20px; } - .revision-title-buttons { + .revision-title { + font-size: 1.2em; + margin: 8px 0; + } + + .revision-toolbar-actions { display: flex; align-items: center; gap: 4px; - flex-shrink: 0; } .revision-menu-header { @@ -134,15 +129,16 @@ body.desktop .revisions-dialog { display: flex; flex-direction: column; min-width: 0; + min-height: 0; + } + + .revision-content { + flex-grow: 1; + min-height: 0; overflow: auto; } - .revision-toolbar-separator { - width: 1px; - height: 1.2em; - background-color: var(--main-border-color); - margin: 0 4px; - } + .revision-list { flex: 1 1 0; diff --git a/apps/client/src/widgets/dialogs/revisions.tsx b/apps/client/src/widgets/dialogs/revisions.tsx index c34b4618c2..2e073f349f 100644 --- a/apps/client/src/widgets/dialogs/revisions.tsx +++ b/apps/client/src/widgets/dialogs/revisions.tsx @@ -107,17 +107,21 @@ export default function RevisionsDialog() { }} show={shown} > + { + setRefreshCounter(c => c + 1); + setCurrentRevision(undefined); + }} + />
{ - setRefreshCounter(c => c + 1); - setCurrentRevision(undefined); - }} onDescriptionUpdated={(revisionId, description) => { setRevisions(prev => prev?.map(r => r.revisionId === revisionId ? { ...r, description } : r @@ -297,13 +301,72 @@ function RevisionsList({ revisions, onSelect, currentRevision }: { revisions: Re ); } -function RevisionPreview({noteContent, revisionItem, showDiff, setShowDiff, setShown, onRevisionDeleted, onDescriptionUpdated }: { - noteContent?: string, +function RevisionToolbar({ revisionItem, showDiff, setShowDiff, setShown, onRevisionDeleted }: { revisionItem?: RevisionItem, showDiff: boolean, setShowDiff: Dispatch>, setShown: Dispatch>, onRevisionDeleted?: () => void, +}) { + const canShowDiff = ["text", "code", "mermaid"].includes(revisionItem?.type ?? ""); + const canInteract = revisionItem && (!revisionItem.isProtected || protected_session_holder.isProtectedSessionAvailable()); + + return ( +
+ {revisionItem && ( +
+ {canShowDiff && ( + setShowDiff(newValue)} + switchOnName={t("revisions.highlight_changes")} + switchOffName={t("revisions.highlight_changes")} + /> + )} +
+ {canInteract && ( + <> + { + if (await dialog.confirm(t("revisions.confirm_delete"))) { + await server.remove(`revisions/${revisionItem.revisionId}`); + toast.showMessage(t("revisions.revision_deleted")); + onRevisionDeleted?.(); + } + }} frame /> + { + if (revisionItem.revisionId) { + open.downloadRevision(revisionItem.noteId, revisionItem.revisionId); + } + }} + frame /> +
+ )} +
+ ); +} + +function RevisionPreview({noteContent, revisionItem, showDiff, onDescriptionUpdated }: { + noteContent?: string, + revisionItem?: RevisionItem, + showDiff: boolean, onDescriptionUpdated?: (revisionId: string, description: string) => void }) { const [ fullRevision, setFullRevision ] = useState(); @@ -319,60 +382,12 @@ function RevisionPreview({noteContent, revisionItem, showDiff, setShowDiff, setS setEditingDescription(false); }, [revisionItem]); - const canShowDiff = ["text", "code", "mermaid"].includes(revisionItem?.type ?? ""); - const canInteract = revisionItem && (!revisionItem.isProtected || protected_session_holder.isProtectedSessionAvailable()); - return ( - <> -
-

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

- {revisionItem && ( -
- {canShowDiff && ( - setShowDiff(newValue)} - switchOnName={t("revisions.highlight_changes")} - switchOffName={t("revisions.highlight_changes")} - /> - )} - {canInteract && canShowDiff &&
} - {canInteract && ( - <> - { - if (await dialog.confirm(t("revisions.confirm_delete"))) { - await server.remove(`revisions/${revisionItem.revisionId}`); - toast.showMessage(t("revisions.revision_deleted")); - onRevisionDeleted?.(); - } - }} frame /> - { - if (revisionItem.revisionId) { - open.downloadRevision(revisionItem.noteId, revisionItem.revisionId); - } - }} - frame /> -
- )} -
+
+

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

{revisionItem && ( setEditingDescription(false)} /> )} -
- -
- + +
); }