@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
77 lines (76 loc) • 3.13 kB
JavaScript
"use strict";
"use client";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _clsx = require("clsx");
var _Skeleton = _interopRequireDefault(require("../skeleton/Skeleton.js"));
var _useSharedState = require("../../shared/helpers/useSharedState.js");
var _FilterContext = require("./FilterContext.js");
var _HeightAnimation = _interopRequireDefault(require("../height-animation/HeightAnimation.js"));
var _SpacingUtils = require("../space/SpacingUtils.js");
var _withComponentMarkers = _interopRequireDefault(require("../../shared/helpers/withComponentMarkers.js"));
var _AriaLive = _interopRequireDefault(require("../aria-live/AriaLive.js"));
var _Context = _interopRequireDefault(require("../../shared/Context.js"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function FilterContent({
connectedTo,
className,
children,
...spacingRest
}) {
var _ref, _data$resultLoading, _data$resultCount;
const context = (0, _react.useContext)(_FilterContext.FilterContext);
const sharedContext = (0, _react.useContext)(_Context.default);
const {
resultCountMessage,
noResultsMessage
} = sharedContext.getTranslation({}).Filter;
const resolvedId = connectedTo !== null && connectedTo !== void 0 ? connectedTo : context?.id;
if (!resolvedId && !context) {
throw new Error('Filter.Content requires a connectedTo prop or must be used inside a Filter.Root.');
}
const {
data
} = (0, _useSharedState.useSharedState)(resolvedId);
const isLoading = (_ref = (_data$resultLoading = data?.resultLoading) !== null && _data$resultLoading !== void 0 ? _data$resultLoading : context?.resultLoading) !== null && _ref !== void 0 ? _ref : false;
const resultCount = (_data$resultCount = data?.resultCount) !== null && _data$resultCount !== void 0 ? _data$resultCount : context?.resultCount;
const hadLoading = (0, _react.useRef)(false);
if (isLoading) {
hadLoading.current = true;
}
const ariaLiveAnnouncement = (() => {
if (isLoading || resultCount === undefined) {
return '';
}
if (resultCount === 0) {
return noResultsMessage;
}
return resultCountMessage.replace('%s', String(resultCount));
})();
const spacingProps = (0, _SpacingUtils.useSpacing)(spacingRest, {
className: (0, _clsx.clsx)('dnb-filter__content', className)
});
return (0, _jsxRuntime.jsxs)(_FilterContext.FilterConnectedIdContext, {
value: resolvedId,
children: [(0, _jsxRuntime.jsx)(_Skeleton.default, {
show: isLoading,
...spacingProps,
children: hadLoading.current ? (0, _jsxRuntime.jsx)(_HeightAnimation.default, {
children: children
}) : children
}), (0, _jsxRuntime.jsx)(_AriaLive.default, {
priority: "high",
delay: 1000,
children: ariaLiveAnnouncement
})]
});
}
(0, _withComponentMarkers.default)(FilterContent, {
_supportsSpacingProps: true
});
var _default = exports.default = FilterContent;
//# sourceMappingURL=FilterContent.js.map