@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.
83 lines (82 loc) • 3.38 kB
JavaScript
"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 _SeatLegend = _interopRequireDefault(require("./components/SeatLegend"));
exports.SeatLegend = _SeatLegend.default;
var _Stack = _interopRequireDefault(require("../Stack"));
var _Text = _interopRequireDefault(require("../Text"));
var _useRandomId = require("../hooks/useRandomId");
var _SeatNormal = _interopRequireDefault(require("./components/SeatNormal"));
var _SeatSmall = _interopRequireDefault(require("./components/SeatSmall"));
var _SeatCircle = _interopRequireDefault(require("./components/SeatCircle"));
var _consts = require("./consts");
const Seat = ({
type = _consts.TYPES.DEFAULT,
selected = false,
onClick,
size = _consts.SIZE_OPTIONS.MEDIUM,
dataTest,
id,
price,
label,
title,
description,
"aria-labelledby": ariaLabelledBy = ""
}) => {
const randomId = (0, _useRandomId.useRandomIdSeed)();
const titleId = title ? randomId("title") : "";
const descrId = description ? randomId("descr") : "";
const isAvailable = type !== _consts.TYPES.UNAVAILABLE;
const clickable = isAvailable && onClick !== undefined;
const commonProps = {
className: (0, _clsx.default)("orbit-seat font-base group relative", isAvailable && "cursor-pointer", size === _consts.SIZE_OPTIONS.SMALL ? "w-800 h-[36px]" : "size-[46px]"),
id,
"data-test": dataTest
};
const seatContent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("svg", {
viewBox: size === _consts.SIZE_OPTIONS.SMALL ? "0 0 32 36" : "0 0 46 46",
"aria-labelledby": `${[ariaLabelledBy, titleId, descrId].join(" ").trim()}` || undefined,
fill: "none",
role: "img"
}, title && /*#__PURE__*/React.createElement("title", {
id: titleId
}, title), description && /*#__PURE__*/React.createElement("desc", {
id: descrId
}, description), size === _consts.SIZE_OPTIONS.SMALL ? /*#__PURE__*/React.createElement(_SeatSmall.default, {
type: type,
selected: selected,
label: label
}) : /*#__PURE__*/React.createElement(_SeatNormal.default, {
type: type,
selected: selected,
label: label
})), selected && isAvailable && /*#__PURE__*/React.createElement(_SeatCircle.default, {
size: size,
type: type
}));
return /*#__PURE__*/React.createElement(_Stack.default, {
inline: true,
grow: false,
spacing: "50",
direction: "column",
align: "center"
}, clickable ? /*#__PURE__*/React.createElement("button", (0, _extends2.default)({}, commonProps, {
onClick: onClick,
type: "button",
"aria-pressed": selected
}), seatContent) : /*#__PURE__*/React.createElement("div", (0, _extends2.default)({}, commonProps, {
role: "button",
"aria-pressed": selected,
"aria-disabled": "true"
}), seatContent), price && !(selected && !isAvailable) && /*#__PURE__*/React.createElement(_Text.default, {
size: "small",
type: "secondary"
}, price));
};
var _default = exports.default = Seat;