mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 08:13:50 +00:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
"use client";
|
|
|
|
import { useCallback } from "react";
|
|
import { useTranslations } from "next-intl";
|
|
import { ConfirmDialog } from "@/components/ui/confirm-dialog";
|
|
import { useConfirmDialog } from "@/hooks/use-confirm-dialog";
|
|
|
|
/**
|
|
* The R5 question for an editor in Settings: closing it with unsaved input
|
|
* asks "Discard changes?" with Keep editing / Discard. Render `discardDialog`
|
|
* next to the editor.
|
|
*
|
|
* ```tsx
|
|
* const { confirmDiscard, discardDialog } = useDiscardChanges();
|
|
* const close = async () => { if (await confirmDiscard(dirty)) onClose(); };
|
|
* ```
|
|
*/
|
|
export function useDiscardChanges() {
|
|
const t = useTranslations("settings");
|
|
const { dialogProps, confirm } = useConfirmDialog();
|
|
|
|
const confirmDiscard = useCallback(
|
|
async (dirty: boolean) => {
|
|
if (!dirty) return true;
|
|
return confirm({
|
|
title: t("discard_changes"),
|
|
message: t("unsaved_changes"),
|
|
confirmText: t("discard"),
|
|
cancelText: t("keep_editing"),
|
|
variant: "destructive",
|
|
});
|
|
},
|
|
[confirm, t]
|
|
);
|
|
|
|
return { confirmDiscard, discardDialog: <ConfirmDialog {...dialogProps} /> };
|
|
}
|