@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
82 lines (81 loc) • 3.81 kB
JavaScript
"use client";
import _extends from "@babel/runtime/helpers/esm/extends";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import "core-js/modules/web.dom-collections.iterator.js";
import React, { useCallback, useContext, useMemo } from 'react';
import SectionContext from './SectionContext';
import DataContext from '../../DataContext/Context';
import Provider from '../../DataContext/Provider/Provider';
import FieldPropsProvider from '../../Field/Provider';
import SectionContainerProvider from './containers/SectionContainerProvider';
import ViewContainer from './ViewContainer';
import EditContainer from './EditContainer';
import Toolbar from './Toolbar';
function SectionComponent(props) {
var _path$startsWith, _nestedProps$overwrit;
const {
path,
overwriteProps,
translations,
required,
data,
defaultData,
validateInitially,
containerMode = 'auto',
onChange,
errorPrioritization = ['contextSchema'],
children
} = props;
if (path && !((_path$startsWith = path.startsWith) !== null && _path$startsWith !== void 0 && _path$startsWith.call(path, '/'))) {
throw new Error(`path="${path}" must start with a slash`);
}
const {
hasContext,
addOnChangeHandler
} = useContext(DataContext);
const {
path: nestedPath,
props: nestedProps
} = useContext(SectionContext) || {};
const handleChange = useCallback(function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return onChange === null || onChange === void 0 ? void 0 : onChange(...args);
}, [onChange]);
addOnChangeHandler === null || addOnChangeHandler === void 0 ? void 0 : addOnChangeHandler(handleChange);
const identifier = useMemo(() => {
return `${nestedPath && nestedPath !== '/' ? nestedPath : ''}${path || ''}`;
}, [path, nestedPath]);
const fieldProps = required ? {
required: true
} : undefined;
if (!hasContext) {
return React.createElement(Provider, {
data: data,
defaultData: defaultData
}, React.createElement(SectionComponent, props));
}
const sectionProps = props;
return React.createElement(SectionContext.Provider, {
value: {
path: identifier,
errorPrioritization,
props: sectionProps
}
}, React.createElement(SectionContainerProvider, {
validateInitially: validateInitially,
containerMode: containerMode
}, React.createElement(FieldPropsProvider, _extends({
overwriteProps: _objectSpread(_objectSpread({}, overwriteProps), nestedProps === null || nestedProps === void 0 ? void 0 : (_nestedProps$overwrit = nestedProps.overwriteProps) === null || _nestedProps$overwrit === void 0 ? void 0 : _nestedProps$overwrit[path.substring(1)]),
translations: translations
}, fieldProps), children)));
}
SectionComponent.Toolbar = Toolbar;
SectionComponent.ViewContainer = ViewContainer;
SectionComponent.EditContainer = EditContainer;
SectionComponent._supportsSpacingProps = undefined;
export default SectionComponent;
//# sourceMappingURL=Section.js.map