UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

82 lines (81 loc) 3.21 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useDataValue; var _react = require("react"); var _jsonPointer = _interopRequireDefault(require("../utils/json-pointer")); var _Context = _interopRequireDefault(require("../DataContext/Context")); var _IterateItemContext = _interopRequireDefault(require("../Iterate/IterateItemContext")); var _usePath = _interopRequireDefault(require("./usePath")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useDataValue(pathProp, value) { const dataContextRef = (0, _react.useRef)(); dataContextRef.current = (0, _react.useContext)(_Context.default); const iterateItemContext = (0, _react.useContext)(_IterateItemContext.default); const { makePath, makeIteratePath } = (0, _usePath.default)(); const get = (0, _react.useCallback)(function (selector) { var _dataContextRef$curre, _dataContextRef$curre2; let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (_dataContextRef$curre = dataContextRef.current) === null || _dataContextRef$curre === void 0 ? void 0 : (_dataContextRef$curre2 = _dataContextRef$curre.internalDataRef) === null || _dataContextRef$curre2 === void 0 ? void 0 : _dataContextRef$curre2.current; if (selector === '/') { return data; } return _jsonPointer.default.has(data, selector) ? _jsonPointer.default.get(data, selector) : undefined; }, []); const getValueByPath = (0, _react.useCallback)(function (path) { let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; if (isPath(path)) { return get(makePath(path), data); } }, [get, makePath]); const getValueByIteratePath = (0, _react.useCallback)(path => { if (isPath(path)) { return get(makeIteratePath(path)); } }, [get, makeIteratePath]); const moveValueToPath = (0, _react.useCallback)(function (path, value) { let object = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; if (path !== '/' && isPath(path)) { _jsonPointer.default.set(object, path, value); return object; } return value; }, []); const getData = (0, _react.useCallback)((path, options) => { if (isPath(path)) { const value = getValueByPath(path); if (options !== null && options !== void 0 && options.includeCurrentPath && path !== '/') { return moveValueToPath(path, value); } return value; } }, [getValueByPath, moveValueToPath]); const getSourceValue = (0, _react.useCallback)(source => { if (typeof source === 'string' && isPath(source)) { if (iterateItemContext) { return getValueByIteratePath(source); } return getValueByPath(source); } return source; }, [getValueByIteratePath, getValueByPath, iterateItemContext]); if (pathProp) { value = getSourceValue(pathProp); } return { getSourceValue, getValueByPath, getValueByIteratePath, moveValueToPath, getData, value }; } function isPath(path) { return typeof path === 'string' && path.startsWith('/'); } //# sourceMappingURL=useDataValue.js.map