iticket-seatingplan-dev 1.8.8 → 1.8.10
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/Controls.js +7 -7
- package/dist/components/Map.js +28 -24
- package/dist/components/SeatingPlan.js +29 -38
- package/dist/components/styles/index.css +2 -3
- package/dist/utils/constants.js +12 -0
- package/dist/utils/helpers.js +14 -34
- package/package.json +1 -1
- package/dist/components/Control.js +0 -75
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = Controls;
|
|
7
|
-
var
|
|
7
|
+
var _reactLeafletCustomControl = _interopRequireDefault(require("react-leaflet-custom-control"));
|
|
8
8
|
var _reactLeafletDraw = require("react-leaflet-draw");
|
|
9
9
|
var _reactLeaflet = require("react-leaflet");
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -35,7 +35,7 @@ function Controls(_ref) {
|
|
|
35
35
|
} = _ref;
|
|
36
36
|
const [isLegendOpen, setIsLegendOpen] = (0, _react.useState)(true);
|
|
37
37
|
const map = (0, _reactLeaflet.useMap)();
|
|
38
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, preventOrphanedSeats && /*#__PURE__*/_react.default.createElement(
|
|
38
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, preventOrphanedSeats && /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
39
39
|
position: "topright"
|
|
40
40
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
41
41
|
className: "extra-controls seat-quantity-control"
|
|
@@ -49,7 +49,7 @@ function Controls(_ref) {
|
|
|
49
49
|
height: "16px",
|
|
50
50
|
width: "16px",
|
|
51
51
|
strokeWidth: "2"
|
|
52
|
-
})))), /*#__PURE__*/_react.default.createElement(
|
|
52
|
+
})))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
53
53
|
position: "bottomright"
|
|
54
54
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
55
55
|
className: "legendBox"
|
|
@@ -90,7 +90,7 @@ function Controls(_ref) {
|
|
|
90
90
|
src: _encodedSvgs.userIcon,
|
|
91
91
|
width: 15,
|
|
92
92
|
height: 15
|
|
93
|
-
}), /*#__PURE__*/_react.default.createElement("p", null, "membership seats"))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)))), /*#__PURE__*/_react.default.createElement(
|
|
93
|
+
}), /*#__PURE__*/_react.default.createElement("p", null, "membership seats"))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
94
94
|
position: "topleft"
|
|
95
95
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
96
96
|
className: "extra-controls"
|
|
@@ -120,7 +120,7 @@ function Controls(_ref) {
|
|
|
120
120
|
style: {
|
|
121
121
|
height: "17px"
|
|
122
122
|
}
|
|
123
|
-
})))), /*#__PURE__*/_react.default.createElement(
|
|
123
|
+
})))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
124
124
|
position: "topleft"
|
|
125
125
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
126
126
|
className: "extra-controls full-screen-control"
|
|
@@ -135,7 +135,7 @@ function Controls(_ref) {
|
|
|
135
135
|
style: {
|
|
136
136
|
height: "24px"
|
|
137
137
|
}
|
|
138
|
-
})))), canMultiSelect && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(
|
|
138
|
+
})))), canMultiSelect && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
139
139
|
position: "bottomleft"
|
|
140
140
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
141
141
|
className: "extra-controls multi-select-control"
|
|
@@ -215,7 +215,7 @@ function Controls(_ref) {
|
|
|
215
215
|
onMounted: drawInstance => {
|
|
216
216
|
drawRef.current = drawInstance;
|
|
217
217
|
}
|
|
218
|
-
}))), /*#__PURE__*/_react.default.createElement(
|
|
218
|
+
}))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
|
|
219
219
|
position: "topright"
|
|
220
220
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
221
221
|
title: "Close full screen",
|
package/dist/components/Map.js
CHANGED
|
@@ -19,6 +19,7 @@ var _TicketIcon = _interopRequireDefault(require("./icons/TicketIcon"));
|
|
|
19
19
|
var _FlexiIcon = _interopRequireDefault(require("./icons/FlexiIcon"));
|
|
20
20
|
var _HoverPopup = _interopRequireDefault(require("./HoverPopup"));
|
|
21
21
|
var _Controls = _interopRequireDefault(require("./Controls"));
|
|
22
|
+
var _constants = require("../utils/constants");
|
|
22
23
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
24
|
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); }
|
|
24
25
|
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; }
|
|
@@ -79,19 +80,14 @@ function SeatMap(_ref) {
|
|
|
79
80
|
const resetTooltipTimeoutRef = (0, _react.useRef)(null);
|
|
80
81
|
const hideTooltipTimeoutRef = (0, _react.useRef)(null);
|
|
81
82
|
const map = (0, _reactLeaflet.useMap)();
|
|
83
|
+
const imgBounds = [[0, 0], [-_constants.SCALE, width / height * _constants.SCALE]];
|
|
82
84
|
const seatsMap = (0, _react.useMemo)(() => new Map(seats.seats.map(s => {
|
|
83
|
-
const
|
|
84
|
-
const latlng = (0, _utils.getSeatCenterLatLng)(s, isIcon, height);
|
|
85
|
-
const lat = s.r.includes("NORTH") ? (0, _utils.getNorthSeatLat)(s, height) : latlng.lat;
|
|
86
|
-
const seatCenter = {
|
|
87
|
-
lat,
|
|
88
|
-
lng: latlng.lng
|
|
89
|
-
};
|
|
85
|
+
const latlng = (0, _utils.getSeatCenterLatLng)(s, height, width, imgBounds);
|
|
90
86
|
return [s.sId, _objectSpread(_objectSpread({}, s), {}, {
|
|
91
|
-
center:
|
|
87
|
+
center: latlng
|
|
92
88
|
})];
|
|
93
89
|
})), [seats.seats, height, priceSectionIds]);
|
|
94
|
-
const isOrphanMode = (seats === null || seats === void 0 ? void 0 : seats.preventOrphanedSeats) && desiredSeatQuantity > 0
|
|
90
|
+
const isOrphanMode = (seats === null || seats === void 0 ? void 0 : seats.preventOrphanedSeats) && desiredSeatQuantity > 0;
|
|
95
91
|
const isTouchScreen = (0, _utils.getIsTouchScreen)();
|
|
96
92
|
|
|
97
93
|
// L.drawLocal.draw.toolbar.buttons.rectangle = "Box select";
|
|
@@ -123,7 +119,7 @@ function SeatMap(_ref) {
|
|
|
123
119
|
} else if (mode === _utils.modes.REMOVE) {
|
|
124
120
|
const seatsToRemove = [];
|
|
125
121
|
selectedSeats.forEach(seat => {
|
|
126
|
-
if (!seatsToRemove.
|
|
122
|
+
if (!seatsToRemove.find(s => s.ssId === seat.ssId) && seat.s === _utils.statuses.USER_PENDING) {
|
|
127
123
|
seatsToRemove.push(seat);
|
|
128
124
|
}
|
|
129
125
|
});
|
|
@@ -227,7 +223,7 @@ function SeatMap(_ref) {
|
|
|
227
223
|
lng: seat.x
|
|
228
224
|
};
|
|
229
225
|
const latlng = [seatCenter.lat, seatCenter.lng];
|
|
230
|
-
if (boxBounds.contains(latlng) && !seatsToBook.
|
|
226
|
+
if (boxBounds.contains(latlng) && !seatsToBook.find(s => s.ssId === seat.ssId) && seat.s === _utils.statuses.UNSOLD) {
|
|
231
227
|
seatsToBook.push(seat);
|
|
232
228
|
}
|
|
233
229
|
});
|
|
@@ -288,8 +284,8 @@ function SeatMap(_ref) {
|
|
|
288
284
|
}
|
|
289
285
|
if (isTouchScreen && (clickedSeat === null || clickedSeat === void 0 ? void 0 : clickedSeat.ssId) !== s.ssId) {
|
|
290
286
|
setClickedSeat(_objectSpread(_objectSpread({}, s), {}, {
|
|
291
|
-
offset:
|
|
292
|
-
xy: (
|
|
287
|
+
offset: _constants.RADIUS,
|
|
288
|
+
xy: map.latLngToContainerPoint(e.target.getLatLng())
|
|
293
289
|
}));
|
|
294
290
|
handleHighlightSeats(e, s);
|
|
295
291
|
setIsHoveringOnSeat(true);
|
|
@@ -328,7 +324,7 @@ function SeatMap(_ref) {
|
|
|
328
324
|
}
|
|
329
325
|
};
|
|
330
326
|
const onMouseDown = (0, _react.useCallback)((s, hasSeatPrices) => {
|
|
331
|
-
if ((mode === _utils.modes.DRAG || mode === _utils.modes.REMOVE) && canMultiSelect && hasSeatPrices && !selectedSeats.
|
|
327
|
+
if ((mode === _utils.modes.DRAG || mode === _utils.modes.REMOVE) && canMultiSelect && hasSeatPrices && !selectedSeats.find(seat => seat.ssId === s.ssId) && s.s === (mode === _utils.modes.DRAG ? _utils.statuses.UNSOLD : _utils.statuses.USER_PENDING)) {
|
|
332
328
|
setSelectedSeats(prev => [...prev, s]);
|
|
333
329
|
}
|
|
334
330
|
}, [mode, canMultiSelect, selectedSeats, setSelectedSeats]);
|
|
@@ -339,7 +335,7 @@ function SeatMap(_ref) {
|
|
|
339
335
|
if (hideTooltipTimeoutRef.current) {
|
|
340
336
|
clearTimeout(hideTooltipTimeoutRef.current);
|
|
341
337
|
}
|
|
342
|
-
if ((mode === _utils.modes.DRAG || mode === _utils.modes.REMOVE) && isDragging && canMultiSelect && hasSeatPrices && !selectedSeats.
|
|
338
|
+
if ((mode === _utils.modes.DRAG || mode === _utils.modes.REMOVE) && isDragging && canMultiSelect && hasSeatPrices && !selectedSeats.find(seat => seat.ssId === s.ssId) && s.s === (mode === _utils.modes.DRAG ? _utils.statuses.UNSOLD : _utils.statuses.USER_PENDING)) {
|
|
343
339
|
setSelectedSeats(prev => [...prev, s]);
|
|
344
340
|
return;
|
|
345
341
|
}
|
|
@@ -371,7 +367,7 @@ function SeatMap(_ref) {
|
|
|
371
367
|
infoVisible: false
|
|
372
368
|
}));
|
|
373
369
|
}
|
|
374
|
-
if ((highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0
|
|
370
|
+
if ((highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0) {
|
|
375
371
|
setHighlightedSeats([]);
|
|
376
372
|
}
|
|
377
373
|
}, 400);
|
|
@@ -422,17 +418,25 @@ function SeatMap(_ref) {
|
|
|
422
418
|
hasBookedSeats: (bookedSeats === null || bookedSeats === void 0 ? void 0 : bookedSeats.length) > 0
|
|
423
419
|
}), (seats === null || seats === void 0 ? void 0 : seats.background) && /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
|
|
424
420
|
url: seats === null || seats === void 0 ? void 0 : seats.background,
|
|
425
|
-
bounds:
|
|
426
|
-
zIndex: 10
|
|
421
|
+
bounds: imgBounds,
|
|
422
|
+
zIndex: 10,
|
|
423
|
+
eventHandlers: {
|
|
424
|
+
error: i => {
|
|
425
|
+
i.target.remove();
|
|
426
|
+
}
|
|
427
|
+
}
|
|
427
428
|
}), seats && seats.seats && seats.seats.map((s, i) => {
|
|
428
429
|
var _seatsMap$get2, _seats$pricing3, _chosenSeat$seat, _chosenSeat$seat2, _chosenSeat$seat3;
|
|
429
430
|
const seatCenter = ((_seatsMap$get2 = seatsMap.get(s.sId)) === null || _seatsMap$get2 === void 0 ? void 0 : _seatsMap$get2.center) || {
|
|
430
431
|
lat: s.y,
|
|
431
|
-
lng: s.x
|
|
432
|
+
lng: s.x,
|
|
433
|
+
radius: 110
|
|
432
434
|
};
|
|
433
435
|
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)) || [];
|
|
434
436
|
const hasSeatPrices = (seatPrices === null || seatPrices === void 0 ? void 0 : seatPrices.length) > 0;
|
|
435
437
|
const isSingleFlexi = seatPrices.length === 1 && !!seatPrices[0].pMax && !!seatPrices[0].pMin && seatPrices[0].pMax > seatPrices[0].pMin;
|
|
438
|
+
const radiusInDeg = seatCenter.radius / _constants.ONE_DEG_LAT_IN_METERS;
|
|
439
|
+
const iconBounds = [[seatCenter.lat - radiusInDeg, seatCenter.lng - radiusInDeg], [seatCenter.lat + radiusInDeg, seatCenter.lng + radiusInDeg]];
|
|
436
440
|
const eventHandlers = {
|
|
437
441
|
click: e => {
|
|
438
442
|
onClickSeat(e, s, isSingleFlexi, hasSeatPrices);
|
|
@@ -460,21 +464,21 @@ function SeatMap(_ref) {
|
|
|
460
464
|
key: i
|
|
461
465
|
}, (s.loading || ticketPopupOpen && (chosenSeat === null || chosenSeat === void 0 || (_chosenSeat$seat = chosenSeat.seat) === null || _chosenSeat$seat === void 0 ? void 0 : _chosenSeat$seat.ssId) === s.ssId) && /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
|
|
462
466
|
url: "https://iticketseatingplan.blob.core.windows.net/embed/static/media/rippleload.08e6a08dd832819226ef.gif",
|
|
463
|
-
bounds:
|
|
467
|
+
bounds: iconBounds,
|
|
464
468
|
opacity: s.loading || ticketPopupOpen && (chosenSeat === null || chosenSeat === void 0 || (_chosenSeat$seat2 = chosenSeat.seat) === null || _chosenSeat$seat2 === void 0 ? void 0 : _chosenSeat$seat2.ssId) === s.ssId ? 100 : 0,
|
|
465
469
|
zIndex: 10
|
|
466
470
|
}), !priceSectionIds || priceSectionIds.includes(s.psId) ? s.s === _utils.statuses.WHEELCHAIR_ACCESS ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
|
|
467
471
|
url: _encodedSvgs.wheelchairIcon,
|
|
468
|
-
bounds:
|
|
472
|
+
bounds: iconBounds,
|
|
469
473
|
zIndex: 10
|
|
470
474
|
}) : s.s === _utils.statuses.USER_PENDING && s.m ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
|
|
471
475
|
url: _encodedSvgs.userIcon,
|
|
472
|
-
bounds:
|
|
476
|
+
bounds: iconBounds,
|
|
473
477
|
zIndex: 10
|
|
474
478
|
}) : /*#__PURE__*/_react.default.createElement(_reactLeaflet.Circle, {
|
|
475
479
|
center: [seatCenter.lat, seatCenter.lng],
|
|
476
|
-
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)) &&
|
|
477
|
-
radius:
|
|
480
|
+
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)) && isHoveringOnSeat, greyedOutSeats.some(gs => gs.ssId === s.ssId)),
|
|
481
|
+
radius: seatCenter.radius,
|
|
478
482
|
eventHandlers: eventHandlers
|
|
479
483
|
}, s.s === _utils.statuses.UNSOLD && hasSeatPrices ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.Popup, {
|
|
480
484
|
className: "ticket-popup popup-".concat(s.sId)
|
|
@@ -9,6 +9,7 @@ require("./styles/pos.css");
|
|
|
9
9
|
require("./styles/flexi.css");
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _Map = _interopRequireDefault(require("./Map"));
|
|
12
|
+
var L = _interopRequireWildcard(require("leaflet"));
|
|
12
13
|
var _reactLeaflet = require("react-leaflet");
|
|
13
14
|
var _utils = require("../utils");
|
|
14
15
|
var _reactDom = require("react-dom");
|
|
@@ -16,6 +17,7 @@ var _PricingPopup = _interopRequireDefault(require("./PricingPopup"));
|
|
|
16
17
|
var _SelectQuantityPopup = _interopRequireDefault(require("./SelectQuantityPopup"));
|
|
17
18
|
var _RemoveMultipleSeatsPopup = _interopRequireDefault(require("./RemoveMultipleSeatsPopup"));
|
|
18
19
|
var _InvalidSeatsPopup = _interopRequireDefault(require("./InvalidSeatsPopup"));
|
|
20
|
+
var _constants = require("../utils/constants");
|
|
19
21
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
22
|
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); }
|
|
21
23
|
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; }
|
|
@@ -24,8 +26,6 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
24
26
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
25
27
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
26
28
|
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); }
|
|
27
|
-
const SEATINGPLAN_MAX_RETRIES = 5;
|
|
28
|
-
const BOOKING_MAX_RETRIES = 2;
|
|
29
29
|
const SeatingPlan = _ref => {
|
|
30
30
|
var _document, _document2, _document3;
|
|
31
31
|
let {
|
|
@@ -44,15 +44,7 @@ const SeatingPlan = _ref => {
|
|
|
44
44
|
connectedShowings,
|
|
45
45
|
areaName,
|
|
46
46
|
promoCode,
|
|
47
|
-
bookingMode = _utils.bookingModes.SHOPSITE
|
|
48
|
-
theme = {
|
|
49
|
-
accent: "#6366f1",
|
|
50
|
-
accentDark: "#3730a3",
|
|
51
|
-
accentLight: "#e0e7ff",
|
|
52
|
-
flexiAccent: "#e32664",
|
|
53
|
-
flexiAccentDark: "#ffd3e2",
|
|
54
|
-
flexiAccentLight: "#be003f"
|
|
55
|
-
}
|
|
47
|
+
bookingMode = _utils.bookingModes.SHOPSITE
|
|
56
48
|
} = _ref;
|
|
57
49
|
const [initialiseMessage, setInitialiseMessage] = (0, _react.useState)("Initialising seating plan...");
|
|
58
50
|
const [isReloading, setIsReloading] = (0, _react.useState)(false);
|
|
@@ -155,7 +147,7 @@ const SeatingPlan = _ref => {
|
|
|
155
147
|
}
|
|
156
148
|
});
|
|
157
149
|
if ((response === null || response === void 0 ? void 0 : response.status) === 429) {
|
|
158
|
-
if (retryCount < BOOKING_MAX_RETRIES) {
|
|
150
|
+
if (retryCount < _constants.BOOKING_MAX_RETRIES) {
|
|
159
151
|
setRetrying(prev => [...prev, s.ssId]);
|
|
160
152
|
const delay = (0, _utils.getRetryDelay)(response);
|
|
161
153
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
@@ -284,7 +276,7 @@ const SeatingPlan = _ref => {
|
|
|
284
276
|
}
|
|
285
277
|
});
|
|
286
278
|
if (res.status === 429) {
|
|
287
|
-
if (retryCount < BOOKING_MAX_RETRIES) {
|
|
279
|
+
if (retryCount < _constants.BOOKING_MAX_RETRIES) {
|
|
288
280
|
setRetrying(prev => [...prev, seatToBook.seat.ssId]);
|
|
289
281
|
const delay = (0, _utils.getRetryDelay)(res);
|
|
290
282
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
@@ -463,7 +455,7 @@ const SeatingPlan = _ref => {
|
|
|
463
455
|
}
|
|
464
456
|
});
|
|
465
457
|
if (response.status === 429) {
|
|
466
|
-
if (retryCount >= SEATINGPLAN_MAX_RETRIES) {
|
|
458
|
+
if (retryCount >= _constants.SEATINGPLAN_MAX_RETRIES) {
|
|
467
459
|
throw new Error("We're experiencing high demand. Please try again later.");
|
|
468
460
|
}
|
|
469
461
|
const delay = (0, _utils.getRetryDelay)(response);
|
|
@@ -492,27 +484,35 @@ const SeatingPlan = _ref => {
|
|
|
492
484
|
paName: s.paName
|
|
493
485
|
})));
|
|
494
486
|
const img = new Image();
|
|
495
|
-
const setupSeats = (
|
|
496
|
-
const
|
|
497
|
-
const
|
|
487
|
+
const setupSeats = (h, w) => {
|
|
488
|
+
const lat1 = 0;
|
|
489
|
+
const lng1 = 0;
|
|
490
|
+
const lat2 = lat1 - _constants.SCALE;
|
|
491
|
+
const lng2 = lng1 + w / h * _constants.SCALE; // maintain aspect ratio
|
|
492
|
+
const southwest = [lat1, lng1];
|
|
493
|
+
const northeast = [lat2, lng2];
|
|
498
494
|
setBounds([southwest, northeast]);
|
|
499
|
-
setPosition([
|
|
500
|
-
setHeight(
|
|
501
|
-
setWidth(
|
|
495
|
+
setPosition([h, w]);
|
|
496
|
+
setHeight(h);
|
|
497
|
+
setWidth(w);
|
|
502
498
|
setSeats(data);
|
|
503
499
|
if (data.preventOrphanedSeats && !isReload) {
|
|
504
500
|
setSelectQuantityPopupOpen(true);
|
|
505
501
|
}
|
|
506
502
|
};
|
|
503
|
+
const fallbackHeight = 800;
|
|
504
|
+
const fallbackWidth = 800;
|
|
507
505
|
if (data.background) {
|
|
508
506
|
img.src = data.background;
|
|
507
|
+
img.onerror = () => {
|
|
508
|
+
setupSeats(fallbackHeight, fallbackWidth);
|
|
509
|
+
img.src = "";
|
|
510
|
+
};
|
|
509
511
|
img.onload = () => {
|
|
510
512
|
setupSeats(img.height, img.width);
|
|
511
513
|
};
|
|
512
514
|
} else {
|
|
513
|
-
|
|
514
|
-
const estWidth = 800;
|
|
515
|
-
setupSeats(estHeight, estWidth);
|
|
515
|
+
setupSeats(fallbackHeight, fallbackWidth);
|
|
516
516
|
}
|
|
517
517
|
setIsReloading(false);
|
|
518
518
|
} catch (error) {
|
|
@@ -540,28 +540,19 @@ const SeatingPlan = _ref => {
|
|
|
540
540
|
// in full screen mode, render the map in the body, otherwise render in the seating-plan-root div
|
|
541
541
|
const mapContainer = mounted && (isFullScreen ? (_document = document) === null || _document === void 0 ? void 0 : _document.body : (_document2 = document) === null || _document2 === void 0 ? void 0 : _document2.getElementById("seating-plan-root"));
|
|
542
542
|
const backdropContainer = mounted && ((_document3 = document) === null || _document3 === void 0 ? void 0 : _document3.body);
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
"--accent-dark": theme.accentDark,
|
|
546
|
-
"--accent-light": theme.accentLight,
|
|
547
|
-
"--flexi-accent": theme.flexiAccent,
|
|
548
|
-
"--flexi-accent-light": theme.flexiAccentLight,
|
|
549
|
-
"--flexi-accent-dark": theme.flexiAccentDark
|
|
550
|
-
};
|
|
543
|
+
|
|
544
|
+
// return seating plan
|
|
551
545
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
552
546
|
className: "seating-plan-root",
|
|
553
|
-
id: "seating-plan-root"
|
|
554
|
-
style: themeStyles
|
|
547
|
+
id: "seating-plan-root"
|
|
555
548
|
}, error ? /*#__PURE__*/_react.default.createElement("div", {
|
|
556
549
|
className: "loading"
|
|
557
550
|
}, /*#__PURE__*/_react.default.createElement("h1", null, "OOPS!"), /*#__PURE__*/_react.default.createElement("div", null, error.response.data.message)) : position && area === areaId ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, backdropContainer && /*#__PURE__*/(0, _reactDom.createPortal)(/*#__PURE__*/_react.default.createElement("div", {
|
|
558
551
|
className: "seating-plan-backdrop ".concat(isFullScreen ? "full-screen" : ""),
|
|
559
|
-
onClick: () => setIsFullScreen(false)
|
|
560
|
-
style: themeStyles
|
|
552
|
+
onClick: () => setIsFullScreen(false)
|
|
561
553
|
}), backdropContainer), mapContainer && /*#__PURE__*/(0, _reactDom.createPortal)(/*#__PURE__*/_react.default.createElement("div", {
|
|
562
554
|
className: "seating-plan-container ".concat(isFullScreen ? "full-screen" : ""),
|
|
563
|
-
"data-mode": mode
|
|
564
|
-
style: themeStyles
|
|
555
|
+
"data-mode": mode
|
|
565
556
|
}, pricingPopupOpen && seats && seats.pricing && (canMultiSelect || seats.preventOrphanedSeats) ? /*#__PURE__*/_react.default.createElement(_PricingPopup.default, {
|
|
566
557
|
onClose: () => {
|
|
567
558
|
setPricingPopupOpen(false);
|
|
@@ -591,7 +582,7 @@ const SeatingPlan = _ref => {
|
|
|
591
582
|
}) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement(_reactLeaflet.MapContainer, {
|
|
592
583
|
zoomSnap: 0,
|
|
593
584
|
zoomDelta: 1,
|
|
594
|
-
center:
|
|
585
|
+
center: bounds && new L.LatLngBounds(bounds).getCenter(),
|
|
595
586
|
zoom: undefined,
|
|
596
587
|
zoomControl: true,
|
|
597
588
|
scrollWheelZoom: true,
|
|
@@ -27,12 +27,12 @@ button {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.seating-plan-container {
|
|
30
|
-
|
|
30
|
+
--accent: rgb(99 102 241);
|
|
31
31
|
--accent-dark: rgb(55 48 163);
|
|
32
32
|
--accent-light: rgb(224 231 255);
|
|
33
33
|
--flexi-accent: rgb(227 38 100);
|
|
34
34
|
--flexi-accent-light: rgb(255 211 226);
|
|
35
|
-
--flexi-accent-dark: rgb(190 0 63);
|
|
35
|
+
--flexi-accent-dark: rgb(190 0 63);
|
|
36
36
|
font-family: inherit;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -42,7 +42,6 @@ button {
|
|
|
42
42
|
border-radius: 3px;
|
|
43
43
|
text-align: left;
|
|
44
44
|
backdrop-filter: blur(2px);
|
|
45
|
-
color: #333;
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
.legend-header {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SEAT_WIDTH = exports.SEATINGPLAN_MAX_RETRIES = exports.SCALE = exports.RADIUS = exports.ONE_DEG_LAT_IN_METERS = exports.BOOKING_MAX_RETRIES = void 0;
|
|
7
|
+
const SEAT_WIDTH = exports.SEAT_WIDTH = 20;
|
|
8
|
+
const RADIUS = exports.RADIUS = 8;
|
|
9
|
+
const SEATINGPLAN_MAX_RETRIES = exports.SEATINGPLAN_MAX_RETRIES = 5;
|
|
10
|
+
const BOOKING_MAX_RETRIES = exports.BOOKING_MAX_RETRIES = 2;
|
|
11
|
+
const SCALE = exports.SCALE = 0.1;
|
|
12
|
+
const ONE_DEG_LAT_IN_METERS = exports.ONE_DEG_LAT_IN_METERS = 111320;
|
package/dist/utils/helpers.js
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.groupSeatsByPriceSection = exports.getValidSeats = exports.
|
|
6
|
+
exports.groupSeatsByPriceSection = exports.getValidSeats = exports.getSeatCenterLatLng = exports.getRowSection = exports.getRetryDelay = exports.getIsTouchScreen = exports.getInitialColor = exports.getAdjacentBookedSeats = exports.createsOrphan = exports.canSelectSingleSeatGivenOrphanRules = exports.NZDollar = void 0;
|
|
7
7
|
var _enums = require("./enums");
|
|
8
|
+
var _constants = require("./constants");
|
|
8
9
|
const getIsTouchScreen = () => {
|
|
9
10
|
let hasTouchScreen = false;
|
|
10
11
|
if (typeof window !== "undefined") {
|
|
@@ -43,17 +44,6 @@ const getInitialColor = (s, price, loading, disabled, selected, greyedOut) => {
|
|
|
43
44
|
};
|
|
44
45
|
};
|
|
45
46
|
exports.getInitialColor = getInitialColor;
|
|
46
|
-
const calculateCenterOfMap = (height, seats, priceSectionIds) => {
|
|
47
|
-
const filteredSeats = (seats === null || seats === void 0 ? void 0 : seats.filter(price => !priceSectionIds || priceSectionIds.includes(price.psId))) || [];
|
|
48
|
-
const avgY = filteredSeats.reduce((acc, val) => {
|
|
49
|
-
return acc + val.y / filteredSeats.length;
|
|
50
|
-
}, 0);
|
|
51
|
-
const avgX = filteredSeats.reduce((acc, val) => {
|
|
52
|
-
return acc + val.x / filteredSeats.length;
|
|
53
|
-
}, 0);
|
|
54
|
-
return [height * 0.05 - avgY / (height > 800 ? height > 999 ? 3.5 : 3.3 : 3.35) - (height > 800 ? height > 999 ? height * 0.0201 : height * 0.0198 : height > 587 ? height * 0.0201 : height > 399 ? height * 0.02035 : height * 0.0207), avgX * 0.3 + 0.15];
|
|
55
|
-
};
|
|
56
|
-
exports.calculateCenterOfMap = calculateCenterOfMap;
|
|
57
47
|
const NZDollar = exports.NZDollar = new Intl.NumberFormat("en-NZ", {
|
|
58
48
|
style: "currency",
|
|
59
49
|
currency: "NZD"
|
|
@@ -283,29 +273,19 @@ const groupSeatsByPriceSection = (seats, pricing, priceSectionIds) => {
|
|
|
283
273
|
return groupedSeats;
|
|
284
274
|
};
|
|
285
275
|
exports.groupSeatsByPriceSection = groupSeatsByPriceSection;
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
const
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
exports.getSeatXy = getSeatXy;
|
|
296
|
-
const getSeatRadius = (e, map) => {
|
|
297
|
-
const latlng = e.target.getLatLng();
|
|
298
|
-
const radius = e.target.getRadius();
|
|
299
|
-
const point1 = map.latLngToLayerPoint(latlng);
|
|
300
|
-
const point2 = map.latLngToLayerPoint([latlng.lat, latlng.lng + radius / 111320]); // Approx. conversion
|
|
301
|
-
const pixelRadius = Math.abs(point2.x - point1.x);
|
|
302
|
-
return pixelRadius;
|
|
303
|
-
};
|
|
304
|
-
exports.getSeatRadius = getSeatRadius;
|
|
305
|
-
const getSeatCenterLatLng = (seat, isIcon, height) => {
|
|
276
|
+
const getSeatCenterLatLng = (seat, imgHeight, imgWidth, imgBounds) => {
|
|
277
|
+
const x = seat.x * _constants.SEAT_WIDTH + _constants.SEAT_WIDTH / 2;
|
|
278
|
+
const y = seat.y * _constants.SEAT_WIDTH + _constants.SEAT_WIDTH / 2;
|
|
279
|
+
const [lat1, lng1] = imgBounds[0];
|
|
280
|
+
const [lat2, lng2] = imgBounds[1];
|
|
281
|
+
const lat = lat1 + (lat2 - lat1) * (y / imgHeight);
|
|
282
|
+
const lng = lng1 + (lng2 - lng1) * (x / imgWidth);
|
|
283
|
+
const radius = Math.abs(lat1 + (lat2 - lat1) * (_constants.RADIUS / imgHeight) * _constants.ONE_DEG_LAT_IN_METERS); // Circle requires radius in meters
|
|
284
|
+
|
|
306
285
|
return {
|
|
307
|
-
lat
|
|
308
|
-
lng
|
|
286
|
+
lat,
|
|
287
|
+
lng,
|
|
288
|
+
radius
|
|
309
289
|
};
|
|
310
290
|
};
|
|
311
291
|
exports.getSeatCenterLatLng = getSeatCenterLatLng;
|
package/package.json
CHANGED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _leaflet = _interopRequireDefault(require("leaflet"));
|
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
var _reactLeaflet = require("react-leaflet");
|
|
10
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
12
|
-
const POSITION_CLASSES = {
|
|
13
|
-
bottomleft: "leaflet-bottom leaflet-left",
|
|
14
|
-
bottomright: "leaflet-bottom leaflet-right",
|
|
15
|
-
topleft: "leaflet-top leaflet-left",
|
|
16
|
-
topright: "leaflet-top leaflet-right"
|
|
17
|
-
};
|
|
18
|
-
const Control = props => {
|
|
19
|
-
var _props$container;
|
|
20
|
-
const [portalRoot, setPortalRoot] = _react.default.useState(document.createElement("div"));
|
|
21
|
-
const positionClass = props.position && POSITION_CLASSES[props.position] || POSITION_CLASSES.topright;
|
|
22
|
-
const controlContainerRef = /*#__PURE__*/_react.default.createRef();
|
|
23
|
-
const map = (0, _reactLeaflet.useMap)();
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Whenever the control container ref is created,
|
|
27
|
-
* Ensure the click / scroll propagation is removed
|
|
28
|
-
* This way click/scroll events do not bubble down to the map
|
|
29
|
-
*/
|
|
30
|
-
_react.default.useEffect(() => {
|
|
31
|
-
if (controlContainerRef.current !== null) {
|
|
32
|
-
_leaflet.default.DomEvent.disableClickPropagation(controlContainerRef.current);
|
|
33
|
-
_leaflet.default.DomEvent.disableScrollPropagation(controlContainerRef.current);
|
|
34
|
-
}
|
|
35
|
-
}, [controlContainerRef]);
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Whenever the position is changed, go ahead and get the container of the map and the first
|
|
39
|
-
* instance of the position class in that map container
|
|
40
|
-
* Fixes #17
|
|
41
|
-
*/
|
|
42
|
-
_react.default.useEffect(() => {
|
|
43
|
-
const mapContainer = map.getContainer();
|
|
44
|
-
const targetDiv = mapContainer.getElementsByClassName(positionClass);
|
|
45
|
-
setPortalRoot(targetDiv[0]);
|
|
46
|
-
}, [positionClass]);
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Whenever the portal root is complete,
|
|
50
|
-
* append or prepend the control container to the portal root
|
|
51
|
-
*/
|
|
52
|
-
_react.default.useEffect(() => {
|
|
53
|
-
if (portalRoot !== null) {
|
|
54
|
-
if (props.prepend !== undefined && props.prepend === true) {
|
|
55
|
-
portalRoot.prepend(controlContainerRef.current);
|
|
56
|
-
} else {
|
|
57
|
-
portalRoot.append(controlContainerRef.current);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}, [portalRoot, props.prepend, controlContainerRef]);
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Concatenate the props.container className to the class of the control div
|
|
64
|
-
*/
|
|
65
|
-
const className = (((_props$container = props.container) === null || _props$container === void 0 || (_props$container = _props$container.className) === null || _props$container === void 0 ? void 0 : _props$container.concat(" ")) || "") + "leaflet-control";
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Render
|
|
69
|
-
*/
|
|
70
|
-
return /*#__PURE__*/_react.default.createElement("div", _extends({}, props.container, {
|
|
71
|
-
ref: controlContainerRef,
|
|
72
|
-
className: className
|
|
73
|
-
}), props.children);
|
|
74
|
-
};
|
|
75
|
-
var _default = exports.default = Control;
|