UNPKG

@ledgerhq/live-common

Version:
45 lines 1.77 kB
import { useCallback, useMemo, useReducer } from "react"; function operationReducer(state, action) { switch (action.type) { case "SET_OPERATION": return { optimisticOperation: action.operation, transactionError: null, signed: true }; case "SET_ERROR": return { ...state, transactionError: action.error, signed: false }; case "SET_SIGNED": return { ...state, signed: true }; case "RESET": return { optimisticOperation: null, transactionError: null, signed: false }; default: return state; } } function createInitialState() { return { optimisticOperation: null, transactionError: null, signed: false }; } /** * Pure operation state management without platform-specific side effects * Desktop and mobile wrap this with their own side-effects (Redux dispatch) */ export function useSendFlowOperationState() { const [state, dispatch] = useReducer(operationReducer, undefined, createInitialState); const dispatchSetOperation = useCallback((operation) => { dispatch({ type: "SET_OPERATION", operation }); }, []); const dispatchSetError = useCallback((error) => { dispatch({ type: "SET_ERROR", error }); }, []); const dispatchSetSigned = useCallback(() => { dispatch({ type: "SET_SIGNED" }); }, []); const dispatchReset = useCallback(() => { dispatch({ type: "RESET" }); }, []); const actions = useMemo(() => ({ dispatchSetOperation, dispatchSetError, dispatchSetSigned, dispatchReset, }), [dispatchSetOperation, dispatchSetError, dispatchSetSigned, dispatchReset]); return { state, actions }; } //# sourceMappingURL=useSendFlowOperationState.js.map