UNPKG

@modern-kit/react

Version:
64 lines (61 loc) 1.86 kB
import { useState, useMemo } from 'react'; const useArrayState = (initialValue) => { const [value, setValue] = useState( typeof initialValue === "function" ? initialValue() : initialValue ); const setArray = useMemo(() => { const setState = (v) => setValue(v); setState.push = (...items) => { setValue((prev) => [...prev, ...items]); }; setState.unshift = (...items) => { setValue((prev) => [...items, ...prev]); }; setState.shift = () => { setValue((prev) => prev.slice(1)); }; setState.pop = () => { setValue((prev) => prev.slice(0, -1)); }; setState.splice = (start, deleteCount, ...items) => { setValue((prev) => { const newArray = [...prev]; newArray.splice(start, deleteCount, ...items); return newArray; }); }; setState.insertAt = (index, item) => { setValue((prev) => { const newArray = [...prev]; newArray.splice(index, 0, item); return newArray; }); }; setState.remove = (...indexes) => { setValue((prev) => prev.filter((_, i) => !indexes.includes(i))); }; setState.removeAt = (index) => { setValue((prev) => prev.filter((_, i) => i !== index)); }; setState.removeBy = (predicate) => { setValue((prev) => prev.filter((item, index) => !predicate(item, index))); }; setState.updateAt = (index, item) => { setValue((prev) => { const newArray = [...prev]; newArray[index] = item; return newArray; }); }; setState.updateBy = (iteratee) => { setValue((prev) => prev.map((item, index) => iteratee(item, index))); }; setState.clear = () => { setValue([]); }; return setState; }, []); return [value, setArray]; }; export { useArrayState }; //# sourceMappingURL=index.mjs.map