Files
kandev/apps/web/components/task/use-session-tab-delete.ts
2026-08-22 21:02:20 +00:00

56 lines
1.5 KiB
TypeScript

"use client";
import { useCallback, useState } from "react";
import type { RemoveSessionOptions } from "@/hooks/domains/session/use-session-actions";
type DeleteOrigin = "tab" | "menu" | null;
type SetConfirmDelete = (open: boolean) => void;
type HandleDelete = (options?: RemoveSessionOptions) => Promise<boolean>;
export function useSessionTabDelete(
setConfirmDelete: SetConfirmDelete,
handleDelete: HandleDelete,
) {
const [deleteOrigin, setDeleteOrigin] = useState<DeleteOrigin>(null);
const [isDeletingFromTab, setIsDeletingFromTab] = useState(false);
const handleCloseTab = useCallback(() => {
setDeleteOrigin("tab");
setConfirmDelete(true);
}, [setConfirmDelete]);
const handleDeleteDialogOpenChange = useCallback(
(open: boolean) => {
setConfirmDelete(open);
if (!open) setDeleteOrigin(null);
},
[setConfirmDelete],
);
const handleConfirmDelete = useCallback(async () => {
const isTabDelete = deleteOrigin === "tab";
if (isTabDelete) setIsDeletingFromTab(true);
try {
await handleDelete({ feedback: isTabDelete ? "inline" : "toast" });
} finally {
if (isTabDelete) setIsDeletingFromTab(false);
setDeleteOrigin(null);
}
}, [deleteOrigin, handleDelete]);
const handleMenuDelete = useCallback(() => {
setDeleteOrigin("menu");
setConfirmDelete(true);
}, [setConfirmDelete]);
return {
deleteOrigin,
handleCloseTab,
handleDeleteDialogOpenChange,
handleConfirmDelete,
handleMenuDelete,
isDeletingFromTab,
};
}