UNPKG

@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.

75 lines (74 loc) 3.08 kB
"use strict"; "use client"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _Stack = _interopRequireDefault(require("../../Stack")); var _getSpacingToken = _interopRequireDefault(require("../../common/getSpacingToken")); var _defaultTheme = _interopRequireDefault(require("../../defaultTheme")); var _handleKeyDown = _interopRequireDefault(require("../../utils/handleKeyDown")); var _Separator = _interopRequireDefault(require("../../Separator")); var _context = require("./context"); const StyledWrapper = _styledComponents.default.div.withConfig({ displayName: "ItinerarySegment__StyledWrapper", componentId: "sc-1cl4djs-0" })(["", ""], ({ theme, noElevation, actionable }) => (0, _styledComponents.css)(["cursor:", ";margin-bottom:", ";box-shadow:", ";border-radius:", ";padding:", " 0;", ""], actionable && "pointer", _getSpacingToken.default, !noElevation && theme.orbit.boxShadowFixed, theme.orbit.borderRadiusLarge, theme.orbit.spaceSmall, actionable && (0, _styledComponents.css)(["&:hover,&:focus{box-shadow:", ";}"], !noElevation && theme.orbit.boxShadowActionActive))); StyledWrapper.defaultProps = { theme: _defaultTheme.default }; const ItinerarySegment = ({ children, spaceAfter, dataTest, noElevation, actionable = true, onClick, banner }) => { const content = React.Children.toArray(children); const [opened, setOpened] = React.useState(false); const parts = /*#__PURE__*/React.createElement(_Stack.default, { direction: "column", spacing: "none" }, React.Children.map(children, (el, i) => { if (! /*#__PURE__*/React.isValidElement(el)) return null; return /*#__PURE__*/React.createElement(_context.ItinerarySegmentProvider, { index: i, opened: opened, toggleOpened: () => { if (document && document.getSelection()?.type !== "Range") setOpened(prev => !prev); }, last: i === content.length - 1, isNextHidden: Boolean(content[i + 1]?.props?.hidden), isPrevHidden: Boolean(content[i - 1]?.props?.hidden), isBanner: !!banner, count: content.length, isHidden: !!(el.props && el.props.hidden), noElevation: !!noElevation }, el); })); const handleClick = ev => { if (onClick) onClick(ev); setOpened(prev => !prev); }; return /*#__PURE__*/React.createElement(StyledWrapper, { actionable: actionable, spaceAfter: spaceAfter, "data-test": dataTest, tabIndex: 0, onKeyDown: (0, _handleKeyDown.default)(() => setOpened(prev => !prev)), onClick: handleClick, noElevation: noElevation }, parts, Boolean(banner) && /*#__PURE__*/React.createElement(_Separator.default, { spaceAfter: "small" }), banner); }; var _default = ItinerarySegment; exports.default = _default;