@burdenoff/microfe-eventfullymanaged 2026.625.2 → 2026.703.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/api/eventApi.js +83 -39
- package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
- package/dist/eventfullymanaged/components/ImageUploadField.js +98 -0
- package/dist/eventfullymanaged/components/ImageUploadField.js.map +1 -0
- package/dist/eventfullymanaged/lib/mutationResult.js +12 -0
- package/dist/eventfullymanaged/lib/mutationResult.js.map +1 -0
- package/dist/eventfullymanaged/lib/toast.js +36 -0
- package/dist/eventfullymanaged/lib/toast.js.map +1 -0
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +40 -32
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +71 -45
- package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +56 -46
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/EventsPage.js +75 -67
- package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +30 -11
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +35 -13
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +68 -54
- package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +153 -125
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +107 -62
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +144 -135
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/context/ApolloContext.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/internal/useDeepMemo.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/internal/useIsomorphicLayoutEffect.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/internal/wrapHook.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/useApolloClient.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/useMutation.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/useQuery.js.map +1 -1
- package/dist/node_modules/@apollo/client/react/hooks/useSyncExternalStore.js.map +1 -1
- package/dist/node_modules/sonner/dist/index.js +163 -0
- package/dist/node_modules/sonner/dist/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,98 +1,143 @@
|
|
|
1
1
|
import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { notify as t } from "../../lib/toast.js";
|
|
3
|
+
import { useCreateFloorPlanMutation as n, useUpdateFloorPlanMutation as r, useVenueQuery as i } from "../../api/eventApi.js";
|
|
4
|
+
import { describeError as a, mutationSucceeded as o } from "../../lib/mutationResult.js";
|
|
5
|
+
import { ImageUploadField as s } from "../../components/ImageUploadField.js";
|
|
6
|
+
import { useState as c } from "react";
|
|
7
|
+
import { useParams as l } from "react-router-dom";
|
|
8
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
|
+
import { ArrowLeft as f, Plus as p, SquareStack as m } from "lucide-react";
|
|
10
|
+
import { Button as h, EmphasisPanel as g, GlassCard as _, IllustratedEmptyState as v, Input as y, PagePurpose as b } from "@burdenoff/fe-libs/ui";
|
|
8
11
|
//#region src/eventfullymanaged/pages/venues/FloorPlansPage.tsx
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
var x = "/EventfullyManaged/FloorPlans";
|
|
13
|
+
function S() {
|
|
14
|
+
let { id: S = "" } = l(), { navigate: C } = e(), { data: w, loading: T, refetch: E } = i(S), [D, { loading: O }] = n(), [k] = r(), [A, j] = c(""), [M, N] = c(""), P = w?.venue, F = w?.floorPlans?.items ?? [], I = async () => {
|
|
15
|
+
if (!(!A.trim() || !S)) try {
|
|
16
|
+
let e = await D({ variables: { input: {
|
|
17
|
+
venueId: S,
|
|
18
|
+
name: A.trim(),
|
|
19
|
+
imageUrl: M,
|
|
20
|
+
dimensions: {},
|
|
21
|
+
interactiveAreas: {}
|
|
22
|
+
} } });
|
|
23
|
+
if (!o(e, e.data?.createFloorPlan?.id, "Could not create floor plan")) return;
|
|
24
|
+
j(""), N(""), t.success("Floor plan created"), await E();
|
|
25
|
+
} catch (e) {
|
|
26
|
+
t.error("Could not create floor plan", a(e));
|
|
27
|
+
}
|
|
28
|
+
}, L = async (e, n) => {
|
|
29
|
+
try {
|
|
30
|
+
let t = await k({ variables: {
|
|
31
|
+
id: e.id,
|
|
32
|
+
input: {
|
|
33
|
+
venueId: e.venueId,
|
|
34
|
+
name: e.name,
|
|
35
|
+
imageUrl: n,
|
|
36
|
+
dimensions: e.dimensions ?? {},
|
|
37
|
+
interactiveAreas: e.interactiveAreas ?? {}
|
|
38
|
+
}
|
|
39
|
+
} });
|
|
40
|
+
if (!o(t, t.data?.updateFloorPlan?.id, "Could not attach image")) return;
|
|
41
|
+
await E();
|
|
42
|
+
} catch (e) {
|
|
43
|
+
t.error("Could not attach image", a(e));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return /* @__PURE__ */ d("div", {
|
|
12
47
|
className: "space-y-6 p-6",
|
|
13
48
|
children: [
|
|
14
|
-
/* @__PURE__ */
|
|
49
|
+
/* @__PURE__ */ d("div", {
|
|
15
50
|
className: "space-y-3",
|
|
16
|
-
children: [/* @__PURE__ */
|
|
51
|
+
children: [/* @__PURE__ */ d(h, {
|
|
17
52
|
type: "button",
|
|
18
53
|
variant: "ghost",
|
|
19
54
|
size: "sm",
|
|
20
|
-
onClick: () =>
|
|
21
|
-
children: [/* @__PURE__ */
|
|
22
|
-
}), /* @__PURE__ */
|
|
55
|
+
onClick: () => C(`/venues/${S}`),
|
|
56
|
+
children: [/* @__PURE__ */ u(f, { className: "h-4 w-4" }), "Back to Venue"]
|
|
57
|
+
}), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
|
|
23
58
|
className: "text-2xl font-bold text-text-primary",
|
|
24
59
|
children: "Floor Plans"
|
|
25
|
-
}), /* @__PURE__ */
|
|
60
|
+
}), /* @__PURE__ */ u("p", {
|
|
26
61
|
className: "mt-1 text-sm text-text-secondary",
|
|
27
|
-
children:
|
|
62
|
+
children: P?.name ?? "Venue"
|
|
28
63
|
})] })]
|
|
29
64
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
/* @__PURE__ */
|
|
65
|
+
/* @__PURE__ */ u(b, { children: "Floor plans are the maps of your venue — the hall layout, booth positions, stage and entrances. Add one per space so you can lay out exhibitors, plan attendee flow, and give everyone a clear picture of the room on the day." }),
|
|
66
|
+
/* @__PURE__ */ d(g, { children: [/* @__PURE__ */ u("h2", {
|
|
32
67
|
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
33
68
|
children: "Create floor plan"
|
|
34
|
-
}), /* @__PURE__ */
|
|
35
|
-
className: "
|
|
36
|
-
children: [/* @__PURE__ */
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
69
|
+
}), /* @__PURE__ */ d("div", {
|
|
70
|
+
className: "space-y-4",
|
|
71
|
+
children: [/* @__PURE__ */ d("div", {
|
|
72
|
+
className: "flex flex-col gap-3 sm:flex-row",
|
|
73
|
+
children: [/* @__PURE__ */ u(y, {
|
|
74
|
+
type: "text",
|
|
75
|
+
value: A,
|
|
76
|
+
onChange: (e) => j(e.target.value),
|
|
77
|
+
placeholder: "Main Hall Layout",
|
|
78
|
+
"aria-label": "Floor plan name",
|
|
79
|
+
className: "flex-1"
|
|
80
|
+
}), /* @__PURE__ */ d(h, {
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: I,
|
|
83
|
+
disabled: O,
|
|
84
|
+
children: [/* @__PURE__ */ u(p, { className: "h-4 w-4" }), O ? "Creating..." : "Create"]
|
|
85
|
+
})]
|
|
86
|
+
}), /* @__PURE__ */ u(s, {
|
|
87
|
+
label: "Upload floor plan image",
|
|
88
|
+
folderPath: x,
|
|
89
|
+
value: M || null,
|
|
90
|
+
onUploaded: N,
|
|
91
|
+
hint: "Optional. Attach the hall map now, or add it later from the list below."
|
|
56
92
|
})]
|
|
57
93
|
})] }),
|
|
58
|
-
|
|
94
|
+
T ? /* @__PURE__ */ u(_, {
|
|
59
95
|
treatment: "plain",
|
|
60
96
|
className: "border-border-seam p-8 text-center text-sm text-text-secondary",
|
|
61
97
|
children: "Loading floor plans..."
|
|
62
|
-
}) :
|
|
98
|
+
}) : F.length === 0 ? /* @__PURE__ */ u(_, {
|
|
63
99
|
treatment: "plain",
|
|
64
100
|
className: "border-border-seam",
|
|
65
|
-
children: /* @__PURE__ */
|
|
101
|
+
children: /* @__PURE__ */ u(v, {
|
|
66
102
|
illustration: "empty-files",
|
|
67
103
|
title: "No floor plans found.",
|
|
68
104
|
description: "Create one to start mapping your venue."
|
|
69
105
|
})
|
|
70
|
-
}) : /* @__PURE__ */
|
|
106
|
+
}) : /* @__PURE__ */ u("div", {
|
|
71
107
|
className: "grid grid-cols-1 gap-4 md:grid-cols-2",
|
|
72
|
-
children:
|
|
108
|
+
children: F.map((e) => /* @__PURE__ */ d(_, {
|
|
73
109
|
treatment: "metric",
|
|
74
|
-
className: "p-4",
|
|
75
|
-
children: [
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
className: "
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
e.imageUrl
|
|
85
|
-
|
|
86
|
-
" "
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
110
|
+
className: "space-y-3 p-4",
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ d("div", {
|
|
113
|
+
className: "flex items-center gap-2 text-text-primary",
|
|
114
|
+
children: [/* @__PURE__ */ u(m, { className: "h-4 w-4 text-action-primary-bg" }), /* @__PURE__ */ u("h3", {
|
|
115
|
+
className: "font-semibold",
|
|
116
|
+
children: e.name
|
|
117
|
+
})]
|
|
118
|
+
}),
|
|
119
|
+
e.imageUrl ? /* @__PURE__ */ u("img", {
|
|
120
|
+
src: e.imageUrl,
|
|
121
|
+
alt: `${e.name} floor plan`,
|
|
122
|
+
className: "w-full rounded-card border border-border-seam object-cover"
|
|
123
|
+
}) : /* @__PURE__ */ u(s, {
|
|
124
|
+
label: "Upload image",
|
|
125
|
+
folderPath: x,
|
|
126
|
+
value: null,
|
|
127
|
+
onUploaded: (t) => L(e, t),
|
|
128
|
+
hint: "Add the hall map for this floor plan."
|
|
129
|
+
}),
|
|
130
|
+
/* @__PURE__ */ u("p", {
|
|
131
|
+
className: "text-sm text-text-secondary",
|
|
132
|
+
children: e.dimensions ? "Dimensions configured" : "No dimensions configured"
|
|
133
|
+
})
|
|
134
|
+
]
|
|
90
135
|
}, e.id))
|
|
91
136
|
})
|
|
92
137
|
]
|
|
93
138
|
});
|
|
94
139
|
}
|
|
95
140
|
//#endregion
|
|
96
|
-
export {
|
|
141
|
+
export { S as default };
|
|
97
142
|
|
|
98
143
|
//# sourceMappingURL=FloorPlansPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloorPlansPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/FloorPlansPage.tsx"],"sourcesContent":["import { ArrowLeft, Plus, SquareStack } from 'lucide-react';\nimport { Button, EmphasisPanel, GlassCard, IllustratedEmptyState, Input, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useState } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useCreateFloorPlanMutation, useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype FloorPlan = {\n id: string;\n venueId: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n interactiveAreas?: Record<string, unknown> | null;\n};\n\nexport default function FloorPlansPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading, refetch } = useVenueQuery(id);\n const [createFloorPlan, { loading: creating }] = useCreateFloorPlanMutation();\n const [name, setName] = useState('');\n\n const venue = data?.venue;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlan[];\n\n const handleCreate = async () => {\n if (!name.trim() || !id) {\n return;\n }\n await createFloorPlan({\n
|
|
1
|
+
{"version":3,"file":"FloorPlansPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/FloorPlansPage.tsx"],"sourcesContent":["import { ArrowLeft, Plus, SquareStack } from 'lucide-react';\nimport { Button, EmphasisPanel, GlassCard, IllustratedEmptyState, Input, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useState } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useCreateFloorPlanMutation, useUpdateFloorPlanMutation, useVenueQuery } from '../../api/eventApi';\nimport { ImageUploadField } from '../../components/ImageUploadField';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\ntype FloorPlan = {\n id: string;\n venueId: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n interactiveAreas?: Record<string, unknown> | null;\n};\n\nconst FLOOR_PLAN_FOLDER = '/EventfullyManaged/FloorPlans';\n\nexport default function FloorPlansPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading, refetch } = useVenueQuery(id);\n const [createFloorPlan, { loading: creating }] = useCreateFloorPlanMutation();\n const [updateFloorPlan] = useUpdateFloorPlanMutation();\n const [name, setName] = useState('');\n const [imageUrl, setImageUrl] = useState('');\n\n const venue = data?.venue;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlan[];\n\n const handleCreate = async () => {\n if (!name.trim() || !id) {\n return;\n }\n try {\n const response = await createFloorPlan({\n variables: {\n input: {\n venueId: id,\n name: name.trim(),\n imageUrl,\n dimensions: {},\n interactiveAreas: {},\n },\n },\n });\n if (!mutationSucceeded(response, response.data?.createFloorPlan?.id, 'Could not create floor plan')) {\n return;\n }\n setName('');\n setImageUrl('');\n notify.success('Floor plan created');\n await refetch();\n } catch (error) {\n notify.error('Could not create floor plan', describeError(error));\n }\n };\n\n const handleAttachImage = async (plan: FloorPlan, url: string) => {\n try {\n const response = await updateFloorPlan({\n variables: {\n id: plan.id,\n input: {\n venueId: plan.venueId,\n name: plan.name,\n imageUrl: url,\n dimensions: plan.dimensions ?? {},\n interactiveAreas: plan.interactiveAreas ?? {},\n },\n },\n });\n if (!mutationSucceeded(response, response.data?.updateFloorPlan?.id, 'Could not attach image')) {\n return;\n }\n await refetch();\n } catch (error) {\n notify.error('Could not attach image', describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate(`/venues/${id}`)}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venue\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">Floor Plans</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue?.name ?? 'Venue'}</p>\n </div>\n </div>\n\n <PagePurpose>\n Floor plans are the maps of your venue — the hall layout, booth positions, stage and entrances. Add one per\n space so you can lay out exhibitors, plan attendee flow, and give everyone a clear picture of the room on the\n day.\n </PagePurpose>\n\n <EmphasisPanel>\n <h2 className=\"mb-3 text-sm font-semibold text-text-primary\">Create floor plan</h2>\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <Input\n type=\"text\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n placeholder=\"Main Hall Layout\"\n aria-label=\"Floor plan name\"\n className=\"flex-1\"\n />\n <Button type=\"button\" onClick={handleCreate} disabled={creating}>\n <Plus className=\"h-4 w-4\" />\n {creating ? 'Creating...' : 'Create'}\n </Button>\n </div>\n <ImageUploadField\n label=\"Upload floor plan image\"\n folderPath={FLOOR_PLAN_FOLDER}\n value={imageUrl || null}\n onUploaded={setImageUrl}\n hint=\"Optional. Attach the hall map now, or add it later from the list below.\"\n />\n </div>\n </EmphasisPanel>\n\n {loading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n Loading floor plans...\n </GlassCard>\n ) : floorPlans.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans found.\"\n description=\"Create one to start mapping your venue.\"\n />\n </GlassCard>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n {floorPlans.map((plan) => (\n <GlassCard key={plan.id} treatment=\"metric\" className=\"space-y-3 p-4\">\n <div className=\"flex items-center gap-2 text-text-primary\">\n <SquareStack className=\"h-4 w-4 text-action-primary-bg\" />\n <h3 className=\"font-semibold\">{plan.name}</h3>\n </div>\n {plan.imageUrl ? (\n <img\n src={plan.imageUrl}\n alt={`${plan.name} floor plan`}\n className=\"w-full rounded-card border border-border-seam object-cover\"\n />\n ) : (\n <ImageUploadField\n label=\"Upload image\"\n folderPath={FLOOR_PLAN_FOLDER}\n value={null}\n onUploaded={(url) => handleAttachImage(plan, url)}\n hint=\"Add the hall map for this floor plan.\"\n />\n )}\n <p className=\"text-sm text-text-secondary\">\n {plan.dimensions ? 'Dimensions configured' : 'No dimensions configured'}\n </p>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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 event\n 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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"}
|