@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
60 lines (59 loc) • 2.08 kB
JavaScript
"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