diff --git a/apps/client/src/widgets/dialogs/revisions.tsx b/apps/client/src/widgets/dialogs/revisions.tsx
index cc7438cf2..d66a04fda 100644
--- a/apps/client/src/widgets/dialogs/revisions.tsx
+++ b/apps/client/src/widgets/dialogs/revisions.tsx
@@ -16,6 +16,8 @@ import protected_session_holder from "../../services/protected_session_holder";
import { renderMathInElement } from "../../services/math";
import { CSSProperties } from "preact/compat";
import open from "../../services/open";
+import ActionButton from "../react/ActionButton";
+import options from "../../services/options";
interface RevisionsDialogProps {
note?: FNote;
@@ -54,7 +56,9 @@ function RevisionsDialogComponent({ note }: RevisionsDialogProps) {
toast.showMessage(t("revisions.revisions_deleted"));
}
}}/>)
- }
+ }
+ footer={}
+ footerStyle={{ paddingTop: 0, paddingBottom: 0 }}
>
>;
+ }
+
+ let revisionsNumberLimit: number | string = parseInt(note?.getLabelValue("versioningLimit") ?? "");
+ if (!Number.isInteger(revisionsNumberLimit)) {
+ revisionsNumberLimit = options.getInt("revisionSnapshotNumberLimit") ?? 0;
+ }
+ if (revisionsNumberLimit === -1) {
+ revisionsNumberLimit = "∞";
+ }
+
+ return <>
+
+ {t("revisions.snapshot_interval", { seconds: options.getInt("revisionSnapshotTimeInterval") })}
+
+
+ {t("revisions.maximum_revisions", { number: revisionsNumberLimit })}
+
+ appContext.tabManager.openContextWithNote("_optionsOther", { activate: true })}
+ />
+ >;
+}
+
export default class RevisionsDialog extends ReactBasicWidget {
private props: RevisionsDialogProps = {};
diff --git a/apps/client/src/widgets/react/ActionButton.tsx b/apps/client/src/widgets/react/ActionButton.tsx
new file mode 100644
index 000000000..5adacc5c1
--- /dev/null
+++ b/apps/client/src/widgets/react/ActionButton.tsx
@@ -0,0 +1,13 @@
+interface ActionButtonProps {
+ text: string;
+ icon: string;
+ onClick?: () => void;
+}
+
+export default function ActionButton({ text, icon, onClick }: ActionButtonProps) {
+ return ;
+}
\ No newline at end of file
diff --git a/apps/client/src/widgets/react/Modal.tsx b/apps/client/src/widgets/react/Modal.tsx
index 24f0a356e..1f020b56b 100644
--- a/apps/client/src/widgets/react/Modal.tsx
+++ b/apps/client/src/widgets/react/Modal.tsx
@@ -13,6 +13,7 @@ interface ModalProps {
*/
header?: ComponentChildren;
footer?: ComponentChildren;
+ footerStyle?: CSSProperties;
footerAlignment?: "right" | "between";
minWidth?: string;
maxWidth?: number;
@@ -46,7 +47,7 @@ interface ModalProps {
bodyStyle?: CSSProperties;
}
-export default function Modal({ children, className, size, title, header, footer, footerAlignment, onShown, onSubmit, helpPageId, minWidth, maxWidth, zIndex, scrollable, onHidden: onHidden, modalRef: _modalRef, formRef: _formRef, bodyStyle }: ModalProps) {
+export default function Modal({ children, className, size, title, header, footer, footerStyle, footerAlignment, onShown, onSubmit, helpPageId, minWidth, maxWidth, zIndex, scrollable, onHidden: onHidden, modalRef: _modalRef, formRef: _formRef, bodyStyle }: ModalProps) {
const modalRef = _modalRef ?? useRef(null);
const formRef = _formRef ?? useRef(null);
@@ -108,10 +109,10 @@ export default function Modal({ children, className, size, title, header, footer
e.preventDefault();
onSubmit();
}}>
- {children}
+ {children}
) : (
-
+
{children}
)}
@@ -121,8 +122,8 @@ export default function Modal({ children, className, size, title, header, footer
);
}
-function ModalInner({ children, footer, footerAlignment, bodyStyle }: Pick) {
- const footerStyle: CSSProperties = {};
+function ModalInner({ children, footer, footerAlignment, bodyStyle, footerStyle: _footerStyle }: Pick) {
+ const footerStyle: CSSProperties = _footerStyle ?? {};
if (footerAlignment === "between") {
footerStyle.justifyContent = "space-between";
}