UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

54 lines (53 loc) 1.59 kB
"use client"; import { useContext, useMemo } from 'react'; import pointer from "../../utils/json-pointer/index.js"; import DataContext from "../../DataContext/Context.js"; import useDataContextSnapshot from "./useDataContextSnapshot.js"; import { isObject } from "../../../../shared/component-helper.js"; export default function useHasContentChanged({ enabled = false } = {}) { const { internalDataRef } = useContext(DataContext); const { snapshotRef } = useDataContextSnapshot({ 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 = useMemo(() => { if (!data || !snapshot) { return undefined; } let hasChanged = false; pointer.walk(data, (value, path) => { const exists = pointer.has(snapshot, path); const prev = exists ? pointer.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 (isObject(a) && 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