import type { Promisable } from 'type-fest'; import { create } from 'zustand'; type DestructiveAction = (...args: TArgs) => Promisable; type DestructiveActionOptions = { description?: string; title?: string; }; type DestructiveActionParams = DestructiveActionOptions & { action: DestructiveAction; }; type DestructiveActionDef = DestructiveActionParams & { id: string; }; export type DestructiveActionStore = { addPendingDestructiveAction: (action: DestructiveAction, options?: DestructiveActionOptions) => void; deletePendingDestructiveAction: (id: string) => void; pendingDestructiveActions: DestructiveActionDef[]; }; export const useDestructiveActionStore = create((set) => ({ addPendingDestructiveAction: (action, options) => { set((state) => ({ pendingDestructiveActions: [...state.pendingDestructiveActions, { action, id: crypto.randomUUID(), ...options }] })); }, deletePendingDestructiveAction: (id) => { set((state) => ({ ...state, pendingDestructiveActions: state.pendingDestructiveActions.filter((def) => def.id !== id) })); }, pendingDestructiveActions: [] })); export type { DestructiveAction, DestructiveActionDef, DestructiveActionOptions, DestructiveActionParams };