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