@zonetrix/viewer 2.10.0 → 2.10.2
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/README.md +146 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +422 -408
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { Stage as
|
|
4
|
-
import { ref as
|
|
5
|
-
import { fromFirebaseSeatMap as
|
|
6
|
-
function
|
|
7
|
-
const [n,
|
|
1
|
+
import { jsx as y, jsxs as D } from "react/jsx-runtime";
|
|
2
|
+
import { useState as R, useEffect as Y, useRef as T, useCallback as N, useMemo as _, memo as ce } from "react";
|
|
3
|
+
import { Stage as dt, Layer as Fe, Group as ut, Rect as Te, Text as Ie, Circle as ht } from "react-konva";
|
|
4
|
+
import { ref as we, onValue as ze, off as Ae, get as ft } from "firebase/database";
|
|
5
|
+
import { fromFirebaseSeatMap as gt } from "@zonetrix/shared";
|
|
6
|
+
function pt(t) {
|
|
7
|
+
const [n, o] = R(null), [r, u] = R(!1), [l, s] = R(null), x = async () => {
|
|
8
8
|
if (t) {
|
|
9
|
-
u(!0),
|
|
9
|
+
u(!0), s(null);
|
|
10
10
|
try {
|
|
11
11
|
const f = await fetch(t);
|
|
12
12
|
if (!f.ok)
|
|
13
13
|
throw new Error(`Failed to fetch config: ${f.statusText}`);
|
|
14
14
|
const i = await f.json();
|
|
15
|
-
|
|
15
|
+
o(i);
|
|
16
16
|
} catch (f) {
|
|
17
17
|
const i = f instanceof Error ? f : new Error("Unknown error occurred");
|
|
18
|
-
|
|
18
|
+
s(i), console.error("Failed to fetch seat map config:", i);
|
|
19
19
|
} finally {
|
|
20
20
|
u(!1);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
-
return
|
|
25
|
-
|
|
24
|
+
return Y(() => {
|
|
25
|
+
x();
|
|
26
26
|
}, [t]), {
|
|
27
27
|
config: n,
|
|
28
|
-
loading:
|
|
28
|
+
loading: r,
|
|
29
29
|
error: l,
|
|
30
|
-
refetch:
|
|
30
|
+
refetch: x
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
function
|
|
34
|
-
const [n,
|
|
35
|
-
return
|
|
36
|
-
const
|
|
37
|
-
if (!
|
|
38
|
-
const { width: u, height: l } =
|
|
39
|
-
u > 0 && l > 0 &&
|
|
40
|
-
const
|
|
41
|
-
const f =
|
|
33
|
+
function yt(t) {
|
|
34
|
+
const [n, o] = R({ width: 0, height: 0 });
|
|
35
|
+
return Y(() => {
|
|
36
|
+
const r = t.current;
|
|
37
|
+
if (!r) return;
|
|
38
|
+
const { width: u, height: l } = r.getBoundingClientRect();
|
|
39
|
+
u > 0 && l > 0 && o({ width: u, height: l });
|
|
40
|
+
const s = new ResizeObserver((x) => {
|
|
41
|
+
const f = x[0];
|
|
42
42
|
if (!f) return;
|
|
43
43
|
const { width: i, height: a } = f.contentRect;
|
|
44
|
-
i > 0 && a > 0 &&
|
|
44
|
+
i > 0 && a > 0 && o((d) => d.width === i && d.height === a ? d : { width: i, height: a });
|
|
45
45
|
});
|
|
46
|
-
return
|
|
47
|
-
|
|
46
|
+
return s.observe(r), () => {
|
|
47
|
+
s.disconnect();
|
|
48
48
|
};
|
|
49
49
|
}, [t]), n;
|
|
50
50
|
}
|
|
51
|
-
function
|
|
51
|
+
function De(t, n) {
|
|
52
52
|
return Math.sqrt(Math.pow(n.x - t.x, 2) + Math.pow(n.y - t.y, 2));
|
|
53
53
|
}
|
|
54
54
|
function ke(t, n) {
|
|
@@ -57,43 +57,43 @@ function ke(t, n) {
|
|
|
57
57
|
y: (t.y + n.y) / 2
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
-
function
|
|
61
|
-
const
|
|
62
|
-
|
|
60
|
+
function bt(t, n) {
|
|
61
|
+
const o = T(null), r = T(null), u = T(1);
|
|
62
|
+
Y(() => {
|
|
63
63
|
const l = t.current;
|
|
64
64
|
if (!l || !n.enabled) return;
|
|
65
|
-
const
|
|
65
|
+
const s = l.container(), x = (a) => {
|
|
66
66
|
if (a.touches.length === 2) {
|
|
67
67
|
a.preventDefault();
|
|
68
68
|
const d = { x: a.touches[0].clientX, y: a.touches[0].clientY }, h = { x: a.touches[1].clientX, y: a.touches[1].clientY };
|
|
69
|
-
|
|
69
|
+
o.current = De(d, h), r.current = ke(d, h), u.current = n.currentScale;
|
|
70
70
|
}
|
|
71
71
|
}, f = (a) => {
|
|
72
72
|
if (a.touches.length !== 2) return;
|
|
73
73
|
a.preventDefault();
|
|
74
|
-
const d = { x: a.touches[0].clientX, y: a.touches[0].clientY }, h = { x: a.touches[1].clientX, y: a.touches[1].clientY },
|
|
75
|
-
if (
|
|
76
|
-
const C =
|
|
74
|
+
const d = { x: a.touches[0].clientX, y: a.touches[0].clientY }, h = { x: a.touches[1].clientX, y: a.touches[1].clientY }, m = De(d, h), S = ke(d, h);
|
|
75
|
+
if (o.current !== null && r.current !== null) {
|
|
76
|
+
const C = m / o.current, F = Math.min(
|
|
77
77
|
Math.max(n.currentScale * C, n.minScale),
|
|
78
78
|
n.maxScale
|
|
79
|
-
),
|
|
80
|
-
x: (
|
|
81
|
-
y: (L - n.currentPosition.y) /
|
|
82
|
-
},
|
|
83
|
-
x:
|
|
84
|
-
y: L -
|
|
79
|
+
), I = s.getBoundingClientRect(), M = S.x - I.left, L = S.y - I.top, z = n.currentScale, X = {
|
|
80
|
+
x: (M - n.currentPosition.x) / z,
|
|
81
|
+
y: (L - n.currentPosition.y) / z
|
|
82
|
+
}, q = S.x - r.current.x, j = S.y - r.current.y, Z = {
|
|
83
|
+
x: M - X.x * F + q,
|
|
84
|
+
y: L - X.y * F + j
|
|
85
85
|
};
|
|
86
|
-
n.onScaleChange(
|
|
86
|
+
n.onScaleChange(F, Z), o.current = m, r.current = S;
|
|
87
87
|
}
|
|
88
88
|
}, i = (a) => {
|
|
89
|
-
a.touches.length < 2 && (
|
|
89
|
+
a.touches.length < 2 && (o.current = null, r.current = null);
|
|
90
90
|
};
|
|
91
|
-
return
|
|
92
|
-
|
|
91
|
+
return s.addEventListener("touchstart", x, { passive: !1 }), s.addEventListener("touchmove", f, { passive: !1 }), s.addEventListener("touchend", i), () => {
|
|
92
|
+
s.removeEventListener("touchstart", x), s.removeEventListener("touchmove", f), s.removeEventListener("touchend", i);
|
|
93
93
|
};
|
|
94
94
|
}, [t, n]);
|
|
95
95
|
}
|
|
96
|
-
const
|
|
96
|
+
const vt = {
|
|
97
97
|
canvasBackground: "#1a1a1a",
|
|
98
98
|
stageColor: "#808080",
|
|
99
99
|
seatAvailable: "#2C2B30",
|
|
@@ -103,25 +103,25 @@ const bt = {
|
|
|
103
103
|
seatHidden: "#4a4a4a",
|
|
104
104
|
gridLines: "#404040",
|
|
105
105
|
currency: "KD"
|
|
106
|
-
},
|
|
106
|
+
}, Xe = ce(({ seat: t, state: n, colors: o, onClick: r, onMouseEnter: u, onMouseLeave: l }) => {
|
|
107
107
|
const f = {
|
|
108
|
-
available:
|
|
109
|
-
reserved:
|
|
110
|
-
selected:
|
|
111
|
-
unavailable:
|
|
112
|
-
hidden:
|
|
108
|
+
available: o.seatAvailable,
|
|
109
|
+
reserved: o.seatReserved,
|
|
110
|
+
selected: o.seatSelected,
|
|
111
|
+
unavailable: o.seatUnavailable,
|
|
112
|
+
hidden: o.seatHidden
|
|
113
113
|
// Hidden seats are filtered out, but included for type safety
|
|
114
114
|
}[n], i = n === "available" || n === "selected", a = N(() => {
|
|
115
|
-
i &&
|
|
116
|
-
}, [t,
|
|
117
|
-
u(t,
|
|
118
|
-
const C =
|
|
115
|
+
i && r(t);
|
|
116
|
+
}, [t, r, i]), d = N((S) => {
|
|
117
|
+
u(t, S);
|
|
118
|
+
const C = S.target.getStage();
|
|
119
119
|
C && i && (C.container().style.cursor = "pointer");
|
|
120
|
-
}, [t, u, i]), h = N((
|
|
120
|
+
}, [t, u, i]), h = N((S) => {
|
|
121
121
|
l();
|
|
122
|
-
const C =
|
|
122
|
+
const C = S.target.getStage();
|
|
123
123
|
C && (C.container().style.cursor = "grab");
|
|
124
|
-
}, [l]),
|
|
124
|
+
}, [l]), m = {
|
|
125
125
|
x: t.position.x,
|
|
126
126
|
y: t.position.y,
|
|
127
127
|
fill: f,
|
|
@@ -132,16 +132,16 @@ const bt = {
|
|
|
132
132
|
onMouseEnter: d,
|
|
133
133
|
onMouseLeave: h
|
|
134
134
|
};
|
|
135
|
-
return t.shape === "circle" ? /* @__PURE__ */
|
|
136
|
-
|
|
135
|
+
return t.shape === "circle" ? /* @__PURE__ */ y(
|
|
136
|
+
ht,
|
|
137
137
|
{
|
|
138
|
-
...
|
|
138
|
+
...m,
|
|
139
139
|
radius: 12
|
|
140
140
|
}
|
|
141
|
-
) : /* @__PURE__ */
|
|
142
|
-
|
|
141
|
+
) : /* @__PURE__ */ y(
|
|
142
|
+
Te,
|
|
143
143
|
{
|
|
144
|
-
...
|
|
144
|
+
...m,
|
|
145
145
|
width: 24,
|
|
146
146
|
height: 24,
|
|
147
147
|
offsetX: 12,
|
|
@@ -150,9 +150,9 @@ const bt = {
|
|
|
150
150
|
}
|
|
151
151
|
);
|
|
152
152
|
});
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
const
|
|
153
|
+
Xe.displayName = "ViewerSeat";
|
|
154
|
+
const Ye = ce(({ stage: t, stageColor: n }) => {
|
|
155
|
+
const o = (l) => ({
|
|
156
156
|
stage: "🎭",
|
|
157
157
|
table: "⬜",
|
|
158
158
|
wall: "▬",
|
|
@@ -161,21 +161,21 @@ const Xe = se(({ stage: t, stageColor: n }) => {
|
|
|
161
161
|
bar: "🍷",
|
|
162
162
|
"entry-exit": "🚪",
|
|
163
163
|
custom: "➕"
|
|
164
|
-
})[l || "stage"] || "🎭",
|
|
165
|
-
return /* @__PURE__ */
|
|
166
|
-
/* @__PURE__ */
|
|
167
|
-
|
|
164
|
+
})[l || "stage"] || "🎭", r = t.config.color || n, u = o(t.config.objectType);
|
|
165
|
+
return /* @__PURE__ */ D(ut, { x: t.position.x, y: t.position.y, rotation: t.config.rotation || 0, children: [
|
|
166
|
+
/* @__PURE__ */ y(
|
|
167
|
+
Te,
|
|
168
168
|
{
|
|
169
169
|
width: t.config.width,
|
|
170
170
|
height: t.config.height,
|
|
171
|
-
fill:
|
|
171
|
+
fill: r + "80",
|
|
172
172
|
stroke: "#ffffff",
|
|
173
173
|
strokeWidth: 2,
|
|
174
174
|
cornerRadius: 10
|
|
175
175
|
}
|
|
176
176
|
),
|
|
177
|
-
/* @__PURE__ */
|
|
178
|
-
|
|
177
|
+
/* @__PURE__ */ y(
|
|
178
|
+
Ie,
|
|
179
179
|
{
|
|
180
180
|
text: u,
|
|
181
181
|
x: 0,
|
|
@@ -188,8 +188,8 @@ const Xe = se(({ stage: t, stageColor: n }) => {
|
|
|
188
188
|
verticalAlign: "middle"
|
|
189
189
|
}
|
|
190
190
|
),
|
|
191
|
-
/* @__PURE__ */
|
|
192
|
-
|
|
191
|
+
/* @__PURE__ */ y(
|
|
192
|
+
Ie,
|
|
193
193
|
{
|
|
194
194
|
text: t.config.label,
|
|
195
195
|
x: 0,
|
|
@@ -205,18 +205,18 @@ const Xe = se(({ stage: t, stageColor: n }) => {
|
|
|
205
205
|
)
|
|
206
206
|
] });
|
|
207
207
|
});
|
|
208
|
-
|
|
209
|
-
const
|
|
208
|
+
Ye.displayName = "ViewerStage";
|
|
209
|
+
const je = ce(({
|
|
210
210
|
floors: t,
|
|
211
211
|
currentFloorId: n,
|
|
212
|
-
onFloorChange:
|
|
213
|
-
showAllOption:
|
|
212
|
+
onFloorChange: o,
|
|
213
|
+
showAllOption: r,
|
|
214
214
|
allLabel: u,
|
|
215
215
|
position: l,
|
|
216
|
-
className:
|
|
216
|
+
className: s
|
|
217
217
|
}) => {
|
|
218
|
-
const
|
|
219
|
-
() => [...t].sort((h,
|
|
218
|
+
const x = _(
|
|
219
|
+
() => [...t].sort((h, m) => h.order - m.order),
|
|
220
220
|
[t]
|
|
221
221
|
), i = {
|
|
222
222
|
position: "absolute",
|
|
@@ -251,21 +251,21 @@ const Ye = se(({
|
|
|
251
251
|
backgroundColor: "#3A7DE5",
|
|
252
252
|
borderColor: "#3A7DE5"
|
|
253
253
|
};
|
|
254
|
-
return /* @__PURE__ */
|
|
255
|
-
|
|
254
|
+
return /* @__PURE__ */ D("div", { className: s, style: i, children: [
|
|
255
|
+
r && /* @__PURE__ */ y(
|
|
256
256
|
"button",
|
|
257
257
|
{
|
|
258
258
|
type: "button",
|
|
259
|
-
onClick: () =>
|
|
259
|
+
onClick: () => o(null),
|
|
260
260
|
style: n === null ? d : a,
|
|
261
261
|
children: u
|
|
262
262
|
}
|
|
263
263
|
),
|
|
264
|
-
|
|
264
|
+
x.map((h) => /* @__PURE__ */ y(
|
|
265
265
|
"button",
|
|
266
266
|
{
|
|
267
267
|
type: "button",
|
|
268
|
-
onClick: () =>
|
|
268
|
+
onClick: () => o(h.id),
|
|
269
269
|
style: n === h.id ? d : a,
|
|
270
270
|
children: h.name
|
|
271
271
|
},
|
|
@@ -273,15 +273,15 @@ const Ye = se(({
|
|
|
273
273
|
))
|
|
274
274
|
] });
|
|
275
275
|
});
|
|
276
|
-
|
|
277
|
-
const
|
|
276
|
+
je.displayName = "FloorSelectorBar";
|
|
277
|
+
const We = ce(({
|
|
278
278
|
scale: t,
|
|
279
279
|
minScale: n,
|
|
280
|
-
maxScale:
|
|
281
|
-
onZoomIn:
|
|
280
|
+
maxScale: o,
|
|
281
|
+
onZoomIn: r,
|
|
282
282
|
onZoomOut: u,
|
|
283
283
|
position: l,
|
|
284
|
-
className:
|
|
284
|
+
className: s
|
|
285
285
|
}) => {
|
|
286
286
|
const f = {
|
|
287
287
|
position: "absolute",
|
|
@@ -320,20 +320,20 @@ const je = se(({
|
|
|
320
320
|
...i,
|
|
321
321
|
opacity: 0.4,
|
|
322
322
|
cursor: "not-allowed"
|
|
323
|
-
}, d = t <
|
|
324
|
-
return /* @__PURE__ */
|
|
325
|
-
/* @__PURE__ */
|
|
323
|
+
}, d = t < o, h = t > n;
|
|
324
|
+
return /* @__PURE__ */ D("div", { className: s, style: f, children: [
|
|
325
|
+
/* @__PURE__ */ y(
|
|
326
326
|
"button",
|
|
327
327
|
{
|
|
328
328
|
type: "button",
|
|
329
|
-
onClick:
|
|
329
|
+
onClick: r,
|
|
330
330
|
disabled: !d,
|
|
331
331
|
style: d ? i : a,
|
|
332
332
|
title: "Zoom In",
|
|
333
333
|
children: "+"
|
|
334
334
|
}
|
|
335
335
|
),
|
|
336
|
-
/* @__PURE__ */
|
|
336
|
+
/* @__PURE__ */ y(
|
|
337
337
|
"button",
|
|
338
338
|
{
|
|
339
339
|
type: "button",
|
|
@@ -346,20 +346,20 @@ const je = se(({
|
|
|
346
346
|
)
|
|
347
347
|
] });
|
|
348
348
|
});
|
|
349
|
-
|
|
350
|
-
const
|
|
349
|
+
We.displayName = "ZoomControls";
|
|
350
|
+
const Pe = ce(({
|
|
351
351
|
visible: t,
|
|
352
352
|
x: n,
|
|
353
|
-
y:
|
|
354
|
-
seat:
|
|
353
|
+
y: o,
|
|
354
|
+
seat: r,
|
|
355
355
|
currency: u,
|
|
356
356
|
state: l
|
|
357
357
|
}) => {
|
|
358
|
-
if (!t || !
|
|
359
|
-
const
|
|
358
|
+
if (!t || !r) return null;
|
|
359
|
+
const s = r.seatNumber || (r.rowLabel && r.columnLabel ? `${r.rowLabel}-${r.columnLabel}` : "N/A"), x = {
|
|
360
360
|
position: "fixed",
|
|
361
361
|
left: `${n + 15}px`,
|
|
362
|
-
top: `${
|
|
362
|
+
top: `${o + 15}px`,
|
|
363
363
|
zIndex: 1e3,
|
|
364
364
|
pointerEvents: "none"
|
|
365
365
|
}, f = {
|
|
@@ -385,468 +385,482 @@ const Ae = se(({
|
|
|
385
385
|
textTransform: "capitalize",
|
|
386
386
|
marginTop: "4px"
|
|
387
387
|
};
|
|
388
|
-
return /* @__PURE__ */
|
|
389
|
-
|
|
390
|
-
/* @__PURE__ */
|
|
391
|
-
/* @__PURE__ */
|
|
388
|
+
return /* @__PURE__ */ y("div", { style: x, children: /* @__PURE__ */ D("div", { style: f, children: [
|
|
389
|
+
r.sectionName && /* @__PURE__ */ D("div", { style: { marginBottom: "4px" }, children: [
|
|
390
|
+
/* @__PURE__ */ y("span", { style: i, children: "Section:" }),
|
|
391
|
+
/* @__PURE__ */ y("span", { style: { ...a, color: "#3b82f6" }, children: r.sectionName })
|
|
392
392
|
] }),
|
|
393
|
-
/* @__PURE__ */
|
|
394
|
-
/* @__PURE__ */
|
|
395
|
-
/* @__PURE__ */
|
|
393
|
+
/* @__PURE__ */ D("div", { style: { marginBottom: "4px" }, children: [
|
|
394
|
+
/* @__PURE__ */ y("span", { style: i, children: "Seat:" }),
|
|
395
|
+
/* @__PURE__ */ y("span", { style: a, children: s })
|
|
396
396
|
] }),
|
|
397
|
-
|
|
398
|
-
/* @__PURE__ */
|
|
399
|
-
/* @__PURE__ */
|
|
397
|
+
r.price !== void 0 && r.price > 0 && l === "available" && /* @__PURE__ */ D("div", { style: { marginBottom: "4px" }, children: [
|
|
398
|
+
/* @__PURE__ */ y("span", { style: i, children: "Price:" }),
|
|
399
|
+
/* @__PURE__ */ D("span", { style: d, children: [
|
|
400
400
|
u,
|
|
401
401
|
" ",
|
|
402
|
-
|
|
402
|
+
r.price.toFixed(2)
|
|
403
403
|
] })
|
|
404
404
|
] }),
|
|
405
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ D("div", { style: h, children: [
|
|
406
406
|
"Status: ",
|
|
407
407
|
l
|
|
408
408
|
] })
|
|
409
409
|
] }) });
|
|
410
410
|
});
|
|
411
|
-
|
|
412
|
-
const
|
|
411
|
+
Pe.displayName = "SeatTooltip";
|
|
412
|
+
const Et = ({
|
|
413
413
|
config: t,
|
|
414
414
|
configUrl: n,
|
|
415
|
-
floorId:
|
|
416
|
-
onFloorChange:
|
|
415
|
+
floorId: o,
|
|
416
|
+
onFloorChange: r,
|
|
417
417
|
reservedSeats: u = [],
|
|
418
418
|
unavailableSeats: l = [],
|
|
419
|
-
selectedSeats:
|
|
420
|
-
myReservedSeats:
|
|
419
|
+
selectedSeats: s,
|
|
420
|
+
myReservedSeats: x = [],
|
|
421
421
|
onSeatSelect: f,
|
|
422
422
|
onSeatDeselect: i,
|
|
423
423
|
onSelectionChange: a,
|
|
424
424
|
colorOverrides: d,
|
|
425
425
|
showTooltip: h = !0,
|
|
426
|
-
zoomEnabled:
|
|
427
|
-
className:
|
|
426
|
+
zoomEnabled: m = !0,
|
|
427
|
+
className: S = "",
|
|
428
428
|
onConfigLoad: C,
|
|
429
|
-
onError:
|
|
429
|
+
onError: F,
|
|
430
430
|
// Floor selector props
|
|
431
|
-
showFloorSelector:
|
|
432
|
-
floorSelectorPosition:
|
|
431
|
+
showFloorSelector: I,
|
|
432
|
+
floorSelectorPosition: M = "top-left",
|
|
433
433
|
floorSelectorClassName: L,
|
|
434
|
-
showAllFloorsOption:
|
|
435
|
-
allFloorsLabel:
|
|
436
|
-
fitToView:
|
|
434
|
+
showAllFloorsOption: z = !0,
|
|
435
|
+
allFloorsLabel: X = "All",
|
|
436
|
+
fitToView: q = !0,
|
|
437
437
|
fitPadding: j = 40,
|
|
438
438
|
// Zoom controls
|
|
439
|
-
showZoomControls:
|
|
440
|
-
zoomControlsPosition:
|
|
441
|
-
zoomControlsClassName:
|
|
442
|
-
minZoom:
|
|
443
|
-
maxZoom:
|
|
439
|
+
showZoomControls: Z = !0,
|
|
440
|
+
zoomControlsPosition: P = "bottom-right",
|
|
441
|
+
zoomControlsClassName: K,
|
|
442
|
+
minZoom: le,
|
|
443
|
+
maxZoom: $ = 3,
|
|
444
444
|
zoomStep: B = 0.25,
|
|
445
445
|
// Touch gestures
|
|
446
|
-
touchEnabled:
|
|
446
|
+
touchEnabled: Me = !0
|
|
447
447
|
}) => {
|
|
448
|
-
const
|
|
449
|
-
be ||
|
|
450
|
-
}, [be,
|
|
451
|
-
() =>
|
|
452
|
-
[
|
|
453
|
-
),
|
|
454
|
-
if (!
|
|
455
|
-
let e =
|
|
456
|
-
return
|
|
457
|
-
(c) => c.floorId ===
|
|
448
|
+
const O = T(null), V = T(null), E = yt(V), [U, ye] = R(/* @__PURE__ */ new Set()), [k, te] = R(1), [A, G] = R({ x: 0, y: 0 }), [$e, Be] = R(null), [Oe, Ue] = R(1), de = T({ width: 0, height: 0 }), [ne, Ee] = R({ visible: !1, x: 0, y: 0, seat: null, state: "available" }), { config: Ve, loading: He, error: re } = pt(n), g = t || Ve, be = o !== void 0, W = be ? o || null : $e, ue = s !== void 0, _e = N((e) => {
|
|
449
|
+
be || Be(e), r?.(e);
|
|
450
|
+
}, [be, r]), ve = g?.floors || [], qe = I !== void 0 ? I : ve.length > 1, he = _(
|
|
451
|
+
() => g ? { ...g.colors, ...d } : { ...vt, ...d },
|
|
452
|
+
[g, d]
|
|
453
|
+
), Q = _(() => {
|
|
454
|
+
if (!g) return [];
|
|
455
|
+
let e = g.seats.filter((c) => c.state !== "hidden");
|
|
456
|
+
return W && (e = e.filter(
|
|
457
|
+
(c) => c.floorId === W || !c.floorId && W === "floor_default"
|
|
458
458
|
)), e;
|
|
459
|
-
}, [
|
|
460
|
-
(e) => e.floorId ===
|
|
461
|
-
) :
|
|
462
|
-
if (!
|
|
459
|
+
}, [g, W]), fe = _(() => g?.stages ? W ? g.stages.filter(
|
|
460
|
+
(e) => e.floorId === W || !e.floorId && W === "floor_default"
|
|
461
|
+
) : g.stages : [], [g, W]), H = _(() => {
|
|
462
|
+
if (!g || Q.length === 0 && fe.length === 0)
|
|
463
463
|
return null;
|
|
464
464
|
const e = 12;
|
|
465
|
-
let c = 1 / 0,
|
|
466
|
-
return
|
|
467
|
-
c = Math.min(c, w.position.x - e),
|
|
468
|
-
}),
|
|
469
|
-
c = Math.min(c, w.position.x),
|
|
470
|
-
}), { minX: c, minY:
|
|
471
|
-
}, [
|
|
472
|
-
|
|
473
|
-
if (!
|
|
474
|
-
const e = Math.abs(
|
|
475
|
-
if (!(
|
|
476
|
-
|
|
477
|
-
const
|
|
478
|
-
|
|
479
|
-
}, [
|
|
480
|
-
const
|
|
481
|
-
const e = new Set(u), c = new Set(l),
|
|
482
|
-
return { reserved: e, unavailable: c, myReserved:
|
|
483
|
-
}, [u, l,
|
|
484
|
-
const c = e.id,
|
|
485
|
-
return
|
|
486
|
-
}, [
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
}, [
|
|
490
|
-
|
|
491
|
-
}, [
|
|
492
|
-
|
|
493
|
-
}, [
|
|
494
|
-
const
|
|
495
|
-
const c =
|
|
465
|
+
let c = 1 / 0, p = 1 / 0, b = -1 / 0, v = -1 / 0;
|
|
466
|
+
return Q.forEach((w) => {
|
|
467
|
+
c = Math.min(c, w.position.x - e), p = Math.min(p, w.position.y - e), b = Math.max(b, w.position.x + e), v = Math.max(v, w.position.y + e);
|
|
468
|
+
}), fe.forEach((w) => {
|
|
469
|
+
c = Math.min(c, w.position.x), p = Math.min(p, w.position.y), b = Math.max(b, w.position.x + (w.config?.width || 200)), v = Math.max(v, w.position.y + (w.config?.height || 100));
|
|
470
|
+
}), { minX: c, minY: p, maxX: b, maxY: v, width: b - c, height: v - p };
|
|
471
|
+
}, [g, Q, fe]);
|
|
472
|
+
Y(() => {
|
|
473
|
+
if (!q || !g || !H || E.width === 0 || E.height === 0) return;
|
|
474
|
+
const e = Math.abs(E.width - de.current.width), c = Math.abs(E.height - de.current.height);
|
|
475
|
+
if (!(de.current.width === 0) && e < 10 && c < 10) return;
|
|
476
|
+
de.current = E;
|
|
477
|
+
const b = E.width, v = E.height, w = b - j * 2, se = v - j * 2, ge = w / H.width, xe = se / H.height, pe = Math.min(ge, xe, $), ot = H.minX + H.width / 2, it = H.minY + H.height / 2, st = b / 2, at = v / 2, ct = st - ot * pe, lt = at - it * pe;
|
|
478
|
+
te(pe), G({ x: ct, y: lt }), Ue(pe);
|
|
479
|
+
}, [q, g, H, j, $, E, W]);
|
|
480
|
+
const J = _(() => {
|
|
481
|
+
const e = new Set(u), c = new Set(l), p = new Set(x);
|
|
482
|
+
return { reserved: e, unavailable: c, myReserved: p };
|
|
483
|
+
}, [u, l, x]), me = _(() => s ? new Set(s) : null, [s]), oe = N((e) => {
|
|
484
|
+
const c = e.id, p = e.seatNumber || "";
|
|
485
|
+
return J.unavailable.has(c) || J.unavailable.has(p) ? "unavailable" : J.reserved.has(c) || J.reserved.has(p) ? "reserved" : J.myReserved.has(c) || J.myReserved.has(p) || U.has(c) ? "selected" : e.state;
|
|
486
|
+
}, [J, U]);
|
|
487
|
+
Y(() => {
|
|
488
|
+
g && C && C(g);
|
|
489
|
+
}, [g, C]), Y(() => {
|
|
490
|
+
re && F && F(re);
|
|
491
|
+
}, [re, F]), Y(() => {
|
|
492
|
+
ue && me && ye(me);
|
|
493
|
+
}, [ue, me]);
|
|
494
|
+
const Ge = N((e) => {
|
|
495
|
+
const c = oe(e);
|
|
496
496
|
if (c !== "available" && c !== "selected")
|
|
497
497
|
return;
|
|
498
|
-
const
|
|
499
|
-
|
|
500
|
-
const v = new Set(
|
|
501
|
-
return
|
|
502
|
-
}),
|
|
503
|
-
}, [
|
|
504
|
-
|
|
505
|
-
a?.(
|
|
506
|
-
}, [
|
|
507
|
-
const
|
|
508
|
-
if (!
|
|
509
|
-
const e = Math.min(
|
|
510
|
-
if (e !==
|
|
511
|
-
const c =
|
|
512
|
-
x: (
|
|
513
|
-
y: (v -
|
|
498
|
+
const p = U.has(e.id);
|
|
499
|
+
ue || ye((b) => {
|
|
500
|
+
const v = new Set(b);
|
|
501
|
+
return p ? v.delete(e.id) : v.add(e.id), v;
|
|
502
|
+
}), p ? i?.(e) : (f?.(e), f || console.log("Seat selected:", e));
|
|
503
|
+
}, [oe, U, ue, f, i]), ie = _(() => g ? Q.filter((e) => U.has(e.id)) : [], [Q, U]);
|
|
504
|
+
Y(() => {
|
|
505
|
+
a?.(ie);
|
|
506
|
+
}, [ie, a]);
|
|
507
|
+
const ee = le !== void 0 ? le : Oe, Je = N(() => {
|
|
508
|
+
if (!m) return;
|
|
509
|
+
const e = Math.min(k + B, $);
|
|
510
|
+
if (e !== k) {
|
|
511
|
+
const c = E.width || g?.canvas.width || 800, p = E.height || g?.canvas.height || 600, b = c / 2, v = p / 2, w = {
|
|
512
|
+
x: (b - A.x) / k,
|
|
513
|
+
y: (v - A.y) / k
|
|
514
514
|
};
|
|
515
|
-
|
|
516
|
-
x:
|
|
515
|
+
te(e), G({
|
|
516
|
+
x: b - w.x * e,
|
|
517
517
|
y: v - w.y * e
|
|
518
518
|
});
|
|
519
519
|
}
|
|
520
|
-
}, [
|
|
521
|
-
if (!
|
|
522
|
-
const e = Math.max(
|
|
523
|
-
if (e !==
|
|
524
|
-
const c =
|
|
525
|
-
x: (
|
|
526
|
-
y: (v -
|
|
520
|
+
}, [m, k, B, $, E, g, A]), Ze = N(() => {
|
|
521
|
+
if (!m) return;
|
|
522
|
+
const e = Math.max(k - B, ee);
|
|
523
|
+
if (e !== k) {
|
|
524
|
+
const c = E.width || g?.canvas.width || 800, p = E.height || g?.canvas.height || 600, b = c / 2, v = p / 2, w = {
|
|
525
|
+
x: (b - A.x) / k,
|
|
526
|
+
y: (v - A.y) / k
|
|
527
527
|
};
|
|
528
|
-
|
|
529
|
-
x:
|
|
528
|
+
te(e), G({
|
|
529
|
+
x: b - w.x * e,
|
|
530
530
|
y: v - w.y * e
|
|
531
531
|
});
|
|
532
532
|
}
|
|
533
|
-
}, [
|
|
534
|
-
|
|
533
|
+
}, [m, k, B, ee, E, g, A]), Ke = N((e) => {
|
|
534
|
+
G({
|
|
535
535
|
x: e.target.x(),
|
|
536
536
|
y: e.target.y()
|
|
537
537
|
});
|
|
538
|
-
}, []),
|
|
539
|
-
if (!
|
|
538
|
+
}, []), Qe = N((e) => {
|
|
539
|
+
if (!m) return;
|
|
540
540
|
e.evt.preventDefault();
|
|
541
|
-
const c =
|
|
541
|
+
const c = O.current;
|
|
542
542
|
if (!c) return;
|
|
543
|
-
const
|
|
544
|
-
if (!
|
|
545
|
-
const v = 1.1, w = e.evt.deltaY > 0 ?
|
|
546
|
-
x: (
|
|
547
|
-
y: (
|
|
548
|
-
},
|
|
549
|
-
x:
|
|
550
|
-
y:
|
|
543
|
+
const p = c.scaleX(), b = c.getPointerPosition();
|
|
544
|
+
if (!b) return;
|
|
545
|
+
const v = 1.1, w = e.evt.deltaY > 0 ? p / v : p * v, se = Math.min(Math.max(w, ee), $), ge = {
|
|
546
|
+
x: (b.x - A.x) / p,
|
|
547
|
+
y: (b.y - A.y) / p
|
|
548
|
+
}, xe = {
|
|
549
|
+
x: b.x - ge.x * se,
|
|
550
|
+
y: b.y - ge.y * se
|
|
551
551
|
};
|
|
552
|
-
|
|
553
|
-
}, [
|
|
554
|
-
|
|
555
|
-
enabled:
|
|
556
|
-
minScale:
|
|
557
|
-
maxScale:
|
|
558
|
-
currentScale:
|
|
559
|
-
currentPosition:
|
|
552
|
+
te(se), G(xe);
|
|
553
|
+
}, [m, A, ee, $]);
|
|
554
|
+
bt(O, {
|
|
555
|
+
enabled: Me && m,
|
|
556
|
+
minScale: ee,
|
|
557
|
+
maxScale: $,
|
|
558
|
+
currentScale: k,
|
|
559
|
+
currentPosition: A,
|
|
560
560
|
onScaleChange: (e, c) => {
|
|
561
|
-
|
|
561
|
+
te(e), G(c);
|
|
562
562
|
},
|
|
563
563
|
onPositionChange: (e) => {
|
|
564
|
-
|
|
564
|
+
G(e);
|
|
565
565
|
}
|
|
566
566
|
});
|
|
567
|
-
const
|
|
567
|
+
const et = N((e, c) => {
|
|
568
568
|
if (!h) return;
|
|
569
|
-
const
|
|
570
|
-
if (!
|
|
571
|
-
const
|
|
572
|
-
if (!
|
|
573
|
-
const v =
|
|
574
|
-
|
|
569
|
+
const p = c.target.getStage();
|
|
570
|
+
if (!p) return;
|
|
571
|
+
const b = p.getPointerPosition();
|
|
572
|
+
if (!b) return;
|
|
573
|
+
const v = p.container().getBoundingClientRect();
|
|
574
|
+
Ee({
|
|
575
575
|
visible: !0,
|
|
576
|
-
x: v.left +
|
|
577
|
-
y: v.top +
|
|
576
|
+
x: v.left + b.x,
|
|
577
|
+
y: v.top + b.y,
|
|
578
578
|
seat: e,
|
|
579
|
-
state:
|
|
579
|
+
state: oe(e)
|
|
580
580
|
});
|
|
581
|
-
}, [h,
|
|
582
|
-
|
|
581
|
+
}, [h, oe]), tt = N(() => {
|
|
582
|
+
Ee((e) => ({ ...e, visible: !1 }));
|
|
583
583
|
}, []);
|
|
584
|
-
if (
|
|
585
|
-
return /* @__PURE__ */
|
|
586
|
-
if (
|
|
587
|
-
return /* @__PURE__ */
|
|
584
|
+
if (He)
|
|
585
|
+
return /* @__PURE__ */ y("div", { className: `flex items-center justify-center h-full ${S}`, children: /* @__PURE__ */ y("p", { children: "Loading seat map..." }) });
|
|
586
|
+
if (re)
|
|
587
|
+
return /* @__PURE__ */ y("div", { className: `flex items-center justify-center h-full ${S}`, children: /* @__PURE__ */ D("p", { className: "text-red-500", children: [
|
|
588
588
|
"Error loading seat map: ",
|
|
589
|
-
|
|
589
|
+
re.message
|
|
590
590
|
] }) });
|
|
591
|
-
if (!
|
|
592
|
-
return /* @__PURE__ */
|
|
593
|
-
const
|
|
594
|
-
return /* @__PURE__ */
|
|
591
|
+
if (!g)
|
|
592
|
+
return /* @__PURE__ */ y("div", { className: `flex items-center justify-center h-full ${S}`, children: /* @__PURE__ */ y("p", { children: "No configuration provided" }) });
|
|
593
|
+
const nt = E.width || g.canvas.width, rt = E.height || g.canvas.height;
|
|
594
|
+
return /* @__PURE__ */ D(
|
|
595
595
|
"div",
|
|
596
596
|
{
|
|
597
|
-
ref:
|
|
598
|
-
className: `relative ${
|
|
597
|
+
ref: V,
|
|
598
|
+
className: `relative ${S}`,
|
|
599
599
|
style: { width: "100%", height: "100%" },
|
|
600
600
|
children: [
|
|
601
|
-
|
|
602
|
-
|
|
601
|
+
qe && ve.length > 0 && /* @__PURE__ */ y(
|
|
602
|
+
je,
|
|
603
603
|
{
|
|
604
|
-
floors:
|
|
605
|
-
currentFloorId:
|
|
606
|
-
onFloorChange:
|
|
607
|
-
showAllOption:
|
|
608
|
-
allLabel:
|
|
609
|
-
position:
|
|
604
|
+
floors: ve,
|
|
605
|
+
currentFloorId: W,
|
|
606
|
+
onFloorChange: _e,
|
|
607
|
+
showAllOption: z,
|
|
608
|
+
allLabel: X,
|
|
609
|
+
position: M,
|
|
610
610
|
className: L
|
|
611
611
|
}
|
|
612
612
|
),
|
|
613
|
-
/* @__PURE__ */
|
|
614
|
-
|
|
613
|
+
/* @__PURE__ */ D(
|
|
614
|
+
dt,
|
|
615
615
|
{
|
|
616
|
-
ref:
|
|
617
|
-
width:
|
|
618
|
-
height:
|
|
619
|
-
scaleX:
|
|
620
|
-
scaleY:
|
|
621
|
-
x:
|
|
622
|
-
y:
|
|
616
|
+
ref: O,
|
|
617
|
+
width: nt,
|
|
618
|
+
height: rt,
|
|
619
|
+
scaleX: k,
|
|
620
|
+
scaleY: k,
|
|
621
|
+
x: A.x,
|
|
622
|
+
y: A.y,
|
|
623
623
|
draggable: !0,
|
|
624
|
-
onDragEnd:
|
|
625
|
-
onWheel:
|
|
626
|
-
style: { backgroundColor:
|
|
624
|
+
onDragEnd: Ke,
|
|
625
|
+
onWheel: Qe,
|
|
626
|
+
style: { backgroundColor: g.canvas.backgroundColor, cursor: "grab" },
|
|
627
627
|
children: [
|
|
628
|
-
/* @__PURE__ */
|
|
629
|
-
|
|
628
|
+
/* @__PURE__ */ y(Fe, { listening: !1, children: fe.map((e) => /* @__PURE__ */ y(
|
|
629
|
+
Ye,
|
|
630
630
|
{
|
|
631
631
|
stage: e,
|
|
632
|
-
stageColor:
|
|
632
|
+
stageColor: he.stageColor
|
|
633
633
|
},
|
|
634
634
|
e.id
|
|
635
635
|
)) }),
|
|
636
|
-
/* @__PURE__ */
|
|
637
|
-
|
|
636
|
+
/* @__PURE__ */ y(Fe, { children: Q.map((e) => /* @__PURE__ */ y(
|
|
637
|
+
Xe,
|
|
638
638
|
{
|
|
639
639
|
seat: e,
|
|
640
|
-
state:
|
|
641
|
-
colors:
|
|
642
|
-
onClick:
|
|
643
|
-
onMouseEnter:
|
|
644
|
-
onMouseLeave:
|
|
640
|
+
state: oe(e),
|
|
641
|
+
colors: he,
|
|
642
|
+
onClick: Ge,
|
|
643
|
+
onMouseEnter: et,
|
|
644
|
+
onMouseLeave: tt
|
|
645
645
|
},
|
|
646
646
|
e.id
|
|
647
647
|
)) })
|
|
648
648
|
]
|
|
649
649
|
}
|
|
650
650
|
),
|
|
651
|
-
h && /* @__PURE__ */
|
|
652
|
-
|
|
651
|
+
h && /* @__PURE__ */ y(
|
|
652
|
+
Pe,
|
|
653
653
|
{
|
|
654
|
-
visible:
|
|
655
|
-
x:
|
|
656
|
-
y:
|
|
657
|
-
seat:
|
|
658
|
-
currency:
|
|
659
|
-
state:
|
|
654
|
+
visible: ne.visible,
|
|
655
|
+
x: ne.x,
|
|
656
|
+
y: ne.y,
|
|
657
|
+
seat: ne.seat,
|
|
658
|
+
currency: he.currency,
|
|
659
|
+
state: ne.state
|
|
660
660
|
}
|
|
661
661
|
),
|
|
662
|
-
|
|
663
|
-
|
|
662
|
+
Z && m && /* @__PURE__ */ y(
|
|
663
|
+
We,
|
|
664
664
|
{
|
|
665
|
-
scale:
|
|
666
|
-
minScale:
|
|
667
|
-
maxScale:
|
|
668
|
-
onZoomIn:
|
|
669
|
-
onZoomOut:
|
|
670
|
-
position:
|
|
671
|
-
className:
|
|
665
|
+
scale: k,
|
|
666
|
+
minScale: ee,
|
|
667
|
+
maxScale: $,
|
|
668
|
+
onZoomIn: Je,
|
|
669
|
+
onZoomOut: Ze,
|
|
670
|
+
position: P,
|
|
671
|
+
className: K
|
|
672
672
|
}
|
|
673
673
|
),
|
|
674
|
-
|
|
675
|
-
/* @__PURE__ */
|
|
674
|
+
ie.length > 0 && /* @__PURE__ */ D("div", { className: "absolute top-4 right-4 bg-white dark:bg-gray-800 p-4 rounded shadow-lg", children: [
|
|
675
|
+
/* @__PURE__ */ D("h3", { className: "font-semibold mb-2", children: [
|
|
676
676
|
"Selected Seats (",
|
|
677
|
-
|
|
677
|
+
ie.length,
|
|
678
678
|
")"
|
|
679
679
|
] }),
|
|
680
|
-
/* @__PURE__ */
|
|
680
|
+
/* @__PURE__ */ y("div", { className: "max-h-48 overflow-y-auto space-y-1", children: ie.map((e) => /* @__PURE__ */ D("div", { className: "text-sm", children: [
|
|
681
681
|
e.seatNumber,
|
|
682
|
-
e.price && ` - ${
|
|
682
|
+
e.price && ` - ${he.currency} ${e.price.toFixed(2)}`
|
|
683
683
|
] }, e.id)) })
|
|
684
684
|
] })
|
|
685
685
|
]
|
|
686
686
|
}
|
|
687
687
|
);
|
|
688
688
|
};
|
|
689
|
-
let
|
|
690
|
-
function
|
|
691
|
-
|
|
689
|
+
let ae = null;
|
|
690
|
+
function Ft(t) {
|
|
691
|
+
ae = t;
|
|
692
692
|
}
|
|
693
|
-
function
|
|
694
|
-
if (!
|
|
693
|
+
function Ce() {
|
|
694
|
+
if (!ae)
|
|
695
695
|
throw new Error(
|
|
696
696
|
"Firebase database not initialized. Call initializeFirebaseForViewer(db) first."
|
|
697
697
|
);
|
|
698
|
-
return
|
|
698
|
+
return ae;
|
|
699
|
+
}
|
|
700
|
+
function Re() {
|
|
701
|
+
return ae !== null;
|
|
699
702
|
}
|
|
700
|
-
function
|
|
701
|
-
|
|
703
|
+
function It() {
|
|
704
|
+
ae = null;
|
|
702
705
|
}
|
|
703
|
-
function
|
|
704
|
-
|
|
706
|
+
function Se(t, n) {
|
|
707
|
+
if (t.length !== n.length) return !1;
|
|
708
|
+
for (let o = 0; o < t.length; o++)
|
|
709
|
+
if (t[o] !== n[o]) return !1;
|
|
710
|
+
return !0;
|
|
705
711
|
}
|
|
706
712
|
function Le(t, n) {
|
|
707
|
-
|
|
708
|
-
return Object.entries(t).forEach(([l, r]) => {
|
|
709
|
-
r && typeof r == "object" && r.state && (r.state === "unavailable" ? u.push(l) : r.state === "reserved" && (n && r.userId === n ? s.push(l) : o.push(l)));
|
|
710
|
-
}), { myReservedSeats: s, otherReservedSeats: o, unavailableSeats: u };
|
|
713
|
+
return Se(t.myReserved, n.myReserved) && Se(t.otherReserved, n.otherReserved) && Se(t.unavailable, n.unavailable);
|
|
711
714
|
}
|
|
712
|
-
function
|
|
713
|
-
const
|
|
714
|
-
return
|
|
715
|
-
|
|
715
|
+
function Ne(t, n) {
|
|
716
|
+
const o = [], r = [], u = [];
|
|
717
|
+
return Object.entries(t).forEach(([l, s]) => {
|
|
718
|
+
s && typeof s == "object" && s.state && (s.state === "unavailable" ? u.push(l) : s.state === "reserved" && (n && s.userId === n ? o.push(l) : r.push(l)));
|
|
719
|
+
}), { myReserved: o, otherReserved: r, unavailable: u };
|
|
720
|
+
}
|
|
721
|
+
function mt(t) {
|
|
722
|
+
const { seatMapId: n, currentUserId: o, enabled: r = !0, onStateChange: u, onError: l } = t, [s, x] = R(null), [f, i] = R(!0), [a, d] = R(null), [h, m] = R(null), [S, C] = R([]), [F, I] = R([]), [M, L] = R([]), z = T(u), X = T(l), q = T(o);
|
|
723
|
+
z.current = u, X.current = l, q.current = o;
|
|
724
|
+
const j = T({
|
|
725
|
+
myReserved: [],
|
|
726
|
+
otherReserved: [],
|
|
727
|
+
unavailable: []
|
|
728
|
+
}), Z = T(null);
|
|
729
|
+
return Y(() => {
|
|
730
|
+
if (!r || !n) {
|
|
716
731
|
i(!1);
|
|
717
732
|
return;
|
|
718
733
|
}
|
|
719
|
-
if (!
|
|
734
|
+
if (!Re()) {
|
|
720
735
|
i(!1), d(new Error("Firebase not initialized. Call initializeFirebaseForViewer first."));
|
|
721
736
|
return;
|
|
722
737
|
}
|
|
723
|
-
const
|
|
724
|
-
return i(!0), d(null),
|
|
725
|
-
const
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
}, (O) => {
|
|
730
|
-
d(O), i(!1), P.current?.(O);
|
|
738
|
+
const P = Ce(), K = we(P, `seat_states/${n}`);
|
|
739
|
+
return i(!0), d(null), ze(K, (B) => {
|
|
740
|
+
const O = B.val() || {}, V = Ne(O, q.current), E = j.current, U = JSON.stringify(Z.current) !== JSON.stringify(O);
|
|
741
|
+
U && (x(O), Z.current = O), i(!1), !Le(E, V) && (m(Date.now()), C(V.myReserved), I(V.otherReserved), L(V.unavailable), j.current = V), U && z.current?.(O);
|
|
742
|
+
}, (B) => {
|
|
743
|
+
d(B), i(!1), X.current?.(B);
|
|
731
744
|
}), () => {
|
|
732
|
-
|
|
745
|
+
Ae(K);
|
|
733
746
|
};
|
|
734
|
-
}, [n,
|
|
735
|
-
if (
|
|
736
|
-
const
|
|
737
|
-
C(
|
|
747
|
+
}, [n, r]), Y(() => {
|
|
748
|
+
if (s) {
|
|
749
|
+
const P = Ne(s, o), K = j.current;
|
|
750
|
+
!Le(K, P) && (C(P.myReserved), I(P.otherReserved), L(P.unavailable), j.current = P, m(Date.now()));
|
|
738
751
|
}
|
|
739
|
-
}, [
|
|
740
|
-
states:
|
|
752
|
+
}, [o]), {
|
|
753
|
+
states: s,
|
|
741
754
|
loading: f,
|
|
742
755
|
error: a,
|
|
743
756
|
lastUpdated: h,
|
|
744
|
-
myReservedSeats:
|
|
745
|
-
otherReservedSeats:
|
|
746
|
-
unavailableSeats:
|
|
757
|
+
myReservedSeats: S,
|
|
758
|
+
otherReservedSeats: F,
|
|
759
|
+
unavailableSeats: M,
|
|
747
760
|
// Legacy alias
|
|
748
|
-
reservedSeats:
|
|
761
|
+
reservedSeats: F
|
|
749
762
|
};
|
|
750
763
|
}
|
|
751
|
-
function
|
|
764
|
+
function xt(t) {
|
|
752
765
|
const {
|
|
753
766
|
seatMapId: n,
|
|
754
|
-
enabled:
|
|
755
|
-
subscribeToChanges:
|
|
767
|
+
enabled: o = !0,
|
|
768
|
+
subscribeToChanges: r = !1,
|
|
756
769
|
onConfigLoad: u,
|
|
757
770
|
onError: l
|
|
758
|
-
} = t, [
|
|
759
|
-
h.current = u,
|
|
760
|
-
const
|
|
771
|
+
} = t, [s, x] = R(null), [f, i] = R(!0), [a, d] = R(null), h = T(u), m = T(l);
|
|
772
|
+
h.current = u, m.current = l;
|
|
773
|
+
const S = N(async () => {
|
|
761
774
|
if (!n) return;
|
|
762
|
-
if (!
|
|
775
|
+
if (!Re()) {
|
|
763
776
|
d(new Error("Firebase not initialized. Call initializeFirebaseForViewer first.")), i(!1);
|
|
764
777
|
return;
|
|
765
778
|
}
|
|
766
|
-
const C =
|
|
779
|
+
const C = Ce(), F = we(C, `seatmaps/${n}`);
|
|
767
780
|
try {
|
|
768
781
|
i(!0), d(null);
|
|
769
|
-
const
|
|
770
|
-
if (
|
|
771
|
-
const L =
|
|
772
|
-
|
|
782
|
+
const M = (await ft(F)).val();
|
|
783
|
+
if (M) {
|
|
784
|
+
const L = gt(M);
|
|
785
|
+
x(L), h.current?.(L);
|
|
773
786
|
} else
|
|
774
787
|
d(new Error(`Seat map ${n} not found in Firebase`));
|
|
775
|
-
} catch (
|
|
776
|
-
const
|
|
777
|
-
d(
|
|
788
|
+
} catch (I) {
|
|
789
|
+
const M = I instanceof Error ? I : new Error("Unknown error");
|
|
790
|
+
d(M), m.current?.(M);
|
|
778
791
|
} finally {
|
|
779
792
|
i(!1);
|
|
780
793
|
}
|
|
781
794
|
}, [n]);
|
|
782
|
-
return
|
|
783
|
-
if (!
|
|
795
|
+
return Y(() => {
|
|
796
|
+
if (!o || !n) {
|
|
784
797
|
i(!1);
|
|
785
798
|
return;
|
|
786
799
|
}
|
|
787
|
-
if (
|
|
788
|
-
const C =
|
|
789
|
-
let
|
|
790
|
-
return
|
|
791
|
-
if (
|
|
792
|
-
|
|
800
|
+
if (S(), r && Re()) {
|
|
801
|
+
const C = Ce(), F = we(C, `seatmaps/${n}/meta/updated_at`);
|
|
802
|
+
let I = !0, M = null;
|
|
803
|
+
return ze(F, (z) => {
|
|
804
|
+
if (I) {
|
|
805
|
+
I = !1, M = z.val();
|
|
793
806
|
return;
|
|
794
807
|
}
|
|
795
|
-
|
|
808
|
+
const X = z.val();
|
|
809
|
+
z.exists() && X !== M && (M = X, S());
|
|
796
810
|
}), () => {
|
|
797
|
-
|
|
811
|
+
Ae(F);
|
|
798
812
|
};
|
|
799
813
|
}
|
|
800
|
-
}, [n,
|
|
801
|
-
config:
|
|
814
|
+
}, [n, o, r]), {
|
|
815
|
+
config: s,
|
|
802
816
|
loading: f,
|
|
803
817
|
error: a,
|
|
804
|
-
refetch:
|
|
818
|
+
refetch: S
|
|
805
819
|
};
|
|
806
820
|
}
|
|
807
|
-
function
|
|
821
|
+
function Dt(t) {
|
|
808
822
|
const {
|
|
809
823
|
seatMapId: n,
|
|
810
|
-
userId:
|
|
811
|
-
enabled:
|
|
824
|
+
userId: o,
|
|
825
|
+
enabled: r = !0,
|
|
812
826
|
subscribeToDesignChanges: u = !1,
|
|
813
827
|
onConfigLoad: l,
|
|
814
|
-
onStateChange:
|
|
815
|
-
onError:
|
|
828
|
+
onStateChange: s,
|
|
829
|
+
onError: x
|
|
816
830
|
} = t, {
|
|
817
831
|
config: f,
|
|
818
832
|
loading: i,
|
|
819
833
|
error: a,
|
|
820
834
|
refetch: d
|
|
821
|
-
} =
|
|
835
|
+
} = xt({
|
|
822
836
|
seatMapId: n,
|
|
823
|
-
enabled:
|
|
837
|
+
enabled: r,
|
|
824
838
|
subscribeToChanges: u,
|
|
825
839
|
onConfigLoad: l,
|
|
826
|
-
onError:
|
|
840
|
+
onError: x
|
|
827
841
|
}), {
|
|
828
842
|
states: h,
|
|
829
|
-
loading:
|
|
830
|
-
error:
|
|
843
|
+
loading: m,
|
|
844
|
+
error: S,
|
|
831
845
|
lastUpdated: C,
|
|
832
|
-
myReservedSeats:
|
|
833
|
-
otherReservedSeats:
|
|
834
|
-
unavailableSeats:
|
|
846
|
+
myReservedSeats: F,
|
|
847
|
+
otherReservedSeats: I,
|
|
848
|
+
unavailableSeats: M,
|
|
835
849
|
reservedSeats: L
|
|
836
|
-
} =
|
|
850
|
+
} = mt({
|
|
837
851
|
seatMapId: n,
|
|
838
|
-
currentUserId:
|
|
839
|
-
enabled:
|
|
840
|
-
onStateChange:
|
|
841
|
-
onError:
|
|
852
|
+
currentUserId: o,
|
|
853
|
+
enabled: r,
|
|
854
|
+
onStateChange: s,
|
|
855
|
+
onError: x
|
|
842
856
|
});
|
|
843
857
|
return {
|
|
844
858
|
config: f,
|
|
845
|
-
loading: i ||
|
|
846
|
-
error: a ||
|
|
847
|
-
myReservedSeats:
|
|
848
|
-
otherReservedSeats:
|
|
849
|
-
unavailableSeats:
|
|
859
|
+
loading: i || m,
|
|
860
|
+
error: a || S,
|
|
861
|
+
myReservedSeats: F,
|
|
862
|
+
otherReservedSeats: I,
|
|
863
|
+
unavailableSeats: M,
|
|
850
864
|
reservedSeats: L,
|
|
851
865
|
seatStates: h,
|
|
852
866
|
lastUpdated: C,
|
|
@@ -854,15 +868,15 @@ function Ft(t) {
|
|
|
854
868
|
};
|
|
855
869
|
}
|
|
856
870
|
export {
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
871
|
+
vt as DEFAULT_COLORS,
|
|
872
|
+
Et as SeatMapViewer,
|
|
873
|
+
It as clearFirebaseInstance,
|
|
874
|
+
Ft as initializeFirebaseForViewer,
|
|
875
|
+
Re as isFirebaseInitialized,
|
|
876
|
+
pt as useConfigFetcher,
|
|
877
|
+
yt as useContainerSize,
|
|
878
|
+
xt as useFirebaseConfig,
|
|
879
|
+
mt as useFirebaseSeatStates,
|
|
880
|
+
Dt as useRealtimeSeatMap,
|
|
881
|
+
bt as useTouchGestures
|
|
868
882
|
};
|