import { RecoilState, useSetRecoilState } from "recoil";
const useModifyItemFromRecoilState = <T>(
recoilState: RecoilState<T[]>
): ((item: T, keyToCompare: keyof T) => void) => {
if (!recoilState) throw new Error("useModifyItemFromRecoilState: missing arguments.");
const setRecoilState = useSetRecoilState(recoilState);
return (itemModified: T, keyToCompare: keyof T) => {
setRecoilState((prevState) => {
const index = prevState.findIndex((ev) => ev[keyToCompare] === itemModified[keyToCompare]);
const prevItems = prevState.slice(0, index);
const laterItems = prevState.slice(index + 1);
return [...prevItems, itemModified, ...laterItems];
});
};
};
export default useModifyItemFromRecoilState;
Fiz algumas modificações para tornar esse Hook mais genérico para conseguir usar em qualquer array que é um estado Recoil. Tem alguma coisa que pode ser melhor?