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