iticket-seatingplan-dev 1.3.7 → 1.4.0

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.
@@ -0,0 +1,734 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ require("./styles/index.css");
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactLeaflet = require("react-leaflet");
10
+ var _encodedSvgs = require("./assets/encodedSvgs");
11
+ var _reactLeafletCustomControl = _interopRequireDefault(require("react-leaflet-custom-control"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+ const statuses = {
16
+ UNSOLD: 1,
17
+ SOLD: 2,
18
+ RESERVED: 3,
19
+ USER_PENDING: 4,
20
+ CHEQUE_PENDING: 5,
21
+ WHEELCHAIR_ACCESS: 6,
22
+ DOOR_SALES: 7,
23
+ ON_HOLD: 8,
24
+ REAL_TIME_DOOR_SALES: 9,
25
+ CANCELLED: 10
26
+ };
27
+ let NZDollar = new Intl.NumberFormat("en-NZ", {
28
+ style: "currency",
29
+ currency: "NZD"
30
+ });
31
+ const SeatingPlan = _ref => {
32
+ let {
33
+ eventId,
34
+ eventVenueId,
35
+ sessionId,
36
+ showingId,
37
+ areaId,
38
+ priceSectionIds,
39
+ price,
40
+ quantity,
41
+ callbackFunction,
42
+ apiKey,
43
+ baseUrl,
44
+ countryCode,
45
+ connectedShowings,
46
+ areaName
47
+ } = _ref;
48
+ const [initialiseMessage, setInitialiseMessage] = (0, _react.useState)("Initialising seating plan...");
49
+ const [isReloading, setIsReloading] = (0, _react.useState)(false);
50
+ const [map, setMap] = (0, _react.useState)();
51
+ const [position, setPosition] = (0, _react.useState)(null);
52
+ const [height, setHeight] = (0, _react.useState)(0);
53
+ const [width, setWidth] = (0, _react.useState)(0);
54
+ const [seats, setSeats] = (0, _react.useState)([]);
55
+ const [error, setError] = (0, _react.useState)(null);
56
+ const [processing, setProcessing] = (0, _react.useState)(false);
57
+ const [bookedSeats, setBookedSeats] = (0, _react.useState)([]);
58
+ const [chosenSeat, setChosenSeat] = (0, _react.useState)(null);
59
+ const [area, setArea] = (0, _react.useState)(null);
60
+ const [isLegendOpen, setIsLegendOpen] = (0, _react.useState)(false);
61
+ const [ticketPopupOpen, setTicketPopupOpen] = (0, _react.useState)(false);
62
+ const [bounds, setBounds] = (0, _react.useState)(null);
63
+ const [isFullScreen, setIsFullScreen] = (0, _react.useState)(false);
64
+ const statusColors = {
65
+ unknown: "#95a5a6",
66
+ available: "#00E640",
67
+ sold: "#95a5a6",
68
+ reserved: "#95a5a6",
69
+ pending: "#e74c3c",
70
+ booked: "#e74c3c",
71
+ bookedWithDifferentPrice: "#fab1a0"
72
+ };
73
+ const setInitialColor = s => {
74
+ return {
75
+ fillColor: s.s === statuses.UNSOLD ? statusColors.available : s.s === statuses.USER_PENDING ? s.bookedPrice === price ? statusColors.booked : statusColors.bookedWithDifferentPrice : statusColors.sold,
76
+ color: "none",
77
+ fillOpacity: s.loading ? 0 : 1
78
+ };
79
+ };
80
+ const addTicketToCart = (s, priceage, cs) => {
81
+ map.target.closePopup();
82
+ setProcessing(true);
83
+ fetch("".concat(baseUrl, "/legacy/").concat(countryCode, "/shop/events/").concat(eventId, "/").concat(eventVenueId, "/showings/").concat(showingId, "/tickets/allocated/").concat(areaId), {
84
+ method: "POST",
85
+ body: JSON.stringify({
86
+ priceAgeId: priceage.paId,
87
+ seatId: s.ssId,
88
+ connectedShowings: connectedShowings
89
+ }),
90
+ headers: {
91
+ "content-type": "application/json",
92
+ "basket-key": sessionId
93
+ }
94
+ }).then(response => {
95
+ if ((response === null || response === void 0 ? void 0 : response.status) === 403) {
96
+ s.loading = false;
97
+ (cs || chosenSeat).circle.target.setStyle({
98
+ fillColor: statusColors.sold
99
+ });
100
+ cs ? cs.seat.s = statuses.SOLD : chosenSeat.seat.s = statuses.SOLD;
101
+ const event = {
102
+ type: "error",
103
+ details: {
104
+ error: {
105
+ code: 403,
106
+ message: "The seat you're trying to book is no longer available."
107
+ }
108
+ }
109
+ };
110
+ callbackFunction(event);
111
+ setProcessing(false);
112
+ } else if ((response === null || response === void 0 ? void 0 : response.status) === 400) {
113
+ s.loading = false;
114
+ (cs || chosenSeat).circle.target.setStyle({
115
+ fillColor: statusColors.sold
116
+ });
117
+ cs ? cs.seat.s = statuses.SOLD : chosenSeat.seat.s = statuses.SOLD;
118
+ const event = {
119
+ type: "error",
120
+ details: {
121
+ error: {
122
+ code: 403,
123
+ message: "Oops, seems like you're trying to book tickets that are incompatible with other tickets in your cart."
124
+ }
125
+ }
126
+ };
127
+ callbackFunction(event);
128
+ setProcessing(false);
129
+ } else if ((response === null || response === void 0 ? void 0 : response.status) === 429) {
130
+ s.loading = false;
131
+ (cs || chosenSeat).circle.target.setStyle({
132
+ fillColor: statusColors.available
133
+ });
134
+ const event = {
135
+ type: "error",
136
+ details: {
137
+ error: {
138
+ code: 429,
139
+ message: "Someone else selected this first. Please try again"
140
+ }
141
+ }
142
+ };
143
+ callbackFunction(event);
144
+ setProcessing(false);
145
+ } else {
146
+ // console.log(chosenSeat.seat.ssId, cs?.seat.ssId)
147
+ s.s = statuses.USER_PENDING;
148
+ s.bookedPrice = price;
149
+ s.loading = false;
150
+ (cs || chosenSeat).circle.target.setStyle({
151
+ fillColor: statusColors.booked
152
+ });
153
+ setProcessing(false);
154
+ setBookedSeats([...bookedSeats, {
155
+ ssId: s.ssId,
156
+ r: s.r,
157
+ c: s.c,
158
+ showingId: showingId,
159
+ pId: priceage.paId,
160
+ p: priceage.p,
161
+ paName: priceage.paName
162
+ }]);
163
+ const event = {
164
+ type: "cart-change-add",
165
+ details: [...bookedSeats, {
166
+ ssId: s.ssId,
167
+ r: s.r,
168
+ c: s.c,
169
+ showingId: showingId,
170
+ pId: priceage.paId,
171
+ p: priceage.p,
172
+ paName: priceage.paName
173
+ }]
174
+ };
175
+ callbackFunction(event);
176
+ }
177
+ }).catch(error => {
178
+ s.loading = false;
179
+ (cs || chosenSeat).circle.target.setStyle({
180
+ fillColor: statusColors.available
181
+ });
182
+ const event = {
183
+ type: "error",
184
+ details: s.pMin && s.pMax && (price < s.pMin || price > s.pMax) ? {
185
+ error: {
186
+ code: 403,
187
+ message: "Price specified not allowed."
188
+ }
189
+ } : {
190
+ error: {
191
+ code: 500,
192
+ message: "Oops! Something went wrong. Please try again."
193
+ }
194
+ }
195
+ };
196
+ callbackFunction(event);
197
+ setProcessing(false);
198
+ });
199
+ };
200
+ const removeTicketFromCart = (s, e) => {
201
+ setProcessing(true);
202
+ fetch("".concat(baseUrl, "/legacy/").concat(countryCode, "/shop/events/").concat(eventId, "/").concat(eventVenueId, "/showings/").concat(showingId, "/tickets/allocated/").concat(areaId, "/seat/").concat(s.ssId), {
203
+ method: "DELETE",
204
+ headers: {
205
+ "basket-key": sessionId
206
+ }
207
+ }).then(response => {
208
+ s.loading = false;
209
+ s.s = statuses.UNSOLD;
210
+ s.bookedPrice = null;
211
+ e.target.setStyle({
212
+ fillColor: statusColors.available
213
+ });
214
+ setBookedSeats(bookedSeats.filter(bs => bs.ssId !== s.ssId));
215
+ setProcessing(false);
216
+ const event = {
217
+ type: "cart-change-remove",
218
+ details: bookedSeats.filter(bs => bs.ssId === s.ssId)
219
+ };
220
+ callbackFunction(event);
221
+ }).catch(error => {
222
+ e.target.setStyle({
223
+ fillColor: statusColors.booked
224
+ });
225
+ const event = {
226
+ type: "error",
227
+ details: {
228
+ error: {
229
+ code: 500,
230
+ message: "Oops! Something went wrong. Please try again."
231
+ }
232
+ }
233
+ };
234
+ callbackFunction(event);
235
+ setProcessing(false);
236
+ });
237
+ };
238
+ const handleClick = (e, s) => {
239
+ if (s.s !== statuses.UNSOLD && s.s !== statuses.USER_PENDING || bookedSeats.length >= quantity && s.s === statuses.UNSOLD) {
240
+ if (bookedSeats.length >= quantity) {
241
+ const event = {
242
+ type: "error",
243
+ details: {
244
+ message: "Maximum ticket booking quantity specified reached."
245
+ }
246
+ };
247
+ callbackFunction(event);
248
+ }
249
+ return;
250
+ }
251
+ setChosenSeat({
252
+ circle: e,
253
+ seat: s
254
+ });
255
+ if (s.s === statuses.UNSOLD) {
256
+ const availablePrices = seats.pricing.filter(price => (!priceSectionIds || priceSectionIds.includes(price.psId)) && s.psId === price.psId);
257
+ if (availablePrices.length === 1) {
258
+ s.loading = true;
259
+ addTicketToCart(s, availablePrices[0], {
260
+ circle: e,
261
+ seat: s
262
+ });
263
+ }
264
+ } else {
265
+ s.loading = true;
266
+ removeTicketFromCart(s, e);
267
+ }
268
+ };
269
+ const initialFetch = function initialFetch() {
270
+ let isReload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
271
+ if (isReload) {
272
+ setIsReloading(true);
273
+ }
274
+ setInitialiseMessage("Initialising seating plan...");
275
+ fetch( // `http://localhost:3155/api/legacy/shop/events/4230/4639/showings/102359/tickets/allocated/1603`,
276
+ // `${baseUrl}/legacy/shop/events/${eventId}/${eventVenueId}/showings/${showingId}/tickets/allocated/${areaId}`,
277
+ "".concat(baseUrl, "/legacy/").concat(countryCode, "/shop/events/").concat(eventId, "/").concat(eventVenueId, "/showings/").concat(showingId, "/tickets/allocated/").concat(areaId), {
278
+ headers: {
279
+ "basket-key": sessionId,
280
+ Authorization: "Bearer ".concat(apiKey)
281
+ }
282
+ }).then(async response => {
283
+ const data = await response.json();
284
+ data.retryAfter = response.headers.get("Retry-After");
285
+ return data;
286
+ }).then(data => {
287
+ if (data.statusCode === 429) {
288
+ setInitialiseMessage("Looks like it's busy. Standby. Trying again in ".concat(data.retryAfter, " second").concat(data.retryAfter > 1 ? "s" : "", "."));
289
+ return setTimeout(initialFetch, data.retryAfter * 1000);
290
+ }
291
+ if (data.statusCode === 403) {
292
+ if (!sessionId || data.message === "Invalid Session id.") {
293
+ throw new Error("Looks like your cart has expired. Please refresh the page to try again.");
294
+ } else {
295
+ throw new Error("Invalid API Key or unauthorized URL");
296
+ }
297
+ }
298
+ const img = new Image();
299
+ img.src = data.background;
300
+ setBookedSeats(data.seats.filter(s => s.s === statuses.USER_PENDING && s.bookedPrice === price).map(s => ({
301
+ ssId: s.ssId,
302
+ r: s.r,
303
+ c: s.c,
304
+ showingId: showingId,
305
+ p: s.p,
306
+ //price || s.defaultPrice,
307
+ pId: s.pId,
308
+ paName: s.paName
309
+ })));
310
+ img.onload = () => {
311
+ const imgSouthwest = [0, 0];
312
+ const imgNortheast = [img.height * 0.015, img.width * 0.015];
313
+ setBounds([imgSouthwest, imgNortheast]);
314
+ setPosition([img.height * 0.005, img.width * 0.005]);
315
+ setHeight(img.height * 0.5);
316
+ setWidth(img.width * 0.5);
317
+ setSeats(data);
318
+ };
319
+ if (map && area === areaId) {
320
+ map.target.fitBounds(bounds);
321
+ }
322
+ setIsReloading(false);
323
+ }).catch(error => {
324
+ var _error$message;
325
+ // console.log(error);
326
+ setError({
327
+ response: {
328
+ data: {
329
+ message: (_error$message = error === null || error === void 0 ? void 0 : error.message) !== null && _error$message !== void 0 ? _error$message : "Something went wrong. Please try again."
330
+ }
331
+ }
332
+ });
333
+ setIsReloading(false);
334
+ });
335
+ };
336
+ (0, _react.useEffect)(() => {
337
+ if (!error && areaId !== area) {
338
+ setArea(areaId);
339
+ initialFetch();
340
+ setPosition(null);
341
+ }
342
+ }, [areaId]);
343
+
344
+ // useEffect(() => {
345
+ // if (bookedSeats && position && chosenSeat) {
346
+ // const event = { type: 'cart-change', details: bookedSeats }
347
+ // callbackFunction(event)
348
+ // }
349
+ // }, [bookedSeats])
350
+
351
+ (0, _react.useEffect)(() => {
352
+ if (ticketPopupOpen) {
353
+ chosenSeat === null || chosenSeat === void 0 ? void 0 : chosenSeat.circle.target.setStyle({
354
+ fillOpacity: 0
355
+ });
356
+ }
357
+ }, [ticketPopupOpen, chosenSeat]);
358
+ (0, _react.useEffect)(() => {
359
+ if (processing) {
360
+ const availablePrices = seats.pricing.filter(price => !priceSectionIds || priceSectionIds.includes(price.psId));
361
+ availablePrices.length === 1 && (chosenSeat === null || chosenSeat === void 0 ? void 0 : chosenSeat.circle.target.setStyle({
362
+ fillOpacity: 0
363
+ }));
364
+ }
365
+ }, [chosenSeat, processing]);
366
+ (0, _react.useEffect)(() => {
367
+ if (map) {
368
+ map.target.invalidateSize();
369
+ map.target.fitBounds(bounds);
370
+ }
371
+ }, [isFullScreen]);
372
+ (0, _react.useEffect)(() => {
373
+ const closeOnEscape = e => {
374
+ if (e.key === "Escape") {
375
+ if (isFullScreen && !ticketPopupOpen) {
376
+ setIsFullScreen(false);
377
+ } else if (ticketPopupOpen) {
378
+ map.target.closePopup();
379
+ }
380
+ }
381
+ };
382
+ window.addEventListener("keydown", closeOnEscape);
383
+ return () => window.removeEventListener("keydown", closeOnEscape);
384
+ }, [isFullScreen, ticketPopupOpen]);
385
+ const calculateCenterOfMap = (height, seats) => {
386
+ const filteredSeats = seats.filter(price => !priceSectionIds || priceSectionIds.includes(price.psId));
387
+ const avgY = filteredSeats.reduce((acc, val) => {
388
+ return acc + val.y / filteredSeats.length;
389
+ }, 0);
390
+ const avgX = filteredSeats.reduce((acc, val) => {
391
+ return acc + val.x / filteredSeats.length;
392
+ }, 0);
393
+ 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];
394
+ };
395
+
396
+ // return seating plan
397
+ return /*#__PURE__*/_react.default.createElement("div", {
398
+ className: "root"
399
+ }, error ? /*#__PURE__*/_react.default.createElement("div", {
400
+ className: "loading"
401
+ }, /*#__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, /*#__PURE__*/_react.default.createElement("div", {
402
+ className: "seating-plan-backdrop ".concat(isFullScreen ? "full-screen" : ""),
403
+ onClick: () => setIsFullScreen(false)
404
+ }), /*#__PURE__*/_react.default.createElement("div", {
405
+ className: "seating-plan ".concat(isFullScreen ? "full-screen" : "")
406
+ }, /*#__PURE__*/_react.default.createElement(_reactLeaflet.MapContainer, {
407
+ zoomSnap: 0,
408
+ zoomDelta: 1,
409
+ whenReady: setMap,
410
+ center: calculateCenterOfMap(height, seats.seats),
411
+ zoom: undefined,
412
+ zoomControl: true,
413
+ scrollWheelZoom: true,
414
+ bounds: bounds
415
+ }, /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
416
+ position: "bottomright"
417
+ }, /*#__PURE__*/_react.default.createElement("div", {
418
+ className: "legendBox"
419
+ }, /*#__PURE__*/_react.default.createElement("div", {
420
+ className: "legend-header"
421
+ }, /*#__PURE__*/_react.default.createElement("button", {
422
+ className: "legend-button ".concat(isLegendOpen ? "expanded" : ""),
423
+ onClick: () => setIsLegendOpen(!isLegendOpen)
424
+ }, /*#__PURE__*/_react.default.createElement("p", null, isLegendOpen ? "LEGEND:" : "VIEW LEGEND")), isLegendOpen && /*#__PURE__*/_react.default.createElement("button", {
425
+ className: "close-button",
426
+ onClick: () => setIsLegendOpen(false)
427
+ }, /*#__PURE__*/_react.default.createElement("img", {
428
+ src: _encodedSvgs.closeIcon,
429
+ alt: "close"
430
+ }))), /*#__PURE__*/_react.default.createElement("div", {
431
+ className: "legend-contents ".concat(isLegendOpen ? "expanded" : "")
432
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
433
+ className: "legend-item"
434
+ }, /*#__PURE__*/_react.default.createElement("div", {
435
+ className: "legend-symbol legend-available"
436
+ }), /*#__PURE__*/_react.default.createElement("p", null, "available"))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
437
+ className: "legend-item"
438
+ }, /*#__PURE__*/_react.default.createElement("div", {
439
+ className: "legend-symbol legend-sold"
440
+ }), /*#__PURE__*/_react.default.createElement("p", null, "sold"))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
441
+ className: "legend-item"
442
+ }, /*#__PURE__*/_react.default.createElement("div", {
443
+ className: "legend-symbol legend-in-cart"
444
+ }), /*#__PURE__*/_react.default.createElement("p", null, "in cart"))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
445
+ className: "legend-item"
446
+ }, /*#__PURE__*/_react.default.createElement("img", {
447
+ src: _encodedSvgs.wheelchairIcon,
448
+ width: 15,
449
+ height: 15
450
+ }), /*#__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", {
451
+ className: "legend-item"
452
+ }, /*#__PURE__*/_react.default.createElement("img", {
453
+ src: _encodedSvgs.userIcon,
454
+ width: 15,
455
+ height: 15
456
+ }), /*#__PURE__*/_react.default.createElement("p", null, "membership seats"))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null)))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
457
+ position: "topleft"
458
+ }, /*#__PURE__*/_react.default.createElement("div", {
459
+ className: "extra-controls"
460
+ }, /*#__PURE__*/_react.default.createElement("button", {
461
+ title: "Re-centre Seating Plan",
462
+ onClick: () => map.target.fitBounds(bounds),
463
+ className: "leaflet-control-zoom-in"
464
+ }, /*#__PURE__*/_react.default.createElement("img", {
465
+ src: "https://au-iticket-shop-legacy.azurewebsites.net/assets/images/fit-icon.jpg",
466
+ style: {
467
+ height: "17px"
468
+ }
469
+ })), /*#__PURE__*/_react.default.createElement("button", {
470
+ title: "Reload Seating Plan",
471
+ disabled: isReloading,
472
+ onClick: () => initialFetch(true),
473
+ className: "leaflet-control-zoom-in reload-seating-plan",
474
+ style: {
475
+ background: isReloading ? "rgb(0, 230, 64)" : "#fff"
476
+ }
477
+ }, /*#__PURE__*/_react.default.createElement("img", {
478
+ className: isReloading ? "rotate" : "",
479
+ src: "https://au-iticket-shop-legacy.azurewebsites.net/assets/images/refresh.png",
480
+ style: {
481
+ height: "17px"
482
+ }
483
+ })))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
484
+ position: "topleft"
485
+ }, /*#__PURE__*/_react.default.createElement("div", {
486
+ className: "extra-controls"
487
+ }, /*#__PURE__*/_react.default.createElement("button", {
488
+ title: "Expand Seating Plan",
489
+ onClick: () => {
490
+ setIsFullScreen(!isFullScreen);
491
+ },
492
+ className: "leaflet-control-zoom-in"
493
+ }, /*#__PURE__*/_react.default.createElement("img", {
494
+ src: isFullScreen ? _encodedSvgs.collapseIcon : _encodedSvgs.expandIcon,
495
+ style: {
496
+ height: "24px"
497
+ }
498
+ })))), /*#__PURE__*/_react.default.createElement(_reactLeafletCustomControl.default, {
499
+ position: "topright"
500
+ }, /*#__PURE__*/_react.default.createElement("button", {
501
+ title: "Close full screen",
502
+ onClick: () => setIsFullScreen(false),
503
+ className: "full-screen-close-button ".concat(isFullScreen ? "show" : "")
504
+ }, /*#__PURE__*/_react.default.createElement("img", {
505
+ src: _encodedSvgs.closeIcon,
506
+ style: {
507
+ height: "24px"
508
+ }
509
+ }))), /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
510
+ url: seats.background,
511
+ bounds: [[0, 0], [height * 0.03, width * 0.03]],
512
+ zIndex: 10
513
+ }), seats && seats.seats && seats.seats.map((s, i) => {
514
+ var _chosenSeat$seat;
515
+ return /*#__PURE__*/_react.default.createElement("div", {
516
+ key: i
517
+ }, /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
518
+ url: "https://iticketseatingplan.blob.core.windows.net/embed/static/media/rippleload.08e6a08dd832819226ef.gif",
519
+ bounds: [[(s.r.includes("NORTH") ? height / 33.33 - height / 33.33 * s.y * 0.0105 + 1.4 : height * 0.05 - s.y / (height > 800 ? height > 999 ? 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)) - 0.11, s.x * 0.3 + 0.15 - 0.11], [(s.r.includes("NORTH") ? height / 33.33 - height / 33.33 * s.y * 0.0105 + 1.4 : height * 0.05 - s.y / (height > 800 ? height > 999 ? 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)) + 0.11, s.x * 0.3 + 0.15 + 0.11]
520
+ // [height * 0.0302 - s.y * 0.602 - 0.3, s.x * 0.61 - 0.3],
521
+ // [height * 0.0302 - s.y * 0.602 + 0.3, s.x * 0.61 + 0.3],
522
+ // [height * 0.0302 - s.y * 0.602 - 0.17, s.x * 0.61 - 0.17],
523
+ // [height * 0.0302 - s.y * 0.602 + 0.17, s.x * 0.61 + 0.17],
524
+ ],
525
+
526
+ opacity: s.loading || ticketPopupOpen && (chosenSeat === null || chosenSeat === void 0 ? void 0 : (_chosenSeat$seat = chosenSeat.seat) === null || _chosenSeat$seat === void 0 ? void 0 : _chosenSeat$seat.ssId) === s.ssId ? 100 : 0,
527
+ zIndex: 10
528
+ }), !priceSectionIds || priceSectionIds.includes(s.psId) ? s.s === statuses.WHEELCHAIR_ACCESS ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
529
+ url: _encodedSvgs.wheelchairIcon,
530
+ bounds: [
531
+ // [
532
+ // height * 0.0302 - s.y * 0.602 - 0.17,
533
+ // s.x * 0.61 - 0.17,
534
+ // ],
535
+ // [
536
+ // height * 0.0302 - s.y * 0.602 + 0.17,
537
+ // s.x * 0.61 + 0.17,
538
+ // ],
539
+ [height * 0.05 - s.y / (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) - 0.11, s.x * 0.3 + 0.15 - 0.11], [height * 0.05 - s.y / (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) + 0.11, s.x * 0.3 + 0.15 + 0.11]],
540
+ zIndex: 10
541
+ }) : s.s === statuses.USER_PENDING && s.m ? /*#__PURE__*/_react.default.createElement(_reactLeaflet.ImageOverlay, {
542
+ url: _encodedSvgs.userIcon,
543
+ bounds: [
544
+ // [
545
+ // height * 0.0302 - s.y * 0.602 - 0.17,
546
+ // s.x * 0.61 - 0.17,
547
+ // ],
548
+ // [
549
+ // height * 0.0302 - s.y * 0.602 + 0.17,
550
+ // s.x * 0.61 + 0.17,
551
+ // ],
552
+ [height * 0.05 - s.y / (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) - 0.11, s.x * 0.3 + 0.15 - 0.15], [height * 0.05 - s.y / (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) + 0.11, s.x * 0.3 + 0.15 + 0.15]],
553
+ zIndex: 10
554
+ }) : /*#__PURE__*/_react.default.createElement(_reactLeaflet.Circle, {
555
+ center: [
556
+ // height * 0.0305 -
557
+ // s.y * 0.57 -
558
+ // height * (height > 700 ? 0.0001 : 0.0006),
559
+ // s.x * 0.6 + 0.25,
560
+ //experimental
561
+ // 14.42,
562
+ // (height / 33.33 - 0.3 * s.y).toFixed(1)
563
+ // height / 33.33 - (height / 33.33) * s.y * 0.01, //29, //3 27, // height / 33.33 - s.y, // s.y * 0.3, //+ (height / 0.503) * 0.01, //11.66, // 5.2,
564
+ //working
565
+ s.r.includes("NORTH") ? height / 33.33 - height / 33.33 * s.y * 0.0105 + 1.4 : height * 0.05 - s.y / (height > 800 ? height > 999 ? 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),
566
+ // s.r.includes('NORTH')
567
+ // ? 0
568
+ // : 0,
569
+ s.x * 0.3 + 0.15
570
+
571
+ // height * 0.04 -
572
+ // s.y / (height > 800 ? 3.5 : 3.35) -
573
+ // (height > 800 ? height * 0.0101 : height * 0.0201),
574
+ // s.x * 0.3 + 0.15,
575
+
576
+ // -s.y * (height * 0.00037) + 24.2,
577
+ // s.x * 0.3 + 0.15,
578
+ ],
579
+
580
+ pathOptions: setInitialColor(s),
581
+ radius: 12000,
582
+ eventHandlers: {
583
+ click: e => handleClick(e, s),
584
+ popupopen: () => {
585
+ setTicketPopupOpen(true);
586
+ },
587
+ popupclose: () => {
588
+ setTicketPopupOpen(false);
589
+ }
590
+ }
591
+ // value={s}
592
+ }, /*#__PURE__*/_react.default.createElement(_reactLeaflet.Tooltip, {
593
+ className: "seatname-tooltip",
594
+ direction: "top",
595
+ offset: [0, height * 0.03 + -30]
596
+ }, s.r + "-" + s.c), s.s === statuses.UNSOLD && /*#__PURE__*/_react.default.createElement(_reactLeaflet.Popup, {
597
+ className: "ticket-popup"
598
+ }, /*#__PURE__*/_react.default.createElement("div", {
599
+ className: "popup-header"
600
+ }, /*#__PURE__*/_react.default.createElement("p", {
601
+ className: "seatname"
602
+ }, "".concat(areaName ? areaName + " | " : "").concat(s.r, "-").concat(s.c)), /*#__PURE__*/_react.default.createElement("button", {
603
+ className: "close-button",
604
+ "aria-label": "close popup",
605
+ onClick: () => map.target.closePopup()
606
+ }, /*#__PURE__*/_react.default.createElement("img", {
607
+ src: _encodedSvgs.closeIcon,
608
+ alt: "close"
609
+ }))), /*#__PURE__*/_react.default.createElement("p", {
610
+ className: "heading"
611
+ }, "Select option:"), seats.pricing.filter(price => (!priceSectionIds || priceSectionIds.includes(price.psId)) && price.psId === s.psId).map(price => /*#__PURE__*/_react.default.createElement("div", {
612
+ key: price.paId,
613
+ className: "priceage",
614
+ onClick: () => {
615
+ s.loading = true;
616
+ addTicketToCart(s, price);
617
+ }
618
+ }, /*#__PURE__*/_react.default.createElement("p", {
619
+ className: "price"
620
+ }, /*#__PURE__*/_react.default.createElement("span", null, price.paName), /*#__PURE__*/_react.default.createElement("span", null, NZDollar.format(price.p))))))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null));
621
+ })))) : /*#__PURE__*/_react.default.createElement("div", {
622
+ className: "loading"
623
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("svg", {
624
+ width: "105",
625
+ height: "105",
626
+ viewBox: "0 0 105 105",
627
+ xmlns: "http://www.w3.org/2000/svg",
628
+ fill: "#2ecc71"
629
+ }, /*#__PURE__*/_react.default.createElement("circle", {
630
+ cx: "12.5",
631
+ cy: "12.5",
632
+ r: "12.5"
633
+ }, /*#__PURE__*/_react.default.createElement("animate", {
634
+ attributeName: "fill-opacity",
635
+ begin: "0s",
636
+ dur: "1s",
637
+ values: "1;.2;1",
638
+ calcMode: "linear",
639
+ repeatCount: "indefinite"
640
+ })), /*#__PURE__*/_react.default.createElement("circle", {
641
+ cx: "12.5",
642
+ cy: "52.5",
643
+ r: "12.5",
644
+ fillOpacity: ".5"
645
+ }, /*#__PURE__*/_react.default.createElement("animate", {
646
+ attributeName: "fill-opacity",
647
+ begin: "100ms",
648
+ dur: "1s",
649
+ values: "1;.2;1",
650
+ calcMode: "linear",
651
+ repeatCount: "indefinite"
652
+ })), /*#__PURE__*/_react.default.createElement("circle", {
653
+ cx: "52.5",
654
+ cy: "12.5",
655
+ r: "12.5"
656
+ }, /*#__PURE__*/_react.default.createElement("animate", {
657
+ attributeName: "fill-opacity",
658
+ begin: "300ms",
659
+ dur: "1s",
660
+ values: "1;.2;1",
661
+ calcMode: "linear",
662
+ repeatCount: "indefinite"
663
+ })), /*#__PURE__*/_react.default.createElement("circle", {
664
+ cx: "52.5",
665
+ cy: "52.5",
666
+ r: "12.5"
667
+ }, /*#__PURE__*/_react.default.createElement("animate", {
668
+ attributeName: "fill-opacity",
669
+ begin: "600ms",
670
+ dur: "1s",
671
+ values: "1;.2;1",
672
+ calcMode: "linear",
673
+ repeatCount: "indefinite"
674
+ })), /*#__PURE__*/_react.default.createElement("circle", {
675
+ cx: "92.5",
676
+ cy: "12.5",
677
+ r: "12.5"
678
+ }, /*#__PURE__*/_react.default.createElement("animate", {
679
+ attributeName: "fill-opacity",
680
+ begin: "800ms",
681
+ dur: "1s",
682
+ values: "1;.2;1",
683
+ calcMode: "linear",
684
+ repeatCount: "indefinite"
685
+ })), /*#__PURE__*/_react.default.createElement("circle", {
686
+ cx: "92.5",
687
+ cy: "52.5",
688
+ r: "12.5"
689
+ }, /*#__PURE__*/_react.default.createElement("animate", {
690
+ attributeName: "fill-opacity",
691
+ begin: "400ms",
692
+ dur: "1s",
693
+ values: "1;.2;1",
694
+ calcMode: "linear",
695
+ repeatCount: "indefinite"
696
+ })), /*#__PURE__*/_react.default.createElement("circle", {
697
+ cx: "12.5",
698
+ cy: "92.5",
699
+ r: "12.5"
700
+ }, /*#__PURE__*/_react.default.createElement("animate", {
701
+ attributeName: "fill-opacity",
702
+ begin: "700ms",
703
+ dur: "1s",
704
+ values: "1;.2;1",
705
+ calcMode: "linear",
706
+ repeatCount: "indefinite"
707
+ })), /*#__PURE__*/_react.default.createElement("circle", {
708
+ cx: "52.5",
709
+ cy: "92.5",
710
+ r: "12.5"
711
+ }, /*#__PURE__*/_react.default.createElement("animate", {
712
+ attributeName: "fill-opacity",
713
+ begin: "500ms",
714
+ dur: "1s",
715
+ values: "1;.2;1",
716
+ calcMode: "linear",
717
+ repeatCount: "indefinite"
718
+ })), /*#__PURE__*/_react.default.createElement("circle", {
719
+ cx: "92.5",
720
+ cy: "92.5",
721
+ r: "12.5"
722
+ }, /*#__PURE__*/_react.default.createElement("animate", {
723
+ attributeName: "fill-opacity",
724
+ begin: "200ms",
725
+ dur: "1s",
726
+ values: "1;.2;1",
727
+ calcMode: "linear",
728
+ repeatCount: "indefinite"
729
+ })))), /*#__PURE__*/_react.default.createElement("div", {
730
+ className: "initialise-message"
731
+ }, initialiseMessage)));
732
+ };
733
+ var _default = SeatingPlan;
734
+ exports.default = _default;