UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

1 lines 2.88 kB
{"version":3,"file":"use-state-history.cjs","names":[],"sources":["../../src/use-state-history/use-state-history.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\n\nexport interface UseStateHistoryHandlers<T> {\n set: (value: T) => void;\n back: (steps?: number) => void;\n forward: (steps?: number) => void;\n reset: () => void;\n}\n\nexport interface UseStateHistoryValue<T> {\n history: T[];\n current: number;\n}\n\nexport type UseStateHistoryReturnValue<T> = [\n T,\n UseStateHistoryHandlers<T>,\n UseStateHistoryValue<T>,\n];\n\nexport function useStateHistory<T>(initialValue: T): UseStateHistoryReturnValue<T> {\n const [state, setState] = useState<UseStateHistoryValue<T>>({\n history: [initialValue],\n current: 0,\n });\n\n const set = useCallback(\n (val: T) =>\n setState((currentState) => {\n const nextState = [...currentState.history.slice(0, currentState.current + 1), val];\n return {\n history: nextState,\n current: nextState.length - 1,\n };\n }),\n []\n );\n\n const back = useCallback(\n (steps = 1) =>\n setState((currentState) => ({\n history: currentState.history,\n current: Math.max(0, currentState.current - steps),\n })),\n []\n );\n\n const forward = useCallback(\n (steps = 1) =>\n setState((currentState) => ({\n history: currentState.history,\n current: Math.min(currentState.history.length - 1, currentState.current + steps),\n })),\n []\n );\n\n const reset = useCallback(() => {\n setState({ history: [initialValue], current: 0 });\n }, [initialValue]);\n\n const handlers = useMemo(() => ({ back, forward, reset, set }), [back, forward, reset, set]);\n\n return [state.history[state.current], handlers, state];\n}\n\nexport namespace useStateHistory {\n export type Handlers<T> = UseStateHistoryHandlers<T>;\n export type Value<T> = UseStateHistoryValue<T>;\n export type ReturnValue<T> = UseStateHistoryReturnValue<T>;\n}\n"],"mappings":";;;AAoBA,SAAgB,gBAAmB,cAAgD;CACjF,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAA8C;EAC1D,SAAS,CAAC,aAAa;EACvB,SAAS;EACV,CAAC;CAEF,MAAM,OAAA,GAAA,MAAA,cACH,QACC,UAAU,iBAAiB;EACzB,MAAM,YAAY,CAAC,GAAG,aAAa,QAAQ,MAAM,GAAG,aAAa,UAAU,EAAE,EAAE,IAAI;AACnF,SAAO;GACL,SAAS;GACT,SAAS,UAAU,SAAS;GAC7B;GACD,EACJ,EAAE,CACH;CAED,MAAM,QAAA,GAAA,MAAA,cACH,QAAQ,MACP,UAAU,kBAAkB;EAC1B,SAAS,aAAa;EACtB,SAAS,KAAK,IAAI,GAAG,aAAa,UAAU,MAAM;EACnD,EAAE,EACL,EAAE,CACH;CAED,MAAM,WAAA,GAAA,MAAA,cACH,QAAQ,MACP,UAAU,kBAAkB;EAC1B,SAAS,aAAa;EACtB,SAAS,KAAK,IAAI,aAAa,QAAQ,SAAS,GAAG,aAAa,UAAU,MAAM;EACjF,EAAE,EACL,EAAE,CACH;CAED,MAAM,SAAA,GAAA,MAAA,mBAA0B;AAC9B,WAAS;GAAE,SAAS,CAAC,aAAa;GAAE,SAAS;GAAG,CAAC;IAChD,CAAC,aAAa,CAAC;CAElB,MAAM,YAAA,GAAA,MAAA,gBAA0B;EAAE;EAAM;EAAS;EAAO;EAAK,GAAG;EAAC;EAAM;EAAS;EAAO;EAAI,CAAC;AAE5F,QAAO;EAAC,MAAM,QAAQ,MAAM;EAAU;EAAU;EAAM"}