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