@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
38 lines (34 loc) • 1.18 kB
JavaScript
var react = require('react');
var filter = require('@winglet/common-utils/filter');
var lib = require('@winglet/common-utils/lib');
var object = require('@winglet/common-utils/object');
const useSnapshot = (input, omit) => {
const snapshotRef = useSnapshotReference(input, omit);
return snapshotRef.current;
};
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 (filter.isObject(value)) {
for (const _ in value)
return false;
return true;
}
else
return false;
};
exports.useSnapshot = useSnapshot;
exports.useSnapshotReference = useSnapshotReference;
;