UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

87 lines (86 loc) 4.18 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _ListContext = require("./ListContext.js"); var _Stack = _interopRequireDefault(require("../flex/Stack.js")); var _HeightAnimation = _interopRequireDefault(require("../height-animation/HeightAnimation.js")); var _Context = _interopRequireDefault(require("../../shared/Context.js")); var _useSharedState = require("../../shared/helpers/useSharedState.js"); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } function ListContainer(props) { var _ref, _toggleData$expanded; const { className, children, visibleCount, variant = 'basic', separated = false, skeleton, disabled, wrapChildrenInSpace = false, ...rest } = props; const parentContext = (0, _react.useContext)(_ListContext.ListContext); const globalContext = (0, _react.useContext)(_Context.default); const appliedSkeleton = (_ref = skeleton !== null && skeleton !== void 0 ? skeleton : parentContext === null || parentContext === void 0 ? void 0 : parentContext.skeleton) !== null && _ref !== void 0 ? _ref : globalContext === null || globalContext === void 0 ? void 0 : globalContext.skeleton; const appliedDisabled = disabled !== null && disabled !== void 0 ? disabled : parentContext === null || parentContext === void 0 ? void 0 : parentContext.disabled; const hasVisibleCount = typeof visibleCount === 'number' && Number.isFinite(visibleCount) && visibleCount > 0; const hasToggle = hasVisibleCount && props.id !== undefined; const { data: toggleData } = (0, _useSharedState.useSharedState)(hasToggle ? props.id : undefined, { expanded: false }); const expanded = hasToggle ? (_toggleData$expanded = toggleData === null || toggleData === void 0 ? void 0 : toggleData.expanded) !== null && _toggleData$expanded !== void 0 ? _toggleData$expanded : false : false; const shouldLimit = hasVisibleCount && !expanded; const renderedChildren = (0, _react.useMemo)(() => { if (!hasVisibleCount) { return children; } const childArray = _react.default.Children.toArray(children); if (!shouldLimit) { return childArray; } return childArray.map((child, index) => { if (index < visibleCount) { return child; } if (_react.default.isValidElement(child)) { return _react.default.cloneElement(child, { hidden: true }); } return null; }); }, [children, hasVisibleCount, shouldLimit, visibleCount]); const listContent = (0, _jsxRuntime.jsx)(_Stack.default, { element: "ul", rowGap: separated ? 'small' : false, wrap: false, wrapChildrenInSpace: wrapChildrenInSpace, className: (0, _clsx.default)("dnb-list dnb-list__container", className, variant && `dnb-list--variant-${variant}`, separated && 'dnb-list--separated'), ...rest, children: renderedChildren }); return (0, _jsxRuntime.jsx)(_ListContext.ListContext, { value: { variant, separated, skeleton: appliedSkeleton, disabled: appliedDisabled }, children: hasToggle ? (0, _jsxRuntime.jsx)(_HeightAnimation.default, { children: listContent }) : listContent }); } ListContainer._supportsSpacingProps = true; var _default = exports.default = ListContainer; //# sourceMappingURL=Container.js.map