UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

50 lines (49 loc) 1.26 kB
"use client"; import { useCallback, useMemo, useState } from "react"; //#region packages/@mantine/hooks/src/use-state-history/use-state-history.ts function useStateHistory(initialValue) { const [state, setState] = useState({ history: [initialValue], current: 0 }); const set = useCallback((val) => setState((currentState) => { const nextState = [...currentState.history.slice(0, currentState.current + 1), val]; return { history: nextState, current: nextState.length - 1 }; }), []); const back = useCallback((steps = 1) => setState((currentState) => ({ history: currentState.history, current: Math.max(0, currentState.current - steps) })), []); const forward = useCallback((steps = 1) => setState((currentState) => ({ history: currentState.history, current: Math.min(currentState.history.length - 1, currentState.current + steps) })), []); const reset = useCallback(() => { setState({ history: [initialValue], current: 0 }); }, [initialValue]); const handlers = useMemo(() => ({ back, forward, reset, set }), [ back, forward, reset, set ]); return [ state.history[state.current], handlers, state ]; } //#endregion export { useStateHistory }; //# sourceMappingURL=use-state-history.mjs.map