@burdenoff/microfe-eventfullymanaged 2026.723.1 → 2026.730.1
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/eventfullymanaged/api/eventApi.d.ts +59 -1
- package/dist/eventfullymanaged/api/eventApi.d.ts.map +1 -1
- package/dist/eventfullymanaged/api/eventApi.js +317 -236
- package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
- package/dist/eventfullymanaged/lib/offlineCheckInQueue.d.ts +54 -0
- package/dist/eventfullymanaged/lib/offlineCheckInQueue.d.ts.map +1 -0
- package/dist/eventfullymanaged/lib/offlineCheckInQueue.js +68 -0
- package/dist/eventfullymanaged/lib/offlineCheckInQueue.js.map +1 -0
- package/dist/eventfullymanaged/lib/useOfflineCheckInSync.d.ts +29 -0
- package/dist/eventfullymanaged/lib/useOfflineCheckInSync.d.ts.map +1 -0
- package/dist/eventfullymanaged/lib/useOfflineCheckInSync.js +73 -0
- package/dist/eventfullymanaged/lib/useOfflineCheckInSync.js.map +1 -0
- package/dist/eventfullymanaged/pages/modules/KioskPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/modules/KioskPage.js +381 -311
- package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +211 -177
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +293 -209
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
- package/dist/eventfullymanaged/types/index.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -1,23 +1,60 @@
|
|
|
1
1
|
import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { Badge as
|
|
2
|
+
import { useApolloClient as t } from "../../../node_modules/@apollo/client/react/hooks/useApolloClient.js";
|
|
3
|
+
import { notify as n } from "../../lib/toast.js";
|
|
4
|
+
import { BADGE_PDF_QUERY as r, downloadBase64Pdf as i, useAttendeesQuery as a, useCheckInTokenQuery as o, useDeleteAttendeeMutation as s, useDeletePromoCodeMutation as c, useDeleteRegistrationMutation as l, usePromoCodesQuery as u, useRegistrationsQuery as d, useTicketTypesQuery as f, useUpdateRegistrationMutation as p } from "../../api/eventApi.js";
|
|
5
|
+
import { ActionMenu as m } from "../../components/ActionMenu.js";
|
|
6
|
+
import { Pagination as h, usePagination as g } from "../../components/Pagination.js";
|
|
7
|
+
import { describeError as _, mutationSucceeded as v } from "../../lib/mutationResult.js";
|
|
8
|
+
import { formatMoney as y } from "../../lib/format.js";
|
|
9
|
+
import { useMemo as b, useState as x } from "react";
|
|
10
|
+
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
11
|
+
import { Badge as T, Megaphone as E, QrCode as D, Tag as O, TicketPlus as k, UserPlus as A, Users as j } from "lucide-react";
|
|
12
|
+
import { Badge as M, Button as N, EmphasisPanel as P, GlassCard as F, GradientText as I, IllustratedEmptyState as L, NextSteps as R, PagePurpose as z, ResponsiveDialog as B, ResponsiveDialogContent as V, ResponsiveDialogDescription as H, ResponsiveDialogFooter as U, ResponsiveDialogHeader as W, ResponsiveDialogTitle as G, ResponsiveTable as K } from "@burdenoff/fe-libs/ui";
|
|
12
13
|
//#region src/eventfullymanaged/pages/modules/RegistrationPage.tsx
|
|
13
|
-
|
|
14
|
+
function q({ registrationId: e, label: t, onOpenChange: n }) {
|
|
15
|
+
let { data: r, loading: i, error: a } = o(e), s = r?.checkInToken;
|
|
16
|
+
return /* @__PURE__ */ C(B, {
|
|
17
|
+
open: !0,
|
|
18
|
+
onOpenChange: n,
|
|
19
|
+
children: /* @__PURE__ */ w(V, {
|
|
20
|
+
className: "max-w-sm",
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ w(W, { children: [/* @__PURE__ */ C(G, { children: "Check-in QR" }), /* @__PURE__ */ w(H, { children: [t, " scans this code at any check-in station to check in — it works even if the station has no connection at the moment."] })] }),
|
|
23
|
+
/* @__PURE__ */ C("div", {
|
|
24
|
+
className: "flex flex-col items-center gap-3 py-2",
|
|
25
|
+
children: i ? /* @__PURE__ */ C("p", {
|
|
26
|
+
className: "text-sm text-text-secondary",
|
|
27
|
+
children: "Generating…"
|
|
28
|
+
}) : a || !s ? /* @__PURE__ */ C("p", {
|
|
29
|
+
className: "text-sm text-status-danger-text",
|
|
30
|
+
children: "Could not generate a check-in QR for this registration."
|
|
31
|
+
}) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C("img", {
|
|
32
|
+
src: s.qrDataUrl,
|
|
33
|
+
alt: `Check-in QR code for ${t}`,
|
|
34
|
+
className: "h-56 w-56 rounded-card border border-border-seam bg-white p-2"
|
|
35
|
+
}), /* @__PURE__ */ C("code", {
|
|
36
|
+
className: "max-w-full break-all rounded bg-bg-sunken px-2 py-1 text-xs text-text-secondary",
|
|
37
|
+
children: s.token
|
|
38
|
+
})] })
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ C(U, { children: /* @__PURE__ */ C(N, {
|
|
41
|
+
type: "button",
|
|
42
|
+
variant: "outline",
|
|
43
|
+
onClick: () => n(!1),
|
|
44
|
+
children: "Close"
|
|
45
|
+
}) })
|
|
46
|
+
]
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
var J = [
|
|
14
51
|
"PENDING",
|
|
15
52
|
"CONFIRMED",
|
|
16
53
|
"WAITLISTED",
|
|
17
54
|
"CANCELLED",
|
|
18
55
|
"CHECKED_IN"
|
|
19
56
|
];
|
|
20
|
-
function
|
|
57
|
+
function Y(e) {
|
|
21
58
|
switch ((e ?? "").toUpperCase()) {
|
|
22
59
|
case "CONFIRMED":
|
|
23
60
|
case "CHECKED_IN": return "default";
|
|
@@ -26,47 +63,47 @@ function N(e) {
|
|
|
26
63
|
default: return "secondary";
|
|
27
64
|
}
|
|
28
65
|
}
|
|
29
|
-
function
|
|
30
|
-
if (t == null || t <= 0) return /* @__PURE__ */
|
|
66
|
+
function X({ used: e, max: t }) {
|
|
67
|
+
if (t == null || t <= 0) return /* @__PURE__ */ w("span", {
|
|
31
68
|
className: "text-xs text-text-secondary",
|
|
32
69
|
children: [e, " used"]
|
|
33
70
|
});
|
|
34
71
|
let n = Math.min(100, Math.round(e / t * 100));
|
|
35
|
-
return /* @__PURE__ */
|
|
72
|
+
return /* @__PURE__ */ w("div", {
|
|
36
73
|
className: "min-w-[7rem] space-y-1",
|
|
37
|
-
children: [/* @__PURE__ */
|
|
74
|
+
children: [/* @__PURE__ */ w("div", {
|
|
38
75
|
className: "flex items-center justify-between text-xs tabular-nums text-text-secondary",
|
|
39
|
-
children: [/* @__PURE__ */
|
|
76
|
+
children: [/* @__PURE__ */ w("span", { children: [
|
|
40
77
|
e,
|
|
41
78
|
" / ",
|
|
42
79
|
t
|
|
43
|
-
] }), /* @__PURE__ */
|
|
80
|
+
] }), /* @__PURE__ */ w("span", {
|
|
44
81
|
className: "text-text-muted",
|
|
45
82
|
children: [n, "%"]
|
|
46
83
|
})]
|
|
47
|
-
}), /* @__PURE__ */
|
|
84
|
+
}), /* @__PURE__ */ C("div", {
|
|
48
85
|
className: "h-1.5 w-full overflow-hidden rounded-full bg-bg-sunken",
|
|
49
|
-
children: /* @__PURE__ */
|
|
86
|
+
children: /* @__PURE__ */ C("div", {
|
|
50
87
|
className: `h-full rounded-full ${n >= 90 ? "bg-status-warning" : "bg-action-primary-bg"}`,
|
|
51
88
|
style: { width: `${n}%` }
|
|
52
89
|
})
|
|
53
90
|
})]
|
|
54
91
|
});
|
|
55
92
|
}
|
|
56
|
-
function
|
|
57
|
-
return /* @__PURE__ */
|
|
93
|
+
function Z({ icon: e, title: t, count: n, loading: r, action: i, children: a }) {
|
|
94
|
+
return /* @__PURE__ */ w(F, {
|
|
58
95
|
treatment: "plain",
|
|
59
96
|
className: "border-border-seam p-5",
|
|
60
|
-
children: [/* @__PURE__ */
|
|
97
|
+
children: [/* @__PURE__ */ w("div", {
|
|
61
98
|
className: "flex items-center justify-between gap-3",
|
|
62
|
-
children: [/* @__PURE__ */
|
|
99
|
+
children: [/* @__PURE__ */ w("div", {
|
|
63
100
|
className: "flex items-center gap-3",
|
|
64
|
-
children: [/* @__PURE__ */
|
|
101
|
+
children: [/* @__PURE__ */ C("span", {
|
|
65
102
|
className: "flex h-9 w-9 items-center justify-center rounded-input bg-accent-wash text-action-primary",
|
|
66
103
|
children: e
|
|
67
|
-
}), /* @__PURE__ */
|
|
104
|
+
}), /* @__PURE__ */ w("h2", {
|
|
68
105
|
className: "text-lg font-semibold text-text-primary",
|
|
69
|
-
children: [r ? `Loading ${t.toLowerCase()}…` : t, !r && n != null ? /* @__PURE__ */
|
|
106
|
+
children: [r ? `Loading ${t.toLowerCase()}…` : t, !r && n != null ? /* @__PURE__ */ w("span", {
|
|
70
107
|
className: "ml-2 text-sm font-normal text-text-secondary",
|
|
71
108
|
children: [
|
|
72
109
|
"(",
|
|
@@ -76,32 +113,51 @@ function F({ icon: e, title: t, count: n, loading: r, action: i, children: a })
|
|
|
76
113
|
}) : null]
|
|
77
114
|
})]
|
|
78
115
|
}), i]
|
|
79
|
-
}), /* @__PURE__ */
|
|
116
|
+
}), /* @__PURE__ */ C("div", {
|
|
80
117
|
className: "mt-4",
|
|
81
118
|
children: a
|
|
82
119
|
})]
|
|
83
120
|
});
|
|
84
121
|
}
|
|
85
|
-
function
|
|
86
|
-
let e =
|
|
122
|
+
function Q() {
|
|
123
|
+
let e = g({ pageSize: 10 }), { data: o, loading: s } = d({
|
|
87
124
|
limit: e.limit,
|
|
88
125
|
offset: e.offset
|
|
89
|
-
}), [
|
|
126
|
+
}), [c] = p(), [u] = l(), [S, E] = x(null), O = t(), [A, j] = x(null), N = async (e, t) => {
|
|
127
|
+
j(e);
|
|
128
|
+
try {
|
|
129
|
+
let { data: a, error: o } = await O.query({
|
|
130
|
+
query: r,
|
|
131
|
+
variables: { registrationId: e },
|
|
132
|
+
fetchPolicy: "network-only",
|
|
133
|
+
errorPolicy: "all"
|
|
134
|
+
});
|
|
135
|
+
if (o || !a?.badgePdf) {
|
|
136
|
+
n.error("Could not generate badge", o?.message ?? "Please try again.");
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
i(a.badgePdf, `${t.replace(/[^a-z0-9]+/gi, "-")}-badge.pdf`), n.success("Badge ready", `${t}'s badge downloaded.`);
|
|
140
|
+
} catch (e) {
|
|
141
|
+
n.error("Could not generate badge", _(e));
|
|
142
|
+
} finally {
|
|
143
|
+
j(null);
|
|
144
|
+
}
|
|
145
|
+
}, { data: P } = a({
|
|
90
146
|
limit: 200,
|
|
91
147
|
offset: 0
|
|
92
|
-
}), { data:
|
|
148
|
+
}), { data: F } = f({
|
|
93
149
|
limit: 200,
|
|
94
150
|
offset: 0
|
|
95
|
-
}),
|
|
151
|
+
}), I = b(() => {
|
|
96
152
|
let e = /* @__PURE__ */ new Map();
|
|
97
|
-
for (let t of
|
|
153
|
+
for (let t of P?.attendees.items ?? []) t.id && t.fullName && e.set(t.id, t.fullName);
|
|
98
154
|
return e;
|
|
99
|
-
}, [
|
|
155
|
+
}, [P]), R = b(() => {
|
|
100
156
|
let e = /* @__PURE__ */ new Map();
|
|
101
|
-
for (let t of
|
|
157
|
+
for (let t of F?.ticketTypes.items ?? []) t.id && t.name && e.set(t.id, t.name);
|
|
102
158
|
return e;
|
|
103
|
-
}, [
|
|
104
|
-
let r = await
|
|
159
|
+
}, [F]), z = (e) => e ? I.get(e) ?? `Attendee ${e.slice(0, 8)}…` : null, B = b(() => o?.registrations.items ?? [], [o]), V = o?.registrations.total ?? 0, H = async (e, t) => {
|
|
160
|
+
let r = await c({ variables: {
|
|
105
161
|
id: e.id,
|
|
106
162
|
input: {
|
|
107
163
|
eventId: e.eventId,
|
|
@@ -110,132 +166,160 @@ function I() {
|
|
|
110
166
|
quantity: e.quantity,
|
|
111
167
|
currency: e.currency,
|
|
112
168
|
totalAmount: e.totalAmount ?? null,
|
|
113
|
-
status:
|
|
169
|
+
status: t
|
|
114
170
|
}
|
|
115
171
|
} });
|
|
116
|
-
|
|
117
|
-
},
|
|
118
|
-
let r = await
|
|
119
|
-
if (r.error) throw
|
|
120
|
-
if (!r.data?.deleteRegistration) throw
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
return /* @__PURE__ */
|
|
124
|
-
icon: /* @__PURE__ */
|
|
172
|
+
v(r, r.data?.updateRegistration?.id, "Could not update registration") && n.success("Registration updated", `Status set to ${t}`);
|
|
173
|
+
}, U = async (e, t) => {
|
|
174
|
+
let r = await u({ variables: { id: e.id } });
|
|
175
|
+
if (r.error) throw n.error("Could not delete registration", r.error.message), r.error;
|
|
176
|
+
if (!r.data?.deleteRegistration) throw n.error("Could not delete registration", "The server did not confirm the change."), Error("delete-unconfirmed");
|
|
177
|
+
n.success("Registration deleted", t);
|
|
178
|
+
}, W = (e) => z(e.attendeeId) ?? `Registration ${e.id}`;
|
|
179
|
+
return /* @__PURE__ */ w(Z, {
|
|
180
|
+
icon: /* @__PURE__ */ C(k, { className: "h-4 w-4" }),
|
|
125
181
|
title: "Registrations",
|
|
126
|
-
count:
|
|
127
|
-
loading:
|
|
128
|
-
children: [
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
ariaLabel: "Registration actions",
|
|
187
|
-
entityName: t,
|
|
188
|
-
deleteLabel: "Delete registration",
|
|
189
|
-
extraItems: M.filter((t) => t !== (e.status ?? "").toUpperCase()).map((t, n) => ({
|
|
182
|
+
count: V,
|
|
183
|
+
loading: s,
|
|
184
|
+
children: [
|
|
185
|
+
/* @__PURE__ */ C(K, {
|
|
186
|
+
columns: [
|
|
187
|
+
{
|
|
188
|
+
key: "name",
|
|
189
|
+
header: "Name",
|
|
190
|
+
priority: "primary",
|
|
191
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
192
|
+
className: "font-medium text-text-primary",
|
|
193
|
+
children: W(e)
|
|
194
|
+
})
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
key: "ticket",
|
|
198
|
+
header: "Ticket Type",
|
|
199
|
+
mobileLabel: "Ticket",
|
|
200
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
201
|
+
className: "text-text-secondary",
|
|
202
|
+
children: e.ticketTypeId ? R.get(e.ticketTypeId) ?? "—" : "—"
|
|
203
|
+
})
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
key: "quantity",
|
|
207
|
+
header: "Qty",
|
|
208
|
+
mobileLabel: "Quantity",
|
|
209
|
+
priority: "secondary",
|
|
210
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
211
|
+
className: "tabular-nums text-text-secondary",
|
|
212
|
+
children: e.quantity
|
|
213
|
+
})
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
key: "amount",
|
|
217
|
+
header: "Amount",
|
|
218
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
219
|
+
className: "tabular-nums text-text-primary",
|
|
220
|
+
children: e.totalAmount ? y(Number(e.totalAmount), e.currency) : "—"
|
|
221
|
+
})
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
key: "status",
|
|
225
|
+
header: "Status",
|
|
226
|
+
priority: "primary",
|
|
227
|
+
cell: (e) => /* @__PURE__ */ C(M, {
|
|
228
|
+
variant: Y(e.status),
|
|
229
|
+
children: e.status ?? "UNKNOWN"
|
|
230
|
+
})
|
|
231
|
+
}
|
|
232
|
+
],
|
|
233
|
+
data: B,
|
|
234
|
+
rowKey: (e) => e.id,
|
|
235
|
+
emptyState: s ? null : /* @__PURE__ */ C(L, {
|
|
236
|
+
illustration: "empty-data",
|
|
237
|
+
title: "No registrations yet.",
|
|
238
|
+
description: "Register your first attendee to start tracking sign-ups."
|
|
239
|
+
}),
|
|
240
|
+
rowActions: (e) => {
|
|
241
|
+
let t = W(e), n = J.filter((t) => t !== (e.status ?? "").toUpperCase()).map((t, n) => ({
|
|
190
242
|
key: t,
|
|
191
243
|
label: `Set ${t.replace("_", " ").toLowerCase()}`,
|
|
192
|
-
onSelect: () => void
|
|
244
|
+
onSelect: () => void H(e, t),
|
|
193
245
|
separatorBefore: n === 0
|
|
194
|
-
}))
|
|
195
|
-
|
|
246
|
+
}));
|
|
247
|
+
return /* @__PURE__ */ C(m, {
|
|
248
|
+
ariaLabel: "Registration actions",
|
|
249
|
+
entityName: t,
|
|
250
|
+
deleteLabel: "Delete registration",
|
|
251
|
+
extraItems: [
|
|
252
|
+
{
|
|
253
|
+
key: "view-qr",
|
|
254
|
+
label: "View check-in QR",
|
|
255
|
+
icon: D,
|
|
256
|
+
onSelect: () => E(e.id)
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
key: "download-badge",
|
|
260
|
+
label: A === e.id ? "Generating badge…" : "Download badge",
|
|
261
|
+
icon: T,
|
|
262
|
+
disabled: A === e.id,
|
|
263
|
+
onSelect: () => void N(e.id, t)
|
|
264
|
+
},
|
|
265
|
+
...n
|
|
266
|
+
],
|
|
267
|
+
onDelete: () => U(e, t)
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}),
|
|
271
|
+
/* @__PURE__ */ C(h, {
|
|
272
|
+
offset: e.offset,
|
|
273
|
+
limit: e.limit,
|
|
274
|
+
loadedCount: B.length,
|
|
275
|
+
total: V,
|
|
276
|
+
onPrev: e.prevPage,
|
|
277
|
+
onNext: e.nextPage,
|
|
278
|
+
itemLabel: "registrations",
|
|
279
|
+
loading: s
|
|
280
|
+
}),
|
|
281
|
+
S ? (() => {
|
|
282
|
+
let e = B.find((e) => e.id === S);
|
|
283
|
+
return /* @__PURE__ */ C(q, {
|
|
284
|
+
registrationId: S,
|
|
285
|
+
label: e ? W(e) : `Registration ${S}`,
|
|
286
|
+
onOpenChange: (e) => {
|
|
287
|
+
e || E(null);
|
|
288
|
+
}
|
|
196
289
|
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
offset: e.offset,
|
|
200
|
-
limit: e.limit,
|
|
201
|
-
loadedCount: E.length,
|
|
202
|
-
total: D,
|
|
203
|
-
onPrev: e.prevPage,
|
|
204
|
-
onNext: e.nextPage,
|
|
205
|
-
itemLabel: "registrations",
|
|
206
|
-
loading: i
|
|
207
|
-
})]
|
|
290
|
+
})() : null
|
|
291
|
+
]
|
|
208
292
|
});
|
|
209
293
|
}
|
|
210
|
-
function
|
|
211
|
-
let { navigate:
|
|
212
|
-
limit:
|
|
213
|
-
offset:
|
|
214
|
-
}), [c] =
|
|
215
|
-
let
|
|
216
|
-
if (
|
|
217
|
-
if (!
|
|
218
|
-
|
|
294
|
+
function $() {
|
|
295
|
+
let { navigate: t } = e(), r = g({ pageSize: 10 }), { data: i, loading: o } = a({
|
|
296
|
+
limit: r.limit,
|
|
297
|
+
offset: r.offset
|
|
298
|
+
}), [c] = s(), l = b(() => i?.attendees.items ?? [], [i]), u = i?.attendees.total ?? 0, d = async (e) => {
|
|
299
|
+
let t = await c({ variables: { id: e.id } });
|
|
300
|
+
if (t.error) throw n.error("Could not delete attendee", t.error.message), t.error;
|
|
301
|
+
if (!t.data?.deleteAttendee) throw n.error("Could not delete attendee", "The server did not confirm the change."), Error("delete-unconfirmed");
|
|
302
|
+
n.success("Attendee deleted", e.fullName);
|
|
219
303
|
};
|
|
220
|
-
return /* @__PURE__ */
|
|
221
|
-
icon: /* @__PURE__ */
|
|
304
|
+
return /* @__PURE__ */ w(Z, {
|
|
305
|
+
icon: /* @__PURE__ */ C(j, { className: "h-4 w-4" }),
|
|
222
306
|
title: "Attendees",
|
|
223
|
-
count:
|
|
224
|
-
loading:
|
|
225
|
-
action: /* @__PURE__ */
|
|
307
|
+
count: u,
|
|
308
|
+
loading: o,
|
|
309
|
+
action: /* @__PURE__ */ w(N, {
|
|
226
310
|
type: "button",
|
|
227
311
|
size: "sm",
|
|
228
312
|
variant: "outline",
|
|
229
|
-
onClick: () =>
|
|
230
|
-
children: [/* @__PURE__ */
|
|
313
|
+
onClick: () => t("/registration/attendees/create"),
|
|
314
|
+
children: [/* @__PURE__ */ C(A, { className: "h-4 w-4" }), "Add attendee"]
|
|
231
315
|
}),
|
|
232
|
-
children: [/* @__PURE__ */
|
|
316
|
+
children: [/* @__PURE__ */ C(K, {
|
|
233
317
|
columns: [
|
|
234
318
|
{
|
|
235
319
|
key: "name",
|
|
236
320
|
header: "Name",
|
|
237
321
|
priority: "primary",
|
|
238
|
-
cell: (e) => /* @__PURE__ */
|
|
322
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
239
323
|
className: "font-medium text-text-primary",
|
|
240
324
|
children: e.fullName
|
|
241
325
|
})
|
|
@@ -244,7 +328,7 @@ function L() {
|
|
|
244
328
|
key: "email",
|
|
245
329
|
header: "Email",
|
|
246
330
|
priority: "primary",
|
|
247
|
-
cell: (e) => /* @__PURE__ */
|
|
331
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
248
332
|
className: "text-text-secondary",
|
|
249
333
|
children: e.email
|
|
250
334
|
})
|
|
@@ -252,7 +336,7 @@ function L() {
|
|
|
252
336
|
{
|
|
253
337
|
key: "company",
|
|
254
338
|
header: "Company",
|
|
255
|
-
cell: (e) => /* @__PURE__ */
|
|
339
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
256
340
|
className: "text-text-secondary",
|
|
257
341
|
children: [e.company, e.role].filter(Boolean).join(" · ") || "—"
|
|
258
342
|
})
|
|
@@ -260,59 +344,59 @@ function L() {
|
|
|
260
344
|
],
|
|
261
345
|
data: l,
|
|
262
346
|
rowKey: (e) => e.id,
|
|
263
|
-
emptyState:
|
|
347
|
+
emptyState: o ? null : /* @__PURE__ */ C(L, {
|
|
264
348
|
illustration: "empty-people",
|
|
265
349
|
title: "No attendees yet.",
|
|
266
350
|
description: "Add attendees or register one to build your guest list."
|
|
267
351
|
}),
|
|
268
|
-
rowActions: (e) => /* @__PURE__ */
|
|
352
|
+
rowActions: (e) => /* @__PURE__ */ C(m, {
|
|
269
353
|
ariaLabel: `Actions for ${e.fullName}`,
|
|
270
354
|
entityName: e.fullName,
|
|
271
355
|
deleteLabel: "Delete attendee",
|
|
272
|
-
onView: () =>
|
|
273
|
-
onEdit: () =>
|
|
274
|
-
onDelete: () =>
|
|
356
|
+
onView: () => t(`/attendees/${e.id}/profile`),
|
|
357
|
+
onEdit: () => t(`/registration/attendees/${e.id}/edit`),
|
|
358
|
+
onDelete: () => d(e)
|
|
275
359
|
})
|
|
276
|
-
}), /* @__PURE__ */
|
|
277
|
-
offset:
|
|
278
|
-
limit:
|
|
360
|
+
}), /* @__PURE__ */ C(h, {
|
|
361
|
+
offset: r.offset,
|
|
362
|
+
limit: r.limit,
|
|
279
363
|
loadedCount: l.length,
|
|
280
|
-
total:
|
|
281
|
-
onPrev:
|
|
282
|
-
onNext:
|
|
364
|
+
total: u,
|
|
365
|
+
onPrev: r.prevPage,
|
|
366
|
+
onNext: r.nextPage,
|
|
283
367
|
itemLabel: "attendees",
|
|
284
|
-
loading:
|
|
368
|
+
loading: o
|
|
285
369
|
})]
|
|
286
370
|
});
|
|
287
371
|
}
|
|
288
|
-
function
|
|
289
|
-
let { navigate:
|
|
372
|
+
function ee() {
|
|
373
|
+
let { navigate: t } = e(), r = g({ pageSize: 10 }), { data: i, loading: a } = u({
|
|
290
374
|
limit: r.limit,
|
|
291
375
|
offset: r.offset
|
|
292
|
-
}), [
|
|
293
|
-
let
|
|
294
|
-
if (
|
|
295
|
-
|
|
376
|
+
}), [o] = c(), s = b(() => i?.promoCodes.items ?? [], [i]), l = i?.promoCodes.total ?? 0, d = async (e) => {
|
|
377
|
+
let t = await o({ variables: { id: e.id } });
|
|
378
|
+
if (t.error) throw n.error("Could not delete promo code", t.error.message), t.error;
|
|
379
|
+
n.success("Promo code deleted", e.code);
|
|
296
380
|
};
|
|
297
|
-
return /* @__PURE__ */
|
|
298
|
-
icon: /* @__PURE__ */
|
|
381
|
+
return /* @__PURE__ */ w(Z, {
|
|
382
|
+
icon: /* @__PURE__ */ C(O, { className: "h-4 w-4" }),
|
|
299
383
|
title: "Promo Codes",
|
|
300
|
-
count:
|
|
301
|
-
loading:
|
|
302
|
-
action: /* @__PURE__ */
|
|
384
|
+
count: l,
|
|
385
|
+
loading: a,
|
|
386
|
+
action: /* @__PURE__ */ w(N, {
|
|
303
387
|
type: "button",
|
|
304
388
|
size: "sm",
|
|
305
389
|
variant: "outline",
|
|
306
|
-
onClick: () =>
|
|
307
|
-
children: [/* @__PURE__ */
|
|
390
|
+
onClick: () => t("/registration/promo-codes/create"),
|
|
391
|
+
children: [/* @__PURE__ */ C(k, { className: "h-4 w-4" }), "New promo code"]
|
|
308
392
|
}),
|
|
309
|
-
children: [/* @__PURE__ */
|
|
393
|
+
children: [/* @__PURE__ */ C(K, {
|
|
310
394
|
columns: [
|
|
311
395
|
{
|
|
312
396
|
key: "code",
|
|
313
397
|
header: "Code",
|
|
314
398
|
priority: "primary",
|
|
315
|
-
cell: (e) => /* @__PURE__ */
|
|
399
|
+
cell: (e) => /* @__PURE__ */ C("span", {
|
|
316
400
|
className: "font-mono text-sm font-semibold text-text-primary",
|
|
317
401
|
children: e.code
|
|
318
402
|
})
|
|
@@ -321,12 +405,12 @@ function R() {
|
|
|
321
405
|
key: "discount",
|
|
322
406
|
header: "Discount",
|
|
323
407
|
priority: "primary",
|
|
324
|
-
cell: (e) => /* @__PURE__ */
|
|
408
|
+
cell: (e) => /* @__PURE__ */ w("span", {
|
|
325
409
|
className: "flex items-center gap-2",
|
|
326
|
-
children: [/* @__PURE__ */
|
|
410
|
+
children: [/* @__PURE__ */ C(M, {
|
|
327
411
|
variant: "secondary",
|
|
328
412
|
children: e.discountType === "PERCENT" ? "PERCENT" : "FIXED"
|
|
329
|
-
}), /* @__PURE__ */
|
|
413
|
+
}), /* @__PURE__ */ C("span", {
|
|
330
414
|
className: "text-sm text-text-secondary",
|
|
331
415
|
children: e.discountType === "PERCENT" ? `${e.discountValue}%` : e.discountValue
|
|
332
416
|
})]
|
|
@@ -335,7 +419,7 @@ function R() {
|
|
|
335
419
|
{
|
|
336
420
|
key: "usage",
|
|
337
421
|
header: "Usage",
|
|
338
|
-
cell: (e) => /* @__PURE__ */
|
|
422
|
+
cell: (e) => /* @__PURE__ */ C(X, {
|
|
339
423
|
used: e.usedCount,
|
|
340
424
|
max: e.maxUses
|
|
341
425
|
})
|
|
@@ -344,78 +428,78 @@ function R() {
|
|
|
344
428
|
key: "status",
|
|
345
429
|
header: "Status",
|
|
346
430
|
priority: "secondary",
|
|
347
|
-
cell: (e) => /* @__PURE__ */
|
|
431
|
+
cell: (e) => /* @__PURE__ */ C(M, {
|
|
348
432
|
variant: e.isActive ? "default" : "secondary",
|
|
349
433
|
children: e.isActive ? "Active" : "Inactive"
|
|
350
434
|
})
|
|
351
435
|
}
|
|
352
436
|
],
|
|
353
|
-
data:
|
|
437
|
+
data: s,
|
|
354
438
|
rowKey: (e) => e.id,
|
|
355
|
-
emptyState:
|
|
439
|
+
emptyState: a ? null : /* @__PURE__ */ C(L, {
|
|
356
440
|
illustration: "empty-data",
|
|
357
441
|
title: "No promo codes yet.",
|
|
358
442
|
description: "Create a code to offer discounts and drive registrations."
|
|
359
443
|
}),
|
|
360
|
-
rowActions: (e) => /* @__PURE__ */
|
|
444
|
+
rowActions: (e) => /* @__PURE__ */ C(m, {
|
|
361
445
|
ariaLabel: `Actions for ${e.code}`,
|
|
362
446
|
entityName: e.code,
|
|
363
|
-
onEdit: () =>
|
|
364
|
-
onDelete: () =>
|
|
447
|
+
onEdit: () => t(`/registration/promo-codes/${e.id}/edit`),
|
|
448
|
+
onDelete: () => d(e)
|
|
365
449
|
})
|
|
366
|
-
}), /* @__PURE__ */
|
|
450
|
+
}), /* @__PURE__ */ C(h, {
|
|
367
451
|
offset: r.offset,
|
|
368
452
|
limit: r.limit,
|
|
369
|
-
loadedCount:
|
|
370
|
-
total:
|
|
453
|
+
loadedCount: s.length,
|
|
454
|
+
total: l,
|
|
371
455
|
onPrev: r.prevPage,
|
|
372
456
|
onNext: r.nextPage,
|
|
373
457
|
itemLabel: "promo codes",
|
|
374
|
-
loading:
|
|
458
|
+
loading: a
|
|
375
459
|
})]
|
|
376
460
|
});
|
|
377
461
|
}
|
|
378
|
-
function
|
|
462
|
+
function te() {
|
|
379
463
|
let { navigate: t } = e();
|
|
380
|
-
return /* @__PURE__ */
|
|
464
|
+
return /* @__PURE__ */ w("div", {
|
|
381
465
|
className: "space-y-6 p-6",
|
|
382
466
|
children: [
|
|
383
|
-
/* @__PURE__ */
|
|
384
|
-
/* @__PURE__ */
|
|
467
|
+
/* @__PURE__ */ C(z, { children: "This is where you see who is coming. Registrations are the paid or confirmed sign-ups, attendees are the people behind them, and promo codes let you offer discounts. Register attendees, edit their details, change a registration's status, and manage discount codes — all backed by live GraphQL APIs." }),
|
|
468
|
+
/* @__PURE__ */ C(P, { children: /* @__PURE__ */ w("div", {
|
|
385
469
|
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
386
|
-
children: [/* @__PURE__ */
|
|
470
|
+
children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h1", {
|
|
387
471
|
className: "text-2xl font-bold text-text-primary",
|
|
388
|
-
children: /* @__PURE__ */
|
|
389
|
-
}), /* @__PURE__ */
|
|
472
|
+
children: /* @__PURE__ */ C(I, { children: "Registration" })
|
|
473
|
+
}), /* @__PURE__ */ C("p", {
|
|
390
474
|
className: "mt-1 text-sm text-text-secondary",
|
|
391
475
|
children: "Track registrations, attendees, and promo codes with backend persistence."
|
|
392
|
-
})] }), /* @__PURE__ */
|
|
476
|
+
})] }), /* @__PURE__ */ w("div", {
|
|
393
477
|
className: "flex flex-wrap gap-2",
|
|
394
478
|
children: [
|
|
395
|
-
/* @__PURE__ */
|
|
479
|
+
/* @__PURE__ */ w(N, {
|
|
396
480
|
type: "button",
|
|
397
481
|
onClick: () => t("/registration/register"),
|
|
398
|
-
children: [/* @__PURE__ */
|
|
482
|
+
children: [/* @__PURE__ */ C(k, { className: "h-4 w-4" }), "Register attendee"]
|
|
399
483
|
}),
|
|
400
|
-
/* @__PURE__ */
|
|
484
|
+
/* @__PURE__ */ w(N, {
|
|
401
485
|
type: "button",
|
|
402
486
|
variant: "outline",
|
|
403
487
|
onClick: () => t("/registration/attendees/create"),
|
|
404
|
-
children: [/* @__PURE__ */
|
|
488
|
+
children: [/* @__PURE__ */ C(A, { className: "h-4 w-4" }), "Add attendee"]
|
|
405
489
|
}),
|
|
406
|
-
/* @__PURE__ */
|
|
490
|
+
/* @__PURE__ */ w(N, {
|
|
407
491
|
type: "button",
|
|
408
492
|
variant: "outline",
|
|
409
493
|
onClick: () => t("/registration/promo-codes/create"),
|
|
410
|
-
children: [/* @__PURE__ */
|
|
494
|
+
children: [/* @__PURE__ */ C(O, { className: "h-4 w-4" }), "New promo code"]
|
|
411
495
|
})
|
|
412
496
|
]
|
|
413
497
|
})]
|
|
414
498
|
}) }),
|
|
415
|
-
/* @__PURE__ */
|
|
416
|
-
/* @__PURE__ */
|
|
417
|
-
/* @__PURE__ */
|
|
418
|
-
/* @__PURE__ */
|
|
499
|
+
/* @__PURE__ */ C(Q, {}),
|
|
500
|
+
/* @__PURE__ */ C($, {}),
|
|
501
|
+
/* @__PURE__ */ C(ee, {}),
|
|
502
|
+
/* @__PURE__ */ C(R, {
|
|
419
503
|
storageKey: "eventfullymanaged-registration",
|
|
420
504
|
title: "Grow your registrations",
|
|
421
505
|
steps: [
|
|
@@ -423,21 +507,21 @@ function z() {
|
|
|
423
507
|
id: "view-networking",
|
|
424
508
|
label: "Set up attendee networking",
|
|
425
509
|
description: "Turn registered attendees into connections with matchmaking.",
|
|
426
|
-
icon: /* @__PURE__ */
|
|
510
|
+
icon: /* @__PURE__ */ C(j, { className: "h-4 w-4" }),
|
|
427
511
|
onClick: () => t("/networking")
|
|
428
512
|
},
|
|
429
513
|
{
|
|
430
514
|
id: "promote",
|
|
431
515
|
label: "Promote with a campaign",
|
|
432
516
|
description: "Send reminders and offers to drive more sign-ups.",
|
|
433
|
-
icon: /* @__PURE__ */
|
|
517
|
+
icon: /* @__PURE__ */ C(E, { className: "h-4 w-4" }),
|
|
434
518
|
onClick: () => t("/communication")
|
|
435
519
|
},
|
|
436
520
|
{
|
|
437
521
|
id: "analyze",
|
|
438
522
|
label: "Snapshot your numbers",
|
|
439
523
|
description: "Capture an analytics snapshot to track registration trends.",
|
|
440
|
-
icon: /* @__PURE__ */
|
|
524
|
+
icon: /* @__PURE__ */ C(O, { className: "h-4 w-4" }),
|
|
441
525
|
onClick: () => t("/analytics")
|
|
442
526
|
}
|
|
443
527
|
]
|
|
@@ -446,6 +530,6 @@ function z() {
|
|
|
446
530
|
});
|
|
447
531
|
}
|
|
448
532
|
//#endregion
|
|
449
|
-
export {
|
|
533
|
+
export { te as default };
|
|
450
534
|
|
|
451
535
|
//# sourceMappingURL=RegistrationPage.js.map
|