UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

87 lines (86 loc) 3.85 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useDependencePaths; var _react = require("react"); var _index = _interopRequireDefault(require("../../utils/json-pointer/index.js")); var _Context = _interopRequireDefault(require("../../DataContext/Context.js")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useDependencePaths(dependencePaths, propagateIndeterminateState) { const { data, fieldInternalsRef, handlePathChange } = (0, _react.useContext)(_Context.default) || {}; const { allOn, allOff, indeterminate, ariaControlsIds } = (0, _react.useMemo)(() => { if (!dependencePaths || !data) { return {}; } const check = ({ key, whenUndefined = false }) => { return dependencePaths === null || dependencePaths === void 0 ? void 0 : dependencePaths.every(path => { if (_index.default.has(data, path)) { var _fieldInternalsRef$cu; const value = _index.default.get(data, path); if ((whenUndefined ? typeof value === 'undefined' : false) || value === (fieldInternalsRef === null || fieldInternalsRef === void 0 || (_fieldInternalsRef$cu = fieldInternalsRef.current) === null || _fieldInternalsRef$cu === void 0 || (_fieldInternalsRef$cu = _fieldInternalsRef$cu[path]) === null || _fieldInternalsRef$cu === void 0 || (_fieldInternalsRef$cu = _fieldInternalsRef$cu.props) === null || _fieldInternalsRef$cu === void 0 ? void 0 : _fieldInternalsRef$cu[key])) { return true; } } }); }; const ariaControlsIds = dependencePaths.map(path => { var _fieldInternalsRef$cu2; return (_fieldInternalsRef$cu2 = fieldInternalsRef.current) === null || _fieldInternalsRef$cu2 === void 0 || (_fieldInternalsRef$cu2 = _fieldInternalsRef$cu2[path]) === null || _fieldInternalsRef$cu2 === void 0 ? void 0 : _fieldInternalsRef$cu2.id; }).filter(Boolean).join(' ') || undefined; const allOn = check({ key: 'valueOn' }); const allOff = check({ key: 'valueOff', whenUndefined: true }); const indeterminate = !allOn && !allOff; return { allOn, allOff, indeterminate, ariaControlsIds }; }, [data, dependencePaths, fieldInternalsRef]); const keepStateRef = (0, _react.useRef)(); (0, _react.useMemo)(() => { if (allOn && !keepStateRef.current) { keepStateRef.current = true; } else if (allOff && keepStateRef.current) { keepStateRef.current = false; } else { if (propagateIndeterminateState !== 'auto' && indeterminate) { keepStateRef.current = propagateIndeterminateState === 'unchecked'; } } }, [allOn, allOff, propagateIndeterminateState, indeterminate]); const setAllStates = (0, _react.useCallback)(checked => { dependencePaths === null || dependencePaths === void 0 || dependencePaths.forEach(path => { var _fieldInternalsRef$cu3; const fieldProp = checked ? 'valueOn' : 'valueOff'; const value = fieldInternalsRef === null || fieldInternalsRef === void 0 || (_fieldInternalsRef$cu3 = fieldInternalsRef.current) === null || _fieldInternalsRef$cu3 === void 0 || (_fieldInternalsRef$cu3 = _fieldInternalsRef$cu3[path]) === null || _fieldInternalsRef$cu3 === void 0 || (_fieldInternalsRef$cu3 = _fieldInternalsRef$cu3.props) === null || _fieldInternalsRef$cu3 === void 0 ? void 0 : _fieldInternalsRef$cu3[fieldProp]; handlePathChange === null || handlePathChange === void 0 || handlePathChange(path, value); }); }, [dependencePaths, fieldInternalsRef, handlePathChange]); return { setAllStates, indeterminate, internalValue: keepStateRef.current, ariaControlsIds }; } //# sourceMappingURL=useDependencePaths.js.map