UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

60 lines (59 loc) 1.96 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useHasContentChanged; var _react = require("react"); var _index = _interopRequireDefault(require("../../utils/json-pointer/index.js")); var _Context = _interopRequireDefault(require("../../DataContext/Context.js")); var _useDataContextSnapshot = _interopRequireDefault(require("./useDataContextSnapshot.js")); var _componentHelper = require("../../../../shared/component-helper.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useHasContentChanged({ enabled = false } = {}) { const { internalDataRef } = (0, _react.useContext)(_Context.default); const { snapshotRef } = (0, _useDataContextSnapshot.default)({ enabled }); const data = internalDataRef === null || internalDataRef === void 0 ? void 0 : internalDataRef.current; const snapshot = snapshotRef === null || snapshotRef === void 0 ? void 0 : snapshotRef.current; const hasContentChanged = (0, _react.useMemo)(() => { if (!data || !snapshot) { return undefined; } let hasChanged = false; _index.default.walk(data, (value, path) => { const exists = _index.default.has(snapshot, path); const prev = exists ? _index.default.get(snapshot, path) : undefined; if (!exists || hasValueChanged(value, prev)) { hasChanged = true; return false; } }); return hasChanged; }, [data, snapshot]); return { hasContentChanged }; } function hasValueChanged(a, b) { if (a === b) { return false; } if ((0, _componentHelper.isObject)(a) && (0, _componentHelper.isObject)(b)) { const keysA = Object.keys(a); const keysB = Object.keys(b); if (keysA.length !== keysB.length) { return true; } return keysA.some(k => hasValueChanged(a[k], b[k])); } return true; } //# sourceMappingURL=useHasContentChanged.js.map