UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

60 lines (59 loc) 2.08 kB
"use client"; import "core-js/modules/web.dom-collections.iterator.js"; import { useRef } from 'react'; export default function useWasChanged(subject, title, debug) { var _previous$current; const previous = useRef(subject); if (!previous.current && !subject) { console.log('useWasChanged() - No subject was provided, while previous render had a subject. Was the whole object deleted?'); } const { changed, unchanged } = [...Object.entries(subject), ...Object.entries((_previous$current = previous.current) !== null && _previous$current !== void 0 ? _previous$current : {}).filter(_ref => { let [key] = _ref; return subject[key] === undefined; })].reduce((_ref2, _ref3) => { var _previous$current2; let { changed, unchanged } = _ref2; let [key, value] = _ref3; if (((_previous$current2 = previous.current) === null || _previous$current2 === void 0 ? void 0 : _previous$current2[key]) !== (subject === null || subject === void 0 ? void 0 : subject[key])) { return { changed: changed.concat(key), unchanged }; } else { return { changed, unchanged: unchanged.concat(key) }; } }, { changed: [], unchanged: [] }); if (changed.length === 0 && !debug) { return; } console.groupCollapsed(`${title !== null && title !== void 0 ? title : 'object'} -- ${changed.length} members was changed`); Object.values(changed).map(key => { if (debug) { var _previous$current3; console.groupCollapsed(`CHANGED: ${key}`); console.log('PREVIOUS: ', (_previous$current3 = previous.current) === null || _previous$current3 === void 0 ? void 0 : _previous$current3[key]); console.log('CURRENT: ', subject === null || subject === void 0 ? void 0 : subject[key]); console.groupEnd(); } else { console.log(`CHANGED: ${key}`); } }); Object.values(unchanged).map(key => { console.log(`UNCHANGED: ${key}`); }); previous.current = subject; console.groupEnd(); } //# sourceMappingURL=useWasChanged.js.map