@burdenoff/microfe-eventfullymanaged 2026.703.2 → 2026.704.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/EventfullyManagedRoutes.js +154 -66
- package/dist/eventfullymanaged/EventfullyManagedRoutes.js.map +1 -1
- package/dist/eventfullymanaged/api/eventApi.js +546 -67
- package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
- package/dist/eventfullymanaged/components/ActionMenu.js +113 -0
- package/dist/eventfullymanaged/components/ActionMenu.js.map +1 -0
- package/dist/eventfullymanaged/components/EntityFormShell.js +51 -0
- package/dist/eventfullymanaged/components/EntityFormShell.js.map +1 -0
- package/dist/eventfullymanaged/components/EntityTagsField.js +146 -0
- package/dist/eventfullymanaged/components/EntityTagsField.js.map +1 -0
- package/dist/eventfullymanaged/components/Pagination.js +84 -0
- package/dist/eventfullymanaged/components/Pagination.js.map +1 -0
- package/dist/eventfullymanaged/components/SafeLink.js +32 -0
- package/dist/eventfullymanaged/components/SafeLink.js.map +1 -0
- package/dist/eventfullymanaged/components/index.js +7 -0
- package/dist/eventfullymanaged/pages/events/EventDetailPage.js +458 -0
- package/dist/eventfullymanaged/pages/events/EventDetailPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/events/EventFormPage.js +267 -0
- package/dist/eventfullymanaged/pages/events/EventFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/events/SessionFormPage.js +308 -0
- package/dist/eventfullymanaged/pages/events/SessionFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/events/TicketTypeFormPage.js +214 -0
- package/dist/eventfullymanaged/pages/events/TicketTypeFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/events/eventFormUtils.js +128 -0
- package/dist/eventfullymanaged/pages/events/eventFormUtils.js.map +1 -0
- package/dist/eventfullymanaged/pages/exhibitors/ExhibitorFormPage.js +233 -0
- package/dist/eventfullymanaged/pages/exhibitors/ExhibitorFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.js +165 -0
- package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.js +141 -0
- package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.js.map +1 -0
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +178 -45
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +240 -70
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/EventsPage.js +133 -97
- package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/KioskPage.js +746 -36
- package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +210 -69
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +289 -77
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RoadmapPanel.js +95 -0
- package/dist/eventfullymanaged/pages/modules/RoadmapPanel.js.map +1 -0
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +77 -56
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +70 -36
- package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/networking/MeetingFormPage.js +343 -0
- package/dist/eventfullymanaged/pages/networking/MeetingFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/networking/NetworkingProfileFormPage.js +236 -0
- package/dist/eventfullymanaged/pages/networking/NetworkingProfileFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js +181 -0
- package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js +262 -0
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js +414 -0
- package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js.map +1 -0
- package/dist/eventfullymanaged/pages/speakers/SpeakerFormPage.js +224 -0
- package/dist/eventfullymanaged/pages/speakers/SpeakerFormPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js +96 -0
- package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js.map +1 -0
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +149 -140
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +97 -67
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +93 -72
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +91 -89
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js +83 -53
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,90 +1,260 @@
|
|
|
1
1
|
import { notify as e } from "../../lib/toast.js";
|
|
2
|
-
import { useAnnouncementsQuery as t, useCommunicationCampaignsQuery as n,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
2
|
+
import { useAnnouncementsQuery as t, useCommunicationCampaignsQuery as n, usePublishAnnouncementMutation as r, useSendCommunicationCampaignMutation as i, useUpsertAnnouncementMutation as a, useUpsertCommunicationCampaignMutation as o } from "../../api/eventApi.js";
|
|
3
|
+
import { ActionMenu as s } from "../../components/ActionMenu.js";
|
|
4
|
+
import { Pagination as c, usePagination as l } from "../../components/Pagination.js";
|
|
5
|
+
import { describeError as u, mutationSucceeded as d } from "../../lib/mutationResult.js";
|
|
6
|
+
import { useMemo as f, useState as p } from "react";
|
|
7
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
8
|
+
import { Megaphone as g, Send as _, Upload as v } from "lucide-react";
|
|
9
|
+
import { useI18n as y } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
10
|
+
import { Badge as b, Button as x, EmphasisPanel as S, GlassCard as C, GradientText as w, IllustratedEmptyState as T, Input as E, PagePurpose as D } from "@burdenoff/fe-libs/ui";
|
|
10
11
|
//#region src/eventfullymanaged/pages/modules/CommunicationPage.tsx
|
|
11
|
-
function
|
|
12
|
-
let
|
|
13
|
-
|
|
12
|
+
function O(e) {
|
|
13
|
+
let t = e.toLowerCase();
|
|
14
|
+
return [
|
|
15
|
+
"published",
|
|
16
|
+
"sent",
|
|
17
|
+
"active",
|
|
18
|
+
"completed"
|
|
19
|
+
].includes(t) ? "success" : [
|
|
20
|
+
"cancelled",
|
|
21
|
+
"archived",
|
|
22
|
+
"failed",
|
|
23
|
+
"expired"
|
|
24
|
+
].includes(t) ? "warning" : [
|
|
25
|
+
"draft",
|
|
26
|
+
"created",
|
|
27
|
+
"pending",
|
|
28
|
+
"scheduled"
|
|
29
|
+
].includes(t) ? "info" : "secondary";
|
|
30
|
+
}
|
|
31
|
+
var k = (e) => {
|
|
32
|
+
let t = (e ?? "").toLowerCase();
|
|
33
|
+
return t === "" || t === "draft" || t === "created";
|
|
34
|
+
}, A = (e, t) => e.title ?? e.name ?? `${t} ${e.id}`;
|
|
35
|
+
function j({ title: e, status: t, actions: n, ariaLabel: r }) {
|
|
36
|
+
return /* @__PURE__ */ h("li", {
|
|
37
|
+
className: "flex items-center justify-between gap-3 rounded-card border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1",
|
|
38
|
+
children: [/* @__PURE__ */ m("p", {
|
|
39
|
+
className: "min-w-0 truncate font-medium text-text-primary",
|
|
40
|
+
children: e
|
|
41
|
+
}), /* @__PURE__ */ h("div", {
|
|
42
|
+
className: "flex shrink-0 items-center gap-2",
|
|
43
|
+
children: [t ? /* @__PURE__ */ m(b, {
|
|
44
|
+
variant: O(t),
|
|
45
|
+
className: "uppercase",
|
|
46
|
+
children: t
|
|
47
|
+
}) : null, n.length > 0 ? /* @__PURE__ */ m(s, {
|
|
48
|
+
ariaLabel: r,
|
|
49
|
+
extraItems: n
|
|
50
|
+
}) : null]
|
|
51
|
+
})]
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function M() {
|
|
55
|
+
let { t: s } = y(), b = (e, t) => {
|
|
56
|
+
let n = s(e);
|
|
14
57
|
return n === e ? t : n;
|
|
15
|
-
},
|
|
16
|
-
limit:
|
|
17
|
-
offset:
|
|
18
|
-
}),
|
|
19
|
-
limit:
|
|
20
|
-
offset:
|
|
21
|
-
}), [
|
|
22
|
-
|
|
58
|
+
}, O = l({ pageSize: 10 }), M = l({ pageSize: 10 }), N = t({
|
|
59
|
+
limit: O.limit,
|
|
60
|
+
offset: O.offset
|
|
61
|
+
}), P = n({
|
|
62
|
+
limit: M.limit,
|
|
63
|
+
offset: M.offset
|
|
64
|
+
}), [F, { loading: I }] = a(), [L, { loading: R }] = r(), [z, { loading: B }] = o(), [V, { loading: H }] = i(), [U, W] = p(""), [G, K] = p(""), q = f(() => N.data?.announcements.items ?? [], [N.data]), J = N.data?.announcements.total ?? 0, Y = f(() => P.data?.communicationCampaigns.items ?? [], [P.data]), X = P.data?.communicationCampaigns.total ?? 0, Z = async () => {
|
|
65
|
+
if (!U.trim()) return;
|
|
66
|
+
let t = b("eventfullymanaged.communication.errors.create", "Could not create announcement");
|
|
67
|
+
try {
|
|
68
|
+
let n = await F({ variables: { input: {
|
|
69
|
+
title: U,
|
|
70
|
+
name: U,
|
|
71
|
+
status: "draft",
|
|
72
|
+
metadata: {}
|
|
73
|
+
} } });
|
|
74
|
+
if (!d(n, n.data?.upsertAnnouncement?.id, t)) return;
|
|
75
|
+
W(""), e.success(b("eventfullymanaged.communication.created", "Announcement created")), await N.refetch();
|
|
76
|
+
} catch (n) {
|
|
77
|
+
e.error(t, u(n));
|
|
78
|
+
}
|
|
79
|
+
}, Q = async (t) => {
|
|
80
|
+
let n = b("eventfullymanaged.communication.errors.publish", "Could not publish announcement");
|
|
81
|
+
try {
|
|
82
|
+
let r = await L({ variables: { id: t.id } });
|
|
83
|
+
if (!d(r, r.data?.publishAnnouncement?.id, n)) return;
|
|
84
|
+
e.success(b("eventfullymanaged.communication.published", "Announcement published"));
|
|
85
|
+
} catch (t) {
|
|
86
|
+
e.error(n, u(t));
|
|
87
|
+
}
|
|
88
|
+
}, $ = async () => {
|
|
89
|
+
if (!G.trim()) return;
|
|
90
|
+
let t = b("eventfullymanaged.communication.errors.createCampaign", "Could not create campaign");
|
|
91
|
+
try {
|
|
92
|
+
let n = await z({ variables: { input: {
|
|
93
|
+
title: G,
|
|
94
|
+
name: G,
|
|
95
|
+
status: "draft",
|
|
96
|
+
metadata: {}
|
|
97
|
+
} } });
|
|
98
|
+
if (!d(n, n.data?.upsertCommunicationCampaign?.id, t)) return;
|
|
99
|
+
K(""), e.success(b("eventfullymanaged.communication.campaignCreated", "Campaign created")), await P.refetch();
|
|
100
|
+
} catch (n) {
|
|
101
|
+
e.error(t, u(n));
|
|
102
|
+
}
|
|
103
|
+
}, ee = async (t) => {
|
|
104
|
+
let n = b("eventfullymanaged.communication.errors.send", "Could not send campaign");
|
|
105
|
+
try {
|
|
106
|
+
let r = await V({ variables: { id: t.id } });
|
|
107
|
+
if (!d(r, r.data?.sendCommunicationCampaign?.id, n)) return;
|
|
108
|
+
e.success(b("eventfullymanaged.communication.sent", "Campaign delivery started"));
|
|
109
|
+
} catch (t) {
|
|
110
|
+
e.error(n, u(t));
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
return /* @__PURE__ */ h("div", {
|
|
23
114
|
className: "space-y-6 p-6",
|
|
24
115
|
children: [
|
|
25
|
-
/* @__PURE__ */
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ m(D, { children: b("eventfullymanaged.communication.purpose", "Keep attendees informed and engaged. Announcements are one-off broadcasts (a schedule change, a welcome message); campaigns are scheduled, multi-step outreach (reminder emails, follow-ups). Draft each one here, then publish an announcement or send a campaign — delivery runs server-side through the notification service.") }),
|
|
117
|
+
/* @__PURE__ */ h(S, { children: [
|
|
118
|
+
/* @__PURE__ */ m("h1", {
|
|
28
119
|
className: "text-2xl font-bold text-text-primary",
|
|
29
|
-
children: /* @__PURE__ */
|
|
120
|
+
children: /* @__PURE__ */ m(w, { children: b("eventfullymanaged.communication.title", "Communication") })
|
|
30
121
|
}),
|
|
31
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ m("p", {
|
|
32
123
|
className: "mt-1 text-sm text-text-secondary",
|
|
33
|
-
children:
|
|
124
|
+
children: b("eventfullymanaged.communication.description", "Draft announcements and campaigns, then publish or send them via workspace APIs.")
|
|
34
125
|
}),
|
|
35
|
-
/* @__PURE__ */
|
|
36
|
-
className: "mt-4
|
|
37
|
-
children: [/* @__PURE__ */
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
126
|
+
/* @__PURE__ */ h("div", {
|
|
127
|
+
className: "mt-4 grid grid-cols-1 gap-4 lg:grid-cols-2",
|
|
128
|
+
children: [/* @__PURE__ */ h("div", {
|
|
129
|
+
className: "space-y-2",
|
|
130
|
+
children: [/* @__PURE__ */ m("p", {
|
|
131
|
+
className: "text-sm font-medium text-text-primary",
|
|
132
|
+
children: b("eventfullymanaged.communication.announcements.heading", "Announcements")
|
|
133
|
+
}), /* @__PURE__ */ h("div", {
|
|
134
|
+
className: "flex flex-col gap-2 sm:flex-row",
|
|
135
|
+
children: [/* @__PURE__ */ m(E, {
|
|
136
|
+
value: U,
|
|
137
|
+
onChange: (e) => W(e.target.value),
|
|
138
|
+
placeholder: b("eventfullymanaged.communication.inputPlaceholder", "Emergency schedule update"),
|
|
139
|
+
"aria-label": b("eventfullymanaged.communication.inputPlaceholder", "Emergency schedule update"),
|
|
140
|
+
className: "flex-1"
|
|
141
|
+
}), /* @__PURE__ */ h(x, {
|
|
142
|
+
type: "button",
|
|
143
|
+
disabled: I,
|
|
144
|
+
onClick: Z,
|
|
145
|
+
children: [/* @__PURE__ */ m(g, { className: "h-4 w-4" }), I ? b("eventfullymanaged.communication.actions.creating", "Creating...") : b("eventfullymanaged.communication.actions.createAnnouncement", "Create Announcement")]
|
|
146
|
+
})]
|
|
147
|
+
})]
|
|
148
|
+
}), /* @__PURE__ */ h("div", {
|
|
149
|
+
className: "space-y-2",
|
|
150
|
+
children: [/* @__PURE__ */ m("p", {
|
|
151
|
+
className: "text-sm font-medium text-text-primary",
|
|
152
|
+
children: b("eventfullymanaged.communication.campaigns.heading", "Campaigns")
|
|
153
|
+
}), /* @__PURE__ */ h("div", {
|
|
154
|
+
className: "flex flex-col gap-2 sm:flex-row",
|
|
155
|
+
children: [/* @__PURE__ */ m(E, {
|
|
156
|
+
value: G,
|
|
157
|
+
onChange: (e) => K(e.target.value),
|
|
158
|
+
placeholder: b("eventfullymanaged.communication.campaignPlaceholder", "Week-before reminder"),
|
|
159
|
+
"aria-label": b("eventfullymanaged.communication.campaignPlaceholder", "Week-before reminder"),
|
|
160
|
+
className: "flex-1"
|
|
161
|
+
}), /* @__PURE__ */ h(x, {
|
|
162
|
+
type: "button",
|
|
163
|
+
variant: "outline",
|
|
164
|
+
disabled: B,
|
|
165
|
+
onClick: $,
|
|
166
|
+
children: [/* @__PURE__ */ m(_, { className: "h-4 w-4" }), B ? b("eventfullymanaged.communication.actions.creating", "Creating...") : b("eventfullymanaged.communication.actions.createCampaign", "New Campaign")]
|
|
167
|
+
})]
|
|
168
|
+
})]
|
|
63
169
|
})]
|
|
64
170
|
})
|
|
65
171
|
] }),
|
|
66
|
-
/* @__PURE__ */
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
172
|
+
/* @__PURE__ */ h(C, {
|
|
173
|
+
treatment: "plain",
|
|
174
|
+
className: "border-border-seam p-5",
|
|
175
|
+
children: [/* @__PURE__ */ m("h2", {
|
|
176
|
+
className: "text-lg font-semibold text-text-primary",
|
|
177
|
+
children: N.loading ? b("eventfullymanaged.communication.announcements.loading", "Loading announcements...") : `${b("eventfullymanaged.communication.announcements.heading", "Announcements")} (${J})`
|
|
178
|
+
}), /* @__PURE__ */ h("div", {
|
|
179
|
+
className: "mt-4",
|
|
180
|
+
children: [q.length === 0 ? /* @__PURE__ */ m(T, {
|
|
181
|
+
illustration: "empty-data",
|
|
182
|
+
title: b("eventfullymanaged.communication.announcements.empty", "No announcements published yet."),
|
|
183
|
+
className: "py-8"
|
|
184
|
+
}) : /* @__PURE__ */ m("ul", {
|
|
185
|
+
className: "space-y-2.5",
|
|
186
|
+
children: q.map((e) => {
|
|
187
|
+
let t = k(e.status) ? [{
|
|
188
|
+
key: "publish",
|
|
189
|
+
label: b("eventfullymanaged.communication.actions.publish", "Publish"),
|
|
190
|
+
icon: v,
|
|
191
|
+
disabled: R,
|
|
192
|
+
onSelect: () => void Q(e)
|
|
193
|
+
}] : [];
|
|
194
|
+
return /* @__PURE__ */ m(j, {
|
|
195
|
+
title: A(e, b("eventfullymanaged.communication.announcements.itemPrefix", "Announcement")),
|
|
196
|
+
status: e.status,
|
|
197
|
+
actions: t,
|
|
198
|
+
ariaLabel: b("eventfullymanaged.communication.announcements.rowActions", "Announcement actions")
|
|
199
|
+
}, e.id);
|
|
200
|
+
})
|
|
201
|
+
}), /* @__PURE__ */ m(c, {
|
|
202
|
+
offset: O.offset,
|
|
203
|
+
limit: O.limit,
|
|
204
|
+
loadedCount: q.length,
|
|
205
|
+
total: J,
|
|
206
|
+
onPrev: O.prevPage,
|
|
207
|
+
onNext: O.nextPage,
|
|
208
|
+
itemLabel: b("eventfullymanaged.communication.announcements.heading", "Announcements").toLowerCase(),
|
|
209
|
+
loading: N.loading
|
|
210
|
+
})]
|
|
211
|
+
})]
|
|
74
212
|
}),
|
|
75
|
-
/* @__PURE__ */
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
213
|
+
/* @__PURE__ */ h(C, {
|
|
214
|
+
treatment: "plain",
|
|
215
|
+
className: "border-border-seam p-5",
|
|
216
|
+
children: [/* @__PURE__ */ m("h2", {
|
|
217
|
+
className: "text-lg font-semibold text-text-primary",
|
|
218
|
+
children: P.loading ? b("eventfullymanaged.communication.campaigns.loading", "Loading campaigns...") : `${b("eventfullymanaged.communication.campaigns.heading", "Campaigns")} (${X})`
|
|
219
|
+
}), /* @__PURE__ */ h("div", {
|
|
220
|
+
className: "mt-4",
|
|
221
|
+
children: [Y.length === 0 ? /* @__PURE__ */ m(T, {
|
|
222
|
+
illustration: "empty-data",
|
|
223
|
+
title: b("eventfullymanaged.communication.campaigns.empty", "No communication campaigns created yet."),
|
|
224
|
+
className: "py-8"
|
|
225
|
+
}) : /* @__PURE__ */ m("ul", {
|
|
226
|
+
className: "space-y-2.5",
|
|
227
|
+
children: Y.map((e) => {
|
|
228
|
+
let t = k(e.status) ? [{
|
|
229
|
+
key: "send",
|
|
230
|
+
label: b("eventfullymanaged.communication.actions.send", "Send Campaign"),
|
|
231
|
+
icon: _,
|
|
232
|
+
disabled: H,
|
|
233
|
+
onSelect: () => void ee(e)
|
|
234
|
+
}] : [];
|
|
235
|
+
return /* @__PURE__ */ m(j, {
|
|
236
|
+
title: A(e, b("eventfullymanaged.communication.campaigns.itemPrefix", "Campaign")),
|
|
237
|
+
status: e.status,
|
|
238
|
+
actions: t,
|
|
239
|
+
ariaLabel: b("eventfullymanaged.communication.campaigns.rowActions", "Campaign actions")
|
|
240
|
+
}, e.id);
|
|
241
|
+
})
|
|
242
|
+
}), /* @__PURE__ */ m(c, {
|
|
243
|
+
offset: M.offset,
|
|
244
|
+
limit: M.limit,
|
|
245
|
+
loadedCount: Y.length,
|
|
246
|
+
total: X,
|
|
247
|
+
onPrev: M.prevPage,
|
|
248
|
+
onNext: M.nextPage,
|
|
249
|
+
itemLabel: b("eventfullymanaged.communication.campaigns.heading", "Campaigns").toLowerCase(),
|
|
250
|
+
loading: P.loading
|
|
251
|
+
})]
|
|
252
|
+
})]
|
|
83
253
|
})
|
|
84
254
|
]
|
|
85
255
|
});
|
|
86
256
|
}
|
|
87
257
|
//#endregion
|
|
88
|
-
export {
|
|
258
|
+
export { M as default };
|
|
89
259
|
|
|
90
260
|
//# sourceMappingURL=CommunicationPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommunicationPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/CommunicationPage.tsx"],"sourcesContent":["import { Megaphone } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Button, EmphasisPanel, GradientText, Input, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAnnouncementsQuery,\n useCommunicationCampaignsQuery,\n useUpsertAnnouncementMutation,\n} from '../../api/eventApi';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\nimport { EntityListSection } from './EntityListSection';\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function CommunicationPage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const [createAnnouncement, { loading: creating }] = useUpsertAnnouncementMutation();\n const [announcementTitle, setAnnouncementTitle] = useState('');\n\n const announcements = useMemo(\n () => (announcementsQuery.data?.announcements.items ?? []) as SimpleRow[],\n [announcementsQuery.data]\n );\n const campaigns = useMemo(\n () => (campaignsQuery.data?.communicationCampaigns.items ?? []) as SimpleRow[],\n [campaignsQuery.data]\n );\n\n const onCreate = async () => {\n if (!announcementTitle.trim()) return;\n const failureMessage = t('eventfullymanaged.communication.errors.create', 'Could not create announcement');\n try {\n const response = await createAnnouncement({\n variables: {\n input: {\n title: announcementTitle,\n name: announcementTitle,\n status: 'draft',\n metadata: {},\n },\n },\n });\n if (!mutationSucceeded(response, response.data?.upsertAnnouncement?.id, failureMessage)) {\n return;\n }\n setAnnouncementTitle('');\n notify.success(t('eventfullymanaged.communication.created', 'Announcement created'));\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n {t(\n 'eventfullymanaged.communication.purpose',\n 'Keep attendees informed and engaged. Announcements are one-off broadcasts (a schedule change, a welcome message); campaigns are scheduled, multi-step outreach (reminder emails, follow-ups). Use this page to draft and publish everything you need to say before, during and after an event.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{t('eventfullymanaged.communication.title', 'Communication')}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t('eventfullymanaged.communication.description', 'Announcements and campaigns managed via workspace APIs.')}\n </p>\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row\">\n <Input\n value={announcementTitle}\n onChange={(e) => setAnnouncementTitle(e.target.value)}\n placeholder={t('eventfullymanaged.communication.inputPlaceholder', 'Emergency schedule update')}\n aria-label={t('eventfullymanaged.communication.inputPlaceholder', 'Emergency schedule update')}\n className=\"flex-1\"\n />\n <Button type=\"button\" disabled={creating} onClick={onCreate}>\n <Megaphone className=\"h-4 w-4\" />\n {creating\n ? t('eventfullymanaged.communication.actions.creating', 'Creating...')\n : t('eventfullymanaged.communication.actions.createAnnouncement', 'Create Announcement')}\n </Button>\n </div>\n </EmphasisPanel>\n\n <EntityListSection\n heading={\n announcementsQuery.loading\n ? t('eventfullymanaged.communication.announcements.loading', 'Loading announcements...')\n : `${t('eventfullymanaged.communication.announcements.heading', 'Announcements')} (${announcements.length})`\n }\n emptyLabel={t('eventfullymanaged.communication.announcements.empty', 'No announcements published yet.')}\n rows={announcements.map((row) => ({\n id: row.id,\n title:\n row.title ??\n row.name ??\n `${t('eventfullymanaged.communication.announcements.itemPrefix', 'Announcement')} ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={\n campaignsQuery.loading\n ? t('eventfullymanaged.communication.campaigns.loading', 'Loading campaigns...')\n : `${t('eventfullymanaged.communication.campaigns.heading', 'Campaigns')} (${campaigns.length})`\n }\n emptyLabel={t('eventfullymanaged.communication.campaigns.empty', 'No communication campaigns created yet.')}\n rows={campaigns.map((row) => ({\n id: row.id,\n title:\n row.title ??\n row.name ??\n `${t('eventfullymanaged.communication.campaigns.itemPrefix', 'Campaign')} ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommunicationPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/CommunicationPage.tsx"],"sourcesContent":["import { Megaphone, Send, Upload } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAnnouncementsQuery,\n useCommunicationCampaignsQuery,\n usePublishAnnouncementMutation,\n useSendCommunicationCampaignMutation,\n useUpsertAnnouncementMutation,\n useUpsertCommunicationCampaignMutation,\n} from '../../api/eventApi';\nimport { ActionMenu, type ActionMenuItem } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\ntype SimpleRow = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['published', 'sent', 'active', 'completed'].includes(value)) return 'success';\n if (['cancelled', 'archived', 'failed', 'expired'].includes(value)) return 'warning';\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) return 'info';\n return 'secondary';\n}\n\nconst isDraft = (status?: string | null): boolean => {\n const value = (status ?? '').toLowerCase();\n return value === '' || value === 'draft' || value === 'created';\n};\n\nconst rowLabel = (row: SimpleRow, fallback: string): string => row.title ?? row.name ?? `${fallback} ${row.id}`;\n\nfunction EntityRow({\n title,\n status,\n actions,\n ariaLabel,\n}: {\n title: string;\n status?: string | null;\n actions: ActionMenuItem[];\n ariaLabel: string;\n}) {\n return (\n <li className=\"flex items-center justify-between gap-3 rounded-card border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\">\n <p className=\"min-w-0 truncate font-medium text-text-primary\">{title}</p>\n <div className=\"flex shrink-0 items-center gap-2\">\n {status ? (\n <Badge variant={statusVariant(status)} className=\"uppercase\">\n {status}\n </Badge>\n ) : null}\n {actions.length > 0 ? <ActionMenu ariaLabel={ariaLabel} extraItems={actions} /> : null}\n </div>\n </li>\n );\n}\n\nexport default function CommunicationPage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n\n const announcementPagination = usePagination({ pageSize: 10 });\n const campaignPagination = usePagination({ pageSize: 10 });\n\n const announcementsQuery = useAnnouncementsQuery({\n limit: announcementPagination.limit,\n offset: announcementPagination.offset,\n });\n const campaignsQuery = useCommunicationCampaignsQuery({\n limit: campaignPagination.limit,\n offset: campaignPagination.offset,\n });\n\n const [createAnnouncement, { loading: creatingAnnouncement }] = useUpsertAnnouncementMutation();\n const [publishAnnouncement, { loading: publishing }] = usePublishAnnouncementMutation();\n const [createCampaign, { loading: creatingCampaign }] = useUpsertCommunicationCampaignMutation();\n const [sendCampaign, { loading: sending }] = useSendCommunicationCampaignMutation();\n\n const [announcementTitle, setAnnouncementTitle] = useState('');\n const [campaignTitle, setCampaignTitle] = useState('');\n\n const announcements = useMemo(\n () => (announcementsQuery.data?.announcements.items ?? []) as SimpleRow[],\n [announcementsQuery.data]\n );\n const announcementTotal = announcementsQuery.data?.announcements.total ?? 0;\n const campaigns = useMemo(\n () => (campaignsQuery.data?.communicationCampaigns.items ?? []) as SimpleRow[],\n [campaignsQuery.data]\n );\n const campaignTotal = campaignsQuery.data?.communicationCampaigns.total ?? 0;\n\n const onCreateAnnouncement = async () => {\n if (!announcementTitle.trim()) return;\n const failureMessage = t('eventfullymanaged.communication.errors.create', 'Could not create announcement');\n try {\n const response = await createAnnouncement({\n variables: { input: { title: announcementTitle, name: announcementTitle, status: 'draft', metadata: {} } },\n });\n if (!mutationSucceeded(response, response.data?.upsertAnnouncement?.id, failureMessage)) {\n return;\n }\n setAnnouncementTitle('');\n notify.success(t('eventfullymanaged.communication.created', 'Announcement created'));\n await announcementsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onPublishAnnouncement = async (row: SimpleRow) => {\n const failureMessage = t('eventfullymanaged.communication.errors.publish', 'Could not publish announcement');\n try {\n const response = await publishAnnouncement({ variables: { id: row.id } });\n if (!mutationSucceeded(response, response.data?.publishAnnouncement?.id, failureMessage)) {\n return;\n }\n notify.success(t('eventfullymanaged.communication.published', 'Announcement published'));\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onCreateCampaign = async () => {\n if (!campaignTitle.trim()) return;\n const failureMessage = t('eventfullymanaged.communication.errors.createCampaign', 'Could not create campaign');\n try {\n const response = await createCampaign({\n variables: { input: { title: campaignTitle, name: campaignTitle, status: 'draft', metadata: {} } },\n });\n if (!mutationSucceeded(response, response.data?.upsertCommunicationCampaign?.id, failureMessage)) {\n return;\n }\n setCampaignTitle('');\n notify.success(t('eventfullymanaged.communication.campaignCreated', 'Campaign created'));\n await campaignsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onSendCampaign = async (row: SimpleRow) => {\n const failureMessage = t('eventfullymanaged.communication.errors.send', 'Could not send campaign');\n try {\n const response = await sendCampaign({ variables: { id: row.id } });\n if (!mutationSucceeded(response, response.data?.sendCommunicationCampaign?.id, failureMessage)) {\n return;\n }\n notify.success(t('eventfullymanaged.communication.sent', 'Campaign delivery started'));\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n {t(\n 'eventfullymanaged.communication.purpose',\n 'Keep attendees informed and engaged. Announcements are one-off broadcasts (a schedule change, a welcome message); campaigns are scheduled, multi-step outreach (reminder emails, follow-ups). Draft each one here, then publish an announcement or send a campaign — delivery runs server-side through the notification service.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{t('eventfullymanaged.communication.title', 'Communication')}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n 'eventfullymanaged.communication.description',\n 'Draft announcements and campaigns, then publish or send them via workspace APIs.'\n )}\n </p>\n <div className=\"mt-4 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-text-primary\">\n {t('eventfullymanaged.communication.announcements.heading', 'Announcements')}\n </p>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Input\n value={announcementTitle}\n onChange={(e) => setAnnouncementTitle(e.target.value)}\n placeholder={t('eventfullymanaged.communication.inputPlaceholder', 'Emergency schedule update')}\n aria-label={t('eventfullymanaged.communication.inputPlaceholder', 'Emergency schedule update')}\n className=\"flex-1\"\n />\n <Button type=\"button\" disabled={creatingAnnouncement} onClick={onCreateAnnouncement}>\n <Megaphone className=\"h-4 w-4\" />\n {creatingAnnouncement\n ? t('eventfullymanaged.communication.actions.creating', 'Creating...')\n : t('eventfullymanaged.communication.actions.createAnnouncement', 'Create Announcement')}\n </Button>\n </div>\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-text-primary\">\n {t('eventfullymanaged.communication.campaigns.heading', 'Campaigns')}\n </p>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Input\n value={campaignTitle}\n onChange={(e) => setCampaignTitle(e.target.value)}\n placeholder={t('eventfullymanaged.communication.campaignPlaceholder', 'Week-before reminder')}\n aria-label={t('eventfullymanaged.communication.campaignPlaceholder', 'Week-before reminder')}\n className=\"flex-1\"\n />\n <Button type=\"button\" variant=\"outline\" disabled={creatingCampaign} onClick={onCreateCampaign}>\n <Send className=\"h-4 w-4\" />\n {creatingCampaign\n ? t('eventfullymanaged.communication.actions.creating', 'Creating...')\n : t('eventfullymanaged.communication.actions.createCampaign', 'New Campaign')}\n </Button>\n </div>\n </div>\n </div>\n </EmphasisPanel>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {announcementsQuery.loading\n ? t('eventfullymanaged.communication.announcements.loading', 'Loading announcements...')\n : `${t('eventfullymanaged.communication.announcements.heading', 'Announcements')} (${announcementTotal})`}\n </h2>\n <div className=\"mt-4\">\n {announcements.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('eventfullymanaged.communication.announcements.empty', 'No announcements published yet.')}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {announcements.map((row) => {\n const publishAction: ActionMenuItem[] = isDraft(row.status)\n ? [\n {\n key: 'publish',\n label: t('eventfullymanaged.communication.actions.publish', 'Publish'),\n icon: Upload,\n disabled: publishing,\n onSelect: () => void onPublishAnnouncement(row),\n },\n ]\n : [];\n return (\n <EntityRow\n key={row.id}\n title={rowLabel(row, t('eventfullymanaged.communication.announcements.itemPrefix', 'Announcement'))}\n status={row.status}\n actions={publishAction}\n ariaLabel={t('eventfullymanaged.communication.announcements.rowActions', 'Announcement actions')}\n />\n );\n })}\n </ul>\n )}\n <Pagination\n offset={announcementPagination.offset}\n limit={announcementPagination.limit}\n loadedCount={announcements.length}\n total={announcementTotal}\n onPrev={announcementPagination.prevPage}\n onNext={announcementPagination.nextPage}\n itemLabel={t('eventfullymanaged.communication.announcements.heading', 'Announcements').toLowerCase()}\n loading={announcementsQuery.loading}\n />\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {campaignsQuery.loading\n ? t('eventfullymanaged.communication.campaigns.loading', 'Loading campaigns...')\n : `${t('eventfullymanaged.communication.campaigns.heading', 'Campaigns')} (${campaignTotal})`}\n </h2>\n <div className=\"mt-4\">\n {campaigns.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('eventfullymanaged.communication.campaigns.empty', 'No communication campaigns created yet.')}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {campaigns.map((row) => {\n const sendAction: ActionMenuItem[] = isDraft(row.status)\n ? [\n {\n key: 'send',\n label: t('eventfullymanaged.communication.actions.send', 'Send Campaign'),\n icon: Send,\n disabled: sending,\n onSelect: () => void onSendCampaign(row),\n },\n ]\n : [];\n return (\n <EntityRow\n key={row.id}\n title={rowLabel(row, t('eventfullymanaged.communication.campaigns.itemPrefix', 'Campaign'))}\n status={row.status}\n actions={sendAction}\n ariaLabel={t('eventfullymanaged.communication.campaigns.rowActions', 'Campaign actions')}\n />\n );\n })}\n </ul>\n )}\n <Pagination\n offset={campaignPagination.offset}\n limit={campaignPagination.limit}\n loadedCount={campaigns.length}\n total={campaignTotal}\n onPrev={campaignPagination.prevPage}\n onNext={campaignPagination.nextPage}\n itemLabel={t('eventfullymanaged.communication.campaigns.heading', 'Campaigns').toLowerCase()}\n loading={campaignsQuery.loading}\n />\n </div>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":"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"}
|