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.

67 lines (66 loc) 2.89 kB
"use strict"; "use client"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _handleKeyDown = _interopRequireDefault(require("../../utils/handleKeyDown")); var _Separator = _interopRequireDefault(require("../../Separator")); var _context = require("./context"); var _tailwind = require("../../common/tailwind"); const ItinerarySegment = ({ children, spaceAfter, dataTest, noElevation, actionable = true, banner, onClick, onExpand, onCollapse }) => { const content = React.Children.toArray(children); const [opened, setOpened] = React.useState(false); const handleClick = ev => { const target = ev.target; const isHorizontalScrollOverflowing = target.closest(".orbit-horizontal-scroll[data-overflowing]"); if (isHorizontalScrollOverflowing || document && document.getSelection()?.type === "Range") return; ev.stopPropagation(); if (onClick) onClick(ev); if (!opened && onExpand) onExpand(ev); if (opened && onCollapse) onCollapse(ev); setOpened(prev => !prev); }; const isInteractive = actionable || onClick || onExpand || onCollapse; const parts = /*#__PURE__*/React.createElement("div", (0, _extends2.default)({ className: "pt-300" }, isInteractive && { role: "button", tabIndex: 0, onClick: handleClick, onKeyDown: (0, _handleKeyDown.default)(() => setOpened(prev => !prev)) }), React.Children.map(children, (el, i) => { if (! /*#__PURE__*/React.isValidElement(el)) return null; return /*#__PURE__*/React.createElement(_context.ItinerarySegmentProvider, { index: i, opened: opened, 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); })); return /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("orbit-itinerary-segment duration-fast transition ease-in-out", "rounded-300 pb-300 px-0", spaceAfter && _tailwind.spaceAfterClasses[spaceAfter], !noElevation && "shadow-level1", actionable && !noElevation && "hover:shadow-level2 focus:shadow-level2"), "data-test": dataTest }, parts, Boolean(banner) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Separator.default, { spaceAfter: "small" }), banner)); }; var _default = exports.default = ItinerarySegment;