@winglet/react-utils
Version:
React utility library providing custom hooks, higher-order components (HOCs), and utility functions to enhance React application development with improved reusability and functionality
33 lines (29 loc) • 1.02 kB
JavaScript
;
var react = require('react');
var lib = require('@winglet/common-utils/lib');
var object = require('@winglet/common-utils/object');
const useSnapshotReference = (input, omit) => {
const snapshotRef = react.useRef(input);
const typeRef = react.useRef(lib.getTypeTag(input));
const omitRef = react.useRef(omit && (omit instanceof Set ? omit : new Set(omit)));
return react.useMemo(() => {
if ((typeRef.current === lib.getTypeTag(input) && isEmpty(input)) ||
object.equals(snapshotRef.current, input, omitRef.current))
return snapshotRef;
snapshotRef.current = input;
return snapshotRef;
}, [input]);
};
const isEmpty = (value) => {
if (!value)
return true;
else if (typeof value === 'object') {
for (const key in value)
if (lib.hasOwnProperty(value, key))
return false;
return true;
}
else
return false;
};
exports.useSnapshotReference = useSnapshotReference;