@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
|
@@ -2,89 +2,96 @@ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContex
|
|
|
2
2
|
import { useVenueQuery as t } from "../../api/eventApi.js";
|
|
3
3
|
import { useParams as n } from "react-router-dom";
|
|
4
4
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
-
import { ArrowLeft as a, Building2 as o, Edit as s, MapPin as c,
|
|
5
|
+
import { ArrowLeft as a, Building2 as o, Edit as s, MapPin as c, Megaphone as l, SquareStack as u, Users as d } from "lucide-react";
|
|
6
|
+
import { Badge as f, Button as p, GlassCard as m, IllustratedEmptyState as h, NextSteps as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/eventfullymanaged/pages/venues/VenueDetailPage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { id:
|
|
9
|
-
return
|
|
8
|
+
function v() {
|
|
9
|
+
let { id: v = "" } = n(), { navigate: y } = e(), { data: b, loading: x } = t(v), S = b?.venue ?? null, C = b?.floorPlans?.items ?? [];
|
|
10
|
+
return x ? /* @__PURE__ */ r("div", {
|
|
10
11
|
className: "p-6 text-sm text-text-secondary",
|
|
11
12
|
children: "Loading venue..."
|
|
12
|
-
}) :
|
|
13
|
+
}) : S ? /* @__PURE__ */ i("div", {
|
|
13
14
|
className: "space-y-6 p-6",
|
|
14
15
|
children: [
|
|
16
|
+
/* @__PURE__ */ r(_, { children: "The full record for one venue. Review its location, capacity and status, see what amenities it offers, and manage the floor plans attendees will navigate. Come here to confirm a space is ready before you assign an event to it." }),
|
|
15
17
|
/* @__PURE__ */ i("div", {
|
|
16
|
-
className: "flex items-center justify-between
|
|
18
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
17
19
|
children: [/* @__PURE__ */ i("div", {
|
|
18
20
|
className: "space-y-3",
|
|
19
|
-
children: [/* @__PURE__ */ i(
|
|
21
|
+
children: [/* @__PURE__ */ i(p, {
|
|
20
22
|
type: "button",
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
variant: "ghost",
|
|
24
|
+
size: "sm",
|
|
25
|
+
onClick: () => y("/venues"),
|
|
23
26
|
children: [/* @__PURE__ */ r(a, { className: "h-4 w-4" }), "Back to Venues"]
|
|
24
27
|
}), /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("h1", {
|
|
25
28
|
className: "text-2xl font-bold text-text-primary",
|
|
26
|
-
children:
|
|
29
|
+
children: S.name
|
|
27
30
|
}), /* @__PURE__ */ r("p", {
|
|
28
31
|
className: "mt-1 text-sm text-text-secondary",
|
|
29
|
-
children:
|
|
32
|
+
children: S.description ?? "No description provided."
|
|
30
33
|
})] })]
|
|
31
|
-
}), /* @__PURE__ */ i(
|
|
34
|
+
}), /* @__PURE__ */ i(p, {
|
|
32
35
|
type: "button",
|
|
33
|
-
onClick: () =>
|
|
34
|
-
|
|
35
|
-
children: [/* @__PURE__ */ r(s, { className: "mr-2 h-4 w-4" }), "Edit Venue"]
|
|
36
|
+
onClick: () => y(`/venues/${S.id}/edit`),
|
|
37
|
+
children: [/* @__PURE__ */ r(s, { className: "h-4 w-4" }), "Edit Venue"]
|
|
36
38
|
})]
|
|
37
39
|
}),
|
|
38
40
|
/* @__PURE__ */ i("div", {
|
|
39
41
|
className: "grid grid-cols-1 gap-4 lg:grid-cols-3",
|
|
40
42
|
children: [
|
|
41
|
-
/* @__PURE__ */ i(
|
|
42
|
-
|
|
43
|
+
/* @__PURE__ */ i(m, {
|
|
44
|
+
treatment: "metric",
|
|
45
|
+
className: "p-4",
|
|
43
46
|
children: [/* @__PURE__ */ i("div", {
|
|
44
47
|
className: "mb-2 flex items-center gap-2 text-sm font-medium text-text-primary",
|
|
45
|
-
children: [/* @__PURE__ */ r(c, { className: "h-4 w-4" }), "Location"]
|
|
48
|
+
children: [/* @__PURE__ */ r(c, { className: "h-4 w-4 text-action-primary-bg" }), "Location"]
|
|
46
49
|
}), /* @__PURE__ */ r("p", {
|
|
47
50
|
className: "text-sm text-text-secondary",
|
|
48
51
|
children: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
S.addressLine1,
|
|
53
|
+
S.city,
|
|
54
|
+
S.state,
|
|
55
|
+
S.country,
|
|
56
|
+
S.postalCode
|
|
54
57
|
].filter(Boolean).join(", ") || "Location not configured"
|
|
55
58
|
})]
|
|
56
59
|
}),
|
|
57
|
-
/* @__PURE__ */ i(
|
|
58
|
-
|
|
60
|
+
/* @__PURE__ */ i(m, {
|
|
61
|
+
treatment: "glass",
|
|
62
|
+
glow: !0,
|
|
63
|
+
className: "p-4",
|
|
59
64
|
children: [/* @__PURE__ */ i("div", {
|
|
60
65
|
className: "mb-2 flex items-center gap-2 text-sm font-medium text-text-primary",
|
|
61
|
-
children: [/* @__PURE__ */ r(
|
|
66
|
+
children: [/* @__PURE__ */ r(d, { className: "h-4 w-4 text-action-primary-bg" }), "Capacity"]
|
|
62
67
|
}), /* @__PURE__ */ i("p", {
|
|
63
|
-
className: "text-sm text-text-secondary",
|
|
64
|
-
children: [
|
|
68
|
+
className: "text-sm tabular-nums text-text-secondary",
|
|
69
|
+
children: [S.capacity ?? 0, " attendees"]
|
|
65
70
|
})]
|
|
66
71
|
}),
|
|
67
|
-
/* @__PURE__ */ i(
|
|
68
|
-
|
|
72
|
+
/* @__PURE__ */ i(m, {
|
|
73
|
+
treatment: "metric",
|
|
74
|
+
className: "p-4",
|
|
69
75
|
children: [/* @__PURE__ */ i("div", {
|
|
70
76
|
className: "mb-2 flex items-center gap-2 text-sm font-medium text-text-primary",
|
|
71
|
-
children: [/* @__PURE__ */ r(o, { className: "h-4 w-4" }), "Status"]
|
|
77
|
+
children: [/* @__PURE__ */ r(o, { className: "h-4 w-4 text-action-primary-bg" }), "Status"]
|
|
72
78
|
}), /* @__PURE__ */ r("p", {
|
|
73
79
|
className: "text-sm uppercase text-text-secondary",
|
|
74
|
-
children:
|
|
80
|
+
children: S.status
|
|
75
81
|
})]
|
|
76
82
|
})
|
|
77
83
|
]
|
|
78
84
|
}),
|
|
79
|
-
/* @__PURE__ */ i(
|
|
80
|
-
|
|
85
|
+
/* @__PURE__ */ i(m, {
|
|
86
|
+
treatment: "plain",
|
|
87
|
+
className: "border-border-seam p-5",
|
|
81
88
|
children: [/* @__PURE__ */ r("h2", {
|
|
82
89
|
className: "text-lg font-semibold text-text-primary",
|
|
83
90
|
children: "Amenities"
|
|
84
91
|
}), /* @__PURE__ */ r("div", {
|
|
85
92
|
className: "mt-3 flex flex-wrap gap-2",
|
|
86
|
-
children:
|
|
87
|
-
|
|
93
|
+
children: S.amenities.length > 0 ? S.amenities.map((e) => /* @__PURE__ */ r(f, {
|
|
94
|
+
variant: "secondary",
|
|
88
95
|
children: e
|
|
89
96
|
}, e)) : /* @__PURE__ */ r("p", {
|
|
90
97
|
className: "text-sm text-text-secondary",
|
|
@@ -92,51 +99,90 @@ function d() {
|
|
|
92
99
|
})
|
|
93
100
|
})]
|
|
94
101
|
}),
|
|
95
|
-
/* @__PURE__ */ i(
|
|
96
|
-
|
|
102
|
+
/* @__PURE__ */ i(m, {
|
|
103
|
+
treatment: "plain",
|
|
104
|
+
className: "border-border-seam p-5",
|
|
97
105
|
children: [/* @__PURE__ */ i("div", {
|
|
98
|
-
className: "flex items-center justify-between",
|
|
106
|
+
className: "flex items-center justify-between gap-3",
|
|
99
107
|
children: [/* @__PURE__ */ r("h2", {
|
|
100
108
|
className: "text-lg font-semibold text-text-primary",
|
|
101
109
|
children: "Floor Plans"
|
|
102
|
-
}), /* @__PURE__ */ i(
|
|
110
|
+
}), /* @__PURE__ */ i(p, {
|
|
103
111
|
type: "button",
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
112
|
+
variant: "outline",
|
|
113
|
+
size: "sm",
|
|
114
|
+
onClick: () => y(`/venues/${S.id}/floor-plans`),
|
|
115
|
+
children: [/* @__PURE__ */ r(u, { className: "h-4 w-4" }), "Manage Floor Plans"]
|
|
107
116
|
})]
|
|
108
117
|
}), /* @__PURE__ */ r("div", {
|
|
109
|
-
className: "mt-4
|
|
110
|
-
children:
|
|
111
|
-
className: "
|
|
112
|
-
children:
|
|
113
|
-
className: "
|
|
114
|
-
children:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
className: "mt-4",
|
|
119
|
+
children: C.length > 0 ? /* @__PURE__ */ r("ul", {
|
|
120
|
+
className: "space-y-2.5",
|
|
121
|
+
children: C.map((e) => /* @__PURE__ */ i("li", {
|
|
122
|
+
className: "rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1",
|
|
123
|
+
children: [/* @__PURE__ */ r("p", {
|
|
124
|
+
className: "font-medium text-text-primary",
|
|
125
|
+
children: e.name
|
|
126
|
+
}), /* @__PURE__ */ r("p", {
|
|
127
|
+
className: "text-sm text-text-secondary",
|
|
128
|
+
children: e.imageUrl ? "Image configured" : "No image configured"
|
|
129
|
+
})]
|
|
130
|
+
}, e.id))
|
|
131
|
+
}) : /* @__PURE__ */ r(h, {
|
|
132
|
+
illustration: "empty-files",
|
|
133
|
+
title: "No floor plans have been added yet.",
|
|
134
|
+
className: "py-8"
|
|
122
135
|
})
|
|
123
136
|
})]
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ r(g, {
|
|
139
|
+
storageKey: "eventfullymanaged-venue-detail",
|
|
140
|
+
title: "Get this venue ready to host",
|
|
141
|
+
steps: [
|
|
142
|
+
{
|
|
143
|
+
id: "edit-venue",
|
|
144
|
+
label: "Edit venue details",
|
|
145
|
+
description: "Update capacity, address, status and amenities.",
|
|
146
|
+
icon: /* @__PURE__ */ r(s, { className: "h-4 w-4" }),
|
|
147
|
+
onClick: () => y(`/venues/${S.id}/edit`)
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
id: "floor-plans",
|
|
151
|
+
label: "Add floor plans",
|
|
152
|
+
description: "Map the layout so attendees and staff can navigate.",
|
|
153
|
+
icon: /* @__PURE__ */ r(u, { className: "h-4 w-4" }),
|
|
154
|
+
onClick: () => y(`/venues/${S.id}/floor-plans`)
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: "resources",
|
|
158
|
+
label: "Review resource readiness",
|
|
159
|
+
description: "Check capacity, amenities and plans at a glance.",
|
|
160
|
+
icon: /* @__PURE__ */ r(l, { className: "h-4 w-4" }),
|
|
161
|
+
onClick: () => y(`/venues/${S.id}/resources`)
|
|
162
|
+
}
|
|
163
|
+
]
|
|
124
164
|
})
|
|
125
165
|
]
|
|
126
166
|
}) : /* @__PURE__ */ i("div", {
|
|
127
167
|
className: "space-y-4 p-6",
|
|
128
|
-
children: [/* @__PURE__ */ i(
|
|
168
|
+
children: [/* @__PURE__ */ i(p, {
|
|
129
169
|
type: "button",
|
|
130
|
-
|
|
131
|
-
|
|
170
|
+
variant: "ghost",
|
|
171
|
+
size: "sm",
|
|
172
|
+
onClick: () => y("/venues"),
|
|
132
173
|
children: [/* @__PURE__ */ r(a, { className: "h-4 w-4" }), "Back to Venues"]
|
|
133
|
-
}), /* @__PURE__ */ r(
|
|
134
|
-
|
|
135
|
-
|
|
174
|
+
}), /* @__PURE__ */ r(m, {
|
|
175
|
+
treatment: "plain",
|
|
176
|
+
className: "border-border-seam",
|
|
177
|
+
children: /* @__PURE__ */ r(h, {
|
|
178
|
+
illustration: "empty-search",
|
|
179
|
+
title: "Venue not found.",
|
|
180
|
+
description: "This venue may have been removed or is outside your current scope."
|
|
181
|
+
})
|
|
136
182
|
})]
|
|
137
183
|
});
|
|
138
184
|
}
|
|
139
185
|
//#endregion
|
|
140
|
-
export {
|
|
186
|
+
export { v as default };
|
|
141
187
|
|
|
142
188
|
//# sourceMappingURL=VenueDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VenueDetailPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueDetailPage.tsx"],"sourcesContent":["import { ArrowLeft, Building2, Edit, MapPin, SquareStack, Users } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueRecord = {\n id: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FloorPlanRecord = {\n id: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n};\n\nexport default function VenueDetailPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading } = useVenueQuery(id);\n\n const venue = (data?.venue ?? null) as VenueRecord | null;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlanRecord[];\n\n if (loading) {\n return <div className=\"p-6 text-sm text-text-secondary\">Loading venue...</div>;\n }\n\n if (!venue) {\n return (\n <div className=\"space-y-4 p-6\">\n <button\n type=\"button\"\n onClick={() => navigate('/venues')}\n className=\"inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </button>\n <div className=\"rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary\">\n Venue not found.\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n onClick={() => navigate('/venues')}\n className=\"inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">{venue.name}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue.description ?? 'No description provided.'}</p>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => navigate(`/venues/${venue.id}/edit`)}\n className=\"inline-flex items-center rounded-md border border-border-default px-3 py-2 text-sm text-text-primary hover:bg-bg-elevated\"\n >\n <Edit className=\"mr-2 h-4 w-4\" />\n Edit Venue\n </button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <MapPin className=\"h-4 w-4\" />\n Location\n </div>\n <p className=\"text-sm text-text-secondary\">\n {[venue.addressLine1, venue.city, venue.state, venue.country, venue.postalCode]\n .filter(Boolean)\n .join(', ') || 'Location not configured'}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Users className=\"h-4 w-4\" />\n Capacity\n </div>\n <p className=\"text-sm text-text-secondary\">{venue.capacity ?? 0} attendees</p>\n </div>\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Building2 className=\"h-4 w-4\" />\n Status\n </div>\n <p className=\"text-sm uppercase text-text-secondary\">{venue.status}</p>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Amenities</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {venue.amenities.length > 0 ? (\n venue.amenities.map((amenity) => (\n <span key={amenity} className=\"rounded-full bg-gray-100 px-3 py-1 text-xs font-medium text-text-primary\">\n {amenity}\n </span>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No amenities configured.</p>\n )}\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Floor Plans</h2>\n <button\n type=\"button\"\n onClick={() => navigate(`/venues/${venue.id}/floor-plans`)}\n className=\"inline-flex items-center rounded-md border border-border-default px-3 py-2 text-sm text-text-primary hover:bg-bg-elevated\"\n >\n <SquareStack className=\"mr-2 h-4 w-4\" />\n Manage Floor Plans\n </button>\n </div>\n <div className=\"mt-4 space-y-3\">\n {floorPlans.length > 0 ? (\n floorPlans.map((plan) => (\n <div key={plan.id} className=\"rounded-md border border-border-default p-3\">\n <p className=\"font-medium text-text-primary\">{plan.name}</p>\n <p className=\"text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image configured' : 'No image configured'}\n </p>\n </div>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No floor plans have been added yet.</p>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VenueDetailPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueDetailPage.tsx"],"sourcesContent":["import { ArrowLeft, Building2, Edit, MapPin, Megaphone, SquareStack, Users } from 'lucide-react';\nimport { Badge, Button, GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueRecord = {\n id: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FloorPlanRecord = {\n id: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n};\n\nexport default function VenueDetailPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading } = useVenueQuery(id);\n\n const venue = (data?.venue ?? null) as VenueRecord | null;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlanRecord[];\n\n if (loading) {\n return <div className=\"p-6 text-sm text-text-secondary\">Loading venue...</div>;\n }\n\n if (!venue) {\n return (\n <div className=\"space-y-4 p-6\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Venue not found.\"\n description=\"This venue may have been removed or is outside your current scope.\"\n />\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n The full record for one venue. Review its location, capacity and status, see what amenities it offers, and\n manage the floor plans attendees will navigate. Come here to confirm a space is ready before you assign an\n event to it.\n </PagePurpose>\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">{venue.name}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue.description ?? 'No description provided.'}</p>\n </div>\n </div>\n <Button type=\"button\" onClick={() => navigate(`/venues/${venue.id}/edit`)}>\n <Edit className=\"h-4 w-4\" />\n Edit Venue\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <MapPin className=\"h-4 w-4 text-action-primary-bg\" />\n Location\n </div>\n <p className=\"text-sm text-text-secondary\">\n {[venue.addressLine1, venue.city, venue.state, venue.country, venue.postalCode]\n .filter(Boolean)\n .join(', ') || 'Location not configured'}\n </p>\n </GlassCard>\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Users className=\"h-4 w-4 text-action-primary-bg\" />\n Capacity\n </div>\n <p className=\"text-sm tabular-nums text-text-secondary\">{venue.capacity ?? 0} attendees</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Building2 className=\"h-4 w-4 text-action-primary-bg\" />\n Status\n </div>\n <p className=\"text-sm uppercase text-text-secondary\">{venue.status}</p>\n </GlassCard>\n </div>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Amenities</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {venue.amenities.length > 0 ? (\n venue.amenities.map((amenity) => (\n <Badge key={amenity} variant=\"secondary\">\n {amenity}\n </Badge>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No amenities configured.</p>\n )}\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Floor Plans</h2>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => navigate(`/venues/${venue.id}/floor-plans`)}>\n <SquareStack className=\"h-4 w-4\" />\n Manage Floor Plans\n </Button>\n </div>\n <div className=\"mt-4\">\n {floorPlans.length > 0 ? (\n <ul className=\"space-y-2.5\">\n {floorPlans.map((plan) => (\n <li\n key={plan.id}\n className=\"rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"font-medium text-text-primary\">{plan.name}</p>\n <p className=\"text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image configured' : 'No image configured'}\n </p>\n </li>\n ))}\n </ul>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans have been added yet.\"\n className=\"py-8\"\n />\n )}\n </div>\n </GlassCard>\n\n <NextSteps\n storageKey=\"eventfullymanaged-venue-detail\"\n title=\"Get this venue ready to host\"\n steps={[\n {\n id: 'edit-venue',\n label: 'Edit venue details',\n description: 'Update capacity, address, status and amenities.',\n icon: <Edit className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/edit`),\n },\n {\n id: 'floor-plans',\n label: 'Add floor plans',\n description: 'Map the layout so attendees and staff can navigate.',\n icon: <SquareStack className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/floor-plans`),\n },\n {\n id: 'resources',\n label: 'Review resource readiness',\n description: 'Check capacity, amenities and plans at a glance.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/resources`),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|