@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.
63 lines (57 loc) • 2.24 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import * as React from "react";
import { useAccordion } from "../AccordionContext";
import useRandomId from "../../hooks/useRandomId";
import useBoundingRect from "../../hooks/useBoundingRect";
import Slide from "../../utils/Slide";
import Loading from "../../Loading";
import AccordionWrapper from "../components/AccordionWrapper";
import SectionHeader from "./components/SectionHeader";
import SectionFooter from "./components/SectionFooter";
import SectionContent from "./components/SectionContent";
var AccordionSection = function AccordionSection(_ref) {
var children = _ref.children,
header = _ref.header,
footer = _ref.footer,
actions = _ref.actions,
dataTest = _ref.dataTest,
_ref$expandable = _ref.expandable,
expandable = _ref$expandable === void 0 ? true : _ref$expandable;
var _useAccordion = useAccordion(),
expanded = _useAccordion.expanded,
onExpand = _useAccordion.onExpand,
loading = _useAccordion.loading;
var slideId = useRandomId();
var isExpanded = expandable && expanded;
var _useBoundingRect = useBoundingRect({
height: isExpanded ? null : 0
}),
_useBoundingRect2 = _slicedToArray(_useBoundingRect, 2),
height = _useBoundingRect2[0].height,
ref = _useBoundingRect2[1];
return /*#__PURE__*/React.createElement(AccordionWrapper, {
dataTest: dataTest
}, /*#__PURE__*/React.createElement(Loading, {
loading: loading,
type: "boxLoader",
dataTest: dataTest && "".concat(dataTest, "Loading")
}, header && /*#__PURE__*/React.createElement(SectionHeader, {
actions: actions,
expanded: Boolean(isExpanded),
onExpand: onExpand,
expandable: expandable,
dataTest: dataTest
}, header), /*#__PURE__*/React.createElement(Slide, {
maxHeight: height,
expanded: isExpanded,
id: slideId,
ariaLabelledBy: slideId
}, /*#__PURE__*/React.createElement("div", {
ref: ref
}, children && /*#__PURE__*/React.createElement(SectionContent, {
dataTest: dataTest
}, children), footer && /*#__PURE__*/React.createElement(SectionFooter, {
dataTest: dataTest
}, footer)))));
};
export default AccordionSection;