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.

85 lines (68 loc) 2.87 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _context = require("./context"); var _Stack = _interopRequireDefault(require("../../Stack")); var _getSpacingToken = _interopRequireDefault(require("../../common/getSpacingToken")); var _defaultTheme = _interopRequireDefault(require("../../defaultTheme")); var _handleKeyDown = _interopRequireDefault(require("../../utils/handleKeyDown")); const StyledWrapper = _styledComponents.default.div.withConfig({ displayName: "ItinerarySegment__StyledWrapper", componentId: "sc-gil19c-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:", ";outline:none;}"], !noElevation && theme.orbit.boxShadowActionActive))); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198 StyledWrapper.defaultProps = { theme: _defaultTheme.default }; const ItinerarySegment = ({ children, spaceAfter, dataTest, noElevation, actionable = true, onClick }) => { const content = React.Children.toArray(children); const [opened, setOpened] = React.useState(false); const parts = /*#__PURE__*/React.createElement(_Stack.default, { direction: "column", spacing: "small" }, React.Children.map(children, (el, i) => { return /*#__PURE__*/React.createElement(_context.ItinerarySegmentContext.Provider, { value: { index: i, opened, toggleOpened: () => setOpened(prev => !prev), last: i === React.Children.count(children) - 1, isNextHidden: content[i + 1] && content[i + 1].props.hidden, count: React.Children.count(children), isHidden: 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); }; var _default = ItinerarySegment; exports.default = _default;