import { useRef, useState } from "react"; import { useDidUpdate } from "hooks"; /** * * @kind 12-State */ export const useUndo = (initialValue: T) => { const previousValues = useRef([]); const [value, setValue] = useState(initialValue); useDidUpdate(() => { const values = previousValues.current; const lastValue = values[values.length - 1]; if (lastValue !== value) { previousValues.current.push(value); } }, [value]); const undo = () => { previousValues.current.pop(); const values = previousValues.current; const lastValue = values[values.length - 1] ?? initialValue; setValue(lastValue); }; return [value, setValue, undo, previousValues.current] as const; };