@burdenoff/microfe-ggnomad 2026.705.5 → 2026.705.6
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/ggnomad/components/ReviewsSection.js +325 -0
- package/dist/ggnomad/components/ReviewsSection.js.map +1 -0
- package/dist/ggnomad/components/index.js +1 -0
- package/dist/ggnomad/graphql.js +51 -1
- package/dist/ggnomad/graphql.js.map +1 -1
- package/dist/ggnomad/pages/ActivityDetailsPage.js +82 -74
- package/dist/ggnomad/pages/ActivityDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/EventDetailsPage.js +86 -78
- package/dist/ggnomad/pages/EventDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/PropertyDetailsPage.js +88 -80
- package/dist/ggnomad/pages/PropertyDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/TourDetailsPage.js +85 -77
- package/dist/ggnomad/pages/TourDetailsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,99 +6,107 @@ import { DetailHero as i } from "../components/DetailHero.js";
|
|
|
6
6
|
import { useGGNomad as a } from "../providers/GGNomadProvider.js";
|
|
7
7
|
import { joinPath as o } from "../utils/navigation.js";
|
|
8
8
|
import { BookingPanel as s } from "../components/BookingPanel.js";
|
|
9
|
+
import { ReviewsSection as c } from "../components/ReviewsSection.js";
|
|
9
10
|
import "../components/index.js";
|
|
10
|
-
import { Activity as
|
|
11
|
-
import { useI18n as
|
|
12
|
-
import { useNavigate as
|
|
13
|
-
import { useQuery as
|
|
14
|
-
import { GlassCard as
|
|
15
|
-
import { Fragment as
|
|
11
|
+
import { Activity as l, Compass as u, ShieldCheck as d } from "lucide-react";
|
|
12
|
+
import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
13
|
+
import { useNavigate as p, useParams as m } from "react-router-dom";
|
|
14
|
+
import { useQuery as h } from "@apollo/client/react";
|
|
15
|
+
import { GlassCard as g, IllustratedEmptyState as _, NextSteps as v, PagePurpose as y } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
16
17
|
//#region src/ggnomad/pages/ActivityDetailsPage.tsx
|
|
17
|
-
function
|
|
18
|
-
let { t:
|
|
19
|
-
variables: { id:
|
|
20
|
-
skip: !
|
|
21
|
-
}),
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
title:
|
|
24
|
-
subtitle:
|
|
25
|
-
children:
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
image:
|
|
28
|
-
alt:
|
|
18
|
+
function C() {
|
|
19
|
+
let { t: C } = f(), w = p(), { basePath: T = "/" } = a(), { id: E = "" } = m(), { data: D } = h(e, {
|
|
20
|
+
variables: { id: E },
|
|
21
|
+
skip: !E
|
|
22
|
+
}), O = D?.ggnomadActivity;
|
|
23
|
+
return /* @__PURE__ */ x(t, {
|
|
24
|
+
title: O?.name ?? C("ggnomad.activity.fallbackTitle", "Activity details"),
|
|
25
|
+
subtitle: C("ggnomad.activity.subtitle", "Safety, inclusions and participation details"),
|
|
26
|
+
children: O ? /* @__PURE__ */ S(b, { children: [
|
|
27
|
+
/* @__PURE__ */ x(i, {
|
|
28
|
+
image: O.images?.[0],
|
|
29
|
+
alt: O.name
|
|
29
30
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
icon: /* @__PURE__ */
|
|
32
|
-
children:
|
|
31
|
+
/* @__PURE__ */ x(y, {
|
|
32
|
+
icon: /* @__PURE__ */ x(l, { className: "size-4" }),
|
|
33
|
+
children: C("ggnomad.activity.purpose", "Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.")
|
|
33
34
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
+
/* @__PURE__ */ x(v, {
|
|
35
36
|
storageKey: "ggnomad-activity-detail",
|
|
36
37
|
steps: [{
|
|
37
38
|
id: "browse",
|
|
38
|
-
label:
|
|
39
|
-
description:
|
|
40
|
-
icon: /* @__PURE__ */
|
|
41
|
-
onClick: () =>
|
|
39
|
+
label: C("ggnomad.activity.next.browse", "Explore more experiences"),
|
|
40
|
+
description: C("ggnomad.activity.next.browseDesc", "Return to Tourism to compare tours and activities."),
|
|
41
|
+
icon: /* @__PURE__ */ x(u, { className: "size-4" }),
|
|
42
|
+
onClick: () => w(o(T, "tourism"))
|
|
42
43
|
}]
|
|
43
44
|
}),
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
+
/* @__PURE__ */ S("div", {
|
|
45
46
|
className: "grid gap-4 lg:grid-cols-3",
|
|
46
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ S("div", {
|
|
47
48
|
className: "lg:col-span-2 space-y-4",
|
|
48
|
-
children: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
children:
|
|
81
|
-
className: "
|
|
82
|
-
|
|
83
|
-
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ S(g, {
|
|
51
|
+
treatment: "glass",
|
|
52
|
+
glow: !0,
|
|
53
|
+
className: "border-border-seam p-5",
|
|
54
|
+
children: [/* @__PURE__ */ x("h2", {
|
|
55
|
+
className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
|
|
56
|
+
children: C("ggnomad.activity.details", "Details")
|
|
57
|
+
}), /* @__PURE__ */ S("dl", {
|
|
58
|
+
className: "space-y-2 text-sm",
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ x(r, {
|
|
61
|
+
label: C("ggnomad.activity.category", "Category"),
|
|
62
|
+
value: O.category
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ x(r, {
|
|
65
|
+
label: C("ggnomad.activity.duration", "Duration"),
|
|
66
|
+
value: O.duration
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ x(r, {
|
|
69
|
+
label: C("ggnomad.activity.maxParticipants", "Max participants"),
|
|
70
|
+
value: String(O.maxParticipants)
|
|
71
|
+
}),
|
|
72
|
+
/* @__PURE__ */ x(r, {
|
|
73
|
+
label: C("ggnomad.activity.price", "Price"),
|
|
74
|
+
value: `${O.currency} ${Number(O.price).toFixed(2)}`
|
|
75
|
+
})
|
|
76
|
+
]
|
|
77
|
+
})]
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ x(n, {
|
|
80
|
+
title: C("ggnomad.activity.safety", "Safety information"),
|
|
81
|
+
children: /* @__PURE__ */ S("div", {
|
|
82
|
+
className: "flex items-start gap-2 text-sm text-text-primary",
|
|
83
|
+
children: [/* @__PURE__ */ x(d, {
|
|
84
|
+
className: "mt-0.5 size-4 flex-shrink-0 text-status-success-text",
|
|
85
|
+
"aria-hidden": "true"
|
|
86
|
+
}), /* @__PURE__ */ x("p", { children: O.safetyInfo ?? C("ggnomad.activity.defaultSafety", "Standard provider safety policy applies.") })]
|
|
87
|
+
})
|
|
88
|
+
}),
|
|
89
|
+
/* @__PURE__ */ x(c, {
|
|
90
|
+
targetType: "ACTIVITY",
|
|
91
|
+
targetId: O.id ?? E
|
|
84
92
|
})
|
|
85
|
-
|
|
86
|
-
}), /* @__PURE__ */
|
|
93
|
+
]
|
|
94
|
+
}), /* @__PURE__ */ x("div", { children: /* @__PURE__ */ x(s, {
|
|
87
95
|
bookingType: "ACTIVITY",
|
|
88
|
-
itemId:
|
|
89
|
-
itemName:
|
|
90
|
-
unitPrice:
|
|
91
|
-
currency:
|
|
96
|
+
itemId: O.id ?? E,
|
|
97
|
+
itemName: O.name,
|
|
98
|
+
unitPrice: O.price ?? 0,
|
|
99
|
+
currency: O.currency ?? "USD"
|
|
92
100
|
}) })]
|
|
93
101
|
})
|
|
94
|
-
] }) : /* @__PURE__ */
|
|
102
|
+
] }) : /* @__PURE__ */ x(_, {
|
|
95
103
|
illustration: "empty-data",
|
|
96
|
-
title:
|
|
97
|
-
description:
|
|
104
|
+
title: C("ggnomad.activity.notFoundTitle", "No activity found"),
|
|
105
|
+
description: C("ggnomad.activity.notFoundDescription", "This activity is unavailable or may have been removed.")
|
|
98
106
|
})
|
|
99
107
|
});
|
|
100
108
|
}
|
|
101
109
|
//#endregion
|
|
102
|
-
export {
|
|
110
|
+
export { C as ActivityDetailsPage };
|
|
103
111
|
|
|
104
112
|
//# sourceMappingURL=ActivityDetailsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/ActivityDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Activity, Compass, ShieldCheck } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_ACTIVITY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel } from '../components';\n\nexport function ActivityDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_ACTIVITY_QUERY as TypedDocumentNode<\n {\n ggnomadActivity: {\n id: string;\n name: string;\n category: string;\n duration: string;\n maxParticipants: number;\n currency: string;\n price: number;\n safetyInfo?: string;\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const activity = data?.ggnomadActivity;\n\n return (\n <PageShell\n title={activity?.name ?? t('ggnomad.activity.fallbackTitle', 'Activity details')}\n subtitle={t('ggnomad.activity.subtitle', 'Safety, inclusions and participation details')}\n >\n {!activity ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.activity.notFoundTitle', 'No activity found')}\n description={t(\n 'ggnomad.activity.notFoundDescription',\n 'This activity is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={activity.images?.[0]} alt={activity.name} />\n <PagePurpose icon={<Activity className=\"size-4\" />}>\n {t(\n 'ggnomad.activity.purpose',\n 'Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-activity-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.activity.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.activity.next.browseDesc',\n 'Return to Tourism to compare tours and activities.'\n ),\n icon: <Compass className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'tourism')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.activity.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.activity.category', 'Category')}\n value={activity.category}\n />\n <DetailRow\n label={t('ggnomad.activity.duration', 'Duration')}\n value={activity.duration}\n />\n <DetailRow\n label={t('ggnomad.activity.maxParticipants', 'Max participants')}\n value={String(activity.maxParticipants)}\n />\n <DetailRow\n label={t('ggnomad.activity.price', 'Price')}\n value={`${activity.currency} ${Number(activity.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.activity.safety', 'Safety information')}>\n <div className=\"flex items-start gap-2 text-sm text-text-primary\">\n <ShieldCheck\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n <p>\n {activity.safetyInfo ??\n t(\n 'ggnomad.activity.defaultSafety',\n 'Standard provider safety policy applies.'\n )}\n </p>\n </div>\n </SectionCard>\n </div>\n <div>\n <BookingPanel\n bookingType=\"ACTIVITY\"\n itemId={activity.id ?? id}\n itemName={activity.name}\n unitPrice={activity.price ?? 0}\n currency={activity.currency ?? 'USD'}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ActivityDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/ActivityDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Activity, Compass, ShieldCheck } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_ACTIVITY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel, ReviewsSection } from '../components';\n\nexport function ActivityDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_ACTIVITY_QUERY as TypedDocumentNode<\n {\n ggnomadActivity: {\n id: string;\n name: string;\n category: string;\n duration: string;\n maxParticipants: number;\n currency: string;\n price: number;\n safetyInfo?: string;\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const activity = data?.ggnomadActivity;\n\n return (\n <PageShell\n title={activity?.name ?? t('ggnomad.activity.fallbackTitle', 'Activity details')}\n subtitle={t('ggnomad.activity.subtitle', 'Safety, inclusions and participation details')}\n >\n {!activity ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.activity.notFoundTitle', 'No activity found')}\n description={t(\n 'ggnomad.activity.notFoundDescription',\n 'This activity is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={activity.images?.[0]} alt={activity.name} />\n <PagePurpose icon={<Activity className=\"size-4\" />}>\n {t(\n 'ggnomad.activity.purpose',\n 'Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-activity-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.activity.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.activity.next.browseDesc',\n 'Return to Tourism to compare tours and activities.'\n ),\n icon: <Compass className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'tourism')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.activity.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.activity.category', 'Category')}\n value={activity.category}\n />\n <DetailRow\n label={t('ggnomad.activity.duration', 'Duration')}\n value={activity.duration}\n />\n <DetailRow\n label={t('ggnomad.activity.maxParticipants', 'Max participants')}\n value={String(activity.maxParticipants)}\n />\n <DetailRow\n label={t('ggnomad.activity.price', 'Price')}\n value={`${activity.currency} ${Number(activity.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.activity.safety', 'Safety information')}>\n <div className=\"flex items-start gap-2 text-sm text-text-primary\">\n <ShieldCheck\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n <p>\n {activity.safetyInfo ??\n t(\n 'ggnomad.activity.defaultSafety',\n 'Standard provider safety policy applies.'\n )}\n </p>\n </div>\n </SectionCard>\n <ReviewsSection targetType=\"ACTIVITY\" targetId={activity.id ?? id} />\n </div>\n <div>\n <BookingPanel\n bookingType=\"ACTIVITY\"\n itemId={activity.id ?? id}\n itemName={activity.name}\n unitPrice={activity.price ?? 0}\n currency={activity.currency ?? 'USD'}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAaA,SAAgB,IAAsB;CACpC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAgBA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAW,GAAM;AAEvB,QACE,kBAAC,GAAD;EACE,OAAO,GAAU,QAAQ,EAAE,kCAAkC,mBAAmB;EAChF,UAAU,EAAE,6BAA6B,+CAA+C;YAEtF,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAS,SAAS;IAAI,KAAK,EAAS;IAAQ,CAAA;GAC/D,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;cAC/C,EACC,4BACA,wMACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,gCAAgC,2BAA2B;KACpE,aAAa,EACX,oCACA,qDACD;KACD,MAAM,kBAAC,GAAD,EAAS,WAAU,UAAW,CAAA;KACpC,eAAe,EAAS,EAAS,GAAU,UAAU,CAAC;KACvD,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,4BAA4B,UAAU;QACtC,CAAA,EACL,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,GAAD;UACE,OAAO,EAAE,6BAA6B,WAAW;UACjD,OAAO,EAAS;UAChB,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,6BAA6B,WAAW;UACjD,OAAO,EAAS;UAChB,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,oCAAoC,mBAAmB;UAChE,OAAO,OAAO,EAAS,gBAAgB;UACvC,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,0BAA0B,QAAQ;UAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,MAAM,CAAC,QAAQ,EAAE;UAChE,CAAA;SACC;UACK;;MACZ,kBAAC,GAAD;OAAa,OAAO,EAAE,2BAA2B,qBAAqB;iBACpE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SACE,WAAU;SACV,eAAY;SACZ,CAAA,EACF,kBAAC,KAAD,EAAA,UACG,EAAS,cACR,EACE,kCACA,2CACD,EACD,CAAA,CACA;;OACM,CAAA;MACd,kBAAC,GAAD;OAAgB,YAAW;OAAW,UAAU,EAAS,MAAM;OAAM,CAAA;MACjE;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAS,MAAM;KACvB,UAAU,EAAS;KACnB,WAAW,EAAS,SAAS;KAC7B,UAAU,EAAS,YAAY;KAC/B,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAtFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EAiFM,CAAA"}
|
|
@@ -6,103 +6,111 @@ import { DetailHero as i } from "../components/DetailHero.js";
|
|
|
6
6
|
import { useGGNomad as a } from "../providers/GGNomadProvider.js";
|
|
7
7
|
import { joinPath as o } from "../utils/navigation.js";
|
|
8
8
|
import { BookingPanel as s } from "../components/BookingPanel.js";
|
|
9
|
+
import { ReviewsSection as c } from "../components/ReviewsSection.js";
|
|
9
10
|
import "../components/index.js";
|
|
10
|
-
import { Mic2 as
|
|
11
|
-
import { useI18n as
|
|
12
|
-
import { useNavigate as
|
|
13
|
-
import { useQuery as
|
|
14
|
-
import { GlassCard as
|
|
15
|
-
import { Fragment as
|
|
11
|
+
import { Mic2 as l, Ticket as u } from "lucide-react";
|
|
12
|
+
import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
13
|
+
import { useNavigate as f, useParams as p } from "react-router-dom";
|
|
14
|
+
import { useQuery as m } from "@apollo/client/react";
|
|
15
|
+
import { GlassCard as h, IllustratedEmptyState as g, NextSteps as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
16
17
|
//#region src/ggnomad/pages/EventDetailsPage.tsx
|
|
17
|
-
function
|
|
18
|
-
let { t:
|
|
19
|
-
variables: { id:
|
|
20
|
-
skip: !
|
|
21
|
-
}),
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
title:
|
|
24
|
-
subtitle:
|
|
25
|
-
children:
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
image:
|
|
28
|
-
alt:
|
|
18
|
+
function S() {
|
|
19
|
+
let { t: S } = d(), C = f(), { basePath: w = "/" } = a(), { id: T = "" } = p(), { data: E } = m(e, {
|
|
20
|
+
variables: { id: T },
|
|
21
|
+
skip: !T
|
|
22
|
+
}), D = E?.ggnomadEvent;
|
|
23
|
+
return /* @__PURE__ */ b(t, {
|
|
24
|
+
title: D?.name ?? S("ggnomad.event.fallbackTitle", "Event details"),
|
|
25
|
+
subtitle: S("ggnomad.event.subtitle", "Live event details, venue and lineup"),
|
|
26
|
+
children: D ? /* @__PURE__ */ x(y, { children: [
|
|
27
|
+
/* @__PURE__ */ b(i, {
|
|
28
|
+
image: D.images?.[0],
|
|
29
|
+
alt: D.name
|
|
29
30
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
icon: /* @__PURE__ */
|
|
32
|
-
children:
|
|
31
|
+
/* @__PURE__ */ b(v, {
|
|
32
|
+
icon: /* @__PURE__ */ b(u, { className: "size-4" }),
|
|
33
|
+
children: S("ggnomad.event.purpose", "All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.")
|
|
33
34
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
+
/* @__PURE__ */ b(_, {
|
|
35
36
|
storageKey: "ggnomad-event-detail",
|
|
36
37
|
steps: [{
|
|
37
38
|
id: "browse",
|
|
38
|
-
label:
|
|
39
|
-
description:
|
|
40
|
-
icon: /* @__PURE__ */
|
|
41
|
-
onClick: () =>
|
|
39
|
+
label: S("ggnomad.event.next.browse", "See more events"),
|
|
40
|
+
description: S("ggnomad.event.next.browseDesc", "Return to Entertainment for other live experiences."),
|
|
41
|
+
icon: /* @__PURE__ */ b(u, { className: "size-4" }),
|
|
42
|
+
onClick: () => C(o(w, "entertainment"))
|
|
42
43
|
}]
|
|
43
44
|
}),
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
+
/* @__PURE__ */ x("div", {
|
|
45
46
|
className: "grid gap-4 lg:grid-cols-3",
|
|
46
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ x("div", {
|
|
47
48
|
className: "lg:col-span-2 space-y-4",
|
|
48
|
-
children: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
children:
|
|
81
|
-
className: "
|
|
82
|
-
children: [/* @__PURE__ */
|
|
83
|
-
className: "
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ x(h, {
|
|
51
|
+
treatment: "glass",
|
|
52
|
+
glow: !0,
|
|
53
|
+
className: "border-border-seam p-5",
|
|
54
|
+
children: [/* @__PURE__ */ b("h2", {
|
|
55
|
+
className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
|
|
56
|
+
children: S("ggnomad.event.details", "Details")
|
|
57
|
+
}), /* @__PURE__ */ x("dl", {
|
|
58
|
+
className: "space-y-2 text-sm",
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ b(r, {
|
|
61
|
+
label: S("ggnomad.event.category", "Category"),
|
|
62
|
+
value: D.category
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ b(r, {
|
|
65
|
+
label: S("ggnomad.event.starts", "Starts"),
|
|
66
|
+
value: new Date(D.startsAt).toLocaleString()
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ b(r, {
|
|
69
|
+
label: S("ggnomad.event.ends", "Ends"),
|
|
70
|
+
value: D.endsAt ? new Date(D.endsAt).toLocaleString() : S("ggnomad.event.na", "N/A")
|
|
71
|
+
}),
|
|
72
|
+
/* @__PURE__ */ b(r, {
|
|
73
|
+
label: S("ggnomad.event.price", "Price"),
|
|
74
|
+
value: `${D.currency} ${Number(D.price).toFixed(2)}`
|
|
75
|
+
})
|
|
76
|
+
]
|
|
77
|
+
})]
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ b(n, {
|
|
80
|
+
title: S("ggnomad.event.performers", "Performers"),
|
|
81
|
+
children: /* @__PURE__ */ b("ul", {
|
|
82
|
+
className: "space-y-2 text-sm",
|
|
83
|
+
children: (D.performers ?? []).map((e) => /* @__PURE__ */ x("li", {
|
|
84
|
+
className: "flex items-start gap-2 text-text-primary",
|
|
85
|
+
children: [/* @__PURE__ */ b(l, {
|
|
86
|
+
className: "mt-0.5 size-4 flex-shrink-0 text-action-primary-bg",
|
|
87
|
+
"aria-hidden": "true"
|
|
88
|
+
}), e]
|
|
89
|
+
}, e))
|
|
90
|
+
})
|
|
91
|
+
}),
|
|
92
|
+
/* @__PURE__ */ b(c, {
|
|
93
|
+
targetType: "EVENT",
|
|
94
|
+
targetId: D.id ?? T
|
|
87
95
|
})
|
|
88
|
-
|
|
89
|
-
}), /* @__PURE__ */
|
|
96
|
+
]
|
|
97
|
+
}), /* @__PURE__ */ b("div", { children: /* @__PURE__ */ b(s, {
|
|
90
98
|
bookingType: "EVENT",
|
|
91
|
-
itemId:
|
|
92
|
-
itemName:
|
|
93
|
-
unitPrice:
|
|
94
|
-
currency:
|
|
95
|
-
eventDate:
|
|
99
|
+
itemId: D.id ?? T,
|
|
100
|
+
itemName: D.name,
|
|
101
|
+
unitPrice: D.price ?? 0,
|
|
102
|
+
currency: D.currency ?? "USD",
|
|
103
|
+
eventDate: D.startsAt
|
|
96
104
|
}) })]
|
|
97
105
|
})
|
|
98
|
-
] }) : /* @__PURE__ */
|
|
106
|
+
] }) : /* @__PURE__ */ b(g, {
|
|
99
107
|
illustration: "empty-data",
|
|
100
|
-
title:
|
|
101
|
-
description:
|
|
108
|
+
title: S("ggnomad.event.notFoundTitle", "No event found"),
|
|
109
|
+
description: S("ggnomad.event.notFoundDescription", "This event is unavailable or may have been removed.")
|
|
102
110
|
})
|
|
103
111
|
});
|
|
104
112
|
}
|
|
105
113
|
//#endregion
|
|
106
|
-
export {
|
|
114
|
+
export { S as EventDetailsPage };
|
|
107
115
|
|
|
108
116
|
//# sourceMappingURL=EventDetailsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/EventDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Mic2, Ticket } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_EVENT_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel } from '../components';\n\nexport function EventDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_EVENT_QUERY as TypedDocumentNode<\n {\n ggnomadEvent: {\n id: string;\n name: string;\n category: string;\n startsAt: string;\n endsAt?: string;\n currency: string;\n price: number;\n performers: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const event = data?.ggnomadEvent;\n\n return (\n <PageShell\n title={event?.name ?? t('ggnomad.event.fallbackTitle', 'Event details')}\n subtitle={t('ggnomad.event.subtitle', 'Live event details, venue and lineup')}\n >\n {!event ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.event.notFoundTitle', 'No event found')}\n description={t(\n 'ggnomad.event.notFoundDescription',\n 'This event is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={event.images?.[0]} alt={event.name} />\n <PagePurpose icon={<Ticket className=\"size-4\" />}>\n {t(\n 'ggnomad.event.purpose',\n 'All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-event-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.event.next.browse', 'See more events'),\n description: t(\n 'ggnomad.event.next.browseDesc',\n 'Return to Entertainment for other live experiences.'\n ),\n icon: <Ticket className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'entertainment')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.event.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.event.category', 'Category')}\n value={event.category}\n />\n <DetailRow\n label={t('ggnomad.event.starts', 'Starts')}\n value={new Date(event.startsAt).toLocaleString()}\n />\n <DetailRow\n label={t('ggnomad.event.ends', 'Ends')}\n value={\n event.endsAt\n ? new Date(event.endsAt).toLocaleString()\n : t('ggnomad.event.na', 'N/A')\n }\n />\n <DetailRow\n label={t('ggnomad.event.price', 'Price')}\n value={`${event.currency} ${Number(event.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.event.performers', 'Performers')}>\n <ul className=\"space-y-2 text-sm\">\n {(event.performers ?? []).map((performer) => (\n <li key={performer} className=\"flex items-start gap-2 text-text-primary\">\n <Mic2\n className=\"mt-0.5 size-4 flex-shrink-0 text-action-primary-bg\"\n aria-hidden=\"true\"\n />\n {performer}\n </li>\n ))}\n </ul>\n </SectionCard>\n </div>\n <div>\n <BookingPanel\n bookingType=\"EVENT\"\n itemId={event.id ?? id}\n itemName={event.name}\n unitPrice={event.price ?? 0}\n currency={event.currency ?? 'USD'}\n eventDate={event.startsAt}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"EventDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/EventDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Mic2, Ticket } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_EVENT_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel, ReviewsSection } from '../components';\n\nexport function EventDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_EVENT_QUERY as TypedDocumentNode<\n {\n ggnomadEvent: {\n id: string;\n name: string;\n category: string;\n startsAt: string;\n endsAt?: string;\n currency: string;\n price: number;\n performers: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const event = data?.ggnomadEvent;\n\n return (\n <PageShell\n title={event?.name ?? t('ggnomad.event.fallbackTitle', 'Event details')}\n subtitle={t('ggnomad.event.subtitle', 'Live event details, venue and lineup')}\n >\n {!event ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.event.notFoundTitle', 'No event found')}\n description={t(\n 'ggnomad.event.notFoundDescription',\n 'This event is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={event.images?.[0]} alt={event.name} />\n <PagePurpose icon={<Ticket className=\"size-4\" />}>\n {t(\n 'ggnomad.event.purpose',\n 'All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-event-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.event.next.browse', 'See more events'),\n description: t(\n 'ggnomad.event.next.browseDesc',\n 'Return to Entertainment for other live experiences.'\n ),\n icon: <Ticket className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'entertainment')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.event.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.event.category', 'Category')}\n value={event.category}\n />\n <DetailRow\n label={t('ggnomad.event.starts', 'Starts')}\n value={new Date(event.startsAt).toLocaleString()}\n />\n <DetailRow\n label={t('ggnomad.event.ends', 'Ends')}\n value={\n event.endsAt\n ? new Date(event.endsAt).toLocaleString()\n : t('ggnomad.event.na', 'N/A')\n }\n />\n <DetailRow\n label={t('ggnomad.event.price', 'Price')}\n value={`${event.currency} ${Number(event.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.event.performers', 'Performers')}>\n <ul className=\"space-y-2 text-sm\">\n {(event.performers ?? []).map((performer) => (\n <li key={performer} className=\"flex items-start gap-2 text-text-primary\">\n <Mic2\n className=\"mt-0.5 size-4 flex-shrink-0 text-action-primary-bg\"\n aria-hidden=\"true\"\n />\n {performer}\n </li>\n ))}\n </ul>\n </SectionCard>\n <ReviewsSection targetType=\"EVENT\" targetId={event.id ?? id} />\n </div>\n <div>\n <BookingPanel\n bookingType=\"EVENT\"\n itemId={event.id ?? id}\n itemName={event.name}\n unitPrice={event.price ?? 0}\n currency={event.currency ?? 'USD'}\n eventDate={event.startsAt}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAaA,SAAgB,IAAmB;CACjC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAgBA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAQ,GAAM;AAEpB,QACE,kBAAC,GAAD;EACE,OAAO,GAAO,QAAQ,EAAE,+BAA+B,gBAAgB;EACvE,UAAU,EAAE,0BAA0B,uCAAuC;YAE3E,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAM,SAAS;IAAI,KAAK,EAAM;IAAQ,CAAA;GACzD,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;cAC7C,EACC,yBACA,gLACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,6BAA6B,kBAAkB;KACxD,aAAa,EACX,iCACA,sDACD;KACD,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;KACnC,eAAe,EAAS,EAAS,GAAU,gBAAgB,CAAC;KAC7D,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,yBAAyB,UAAU;QACnC,CAAA,EACL,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,GAAD;UACE,OAAO,EAAE,0BAA0B,WAAW;UAC9C,OAAO,EAAM;UACb,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,wBAAwB,SAAS;UAC1C,OAAO,IAAI,KAAK,EAAM,SAAS,CAAC,gBAAgB;UAChD,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,sBAAsB,OAAO;UACtC,OACE,EAAM,SACF,IAAI,KAAK,EAAM,OAAO,CAAC,gBAAgB,GACvC,EAAE,oBAAoB,MAAM;UAElC,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,uBAAuB,QAAQ;UACxC,OAAO,GAAG,EAAM,SAAS,GAAG,OAAO,EAAM,MAAM,CAAC,QAAQ,EAAE;UAC1D,CAAA;SACC;UACK;;MACZ,kBAAC,GAAD;OAAa,OAAO,EAAE,4BAA4B,aAAa;iBAC7D,kBAAC,MAAD;QAAI,WAAU;mBACV,EAAM,cAAc,EAAE,EAAE,KAAK,MAC7B,kBAAC,MAAD;SAAoB,WAAU;mBAA9B,CACE,kBAAC,GAAD;UACE,WAAU;UACV,eAAY;UACZ,CAAA,EACD,EACE;WANI,EAMJ,CACL;QACC,CAAA;OACO,CAAA;MACd,kBAAC,GAAD;OAAgB,YAAW;OAAQ,UAAU,EAAM,MAAM;OAAM,CAAA;MAC3D;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAM,MAAM;KACpB,UAAU,EAAM;KAChB,WAAW,EAAM,SAAS;KAC1B,UAAU,EAAM,YAAY;KAC5B,WAAW,EAAM;KACjB,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAzFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,+BAA+B,iBAAiB;GACzD,aAAa,EACX,qCACA,sDACD;GACD,CAAA;EAoFM,CAAA"}
|