UNPKG

@supunlakmal/hooks

Version:

A collection of reusable React hooks

27 lines 1.21 kB
import { useState, useCallback } from 'react'; export function useHistoryState(initialState) { const [state, setState] = useState({ history: [initialState], pointer: 0, }); const present = state.history[state.pointer]; const setPresentState = useCallback((newState) => { setState((prevState) => { const newHistory = prevState.history.slice(0, prevState.pointer + 1); return { history: [...newHistory, newState], pointer: prevState.pointer + 1, }; }); }, []); const goBack = useCallback(() => { setState((prevState) => (Object.assign(Object.assign({}, prevState), { pointer: Math.max(0, prevState.pointer - 1) }))); }, []); const goForward = useCallback(() => { setState((prevState) => (Object.assign(Object.assign({}, prevState), { pointer: Math.min(prevState.history.length - 1, prevState.pointer + 1) }))); }, []); const canGoBack = state.pointer > 0; const canGoForward = state.pointer < state.history.length - 1; return [present, setPresentState, goBack, goForward, canGoBack, canGoForward]; } //# sourceMappingURL=useHistoryState.js.map