import { useCallback, useState } from "react"; const baseActionParamsBuilder = (item, args) => { return item; }; export const useItemActionConfirm = (actionFn, actionParamsBuilder = null) => { const [item, setItem] = useState(null); const onActionConfirm = useCallback( async (args) => { if (item) { const result = await actionFn.run( (actionParamsBuilder || baseActionParamsBuilder)(item, args) ); if (!result.error) { setItem(null); } } }, [item, setItem, actionFn, actionParamsBuilder] ); const onActionCancel = useCallback(() => { setItem(null); }, [setItem]); return [item, setItem, onActionConfirm, onActionCancel]; }; export const useActionConfirm = (actionFn, actionArgs) => { const [showConfirm, setShowConfirm] = useState(false); const onActionConfirm = useCallback(async () => { if (showConfirm) { const result = await actionFn.run(actionArgs); if (!result.error) { setShowConfirm(false); } } }, [showConfirm, setShowConfirm, actionFn, actionArgs]); const onActionCancel = useCallback(() => { setShowConfirm(false); }, [setShowConfirm]); return [showConfirm, setShowConfirm, onActionConfirm, onActionCancel]; }; export const useActionState = (actionFn, actionArgs) => { const { 0: started, 1: finished, 2: result } = actionFn.useWatch(actionArgs); return [started && !finished, result.error ? result.message : null]; };