remix-validated-form
Version:
Form component and utils for easy form validation in remix
33 lines (32 loc) • 944 B
JavaScript
import { useEffect, useLayoutEffect, useRef } from "react";
import * as R from "remeda";
export const omit = (obj, ...keys) => {
const result = { ...obj };
for (const key of keys) {
delete result[key];
}
return result;
};
export const mergeRefs = (refs) => {
return (value) => {
refs.filter(Boolean).forEach((ref) => {
if (typeof ref === "function") {
ref(value);
}
else if (ref != null) {
ref.current = value;
}
});
};
};
export const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
export const useDeepEqualsMemo = (item) => {
const ref = useRef(item);
const areEqual = ref.current === item || R.equals(ref.current, item);
useEffect(() => {
if (!areEqual) {
ref.current = item;
}
});
return areEqual ? ref.current : item;
};