@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
45 lines • 1.77 kB
JavaScript
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