@burdenoff/microfe-eventfullymanaged 2026.608.1 → 2026.625.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/dist/eventfullymanaged/components/PageLayout.js +44 -38
- package/dist/eventfullymanaged/components/PageLayout.js.map +1 -1
- package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +93 -40
- package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +32 -29
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +85 -50
- package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +49 -50
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/EntityListSection.js +57 -25
- package/dist/eventfullymanaged/pages/modules/EntityListSection.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/EventsPage.js +93 -66
- package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/KioskPage.js +18 -19
- package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +60 -30
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +146 -108
- package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +67 -38
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +84 -49
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +57 -28
- package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +106 -72
- package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +84 -68
- package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +202 -204
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +58 -39
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +53 -46
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +109 -63
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +193 -197
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js +65 -36
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,91 +1,94 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
|
|
2
|
+
import { useAnalyticsSnapshotsQuery as t, useAnnouncementsQuery as n, useAutomationRulesQuery as r, useCheckInRecordsQuery as i, useCommunicationCampaignsQuery as a, useDashboardSummaryQuery as o, useEventSessionsQuery as s, useExhibitorsQuery as c, useLeadsQuery as l, useNetworkingProfilesQuery as u, usePromoCodesQuery as d, useRegistrationsQuery as f, useSponsorsQuery as p, useTicketTypesQuery as m, useVenuesQuery as h, useWorkflowTemplatesQuery as g } from "../../api/eventApi.js";
|
|
3
|
+
import { EntityListSection as _ } from "./EntityListSection.js";
|
|
4
|
+
import { useMemo as v } from "react";
|
|
5
|
+
import { jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
6
|
+
import { LayoutDashboard as x, Megaphone as S, Workflow as C } from "lucide-react";
|
|
7
|
+
import { EmphasisPanel as w, GlassCard as T, GradientText as E, NextSteps as D, PagePurpose as ee, ShowMore as te } from "@burdenoff/fe-libs/ui";
|
|
5
8
|
//#region src/eventfullymanaged/pages/modules/OperationsHubPage.tsx
|
|
6
|
-
function
|
|
7
|
-
let
|
|
9
|
+
function O({ title: O, description: k, sectionKeys: A }) {
|
|
10
|
+
let { navigate: j } = e(), M = o(), N = n({
|
|
8
11
|
limit: 100,
|
|
9
12
|
offset: 0
|
|
10
|
-
}),
|
|
13
|
+
}), P = a({
|
|
11
14
|
limit: 100,
|
|
12
15
|
offset: 0
|
|
13
|
-
}),
|
|
16
|
+
}), F = g({
|
|
14
17
|
limit: 100,
|
|
15
18
|
offset: 0
|
|
16
|
-
}),
|
|
19
|
+
}), I = r({
|
|
17
20
|
limit: 100,
|
|
18
21
|
offset: 0
|
|
19
|
-
}),
|
|
22
|
+
}), L = t({
|
|
20
23
|
limit: 100,
|
|
21
24
|
offset: 0
|
|
22
|
-
}),
|
|
25
|
+
}), R = f({
|
|
23
26
|
limit: 100,
|
|
24
27
|
offset: 0
|
|
25
|
-
}),
|
|
28
|
+
}), z = m({
|
|
26
29
|
limit: 100,
|
|
27
30
|
offset: 0
|
|
28
|
-
}),
|
|
31
|
+
}), B = d({
|
|
29
32
|
limit: 100,
|
|
30
33
|
offset: 0
|
|
31
|
-
}),
|
|
34
|
+
}), V = p({
|
|
32
35
|
limit: 100,
|
|
33
36
|
offset: 0
|
|
34
|
-
}),
|
|
37
|
+
}), H = c({
|
|
35
38
|
limit: 100,
|
|
36
39
|
offset: 0
|
|
37
|
-
}),
|
|
40
|
+
}), U = l({
|
|
38
41
|
limit: 100,
|
|
39
42
|
offset: 0
|
|
40
|
-
}),
|
|
43
|
+
}), W = h({
|
|
41
44
|
limit: 100,
|
|
42
45
|
offset: 0
|
|
43
|
-
}),
|
|
46
|
+
}), G = s({
|
|
44
47
|
limit: 100,
|
|
45
48
|
offset: 0
|
|
46
|
-
}),
|
|
49
|
+
}), K = i({
|
|
47
50
|
limit: 100,
|
|
48
51
|
offset: 0
|
|
49
|
-
}),
|
|
52
|
+
}), q = u({
|
|
50
53
|
limit: 100,
|
|
51
54
|
offset: 0
|
|
52
|
-
}),
|
|
55
|
+
}), J = M.data?.dashboardSummary, Y = v(() => R.data?.registrations.items ?? [], [R.data]), X = v(() => Y.reduce((e, t) => {
|
|
53
56
|
let n = Number(t.totalAmount ?? 0);
|
|
54
57
|
return Number.isFinite(n) ? e + n : e;
|
|
55
|
-
}, 0), [
|
|
58
|
+
}, 0), [Y]), Z = [
|
|
56
59
|
{
|
|
57
60
|
label: "Events",
|
|
58
|
-
value:
|
|
61
|
+
value: J?.totalEvents ?? 0
|
|
59
62
|
},
|
|
60
63
|
{
|
|
61
64
|
label: "Active",
|
|
62
|
-
value:
|
|
65
|
+
value: J?.activeEvents ?? 0
|
|
63
66
|
},
|
|
64
67
|
{
|
|
65
68
|
label: "Registrations",
|
|
66
|
-
value:
|
|
69
|
+
value: J?.totalRegistrations ?? 0
|
|
67
70
|
},
|
|
68
71
|
{
|
|
69
72
|
label: "Attendees",
|
|
70
|
-
value:
|
|
73
|
+
value: J?.totalAttendees ?? 0
|
|
71
74
|
},
|
|
72
75
|
{
|
|
73
76
|
label: "Venues",
|
|
74
|
-
value:
|
|
77
|
+
value: J?.totalVenues ?? 0
|
|
75
78
|
},
|
|
76
79
|
{
|
|
77
80
|
label: "Sponsors",
|
|
78
|
-
value:
|
|
81
|
+
value: J?.totalSponsors ?? 0
|
|
79
82
|
},
|
|
80
83
|
{
|
|
81
84
|
label: "Tracked Revenue",
|
|
82
|
-
value:
|
|
85
|
+
value: X.toFixed(2)
|
|
83
86
|
}
|
|
84
|
-
],
|
|
87
|
+
], Q = (e) => {
|
|
85
88
|
if (e === "announcements") {
|
|
86
|
-
let e =
|
|
87
|
-
return /* @__PURE__ */
|
|
88
|
-
heading:
|
|
89
|
+
let e = N.data?.announcements.items ?? [];
|
|
90
|
+
return /* @__PURE__ */ y(_, {
|
|
91
|
+
heading: N.loading ? "Loading announcements..." : `Announcements (${e.length})`,
|
|
89
92
|
emptyLabel: "No announcements recorded.",
|
|
90
93
|
rows: e.map((e) => ({
|
|
91
94
|
id: e.id,
|
|
@@ -95,9 +98,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
95
98
|
});
|
|
96
99
|
}
|
|
97
100
|
if (e === "campaigns") {
|
|
98
|
-
let e =
|
|
99
|
-
return /* @__PURE__ */
|
|
100
|
-
heading:
|
|
101
|
+
let e = P.data?.communicationCampaigns.items ?? [];
|
|
102
|
+
return /* @__PURE__ */ y(_, {
|
|
103
|
+
heading: P.loading ? "Loading campaigns..." : `Campaigns (${e.length})`,
|
|
101
104
|
emptyLabel: "No communication campaigns available.",
|
|
102
105
|
rows: e.map((e) => ({
|
|
103
106
|
id: e.id,
|
|
@@ -107,9 +110,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
107
110
|
});
|
|
108
111
|
}
|
|
109
112
|
if (e === "templates") {
|
|
110
|
-
let e =
|
|
111
|
-
return /* @__PURE__ */
|
|
112
|
-
heading:
|
|
113
|
+
let e = F.data?.workflowTemplates.items ?? [];
|
|
114
|
+
return /* @__PURE__ */ y(_, {
|
|
115
|
+
heading: F.loading ? "Loading templates..." : `Workflow Templates (${e.length})`,
|
|
113
116
|
emptyLabel: "No workflow templates configured.",
|
|
114
117
|
rows: e.map((e) => ({
|
|
115
118
|
id: e.id,
|
|
@@ -119,9 +122,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
119
122
|
});
|
|
120
123
|
}
|
|
121
124
|
if (e === "rules") {
|
|
122
|
-
let e =
|
|
123
|
-
return /* @__PURE__ */
|
|
124
|
-
heading:
|
|
125
|
+
let e = I.data?.automationRules.items ?? [];
|
|
126
|
+
return /* @__PURE__ */ y(_, {
|
|
127
|
+
heading: I.loading ? "Loading rules..." : `Automation Rules (${e.length})`,
|
|
125
128
|
emptyLabel: "No automation rules configured.",
|
|
126
129
|
rows: e.map((e) => ({
|
|
127
130
|
id: e.id,
|
|
@@ -131,9 +134,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
131
134
|
});
|
|
132
135
|
}
|
|
133
136
|
if (e === "snapshots") {
|
|
134
|
-
let e =
|
|
135
|
-
return /* @__PURE__ */
|
|
136
|
-
heading:
|
|
137
|
+
let e = L.data?.analyticsSnapshots.items ?? [];
|
|
138
|
+
return /* @__PURE__ */ y(_, {
|
|
139
|
+
heading: L.loading ? "Loading analytics snapshots..." : `Snapshots (${e.length})`,
|
|
137
140
|
emptyLabel: "No analytics snapshots generated.",
|
|
138
141
|
rows: e.map((e) => ({
|
|
139
142
|
id: e.id,
|
|
@@ -142,10 +145,10 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
142
145
|
}))
|
|
143
146
|
});
|
|
144
147
|
}
|
|
145
|
-
if (e === "registrations") return /* @__PURE__ */
|
|
146
|
-
heading:
|
|
148
|
+
if (e === "registrations") return /* @__PURE__ */ y(_, {
|
|
149
|
+
heading: R.loading ? "Loading registrations..." : `Registrations (${Y.length})`,
|
|
147
150
|
emptyLabel: "No registrations available.",
|
|
148
|
-
rows:
|
|
151
|
+
rows: Y.map((e) => ({
|
|
149
152
|
id: e.id,
|
|
150
153
|
title: e.attendeeId ? `Attendee ${e.attendeeId}` : `Registration ${e.id}`,
|
|
151
154
|
subtitle: e.totalAmount ? `${e.totalAmount} ${e.currency ?? ""}`.trim() : void 0,
|
|
@@ -153,9 +156,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
153
156
|
}))
|
|
154
157
|
});
|
|
155
158
|
if (e === "ticketTypes") {
|
|
156
|
-
let e =
|
|
157
|
-
return /* @__PURE__ */
|
|
158
|
-
heading:
|
|
159
|
+
let e = z.data?.ticketTypes.items ?? [];
|
|
160
|
+
return /* @__PURE__ */ y(_, {
|
|
161
|
+
heading: z.loading ? "Loading ticket types..." : `Ticket Types (${e.length})`,
|
|
159
162
|
emptyLabel: "No ticket types configured.",
|
|
160
163
|
rows: e.map((e) => ({
|
|
161
164
|
id: e.id,
|
|
@@ -166,9 +169,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
166
169
|
});
|
|
167
170
|
}
|
|
168
171
|
if (e === "promoCodes") {
|
|
169
|
-
let e =
|
|
170
|
-
return /* @__PURE__ */
|
|
171
|
-
heading:
|
|
172
|
+
let e = B.data?.promoCodes.items ?? [];
|
|
173
|
+
return /* @__PURE__ */ y(_, {
|
|
174
|
+
heading: B.loading ? "Loading promo codes..." : `Promo Codes (${e.length})`,
|
|
172
175
|
emptyLabel: "No promo codes configured.",
|
|
173
176
|
rows: e.map((e) => ({
|
|
174
177
|
id: e.id,
|
|
@@ -179,9 +182,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
179
182
|
});
|
|
180
183
|
}
|
|
181
184
|
if (e === "sponsors") {
|
|
182
|
-
let e =
|
|
183
|
-
return /* @__PURE__ */
|
|
184
|
-
heading:
|
|
185
|
+
let e = V.data?.sponsors.items ?? [];
|
|
186
|
+
return /* @__PURE__ */ y(_, {
|
|
187
|
+
heading: V.loading ? "Loading sponsors..." : `Sponsors (${e.length})`,
|
|
185
188
|
emptyLabel: "No sponsors onboarded.",
|
|
186
189
|
rows: e.map((e) => ({
|
|
187
190
|
id: e.id,
|
|
@@ -191,9 +194,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
191
194
|
});
|
|
192
195
|
}
|
|
193
196
|
if (e === "exhibitors") {
|
|
194
|
-
let e =
|
|
195
|
-
return /* @__PURE__ */
|
|
196
|
-
heading:
|
|
197
|
+
let e = H.data?.exhibitors.items ?? [];
|
|
198
|
+
return /* @__PURE__ */ y(_, {
|
|
199
|
+
heading: H.loading ? "Loading exhibitors..." : `Exhibitors (${e.length})`,
|
|
197
200
|
emptyLabel: "No exhibitors onboarded.",
|
|
198
201
|
rows: e.map((e) => ({
|
|
199
202
|
id: e.id,
|
|
@@ -204,9 +207,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
204
207
|
});
|
|
205
208
|
}
|
|
206
209
|
if (e === "leads") {
|
|
207
|
-
let e =
|
|
208
|
-
return /* @__PURE__ */
|
|
209
|
-
heading:
|
|
210
|
+
let e = U.data?.leads.items ?? [];
|
|
211
|
+
return /* @__PURE__ */ y(_, {
|
|
212
|
+
heading: U.loading ? "Loading leads..." : `Leads (${e.length})`,
|
|
210
213
|
emptyLabel: "No leads captured.",
|
|
211
214
|
rows: e.map((e) => ({
|
|
212
215
|
id: e.id,
|
|
@@ -217,9 +220,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
217
220
|
});
|
|
218
221
|
}
|
|
219
222
|
if (e === "venues") {
|
|
220
|
-
let e =
|
|
221
|
-
return /* @__PURE__ */
|
|
222
|
-
heading:
|
|
223
|
+
let e = W.data?.venues.items ?? [];
|
|
224
|
+
return /* @__PURE__ */ y(_, {
|
|
225
|
+
heading: W.loading ? "Loading venues..." : `Venues (${e.length})`,
|
|
223
226
|
emptyLabel: "No venues configured.",
|
|
224
227
|
rows: e.map((e) => ({
|
|
225
228
|
id: e.id,
|
|
@@ -230,9 +233,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
230
233
|
});
|
|
231
234
|
}
|
|
232
235
|
if (e === "checkInRecords") {
|
|
233
|
-
let e =
|
|
234
|
-
return /* @__PURE__ */
|
|
235
|
-
heading:
|
|
236
|
+
let e = K.data?.checkInRecords.items ?? [];
|
|
237
|
+
return /* @__PURE__ */ y(_, {
|
|
238
|
+
heading: K.loading ? "Loading check-in records..." : `Check-In Records (${e.length})`,
|
|
236
239
|
emptyLabel: "No check-in records found.",
|
|
237
240
|
rows: e.map((e) => ({
|
|
238
241
|
id: e.id,
|
|
@@ -243,9 +246,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
243
246
|
});
|
|
244
247
|
}
|
|
245
248
|
if (e === "networkingProfiles") {
|
|
246
|
-
let e =
|
|
247
|
-
return /* @__PURE__ */
|
|
248
|
-
heading:
|
|
249
|
+
let e = q.data?.networkingProfiles.items ?? [];
|
|
250
|
+
return /* @__PURE__ */ y(_, {
|
|
251
|
+
heading: q.loading ? "Loading networking profiles..." : `Profiles (${e.length})`,
|
|
249
252
|
emptyLabel: "No networking profiles available.",
|
|
250
253
|
rows: e.map((e) => ({
|
|
251
254
|
id: e.id,
|
|
@@ -255,9 +258,9 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
255
258
|
}))
|
|
256
259
|
});
|
|
257
260
|
}
|
|
258
|
-
let t =
|
|
259
|
-
return /* @__PURE__ */
|
|
260
|
-
heading:
|
|
261
|
+
let t = G.data?.eventSessions.items ?? [];
|
|
262
|
+
return /* @__PURE__ */ y(_, {
|
|
263
|
+
heading: G.loading ? "Loading sessions..." : `Sessions (${t.length})`,
|
|
261
264
|
emptyLabel: "No sessions scheduled.",
|
|
262
265
|
rows: t.map((e) => ({
|
|
263
266
|
id: e.id,
|
|
@@ -266,44 +269,79 @@ function b({ title: b, description: x, sectionKeys: S }) {
|
|
|
266
269
|
status: e.status ?? void 0
|
|
267
270
|
}))
|
|
268
271
|
});
|
|
269
|
-
};
|
|
270
|
-
return /* @__PURE__ */
|
|
272
|
+
}, ne = A.slice(0, 3), $ = A.slice(3);
|
|
273
|
+
return /* @__PURE__ */ b("div", {
|
|
271
274
|
className: "space-y-6 p-6",
|
|
272
275
|
children: [
|
|
273
|
-
/* @__PURE__ */
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
})
|
|
301
|
-
}),
|
|
302
|
-
|
|
276
|
+
/* @__PURE__ */ b(ee, { children: [
|
|
277
|
+
"A focused operations hub that pulls together the live records most relevant to ",
|
|
278
|
+
O,
|
|
279
|
+
". Instead of jumping between modules, you get the key metrics plus the specific lists you need for this area in one place — handy for a quick health check or a stand-up update."
|
|
280
|
+
] }),
|
|
281
|
+
/* @__PURE__ */ b(w, { children: [/* @__PURE__ */ y("h1", {
|
|
282
|
+
className: "text-2xl font-bold text-text-primary",
|
|
283
|
+
children: /* @__PURE__ */ y(E, { children: O })
|
|
284
|
+
}), /* @__PURE__ */ y("p", {
|
|
285
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
286
|
+
children: k
|
|
287
|
+
})] }),
|
|
288
|
+
/* @__PURE__ */ b("section", { children: [/* @__PURE__ */ y("h2", {
|
|
289
|
+
className: "text-lg font-semibold text-text-primary",
|
|
290
|
+
children: "Operational Metrics"
|
|
291
|
+
}), /* @__PURE__ */ y("div", {
|
|
292
|
+
className: "mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4",
|
|
293
|
+
children: Z.map((e) => /* @__PURE__ */ b(T, {
|
|
294
|
+
treatment: "metric",
|
|
295
|
+
className: "p-3",
|
|
296
|
+
children: [/* @__PURE__ */ y("p", {
|
|
297
|
+
className: "text-xs uppercase tracking-wide text-text-secondary",
|
|
298
|
+
children: e.label
|
|
299
|
+
}), /* @__PURE__ */ y("p", {
|
|
300
|
+
className: "mt-1 text-xl font-semibold tabular-nums text-text-primary",
|
|
301
|
+
children: e.value
|
|
302
|
+
})]
|
|
303
|
+
}, e.label))
|
|
304
|
+
})] }),
|
|
305
|
+
ne.map((e) => /* @__PURE__ */ y("div", { children: Q(e) }, e)),
|
|
306
|
+
$.length > 0 ? /* @__PURE__ */ y(te, {
|
|
307
|
+
collapsedHeight: 160,
|
|
308
|
+
label: "Show all sections",
|
|
309
|
+
children: /* @__PURE__ */ y("div", {
|
|
310
|
+
className: "space-y-6",
|
|
311
|
+
children: $.map((e) => /* @__PURE__ */ y("div", { children: Q(e) }, e))
|
|
312
|
+
})
|
|
313
|
+
}) : null,
|
|
314
|
+
/* @__PURE__ */ y(D, {
|
|
315
|
+
storageKey: "eventfullymanaged-operations-hub",
|
|
316
|
+
title: "Where to go from here",
|
|
317
|
+
steps: [
|
|
318
|
+
{
|
|
319
|
+
id: "overview",
|
|
320
|
+
label: "Back to the dashboard",
|
|
321
|
+
description: "See the big picture across every part of your events.",
|
|
322
|
+
icon: /* @__PURE__ */ y(x, { className: "h-4 w-4" }),
|
|
323
|
+
onClick: () => j("/")
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
id: "automate",
|
|
327
|
+
label: "Automate routine work",
|
|
328
|
+
description: "Set up workflow templates and rules to save time.",
|
|
329
|
+
icon: /* @__PURE__ */ y(C, { className: "h-4 w-4" }),
|
|
330
|
+
onClick: () => j("/workflows")
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
id: "communicate",
|
|
334
|
+
label: "Reach your audience",
|
|
335
|
+
description: "Send announcements and run campaigns.",
|
|
336
|
+
icon: /* @__PURE__ */ y(S, { className: "h-4 w-4" }),
|
|
337
|
+
onClick: () => j("/communication")
|
|
338
|
+
}
|
|
339
|
+
]
|
|
340
|
+
})
|
|
303
341
|
]
|
|
304
342
|
});
|
|
305
343
|
}
|
|
306
344
|
//#endregion
|
|
307
|
-
export {
|
|
345
|
+
export { O as default };
|
|
308
346
|
|
|
309
347
|
//# sourceMappingURL=OperationsHubPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationsHubPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/OperationsHubPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport {\n useExhibitorsQuery,\n useLeadsQuery,\n useCheckInRecordsQuery,\n useNetworkingProfilesQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n useAnalyticsSnapshotsQuery,\n useAnnouncementsQuery,\n useAutomationRulesQuery,\n useCommunicationCampaignsQuery,\n useDashboardSummaryQuery,\n useEventSessionsQuery,\n useRegistrationsQuery,\n useSponsorsQuery,\n useVenuesQuery,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype SectionKey =\n | 'announcements'\n | 'campaigns'\n | 'templates'\n | 'rules'\n | 'snapshots'\n | 'registrations'\n | 'ticketTypes'\n | 'promoCodes'\n | 'sponsors'\n | 'exhibitors'\n | 'leads'\n | 'venues'\n | 'sessions'\n | 'checkInRecords'\n | 'networkingProfiles';\n\ninterface OperationsHubPageProps {\n title: string;\n description: string;\n sectionKeys: SectionKey[];\n}\n\ntype NamedEntity = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype RegistrationEntity = {\n id: string;\n attendeeId?: string | null;\n status?: string | null;\n totalAmount?: string | null;\n currency?: string | null;\n};\n\ntype SponsorEntity = {\n id: string;\n name: string;\n level: string;\n};\n\ntype VenueEntity = {\n id: string;\n name: string;\n city?: string | null;\n status: string;\n};\n\ntype SessionEntity = {\n id: string;\n title?: string | null;\n sessionType?: string | null;\n status?: string | null;\n};\n\ntype ExhibitorEntity = {\n id: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n status: string;\n};\n\ntype LeadEntity = {\n id: string;\n attendeeName: string;\n attendeeEmail: string;\n status: string;\n score?: number | null;\n};\n\nexport default function OperationsHubPage({ title, description, sectionKeys }: OperationsHubPageProps) {\n const summaryQuery = useDashboardSummaryQuery();\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const snapshotsQuery = useAnalyticsSnapshotsQuery({ limit: 100, offset: 0 });\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const exhibitorsQuery = useExhibitorsQuery({ limit: 100, offset: 0 });\n const leadsQuery = useLeadsQuery({ limit: 100, offset: 0 });\n const venuesQuery = useVenuesQuery({ limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ limit: 100, offset: 0 });\n const checkInRecordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const networkingProfilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n\n const summary = summaryQuery.data?.dashboardSummary;\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationEntity[],\n [registrationsQuery.data]\n );\n\n const trackedRevenue = useMemo(\n () =>\n registrations.reduce((total, registration) => {\n const value = Number(registration.totalAmount ?? 0);\n return Number.isFinite(value) ? total + value : total;\n }, 0),\n [registrations]\n );\n\n const cards = [\n { label: 'Events', value: summary?.totalEvents ?? 0 },\n { label: 'Active', value: summary?.activeEvents ?? 0 },\n { label: 'Registrations', value: summary?.totalRegistrations ?? 0 },\n { label: 'Attendees', value: summary?.totalAttendees ?? 0 },\n { label: 'Venues', value: summary?.totalVenues ?? 0 },\n { label: 'Sponsors', value: summary?.totalSponsors ?? 0 },\n { label: 'Tracked Revenue', value: trackedRevenue.toFixed(2) },\n ];\n\n const renderSection = (sectionKey: SectionKey) => {\n if (sectionKey === 'announcements') {\n const rows = (announcementsQuery.data?.announcements.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={announcementsQuery.loading ? 'Loading announcements...' : `Announcements (${rows.length})`}\n emptyLabel=\"No announcements recorded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Announcement ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'campaigns') {\n const rows = (campaignsQuery.data?.communicationCampaigns.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaigns (${rows.length})`}\n emptyLabel=\"No communication campaigns available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Campaign ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'templates') {\n const rows = (templatesQuery.data?.workflowTemplates.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Workflow Templates (${rows.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'rules') {\n const rows = (rulesQuery.data?.automationRules.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading rules...' : `Automation Rules (${rows.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'snapshots') {\n const rows = (snapshotsQuery.data?.analyticsSnapshots.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={snapshotsQuery.loading ? 'Loading analytics snapshots...' : `Snapshots (${rows.length})`}\n emptyLabel=\"No analytics snapshots generated.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Snapshot ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'registrations') {\n return (\n <EntityListSection\n heading={registrationsQuery.loading ? 'Loading registrations...' : `Registrations (${registrations.length})`}\n emptyLabel=\"No registrations available.\"\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Registration ${row.id}`,\n subtitle: row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}`.trim() : undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'ticketTypes') {\n const rows = ticketTypesQuery.data?.ticketTypes.items ?? [];\n return (\n <EntityListSection\n heading={ticketTypesQuery.loading ? 'Loading ticket types...' : `Ticket Types (${rows.length})`}\n emptyLabel=\"No ticket types configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • Sold ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'promoCodes') {\n const rows = promoCodesQuery.data?.promoCodes.items ?? [];\n return (\n <EntityListSection\n heading={promoCodesQuery.loading ? 'Loading promo codes...' : `Promo Codes (${rows.length})`}\n emptyLabel=\"No promo codes configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.code,\n subtitle: `${row.discountType} ${row.discountValue}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'sponsors') {\n const rows = (sponsorsQuery.data?.sponsors.items ?? []) as SponsorEntity[];\n return (\n <EntityListSection\n heading={sponsorsQuery.loading ? 'Loading sponsors...' : `Sponsors (${rows.length})`}\n emptyLabel=\"No sponsors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.level,\n }))}\n />\n );\n }\n\n if (sectionKey === 'exhibitors') {\n const rows = (exhibitorsQuery.data?.exhibitors.items ?? []) as ExhibitorEntity[];\n return (\n <EntityListSection\n heading={exhibitorsQuery.loading ? 'Loading exhibitors...' : `Exhibitors (${rows.length})`}\n emptyLabel=\"No exhibitors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.boothCode, row.category].filter(Boolean).join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'leads') {\n const rows = (leadsQuery.data?.leads.items ?? []) as LeadEntity[];\n return (\n <EntityListSection\n heading={leadsQuery.loading ? 'Loading leads...' : `Leads (${rows.length})`}\n emptyLabel=\"No leads captured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeName,\n subtitle: [row.attendeeEmail, row.score != null ? `Score ${row.score}` : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'venues') {\n const rows = (venuesQuery.data?.venues.items ?? []) as VenueEntity[];\n return (\n <EntityListSection\n heading={venuesQuery.loading ? 'Loading venues...' : `Venues (${rows.length})`}\n emptyLabel=\"No venues configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.city ?? undefined,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'checkInRecords') {\n const rows = checkInRecordsQuery.data?.checkInRecords.items ?? [];\n return (\n <EntityListSection\n heading={checkInRecordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${rows.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'networkingProfiles') {\n const rows = networkingProfilesQuery.data?.networkingProfiles.items ?? [];\n return (\n <EntityListSection\n heading={networkingProfilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${rows.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n );\n }\n\n const rows = (sessionsQuery.data?.eventSessions.items ?? []) as SessionEntity[];\n return (\n <EntityListSection\n heading={sessionsQuery.loading ? 'Loading sessions...' : `Sessions (${rows.length})`}\n emptyLabel=\"No sessions scheduled.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? `Session ${row.id}`,\n subtitle: row.sessionType ?? undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h1 className=\"text-2xl font-bold text-text-primary\">{title}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n </section>\n\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Operational Metrics</h2>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {cards.map((card) => (\n <div key={card.label} className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">{card.label}</p>\n <p className=\"mt-1 text-xl font-semibold text-text-primary\">{card.value}</p>\n </div>\n ))}\n </div>\n </section>\n\n {sectionKeys.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OperationsHubPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/OperationsHubPage.tsx"],"sourcesContent":["import { LayoutDashboard, Megaphone, Workflow } from 'lucide-react';\nimport { EmphasisPanel, GlassCard, GradientText, NextSteps, PagePurpose, ShowMore } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport {\n useExhibitorsQuery,\n useLeadsQuery,\n useCheckInRecordsQuery,\n useNetworkingProfilesQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n useAnalyticsSnapshotsQuery,\n useAnnouncementsQuery,\n useAutomationRulesQuery,\n useCommunicationCampaignsQuery,\n useDashboardSummaryQuery,\n useEventSessionsQuery,\n useRegistrationsQuery,\n useSponsorsQuery,\n useVenuesQuery,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SectionKey =\n | 'announcements'\n | 'campaigns'\n | 'templates'\n | 'rules'\n | 'snapshots'\n | 'registrations'\n | 'ticketTypes'\n | 'promoCodes'\n | 'sponsors'\n | 'exhibitors'\n | 'leads'\n | 'venues'\n | 'sessions'\n | 'checkInRecords'\n | 'networkingProfiles';\n\ninterface OperationsHubPageProps {\n title: string;\n description: string;\n sectionKeys: SectionKey[];\n}\n\ntype NamedEntity = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype RegistrationEntity = {\n id: string;\n attendeeId?: string | null;\n status?: string | null;\n totalAmount?: string | null;\n currency?: string | null;\n};\n\ntype SponsorEntity = {\n id: string;\n name: string;\n level: string;\n};\n\ntype VenueEntity = {\n id: string;\n name: string;\n city?: string | null;\n status: string;\n};\n\ntype SessionEntity = {\n id: string;\n title?: string | null;\n sessionType?: string | null;\n status?: string | null;\n};\n\ntype ExhibitorEntity = {\n id: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n status: string;\n};\n\ntype LeadEntity = {\n id: string;\n attendeeName: string;\n attendeeEmail: string;\n status: string;\n score?: number | null;\n};\n\nexport default function OperationsHubPage({ title, description, sectionKeys }: OperationsHubPageProps) {\n const { navigate } = useEventfullyManaged();\n const summaryQuery = useDashboardSummaryQuery();\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const snapshotsQuery = useAnalyticsSnapshotsQuery({ limit: 100, offset: 0 });\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const exhibitorsQuery = useExhibitorsQuery({ limit: 100, offset: 0 });\n const leadsQuery = useLeadsQuery({ limit: 100, offset: 0 });\n const venuesQuery = useVenuesQuery({ limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ limit: 100, offset: 0 });\n const checkInRecordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const networkingProfilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n\n const summary = summaryQuery.data?.dashboardSummary;\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationEntity[],\n [registrationsQuery.data]\n );\n\n const trackedRevenue = useMemo(\n () =>\n registrations.reduce((total, registration) => {\n const value = Number(registration.totalAmount ?? 0);\n return Number.isFinite(value) ? total + value : total;\n }, 0),\n [registrations]\n );\n\n const cards = [\n { label: 'Events', value: summary?.totalEvents ?? 0 },\n { label: 'Active', value: summary?.activeEvents ?? 0 },\n { label: 'Registrations', value: summary?.totalRegistrations ?? 0 },\n { label: 'Attendees', value: summary?.totalAttendees ?? 0 },\n { label: 'Venues', value: summary?.totalVenues ?? 0 },\n { label: 'Sponsors', value: summary?.totalSponsors ?? 0 },\n { label: 'Tracked Revenue', value: trackedRevenue.toFixed(2) },\n ];\n\n const renderSection = (sectionKey: SectionKey) => {\n if (sectionKey === 'announcements') {\n const rows = (announcementsQuery.data?.announcements.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={announcementsQuery.loading ? 'Loading announcements...' : `Announcements (${rows.length})`}\n emptyLabel=\"No announcements recorded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Announcement ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'campaigns') {\n const rows = (campaignsQuery.data?.communicationCampaigns.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaigns (${rows.length})`}\n emptyLabel=\"No communication campaigns available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Campaign ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'templates') {\n const rows = (templatesQuery.data?.workflowTemplates.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Workflow Templates (${rows.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'rules') {\n const rows = (rulesQuery.data?.automationRules.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading rules...' : `Automation Rules (${rows.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'snapshots') {\n const rows = (snapshotsQuery.data?.analyticsSnapshots.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={snapshotsQuery.loading ? 'Loading analytics snapshots...' : `Snapshots (${rows.length})`}\n emptyLabel=\"No analytics snapshots generated.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Snapshot ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'registrations') {\n return (\n <EntityListSection\n heading={registrationsQuery.loading ? 'Loading registrations...' : `Registrations (${registrations.length})`}\n emptyLabel=\"No registrations available.\"\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Registration ${row.id}`,\n subtitle: row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}`.trim() : undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'ticketTypes') {\n const rows = ticketTypesQuery.data?.ticketTypes.items ?? [];\n return (\n <EntityListSection\n heading={ticketTypesQuery.loading ? 'Loading ticket types...' : `Ticket Types (${rows.length})`}\n emptyLabel=\"No ticket types configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • Sold ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'promoCodes') {\n const rows = promoCodesQuery.data?.promoCodes.items ?? [];\n return (\n <EntityListSection\n heading={promoCodesQuery.loading ? 'Loading promo codes...' : `Promo Codes (${rows.length})`}\n emptyLabel=\"No promo codes configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.code,\n subtitle: `${row.discountType} ${row.discountValue}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'sponsors') {\n const rows = (sponsorsQuery.data?.sponsors.items ?? []) as SponsorEntity[];\n return (\n <EntityListSection\n heading={sponsorsQuery.loading ? 'Loading sponsors...' : `Sponsors (${rows.length})`}\n emptyLabel=\"No sponsors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.level,\n }))}\n />\n );\n }\n\n if (sectionKey === 'exhibitors') {\n const rows = (exhibitorsQuery.data?.exhibitors.items ?? []) as ExhibitorEntity[];\n return (\n <EntityListSection\n heading={exhibitorsQuery.loading ? 'Loading exhibitors...' : `Exhibitors (${rows.length})`}\n emptyLabel=\"No exhibitors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.boothCode, row.category].filter(Boolean).join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'leads') {\n const rows = (leadsQuery.data?.leads.items ?? []) as LeadEntity[];\n return (\n <EntityListSection\n heading={leadsQuery.loading ? 'Loading leads...' : `Leads (${rows.length})`}\n emptyLabel=\"No leads captured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeName,\n subtitle: [row.attendeeEmail, row.score != null ? `Score ${row.score}` : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'venues') {\n const rows = (venuesQuery.data?.venues.items ?? []) as VenueEntity[];\n return (\n <EntityListSection\n heading={venuesQuery.loading ? 'Loading venues...' : `Venues (${rows.length})`}\n emptyLabel=\"No venues configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.city ?? undefined,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'checkInRecords') {\n const rows = checkInRecordsQuery.data?.checkInRecords.items ?? [];\n return (\n <EntityListSection\n heading={checkInRecordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${rows.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'networkingProfiles') {\n const rows = networkingProfilesQuery.data?.networkingProfiles.items ?? [];\n return (\n <EntityListSection\n heading={networkingProfilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${rows.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n );\n }\n\n const rows = (sessionsQuery.data?.eventSessions.items ?? []) as SessionEntity[];\n return (\n <EntityListSection\n heading={sessionsQuery.loading ? 'Loading sessions...' : `Sessions (${rows.length})`}\n emptyLabel=\"No sessions scheduled.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? `Session ${row.id}`,\n subtitle: row.sessionType ?? undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n };\n\n const primarySections = sectionKeys.slice(0, 3);\n const secondarySections = sectionKeys.slice(3);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n A focused operations hub that pulls together the live records most relevant to {title}. Instead of jumping\n between modules, you get the key metrics plus the specific lists you need for this area in one place — handy\n for a quick health check or a stand-up update.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{title}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n </EmphasisPanel>\n\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary\">Operational Metrics</h2>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {cards.map((card) => (\n <GlassCard key={card.label} treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">{card.label}</p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums text-text-primary\">{card.value}</p>\n </GlassCard>\n ))}\n </div>\n </section>\n\n {primarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n\n {secondarySections.length > 0 ? (\n <ShowMore collapsedHeight={160} label=\"Show all sections\">\n <div className=\"space-y-6\">\n {secondarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n </div>\n </ShowMore>\n ) : null}\n\n <NextSteps\n storageKey=\"eventfullymanaged-operations-hub\"\n title=\"Where to go from here\"\n steps={[\n {\n id: 'overview',\n label: 'Back to the dashboard',\n description: 'See the big picture across every part of your events.',\n icon: <LayoutDashboard className=\"h-4 w-4\" />,\n onClick: () => navigate('/'),\n },\n {\n id: 'automate',\n label: 'Automate routine work',\n description: 'Set up workflow templates and rules to save time.',\n icon: <Workflow className=\"h-4 w-4\" />,\n onClick: () => navigate('/workflows'),\n },\n {\n id: 'communicate',\n label: 'Reach your audience',\n description: 'Send announcements and run campaigns.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|