iticket-seatingplan-dev 1.7.1 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Flexi.js +16 -3
- package/dist/components/HoverPopup.js +120 -0
- package/dist/components/Map.js +55 -15
- package/dist/components/PriceButton.js +3 -2
- package/dist/components/PricingPopup.js +366 -84
- package/dist/components/SeatingPlan.js +39 -62
- package/dist/components/SelectQuantityPopup.js +1 -1
- package/dist/components/icons/MinusIcon.js +31 -0
- package/dist/components/icons/PlusIcon.js +31 -0
- package/dist/components/styles/flexi.css +21 -3
- package/dist/components/styles/index.css +285 -16
- package/dist/utils/helpers.js +59 -27
- package/package.json +1 -1
package/dist/components/Flexi.js
CHANGED
|
@@ -16,9 +16,13 @@ function Flexi(_ref) {
|
|
|
16
16
|
buttonText,
|
|
17
17
|
onConfirm,
|
|
18
18
|
isOpen,
|
|
19
|
-
panMap
|
|
19
|
+
panMap,
|
|
20
|
+
showCheckbox,
|
|
21
|
+
checkboxText,
|
|
22
|
+
initialChecked
|
|
20
23
|
} = _ref;
|
|
21
24
|
const [value, setValue] = (0, _react.useState)((_price$p = price.p) !== null && _price$p !== void 0 ? _price$p : price.pMin);
|
|
25
|
+
const [checked, setChecked] = (0, _react.useState)(initialChecked ? true : false);
|
|
22
26
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
23
27
|
className: "flexi-popup-content"
|
|
24
28
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -41,10 +45,19 @@ function Flexi(_ref) {
|
|
|
41
45
|
onChange: e => setValue(parseInt(e.target.value))
|
|
42
46
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
43
47
|
className: "min-max"
|
|
44
|
-
}, /*#__PURE__*/_react.default.createElement("p", null, _utils.NZDollar.format(price.pMin)), /*#__PURE__*/_react.default.createElement("p", null, _utils.NZDollar.format(price.pMax)))), /*#__PURE__*/_react.default.createElement("
|
|
48
|
+
}, /*#__PURE__*/_react.default.createElement("p", null, _utils.NZDollar.format(price.pMin)), /*#__PURE__*/_react.default.createElement("p", null, _utils.NZDollar.format(price.pMax)))), showCheckbox && /*#__PURE__*/_react.default.createElement("div", {
|
|
49
|
+
className: "flexi-checkbox"
|
|
50
|
+
}, /*#__PURE__*/_react.default.createElement("input", {
|
|
51
|
+
type: "checkbox",
|
|
52
|
+
id: "checkbox",
|
|
53
|
+
checked: checked,
|
|
54
|
+
onChange: () => setChecked(prev => !prev)
|
|
55
|
+
}), /*#__PURE__*/_react.default.createElement("label", {
|
|
56
|
+
htmlFor: "checkbox"
|
|
57
|
+
}, checkboxText)), /*#__PURE__*/_react.default.createElement("button", {
|
|
45
58
|
className: "add-cart",
|
|
46
59
|
onClick: () => {
|
|
47
|
-
onConfirm(value);
|
|
60
|
+
onConfirm(value, checked);
|
|
48
61
|
onClose();
|
|
49
62
|
}
|
|
50
63
|
}, buttonText)));
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = HoverPopup;
|
|
7
|
+
var _reactLeaflet = require("react-leaflet");
|
|
8
|
+
var _utils = require("../utils");
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
const offset = 10;
|
|
11
|
+
const numOnlyRgx = /^\d+$/;
|
|
12
|
+
function HoverPopup(_ref) {
|
|
13
|
+
var _highlightedSeats$;
|
|
14
|
+
let {
|
|
15
|
+
hoveredSeat,
|
|
16
|
+
highlightedSeats,
|
|
17
|
+
mousePos,
|
|
18
|
+
show,
|
|
19
|
+
availablePrices,
|
|
20
|
+
prevHovered
|
|
21
|
+
} = _ref;
|
|
22
|
+
const map = (0, _reactLeaflet.useMap)();
|
|
23
|
+
const ref = (0, _react.useRef)(null);
|
|
24
|
+
const tooltipPos = (0, _react.useMemo)(() => {
|
|
25
|
+
var _ref$current, _ref$current2;
|
|
26
|
+
const tooltipWidth = ((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.offsetWidth) || 0;
|
|
27
|
+
const tooltipHeight = ((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.offsetHeight) || 0;
|
|
28
|
+
const bounds = map.getPixelBounds();
|
|
29
|
+
const height = bounds.max.y - bounds.min.y;
|
|
30
|
+
const width = bounds.max.x - bounds.min.x;
|
|
31
|
+
let x = mousePos.x;
|
|
32
|
+
let y = mousePos.y;
|
|
33
|
+
if (y + tooltipHeight + offset * 2 > height) {
|
|
34
|
+
y -= tooltipHeight + offset;
|
|
35
|
+
} else {
|
|
36
|
+
y += offset * 2;
|
|
37
|
+
}
|
|
38
|
+
if (x + tooltipWidth + offset * 2 > width) {
|
|
39
|
+
x -= tooltipWidth + offset;
|
|
40
|
+
} else {
|
|
41
|
+
x += offset * 2;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
x,
|
|
45
|
+
y
|
|
46
|
+
};
|
|
47
|
+
}, [mousePos]);
|
|
48
|
+
const minPrice = (availablePrices === null || availablePrices === void 0 ? void 0 : availablePrices.length) > 0 ? Math.min(...availablePrices.map(price => price.pMin || price.p)) : 0;
|
|
49
|
+
const maxPrice = (availablePrices === null || availablePrices === void 0 ? void 0 : availablePrices.length) > 0 ? Math.max(...(availablePrices === null || availablePrices === void 0 ? void 0 : availablePrices.map(price => price.pMax || price.p))) : 0;
|
|
50
|
+
const priceText = (availablePrices === null || availablePrices === void 0 ? void 0 : availablePrices.length) > 0 ? availablePrices.length === 1 || maxPrice === minPrice ? _utils.NZDollar.format(availablePrices[0].p) : "".concat(_utils.NZDollar.format(minPrice), " - ").concat(_utils.NZDollar.format(maxPrice)) : "";
|
|
51
|
+
const rowName = (highlightedSeats === null || highlightedSeats === void 0 || (_highlightedSeats$ = highlightedSeats[0]) === null || _highlightedSeats$ === void 0 ? void 0 : _highlightedSeats$.r) || (hoveredSeat === null || hoveredSeat === void 0 ? void 0 : hoveredSeat.r);
|
|
52
|
+
const seatNames = (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.map(seat => seat.c)) || [hoveredSeat === null || hoveredSeat === void 0 ? void 0 : hoveredSeat.c];
|
|
53
|
+
if (seatNames.every(s => numOnlyRgx.test(s))) {
|
|
54
|
+
seatNames.sort((a, b) => parseInt(a) - parseInt(b));
|
|
55
|
+
} else {
|
|
56
|
+
seatNames.sort();
|
|
57
|
+
}
|
|
58
|
+
const psName = highlightedSeats ? highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.reduce((acc, val) => {
|
|
59
|
+
if (!acc.some(s => s.psName === val.psName)) {
|
|
60
|
+
acc.push(val);
|
|
61
|
+
}
|
|
62
|
+
return acc;
|
|
63
|
+
}, []).map(s => s.psName).join(", ") : hoveredSeat === null || hoveredSeat === void 0 ? void 0 : hoveredSeat.psName;
|
|
64
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
ref: ref,
|
|
66
|
+
className: "hover-popup",
|
|
67
|
+
style: {
|
|
68
|
+
top: "".concat(tooltipPos.y, "px"),
|
|
69
|
+
left: "".concat(tooltipPos.x, "px"),
|
|
70
|
+
opacity: show ? 1 : 0,
|
|
71
|
+
transitionDelay: show ? "50ms, 0ms, 0ms" : "250ms, 0ms, 0ms",
|
|
72
|
+
// a way to have smooth animation when hovering over the same row
|
|
73
|
+
transitionDuration: prevHovered !== null && prevHovered !== void 0 && prevHovered.r && prevHovered.r === (hoveredSeat === null || hoveredSeat === void 0 ? void 0 : hoveredSeat.r) ? "100ms, 150ms, 150ms" : "100ms, 50ms, 50ms"
|
|
74
|
+
}
|
|
75
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
76
|
+
className: "hover-popup-content"
|
|
77
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
78
|
+
className: "hover-popup-header"
|
|
79
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
80
|
+
className: "hover-popup-row"
|
|
81
|
+
}, /*#__PURE__*/React.createElement("p", {
|
|
82
|
+
className: "hover-popup-header-title"
|
|
83
|
+
}, "ROW"), /*#__PURE__*/React.createElement("div", {
|
|
84
|
+
className: "row-name"
|
|
85
|
+
}, /*#__PURE__*/React.createElement("p", null, rowName))), /*#__PURE__*/React.createElement("div", {
|
|
86
|
+
className: "hover-popup-column"
|
|
87
|
+
}, /*#__PURE__*/React.createElement("p", {
|
|
88
|
+
className: "hover-popup-header-title"
|
|
89
|
+
}, "SEAT"), /*#__PURE__*/React.createElement("div", {
|
|
90
|
+
className: "hover-popup-seats"
|
|
91
|
+
}, seatNames.map((s, i) => {
|
|
92
|
+
if (seatNames.length > 4) {
|
|
93
|
+
if (i === 3) {
|
|
94
|
+
return /*#__PURE__*/React.createElement("p", {
|
|
95
|
+
key: "".concat(s).concat(i),
|
|
96
|
+
className: "seat-name"
|
|
97
|
+
}, "...");
|
|
98
|
+
}
|
|
99
|
+
if (i < 2 || i === seatNames.length - 1) {
|
|
100
|
+
return /*#__PURE__*/React.createElement("p", {
|
|
101
|
+
key: "".concat(s).concat(i),
|
|
102
|
+
className: "seat-name"
|
|
103
|
+
}, s);
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return /*#__PURE__*/React.createElement("p", {
|
|
108
|
+
key: "".concat(s).concat(i),
|
|
109
|
+
className: "seat-name"
|
|
110
|
+
}, s);
|
|
111
|
+
})))), /*#__PURE__*/React.createElement("div", {
|
|
112
|
+
className: "hover-popup-price"
|
|
113
|
+
}, /*#__PURE__*/React.createElement("p", {
|
|
114
|
+
className: "hover-popup-psname"
|
|
115
|
+
}, psName), /*#__PURE__*/React.createElement("div", {
|
|
116
|
+
className: "hover-popup-divider"
|
|
117
|
+
}), /*#__PURE__*/React.createElement("p", {
|
|
118
|
+
className: "hover-popup-pricetext"
|
|
119
|
+
}, priceText))));
|
|
120
|
+
}
|
package/dist/components/Map.js
CHANGED
|
@@ -20,6 +20,7 @@ var _CloseIcon = _interopRequireDefault(require("./icons/CloseIcon"));
|
|
|
20
20
|
var _TicketIcon = _interopRequireDefault(require("./icons/TicketIcon"));
|
|
21
21
|
var _FlexiIcon = _interopRequireDefault(require("./icons/FlexiIcon"));
|
|
22
22
|
var _EditIcon = _interopRequireDefault(require("./icons/EditIcon"));
|
|
23
|
+
var _HoverPopup = _interopRequireDefault(require("./HoverPopup"));
|
|
23
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
24
25
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
25
26
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -29,6 +30,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
29
30
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
30
31
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
31
32
|
function SeatMap(_ref) {
|
|
33
|
+
var _seats$pricing2, _seats$seats2;
|
|
32
34
|
let {
|
|
33
35
|
seats,
|
|
34
36
|
height,
|
|
@@ -55,7 +57,6 @@ function SeatMap(_ref) {
|
|
|
55
57
|
setPricingPopupOpen,
|
|
56
58
|
selectedSeats,
|
|
57
59
|
setSelectedSeats,
|
|
58
|
-
selectQuantityPopupOpen,
|
|
59
60
|
setSelectQuantityPopupOpen,
|
|
60
61
|
desiredSeatQuantity,
|
|
61
62
|
setSeatsToRemove,
|
|
@@ -67,9 +68,19 @@ function SeatMap(_ref) {
|
|
|
67
68
|
const [highlightedSeats, setHighlightedSeats] = (0, _react.useState)([]);
|
|
68
69
|
const [greyedOutSeats, setGreyedOutSeats] = (0, _react.useState)([]);
|
|
69
70
|
const [clickedSeat, setClickedSeat] = (0, _react.useState)(null);
|
|
71
|
+
const [mousePos, setMousePos] = (0, _react.useState)({
|
|
72
|
+
x: 0,
|
|
73
|
+
y: 0
|
|
74
|
+
});
|
|
75
|
+
const [isHoveringOnSeat, setIsHoveringOnSeat] = (0, _react.useState)(false);
|
|
76
|
+
const [hoveredSeat, setHoveredSeat] = (0, _react.useState)(null);
|
|
70
77
|
const drawLayersRef = (0, _react.useRef)(null);
|
|
71
78
|
const drawRef = (0, _react.useRef)(null);
|
|
72
79
|
const popupRef = (0, _react.useRef)(null);
|
|
80
|
+
const prevHovered = (0, _react.useRef)(null);
|
|
81
|
+
(0, _react.useEffect)(() => {
|
|
82
|
+
prevHovered.current = hoveredSeat;
|
|
83
|
+
}, [hoveredSeat]);
|
|
73
84
|
const map = (0, _reactLeaflet.useMap)();
|
|
74
85
|
|
|
75
86
|
// L.drawLocal.draw.toolbar.buttons.rectangle = "Box select";
|
|
@@ -206,7 +217,17 @@ function SeatMap(_ref) {
|
|
|
206
217
|
}
|
|
207
218
|
}, [mode, map]);
|
|
208
219
|
const seatsMap = (0, _react.useMemo)(() => new Map(seats.seats.map(s => [s.sId, s])), [seats.seats]);
|
|
209
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null,
|
|
220
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_HoverPopup.default, {
|
|
221
|
+
hoveredSeat: hoveredSeat,
|
|
222
|
+
highlightedSeats: highlightedSeats && highlightedSeats.length > 0 ? highlightedSeats : null,
|
|
223
|
+
mousePos: mousePos,
|
|
224
|
+
show: (hoveredSeat || (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0) && !ticketPopupOpen && !pricingPopupOpen && !isDragging && isHoveringOnSeat,
|
|
225
|
+
availablePrices: highlightedSeats && highlightedSeats.length > 0 ? highlightedSeats.flatMap(s => {
|
|
226
|
+
var _seats$pricing;
|
|
227
|
+
return ((_seats$pricing = seats.pricing) === null || _seats$pricing === void 0 ? void 0 : _seats$pricing.filter(p => p.psId === s.psId && (!priceSectionIds || priceSectionIds.includes(p.psId)) && (p.q === null || p.q > 0))) || [];
|
|
228
|
+
}) : hoveredSeat ? ((_seats$pricing2 = seats.pricing) === null || _seats$pricing2 === void 0 ? void 0 : _seats$pricing2.filter(p => p.psId === hoveredSeat.psId && (!priceSectionIds || priceSectionIds.includes(p.psId)) && (p.q === null || p.q > 0))) || [] : undefined,
|
|
229
|
+
prevHovered: prevHovered.current
|
|
230
|
+
}), seats.preventOrphanedSeats && /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
210
231
|
position: "topright"
|
|
211
232
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
212
233
|
className: "extra-controls seat-quantity-control"
|
|
@@ -255,7 +276,7 @@ function SeatMap(_ref) {
|
|
|
255
276
|
src: _encodedSvgs.wheelchairIcon,
|
|
256
277
|
width: 15,
|
|
257
278
|
height: 15
|
|
258
|
-
}), /*#__PURE__*/_react.default.createElement("p", null, "wheelchair"))), seats.seats.filter(seat => seat.m).length > 0 ? /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
|
|
279
|
+
}), /*#__PURE__*/_react.default.createElement("p", null, "wheelchair"))), ((_seats$seats2 = seats.seats) === null || _seats$seats2 === void 0 ? void 0 : _seats$seats2.filter(seat => seat.m).length) > 0 ? /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
|
|
259
280
|
className: "legend-item"
|
|
260
281
|
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
261
282
|
src: _encodedSvgs.userIcon,
|
|
@@ -402,10 +423,10 @@ function SeatMap(_ref) {
|
|
|
402
423
|
bounds: [[0, 0], [height * 0.03, width * 0.03]],
|
|
403
424
|
zIndex: 10
|
|
404
425
|
}), seats && seats.seats && seats.seats.map((s, i) => {
|
|
405
|
-
var _chosenSeat$seat, _chosenSeat$seat2;
|
|
426
|
+
var _seats$pricing3, _chosenSeat$seat, _chosenSeat$seat2, _chosenSeat$seat3;
|
|
406
427
|
const isIcon = (!priceSectionIds || priceSectionIds.includes(s.psId)) && (s.s === _utils.statuses.WHEELCHAIR_ACCESS || s.s === _utils.statuses.USER_PENDING && s.m);
|
|
407
428
|
const seatCenter = getSeatCenterLatLng(s, isIcon);
|
|
408
|
-
const seatPrices = seats.pricing.filter(price => (!priceSectionIds || priceSectionIds.includes(price.psId)) && price.psId === s.psId);
|
|
429
|
+
const seatPrices = ((_seats$pricing3 = seats.pricing) === null || _seats$pricing3 === void 0 ? void 0 : _seats$pricing3.filter(price => (!priceSectionIds || priceSectionIds.includes(price.psId)) && price.psId === s.psId)) || [];
|
|
409
430
|
const hasSeatPrices = (seatPrices === null || seatPrices === void 0 ? void 0 : seatPrices.length) > 0;
|
|
410
431
|
const isSingleFlexi = seatPrices.length === 1 && !!seatPrices[0].pMax && !!seatPrices[0].pMin && seatPrices[0].pMax > seatPrices[0].pMin;
|
|
411
432
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -425,11 +446,13 @@ function SeatMap(_ref) {
|
|
|
425
446
|
zIndex: 10
|
|
426
447
|
}) : /*#__PURE__*/_react.default.createElement(_reactLeaflet.Circle, {
|
|
427
448
|
center: [s.r.includes("NORTH") ? getNorthSeatLat(s) : seatCenter.lat, seatCenter.lng],
|
|
428
|
-
pathOptions: (0, _utils.getInitialColor)(s, price, !hasSeatPrices, selectedSeats.some(selectedSeat => selectedSeat.ssId === s.ssId) || highlightedSeats.some(hs => hs.ssId === s.ssId), greyedOutSeats.some(gs => gs.ssId === s.ssId)),
|
|
449
|
+
pathOptions: (0, _utils.getInitialColor)(s, price, s.loading || ticketPopupOpen && (chosenSeat === null || chosenSeat === void 0 || (_chosenSeat$seat3 = chosenSeat.seat) === null || _chosenSeat$seat3 === void 0 ? void 0 : _chosenSeat$seat3.ssId) === s.ssId, !hasSeatPrices, selectedSeats.some(selectedSeat => selectedSeat.ssId === s.ssId) || highlightedSeats.some(hs => hs.ssId === s.ssId), greyedOutSeats.some(gs => gs.ssId === s.ssId)),
|
|
429
450
|
radius: 12000,
|
|
430
451
|
eventHandlers: {
|
|
431
452
|
click: e => {
|
|
432
|
-
if (
|
|
453
|
+
if (mode === _utils.modes.DRAG || mode === _utils.modes.REMOVE || mode === _utils.modes.DRAW || selectedSeats.length > 0) {
|
|
454
|
+
map.closePopup();
|
|
455
|
+
} else if (seats.preventOrphanedSeats && desiredSeatQuantity > 0) {
|
|
433
456
|
map.closePopup();
|
|
434
457
|
if (s.s === _utils.statuses.USER_PENDING) {
|
|
435
458
|
const newSeatsToRemove = (0, _utils.getAdjacentBookedSeats)(s, seatsMap);
|
|
@@ -474,6 +497,8 @@ function SeatMap(_ref) {
|
|
|
474
497
|
setSelectedSeats(prev => [...prev, s]);
|
|
475
498
|
}
|
|
476
499
|
} else {
|
|
500
|
+
setIsHoveringOnSeat(true);
|
|
501
|
+
setHoveredSeat(s);
|
|
477
502
|
if (seats.preventOrphanedSeats && desiredSeatQuantity > 0 && s.s === _utils.statuses.UNSOLD) {
|
|
478
503
|
const seatsToBook = (0, _utils.getValidSeats)(s, seatsMap, desiredSeatQuantity);
|
|
479
504
|
if (seatsToBook.valid) {
|
|
@@ -485,23 +510,38 @@ function SeatMap(_ref) {
|
|
|
485
510
|
}
|
|
486
511
|
},
|
|
487
512
|
mouseout: () => {
|
|
488
|
-
if (highlightedSeats.length > 0) {
|
|
489
|
-
setHighlightedSeats([]);
|
|
490
|
-
}
|
|
491
513
|
if (greyedOutSeats.length > 0) {
|
|
492
514
|
setGreyedOutSeats([]);
|
|
493
515
|
}
|
|
494
516
|
if (clickedSeat) {
|
|
495
517
|
setClickedSeat(null);
|
|
496
518
|
}
|
|
519
|
+
if (hoveredSeat || highlightedSeats) {
|
|
520
|
+
setTimeout(() => {
|
|
521
|
+
if (hoveredSeat) {
|
|
522
|
+
setHoveredSeat(prev => prev && prev === hoveredSeat ? null : prev);
|
|
523
|
+
}
|
|
524
|
+
if (highlightedSeats) {
|
|
525
|
+
setHighlightedSeats(prev => prev && prev === highlightedSeats ? [] : prev);
|
|
526
|
+
}
|
|
527
|
+
}, 400);
|
|
528
|
+
}
|
|
529
|
+
if (isHoveringOnSeat) {
|
|
530
|
+
setIsHoveringOnSeat(false);
|
|
531
|
+
}
|
|
532
|
+
},
|
|
533
|
+
mousemove: e => {
|
|
534
|
+
setMousePos({
|
|
535
|
+
x: e.containerPoint.x,
|
|
536
|
+
y: e.containerPoint.y
|
|
537
|
+
});
|
|
497
538
|
}
|
|
498
539
|
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
className: "seatname-tooltip",
|
|
540
|
+
}, (0, _utils.isTouchScreen)() && /*#__PURE__*/_react.default.createElement(_reactLeaflet.Tooltip, {
|
|
541
|
+
className: "mobile-tooltip",
|
|
502
542
|
direction: "top",
|
|
503
|
-
offset: [0, height * 0.03 + -
|
|
504
|
-
},
|
|
543
|
+
offset: [0, height * 0.03 + -60]
|
|
544
|
+
}, "Tap again to select these seats"), s.s === _utils.statuses.UNSOLD && hasSeatPrices ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.Popup, {
|
|
505
545
|
className: "ticket-popup popup-".concat(s.sId)
|
|
506
546
|
}, isSingleFlexi ? /*#__PURE__*/_react.default.createElement("div", {
|
|
507
547
|
className: "single-flexi"
|
|
@@ -19,6 +19,7 @@ function PriceButton(_ref) {
|
|
|
19
19
|
const [flexiOpen, setFlexiOpen] = (0, _react.useState)(false);
|
|
20
20
|
const flexiRef = (0, _react.useRef)(null);
|
|
21
21
|
const focusRef = (0, _react.useRef)(null);
|
|
22
|
+
const isAvailable = price.q === null || price.q > 0;
|
|
22
23
|
const isFlexi = !!price.pMax && !!price.pMin && price.pMax > price.pMin;
|
|
23
24
|
(0, _react.useEffect)(() => {
|
|
24
25
|
if (flexiOpen) {
|
|
@@ -38,7 +39,7 @@ function PriceButton(_ref) {
|
|
|
38
39
|
addToCart(price.p);
|
|
39
40
|
}
|
|
40
41
|
},
|
|
41
|
-
disabled:
|
|
42
|
+
disabled: !isAvailable
|
|
42
43
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
43
44
|
className: "price"
|
|
44
45
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
@@ -47,7 +48,7 @@ function PriceButton(_ref) {
|
|
|
47
48
|
className: "flexi-badge"
|
|
48
49
|
}, "FLEXi")), /*#__PURE__*/_react.default.createElement("span", {
|
|
49
50
|
className: "amount"
|
|
50
|
-
}, isFlexi ? "".concat(_utils.NZDollar.format(price.pMin), " - ").concat(_utils.NZDollar.format(price.pMax)) : _utils.NZDollar.format(price.p))),
|
|
51
|
+
}, isFlexi ? "".concat(_utils.NZDollar.format(price.pMin), " - ").concat(_utils.NZDollar.format(price.pMax)) : _utils.NZDollar.format(price.p))), !isAvailable && /*#__PURE__*/_react.default.createElement("span", {
|
|
51
52
|
className: "unavailable"
|
|
52
53
|
}, "Allocation exhausted")), isFlexi && /*#__PURE__*/_react.default.createElement(_Flexi.default, {
|
|
53
54
|
price: price,
|