@modern-kit/react
Version:
64 lines (61 loc) • 1.86 kB
JavaScript
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