iticket-seatingplan-dev 1.7.7 → 1.7.8
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.
|
@@ -72,7 +72,7 @@ function HoverPopup(_ref) {
|
|
|
72
72
|
opacity: show ? 1 : 0,
|
|
73
73
|
transitionDelay: show ? "50ms, 0ms, 0ms" : "250ms, 0ms, 0ms",
|
|
74
74
|
// a way to have smooth animation when hovering over the same row
|
|
75
|
-
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"
|
|
75
|
+
transitionDuration: prevHovered !== null && prevHovered !== void 0 && prevHovered.infoVisible && prevHovered !== null && prevHovered !== void 0 && prevHovered.r && prevHovered.r === (hoveredSeat === null || hoveredSeat === void 0 ? void 0 : hoveredSeat.r) ? "100ms, 150ms, 150ms" : "100ms, 50ms, 50ms"
|
|
76
76
|
}
|
|
77
77
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
78
78
|
className: "hover-popup-content"
|
package/dist/components/Map.js
CHANGED
|
@@ -79,10 +79,12 @@ function SeatMap(_ref) {
|
|
|
79
79
|
const drawRef = (0, _react.useRef)(null);
|
|
80
80
|
const popupRef = (0, _react.useRef)(null);
|
|
81
81
|
const prevHovered = (0, _react.useRef)(null);
|
|
82
|
+
const hideTooltipTimeoutRef = (0, _react.useRef)(null);
|
|
82
83
|
(0, _react.useEffect)(() => {
|
|
83
84
|
prevHovered.current = hoveredSeat;
|
|
84
85
|
}, [hoveredSeat]);
|
|
85
86
|
const map = (0, _reactLeaflet.useMap)();
|
|
87
|
+
const isTouchScreen = (0, _utils.getIsTouchScreen)();
|
|
86
88
|
|
|
87
89
|
// L.drawLocal.draw.toolbar.buttons.rectangle = "Box select";
|
|
88
90
|
|
|
@@ -176,6 +178,19 @@ function SeatMap(_ref) {
|
|
|
176
178
|
const getNorthSeatLat = seat => {
|
|
177
179
|
return height / 33.33 - height / 33.33 * seat.y * 0.0105 + 1.4;
|
|
178
180
|
};
|
|
181
|
+
const getSeatXy = e => {
|
|
182
|
+
const latlng = e.target.getLatLng();
|
|
183
|
+
const clickedSeatXy = map.latLngToContainerPoint(latlng);
|
|
184
|
+
return clickedSeatXy;
|
|
185
|
+
};
|
|
186
|
+
const getSeatRadius = e => {
|
|
187
|
+
const latlng = e.target.getLatLng();
|
|
188
|
+
const radius = e.target.getRadius();
|
|
189
|
+
const point1 = map.latLngToLayerPoint(latlng);
|
|
190
|
+
const point2 = map.latLngToLayerPoint([latlng.lat, latlng.lng + radius / 111320]); // Approx. conversion
|
|
191
|
+
const pixelRadius = Math.abs(point2.x - point1.x);
|
|
192
|
+
return pixelRadius;
|
|
193
|
+
};
|
|
179
194
|
const getSeatCenterLatLng = (seat, isIcon) => {
|
|
180
195
|
return {
|
|
181
196
|
lat: height * 0.05 - seat.y / (height > 800 ? height > 999 ? isIcon ? 3.5 : 3.45 : 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),
|
|
@@ -218,12 +233,19 @@ function SeatMap(_ref) {
|
|
|
218
233
|
}
|
|
219
234
|
}, [mode, map]);
|
|
220
235
|
const seatsMap = (0, _react.useMemo)(() => new Map(seats.seats.map(s => [s.sId, s])), [seats.seats]);
|
|
221
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(
|
|
236
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
237
|
+
className: "mobile-tooltip",
|
|
238
|
+
style: {
|
|
239
|
+
opacity: clickedSeat ? 1 : 0,
|
|
240
|
+
top: clickedSeat ? clickedSeat.xy.y - clickedSeat.offset - 12 : -10000,
|
|
241
|
+
left: clickedSeat ? clickedSeat.xy.x : -10000
|
|
242
|
+
}
|
|
243
|
+
}, "Tap again to select"), /*#__PURE__*/_react.default.createElement(_HoverPopup.default, {
|
|
222
244
|
hoveredSeat: hoveredSeat,
|
|
223
|
-
highlightedSeats: highlightedSeats
|
|
245
|
+
highlightedSeats: (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0 ? highlightedSeats : null,
|
|
224
246
|
mousePos: mousePos,
|
|
225
|
-
show: (hoveredSeat || (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0) && !ticketPopupOpen && !pricingPopupOpen && !isDragging && isHoveringOnSeat,
|
|
226
|
-
availablePrices: highlightedSeats
|
|
247
|
+
show: ((hoveredSeat === null || hoveredSeat === void 0 ? void 0 : hoveredSeat.infoVisible) || (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0) && !ticketPopupOpen && !pricingPopupOpen && !isDragging && isHoveringOnSeat,
|
|
248
|
+
availablePrices: (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0 ? highlightedSeats.flatMap(s => {
|
|
227
249
|
var _seats$pricing;
|
|
228
250
|
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))) || [];
|
|
229
251
|
}) : 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,
|
|
@@ -471,10 +493,14 @@ function SeatMap(_ref) {
|
|
|
471
493
|
}
|
|
472
494
|
return;
|
|
473
495
|
}
|
|
474
|
-
if (highlightedSeats.length
|
|
475
|
-
if ((0
|
|
476
|
-
setClickedSeat(s
|
|
496
|
+
if (highlightedSeats.length === desiredSeatQuantity) {
|
|
497
|
+
if (isTouchScreen && (clickedSeat === null || clickedSeat === void 0 ? void 0 : clickedSeat.ssId) !== s.ssId) {
|
|
498
|
+
setClickedSeat(_objectSpread(_objectSpread({}, s), {}, {
|
|
499
|
+
offset: getSeatRadius(e),
|
|
500
|
+
xy: getSeatXy(e)
|
|
501
|
+
}));
|
|
477
502
|
} else {
|
|
503
|
+
setClickedSeat(null);
|
|
478
504
|
const groupedSeats = (0, _utils.groupSeatsByPriceSection)(highlightedSeats, seats.pricing, priceSectionIds);
|
|
479
505
|
const priceages = Object.values(groupedSeats).flatMap(group => group.priceages.map(pa => pa.priceage));
|
|
480
506
|
if (priceages.length === 1 && (priceages[0].q === null || priceages[0].q >= desiredSeatQuantity) && !isSingleFlexi) {
|
|
@@ -482,6 +508,11 @@ function SeatMap(_ref) {
|
|
|
482
508
|
seat: s,
|
|
483
509
|
priceage: priceages[0]
|
|
484
510
|
})));
|
|
511
|
+
setHighlightedSeats([]);
|
|
512
|
+
setSelectedSeats([]);
|
|
513
|
+
setHoveredSeat(prev => _objectSpread(_objectSpread({}, prev), {}, {
|
|
514
|
+
infoVisible: false
|
|
515
|
+
}));
|
|
485
516
|
} else {
|
|
486
517
|
setSelectedSeats([...highlightedSeats]);
|
|
487
518
|
setPricingPopupOpen(true);
|
|
@@ -497,8 +528,17 @@ function SeatMap(_ref) {
|
|
|
497
528
|
|
|
498
529
|
// single select mode
|
|
499
530
|
if (mode === _utils.modes.SINGLE && hasSeatPrices) {
|
|
500
|
-
|
|
501
|
-
|
|
531
|
+
if (isTouchScreen && (clickedSeat === null || clickedSeat === void 0 ? void 0 : clickedSeat.ssId) !== s.ssId && mode === _utils.modes.SINGLE && s.s === _utils.statuses.UNSOLD && seatPrices.length === 1 && !isSingleFlexi) {
|
|
532
|
+
setClickedSeat(_objectSpread(_objectSpread({}, s), {}, {
|
|
533
|
+
offset: getSeatRadius(e),
|
|
534
|
+
xy: getSeatXy(e)
|
|
535
|
+
}));
|
|
536
|
+
map.closePopup();
|
|
537
|
+
} else {
|
|
538
|
+
setClickedSeat(null);
|
|
539
|
+
handleClickSeat(e, s);
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
502
542
|
}
|
|
503
543
|
},
|
|
504
544
|
popupopen: popup => {
|
|
@@ -516,45 +556,65 @@ function SeatMap(_ref) {
|
|
|
516
556
|
}
|
|
517
557
|
}
|
|
518
558
|
},
|
|
519
|
-
mouseover:
|
|
559
|
+
mouseover: e => {
|
|
560
|
+
if (hideTooltipTimeoutRef.current) {
|
|
561
|
+
clearTimeout(hideTooltipTimeoutRef.current);
|
|
562
|
+
}
|
|
520
563
|
if ((mode === _utils.modes.DRAG || mode === _utils.modes.REMOVE) && isDragging && canMultiSelect && hasSeatPrices) {
|
|
521
564
|
if (!selectedSeats.find(seat => seat.ssId === s.ssId) && s.s === (mode === _utils.modes.DRAG ? _utils.statuses.UNSOLD : _utils.statuses.USER_PENDING)) {
|
|
522
565
|
setSelectedSeats(prev => [...prev, s]);
|
|
523
566
|
}
|
|
524
567
|
} else {
|
|
525
568
|
setIsHoveringOnSeat(true);
|
|
526
|
-
setHoveredSeat(s)
|
|
527
|
-
|
|
569
|
+
setHoveredSeat(_objectSpread(_objectSpread({}, s), {}, {
|
|
570
|
+
infoVisible: true
|
|
571
|
+
}));
|
|
528
572
|
if (isOrphanMode && s.s === _utils.statuses.UNSOLD && mode === _utils.modes.SINGLE) {
|
|
529
573
|
const seatsToBook = (0, _utils.getValidSeats)(s, seatsMap, desiredSeatQuantity);
|
|
530
574
|
if (seatsToBook.valid) {
|
|
531
575
|
setHighlightedSeats(seatsToBook.seats);
|
|
576
|
+
if (isTouchScreen && (clickedSeat === null || clickedSeat === void 0 ? void 0 : clickedSeat.ssId) !== s.ssId && !isHoveringOnSeat) {
|
|
577
|
+
setClickedSeat(_objectSpread(_objectSpread({}, s), {}, {
|
|
578
|
+
offset: getSeatRadius(e),
|
|
579
|
+
xy: getSeatXy(e)
|
|
580
|
+
}));
|
|
581
|
+
}
|
|
582
|
+
} else if (s.s === _utils.statuses.UNSOLD && mode === _utils.modes.SINGLE && isTouchScreen && (clickedSeat === null || clickedSeat === void 0 ? void 0 : clickedSeat.ssId) !== s.ssId && !isHoveringOnSeat && seatPrices.length === 1 && !isSingleFlexi) {
|
|
583
|
+
setClickedSeat(_objectSpread(_objectSpread({}, s), {}, {
|
|
584
|
+
offset: getSeatRadius(e),
|
|
585
|
+
xy: getSeatXy(e)
|
|
586
|
+
}));
|
|
532
587
|
} else {
|
|
533
588
|
setGreyedOutSeats(seatsToBook.seats);
|
|
589
|
+
setHighlightedSeats([]);
|
|
534
590
|
}
|
|
591
|
+
} else if (highlightedSeats.length > 0) {
|
|
592
|
+
setHighlightedSeats([]);
|
|
535
593
|
}
|
|
536
594
|
}
|
|
537
595
|
},
|
|
538
|
-
mouseout: () => {
|
|
596
|
+
mouseout: async () => {
|
|
539
597
|
if (greyedOutSeats.length > 0) {
|
|
540
598
|
setGreyedOutSeats([]);
|
|
541
599
|
}
|
|
542
600
|
if (clickedSeat) {
|
|
543
601
|
setClickedSeat(null);
|
|
544
602
|
}
|
|
545
|
-
if (
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
603
|
+
if (isHoveringOnSeat) {
|
|
604
|
+
setIsHoveringOnSeat(false);
|
|
605
|
+
}
|
|
606
|
+
if (hoveredSeat !== null && hoveredSeat !== void 0 && hoveredSeat.infoVisible || (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0) {
|
|
607
|
+
hideTooltipTimeoutRef.current = setTimeout(() => {
|
|
608
|
+
if (hoveredSeat !== null && hoveredSeat !== void 0 && hoveredSeat.infoVisible) {
|
|
609
|
+
setHoveredSeat(prev => _objectSpread(_objectSpread({}, prev), {}, {
|
|
610
|
+
infoVisible: false
|
|
611
|
+
}));
|
|
549
612
|
}
|
|
550
|
-
if (highlightedSeats) {
|
|
551
|
-
setHighlightedSeats(
|
|
613
|
+
if ((highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 0) {
|
|
614
|
+
setHighlightedSeats([]);
|
|
552
615
|
}
|
|
553
616
|
}, 400);
|
|
554
617
|
}
|
|
555
|
-
if (isHoveringOnSeat) {
|
|
556
|
-
setIsHoveringOnSeat(false);
|
|
557
|
-
}
|
|
558
618
|
},
|
|
559
619
|
mousemove: e => {
|
|
560
620
|
setMousePos({
|
|
@@ -563,11 +623,7 @@ function SeatMap(_ref) {
|
|
|
563
623
|
});
|
|
564
624
|
}
|
|
565
625
|
}
|
|
566
|
-
},
|
|
567
|
-
className: "mobile-tooltip",
|
|
568
|
-
direction: "top",
|
|
569
|
-
offset: [0, height * 0.03 + -60]
|
|
570
|
-
}, "Tap again to select", " ", isOrphanMode && (highlightedSeats === null || highlightedSeats === void 0 ? void 0 : highlightedSeats.length) > 1 ? "these seats" : "this seat") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), s.s === _utils.statuses.UNSOLD && hasSeatPrices ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.Popup, {
|
|
626
|
+
}, s.s === _utils.statuses.UNSOLD && hasSeatPrices ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.Popup, {
|
|
571
627
|
className: "ticket-popup popup-".concat(s.sId)
|
|
572
628
|
}, isSingleFlexi ? /*#__PURE__*/_react.default.createElement("div", {
|
|
573
629
|
className: "single-flexi"
|
|
@@ -1571,6 +1571,32 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
1571
1571
|
height: 0.875rem;
|
|
1572
1572
|
}
|
|
1573
1573
|
|
|
1574
|
+
.mobile-tooltip {
|
|
1575
|
+
pointer-events: none;
|
|
1576
|
+
position: absolute;
|
|
1577
|
+
background: rgba(255, 255, 255, 0.9);
|
|
1578
|
+
border-radius: 5px;
|
|
1579
|
+
padding: 0.25rem 0.5rem;
|
|
1580
|
+
transform: translate(-50%, -100%);
|
|
1581
|
+
transition: opacity 0.1s ease-in-out;
|
|
1582
|
+
z-index: 1005;
|
|
1583
|
+
font-size: 0.75rem;
|
|
1584
|
+
color: #333;
|
|
1585
|
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
|
1586
|
+
text-align: center;
|
|
1587
|
+
width: max-content;
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
.mobile-tooltip::after {
|
|
1591
|
+
content: "";
|
|
1592
|
+
position: absolute;
|
|
1593
|
+
top: 100%;
|
|
1594
|
+
left: 50%;
|
|
1595
|
+
border: 5px solid transparent;
|
|
1596
|
+
border-top-color: rgba(255, 255, 255, 0.9);
|
|
1597
|
+
transform: translateX(-50%);
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1574
1600
|
/* Printing */
|
|
1575
1601
|
|
|
1576
1602
|
@media print {
|
package/dist/utils/helpers.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.groupSeatsByPriceSection = exports.getValidSeats = exports.getRowSection = exports.getRetryDelay = exports.getIsTouchScreen = exports.getInitialColor = exports.getAdjacentBookedSeats = exports.createsOrphan = exports.canSelectSingleSeatGivenOrphanRules = exports.calculateCenterOfMap = exports.NZDollar = void 0;
|
|
7
7
|
var _enums = require("./enums");
|
|
8
|
-
const
|
|
8
|
+
const getIsTouchScreen = () => {
|
|
9
9
|
let hasTouchScreen = false;
|
|
10
10
|
if (typeof window !== "undefined") {
|
|
11
11
|
if ("maxTouchPoints" in window.navigator) {
|
|
@@ -20,7 +20,7 @@ const isTouchScreen = () => {
|
|
|
20
20
|
}
|
|
21
21
|
return hasTouchScreen;
|
|
22
22
|
};
|
|
23
|
-
exports.
|
|
23
|
+
exports.getIsTouchScreen = getIsTouchScreen;
|
|
24
24
|
const getInitialColor = (s, price, loading, disabled, selected, greyedOut) => {
|
|
25
25
|
// selected state for multiselect
|
|
26
26
|
if (selected) {
|