@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
62 lines (61 loc) • 2.34 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _AccordionContext = require("../AccordionContext");
var _useRandomId = _interopRequireDefault(require("../../hooks/useRandomId"));
var _useBoundingRect = _interopRequireDefault(require("../../hooks/useBoundingRect"));
var _Slide = _interopRequireDefault(require("../../utils/Slide"));
var _Loading = _interopRequireDefault(require("../../Loading"));
var _AccordionWrapper = _interopRequireDefault(require("../components/AccordionWrapper"));
var _SectionHeader = _interopRequireDefault(require("./components/SectionHeader"));
var _SectionFooter = _interopRequireDefault(require("./components/SectionFooter"));
var _SectionContent = _interopRequireDefault(require("./components/SectionContent"));
const AccordionSection = ({
children,
header,
footer,
actions,
dataTest,
expandable = true
}) => {
const {
expanded,
onExpand,
loading
} = (0, _AccordionContext.useAccordion)();
const slideId = (0, _useRandomId.default)();
const isExpanded = expandable && expanded;
const [{
height
}, ref] = (0, _useBoundingRect.default)({
height: isExpanded ? null : 0
});
return /*#__PURE__*/_react.default.createElement(_AccordionWrapper.default, {
dataTest: dataTest
}, /*#__PURE__*/_react.default.createElement(_Loading.default, {
loading: loading,
type: "boxLoader",
dataTest: dataTest && `${dataTest}Loading`
}, header && /*#__PURE__*/_react.default.createElement(_SectionHeader.default, {
actions: actions,
expanded: Boolean(isExpanded),
onExpand: onExpand,
expandable: expandable,
dataTest: dataTest
}, header), /*#__PURE__*/_react.default.createElement(_Slide.default, {
maxHeight: height,
expanded: isExpanded,
id: slideId,
ariaLabelledBy: slideId
}, /*#__PURE__*/_react.default.createElement("div", {
ref: ref
}, children && /*#__PURE__*/_react.default.createElement(_SectionContent.default, {
dataTest: dataTest
}, children), footer && /*#__PURE__*/_react.default.createElement(_SectionFooter.default, {
dataTest: dataTest
}, footer)))));
};
var _default = AccordionSection;
exports.default = _default;