@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.
151 lines (120 loc) • 5.1 kB
JavaScript
"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 _rtl = require("../../utils/rtl");
var _Text = _interopRequireDefault(require("../../Text"));
var _Stack = _interopRequireDefault(require("../../Stack"));
var _defaultTheme = _interopRequireDefault(require("../../defaultTheme"));
var _consts = require("./consts");
var _getSpacingToken = _interopRequireDefault(require("../../common/getSpacingToken"));
var _AlertOctagon = _interopRequireDefault(require("../../icons/AlertOctagon"));
var _AlertCircle = _interopRequireDefault(require("../../icons/AlertCircle"));
var _InformationCircle = _interopRequireDefault(require("../../icons/InformationCircle"));
var _CheckCircle = _interopRequireDefault(require("../../icons/CheckCircle"));
const resolveColor = (status, isHeader) => ({
theme
}) => {
const border = {
[_consts.STATUS.WARNING]: theme.orbit.paletteOrangeNormal,
[_consts.STATUS.CRITICAL]: theme.orbit.paletteRedNormal,
[_consts.STATUS.INFO]: theme.orbit.paletteBlueNormal,
[_consts.STATUS.SUCCESS]: theme.orbit.paletteGreenNormal
};
const header = {
[_consts.STATUS.WARNING]: theme.orbit.paletteOrangeLight,
[_consts.STATUS.INFO]: theme.orbit.paletteBlueLight,
[_consts.STATUS.CRITICAL]: theme.orbit.paletteRedLight,
[_consts.STATUS.SUCCESS]: theme.orbit.paletteGreenLight
};
if (isHeader) return header[status];
return border[status];
};
const StyledWrapper = _styledComponents.default.div.withConfig({
displayName: "ItineraryStatus__StyledWrapper",
componentId: "sc-1rcw8nf-0"
})(["", ""], ({
theme,
$type
}) => (0, _styledComponents.css)(["display:flex;box-sizing:border-box;flex-direction:column;width:100%;border-radius:", ";border-", ":", " solid ", ";box-shadow:", ";margin-bottom:", ";&:hover,&:focus{outline:none;box-shadow:", ";}"], theme.orbit.borderRadiusLarge, _rtl.left, theme.orbit.borderRadiusNormal, $type && resolveColor($type), theme.orbit.boxShadowFixed, _getSpacingToken.default, theme.orbit.boxShadowActionActive)); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledWrapper.defaultProps = {
theme: _defaultTheme.default
};
const StyledStatusHeader = _styledComponents.default.div.withConfig({
displayName: "ItineraryStatus__StyledStatusHeader",
componentId: "sc-1rcw8nf-1"
})(["", ""], ({
theme,
$type
}) => (0, _styledComponents.css)(["display:flex;align-items:center;padding:", ";height:", ";border-radius:", " ", " 0 0;background:", ";"], (0, _rtl.rtlSpacing)(`0 ${theme.orbit.spaceXSmall}`), theme.orbit.spaceXLarge, theme.orbit.borderRadiusNormal, theme.orbit.borderRadiusLarge, $type && resolveColor($type, true))); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledStatusHeader.defaultProps = {
theme: _defaultTheme.default
}; // calculatedOffset + paddings
const StyledStatusText = _styledComponents.default.div.withConfig({
displayName: "ItineraryStatus__StyledStatusText",
componentId: "sc-1rcw8nf-2"
})(["", ";"], ({
theme,
$offset
}) => (0, _styledComponents.css)(["z-index:2;margin-", ":", "px;"], _rtl.left, parseInt(theme.orbit.spaceSmall, 10) + $offset)); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledStatusText.defaultProps = {
theme: _defaultTheme.default
};
const StatusIcon = ({
type
}) => {
switch (type) {
case "info":
return /*#__PURE__*/React.createElement(_InformationCircle.default, {
size: "small",
color: type
});
case "critical":
return /*#__PURE__*/React.createElement(_AlertOctagon.default, {
size: "small",
color: type
});
case "success":
return /*#__PURE__*/React.createElement(_CheckCircle.default, {
size: "small",
color: type
});
default:
return /*#__PURE__*/React.createElement(_AlertCircle.default, {
size: "small",
color: type
});
}
};
const ItineraryStatus = ({
type,
label,
spaceAfter = "medium",
children,
offset = 0
}) => {
return /*#__PURE__*/React.createElement(StyledWrapper, {
$type: type,
spaceAfter: spaceAfter,
tabIndex: 0
}, /*#__PURE__*/React.createElement(StyledStatusHeader, {
$type: type
}, /*#__PURE__*/React.createElement(StyledStatusText, {
$offset: offset
}, /*#__PURE__*/React.createElement(_Stack.default, {
inline: true,
spacing: "XSmall",
align: "center"
}, /*#__PURE__*/React.createElement(StatusIcon, {
type: type
}), label && /*#__PURE__*/React.createElement(_Text.default, {
type: type
}, label)))), children);
};
var _default = ItineraryStatus;
exports.default = _default;