@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
JavaScript
;
"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;