mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-28 23:11:37 +08:00
42 lines
958 B
TypeScript
42 lines
958 B
TypeScript
import { useCallback, useState } from "react";
|
|
|
|
export function useConfirmDelete<TId>({
|
|
onDelete,
|
|
}: {
|
|
onDelete: (id: TId) => Promise<void>;
|
|
}) {
|
|
const [pendingId, setPendingId] = useState<TId | null>(null);
|
|
const [isDeleting, setIsDeleting] = useState(false);
|
|
|
|
const requestDelete = useCallback((id: TId) => {
|
|
setPendingId(id);
|
|
}, []);
|
|
|
|
const cancel = useCallback(() => {
|
|
if (!isDeleting) setPendingId(null);
|
|
}, [isDeleting]);
|
|
|
|
const confirm = useCallback(async () => {
|
|
if (pendingId === null) return;
|
|
const id = pendingId;
|
|
setIsDeleting(true);
|
|
try {
|
|
await onDelete(id);
|
|
setPendingId(null);
|
|
} catch {
|
|
// Dialog stays open; caller can surface errors in onDelete before rethrowing
|
|
} finally {
|
|
setIsDeleting(false);
|
|
}
|
|
}, [pendingId, onDelete]);
|
|
|
|
return {
|
|
cancel,
|
|
confirm,
|
|
isDeleting,
|
|
isOpen: pendingId !== null,
|
|
pendingId,
|
|
requestDelete,
|
|
} as const;
|
|
}
|