@burdenoff/microfe-ggnomad 2026.705.6 → 2026.710.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +23527 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +57851 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/ggnomad/GGNomadRoot.d.ts +5 -0
- package/dist/ggnomad/GGNomadRoot.d.ts.map +1 -0
- package/dist/ggnomad/GGNomadRoutes.d.ts +2 -0
- package/dist/ggnomad/GGNomadRoutes.d.ts.map +1 -0
- package/dist/ggnomad/GGNomadRoutes.js.map +1 -1
- package/dist/ggnomad/components/BookingPanel.d.ts +16 -0
- package/dist/ggnomad/components/BookingPanel.d.ts.map +1 -0
- package/dist/ggnomad/components/DetailHero.d.ts +13 -0
- package/dist/ggnomad/components/DetailHero.d.ts.map +1 -0
- package/dist/ggnomad/components/DetailRow.d.ts +8 -0
- package/dist/ggnomad/components/DetailRow.d.ts.map +1 -0
- package/dist/ggnomad/components/EntityCard.d.ts +27 -0
- package/dist/ggnomad/components/EntityCard.d.ts.map +1 -0
- package/dist/ggnomad/components/ListingEditDialog.d.ts +20 -0
- package/dist/ggnomad/components/ListingEditDialog.d.ts.map +1 -0
- package/dist/ggnomad/components/ListingEditDialog.js +151 -0
- package/dist/ggnomad/components/ListingEditDialog.js.map +1 -0
- package/dist/ggnomad/components/LoadMoreButton.d.ts +13 -0
- package/dist/ggnomad/components/LoadMoreButton.d.ts.map +1 -0
- package/dist/ggnomad/components/ReviewsSection.d.ts +12 -0
- package/dist/ggnomad/components/ReviewsSection.d.ts.map +1 -0
- package/dist/ggnomad/components/SectionCard.d.ts +12 -0
- package/dist/ggnomad/components/SectionCard.d.ts.map +1 -0
- package/dist/ggnomad/components/StatCard.d.ts +17 -0
- package/dist/ggnomad/components/StatCard.d.ts.map +1 -0
- package/dist/ggnomad/components/StatusBadge.d.ts +12 -0
- package/dist/ggnomad/components/StatusBadge.d.ts.map +1 -0
- package/dist/ggnomad/components/index.d.ts +11 -0
- package/dist/ggnomad/components/index.d.ts.map +1 -0
- package/dist/ggnomad/components/index.js +1 -0
- package/dist/ggnomad/graphql.d.ts +47 -0
- package/dist/ggnomad/graphql.d.ts.map +1 -0
- package/dist/ggnomad/graphql.js +46 -1
- package/dist/ggnomad/graphql.js.map +1 -1
- package/dist/ggnomad/index.d.ts +4 -0
- package/dist/ggnomad/index.d.ts.map +1 -0
- package/dist/ggnomad/pages/ActivityDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/ActivityDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/ActivityDetailsPage.js +86 -61
- package/dist/ggnomad/pages/ActivityDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/AnalyticsPage.d.ts +2 -0
- package/dist/ggnomad/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/BookingsPage.d.ts +2 -0
- package/dist/ggnomad/pages/BookingsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/DashboardPage.d.ts +2 -0
- package/dist/ggnomad/pages/DashboardPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/EntertainmentPage.d.ts +2 -0
- package/dist/ggnomad/pages/EntertainmentPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/EventDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/EventDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/EventDetailsPage.js +87 -62
- package/dist/ggnomad/pages/EventDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/FavoritesPage.d.ts +2 -0
- package/dist/ggnomad/pages/FavoritesPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/HospitalityPage.d.ts +2 -0
- package/dist/ggnomad/pages/HospitalityPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/PageShell.d.ts +23 -0
- package/dist/ggnomad/pages/PageShell.d.ts.map +1 -0
- package/dist/ggnomad/pages/PropertyDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/PropertyDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/PropertyDetailsPage.js +91 -66
- package/dist/ggnomad/pages/PropertyDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/ProviderPage.d.ts +2 -0
- package/dist/ggnomad/pages/ProviderPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/SearchPage.d.ts +2 -0
- package/dist/ggnomad/pages/SearchPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TourDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/TourDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TourDetailsPage.js +86 -61
- package/dist/ggnomad/pages/TourDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/TourismPage.d.ts +2 -0
- package/dist/ggnomad/pages/TourismPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TravelPage.d.ts +2 -0
- package/dist/ggnomad/pages/TravelPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.d.ts +2 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.js +23 -3
- package/dist/ggnomad/pages/TripPlanDetailPage.js.map +1 -1
- package/dist/ggnomad/pages/TripsPage.d.ts +2 -0
- package/dist/ggnomad/pages/TripsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TripsPage.js.map +1 -1
- package/dist/ggnomad/providers/GGNomadProvider.d.ts +6 -0
- package/dist/ggnomad/providers/GGNomadProvider.d.ts.map +1 -0
- package/dist/ggnomad/types/index.d.ts +58 -0
- package/dist/ggnomad/types/index.d.ts.map +1 -0
- package/dist/ggnomad/utils/cn.d.ts +4 -0
- package/dist/ggnomad/utils/cn.d.ts.map +1 -0
- package/dist/ggnomad/utils/navigation.d.ts +2 -0
- package/dist/ggnomad/utils/navigation.d.ts.map +1 -0
- package/dist/ggnomad/utils/notify.d.ts +22 -0
- package/dist/ggnomad/utils/notify.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -1
- package/dist/services/createSandboxAssistantTransport.d.ts +44 -0
- package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/services/createSandboxAssistantTransport.js +338 -0
- package/dist/services/createSandboxAssistantTransport.js.map +1 -0
- package/dist/utils/pageContext.d.ts +28 -0
- package/dist/utils/pageContext.d.ts.map +1 -0
- package/dist/utils/pageContext.js +50 -0
- package/dist/utils/pageContext.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FavoritesPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/FavoritesPage.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,aAAa,gCAoL5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HospitalityPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/HospitalityPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,gCAkF9B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PropsWithChildren, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type PageShellProps = PropsWithChildren<{
|
|
4
|
+
title: string;
|
|
5
|
+
subtitle: string;
|
|
6
|
+
/** Highlighted key noun rendered as a GradientText accent inside the H1. */
|
|
7
|
+
titleAccent?: string;
|
|
8
|
+
/** Single primary action / overflow menu cluster rendered at the header end. */
|
|
9
|
+
actions?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* When true, the header becomes the MFE hero zone with a subtle aurora
|
|
12
|
+
* backdrop. Use on exactly one page per MFE (the Dashboard).
|
|
13
|
+
*/
|
|
14
|
+
hero?: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Boff UI 2.0 page scaffold. The header is a seamless glass band; an optional
|
|
18
|
+
* aurora backdrop turns it into the MFE hero. Content keeps its existing
|
|
19
|
+
* vertical rhythm. The accent noun in the H1 is rendered via GradientText.
|
|
20
|
+
*/
|
|
21
|
+
export declare function PageShell({ title, subtitle, titleAccent, actions, hero, children, }: PageShellProps): import("react").JSX.Element;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=PageShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageShell.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/PageShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1D,KAAK,cAAc,GAAG,iBAAiB,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,OAAO,EACP,IAAY,EACZ,QAAQ,GACT,EAAE,cAAc,+BAsChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyDetailsPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/PropertyDetailsPage.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,mBAAmB,gCAoJlC"}
|
|
@@ -7,118 +7,143 @@ 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
9
|
import { ReviewsSection as c } from "../components/ReviewsSection.js";
|
|
10
|
+
import { ListingEditDialog as l } from "../components/ListingEditDialog.js";
|
|
10
11
|
import "../components/index.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
12
|
+
import { useState as u } from "react";
|
|
13
|
+
import { Hotel as d, Pencil as f } from "lucide-react";
|
|
14
|
+
import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
15
|
+
import { useNavigate as m, useParams as h } from "react-router-dom";
|
|
16
|
+
import { useQuery as g } from "@apollo/client/react";
|
|
17
|
+
import { GlassCard as _, IllustratedEmptyState as v, NextSteps as y, PagePurpose as b } from "@burdenoff/fe-libs/ui";
|
|
18
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
17
19
|
//#region src/ggnomad/pages/PropertyDetailsPage.tsx
|
|
18
|
-
function
|
|
19
|
-
let { t:
|
|
20
|
-
variables: { id:
|
|
21
|
-
skip: !
|
|
22
|
-
}),
|
|
23
|
-
return /* @__PURE__ */
|
|
24
|
-
title:
|
|
25
|
-
subtitle:
|
|
26
|
-
children:
|
|
27
|
-
/* @__PURE__ */
|
|
28
|
-
image:
|
|
29
|
-
alt:
|
|
20
|
+
function w() {
|
|
21
|
+
let { t: w } = p(), T = m(), { basePath: E = "/" } = a(), { id: D = "" } = h(), [O, k] = u(!1), { data: A, refetch: j } = g(e, {
|
|
22
|
+
variables: { id: D },
|
|
23
|
+
skip: !D
|
|
24
|
+
}), M = A?.ggnomadProperty;
|
|
25
|
+
return /* @__PURE__ */ S(t, {
|
|
26
|
+
title: M?.name ?? w("ggnomad.property.fallbackTitle", "Property details"),
|
|
27
|
+
subtitle: w("ggnomad.property.subtitle", "Detailed hospitality listing view"),
|
|
28
|
+
children: M ? /* @__PURE__ */ C(x, { children: [
|
|
29
|
+
/* @__PURE__ */ S(i, {
|
|
30
|
+
image: M.images?.[0],
|
|
31
|
+
alt: M.name
|
|
30
32
|
}),
|
|
31
|
-
/* @__PURE__ */
|
|
32
|
-
icon: /* @__PURE__ */
|
|
33
|
-
children:
|
|
33
|
+
/* @__PURE__ */ S(b, {
|
|
34
|
+
icon: /* @__PURE__ */ S(d, { className: "size-4" }),
|
|
35
|
+
children: w("ggnomad.property.purpose", "Everything you need to decide on this stay — its type, description, nightly price, guest capacity, rating and the provider behind it — before you reserve it.")
|
|
34
36
|
}),
|
|
35
|
-
/* @__PURE__ */ y
|
|
37
|
+
/* @__PURE__ */ S(y, {
|
|
36
38
|
storageKey: "ggnomad-property-detail",
|
|
37
39
|
steps: [{
|
|
38
40
|
id: "browse",
|
|
39
|
-
label:
|
|
40
|
-
description:
|
|
41
|
-
icon: /* @__PURE__ */
|
|
42
|
-
onClick: () =>
|
|
41
|
+
label: w("ggnomad.property.next.browse", "Compare other stays"),
|
|
42
|
+
description: w("ggnomad.property.next.browseDesc", "Go back to hospitality listings to compare options."),
|
|
43
|
+
icon: /* @__PURE__ */ S(d, { className: "size-4" }),
|
|
44
|
+
onClick: () => T(o(E, "hospitality"))
|
|
43
45
|
}]
|
|
44
46
|
}),
|
|
45
|
-
/* @__PURE__ */
|
|
47
|
+
/* @__PURE__ */ C("div", {
|
|
46
48
|
className: "grid gap-4 lg:grid-cols-3",
|
|
47
|
-
children: [/* @__PURE__ */
|
|
49
|
+
children: [/* @__PURE__ */ C("div", {
|
|
48
50
|
className: "lg:col-span-2 space-y-4",
|
|
49
51
|
children: [
|
|
50
|
-
/* @__PURE__ */
|
|
51
|
-
title:
|
|
52
|
+
/* @__PURE__ */ C(n, {
|
|
53
|
+
title: w("ggnomad.property.about", "About"),
|
|
52
54
|
children: [
|
|
53
|
-
/* @__PURE__ */
|
|
55
|
+
/* @__PURE__ */ S("p", {
|
|
54
56
|
className: "text-sm text-text-secondary",
|
|
55
|
-
children:
|
|
57
|
+
children: w("ggnomad.property.type", "Type")
|
|
56
58
|
}),
|
|
57
|
-
/* @__PURE__ */
|
|
59
|
+
/* @__PURE__ */ S("p", {
|
|
58
60
|
className: "text-text-primary",
|
|
59
|
-
children:
|
|
61
|
+
children: M.type
|
|
60
62
|
}),
|
|
61
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ S("p", {
|
|
62
64
|
className: "mt-3 text-sm text-text-secondary",
|
|
63
|
-
children:
|
|
65
|
+
children: w("ggnomad.property.description", "Description")
|
|
64
66
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ S("p", {
|
|
66
68
|
className: "text-text-primary",
|
|
67
|
-
children:
|
|
69
|
+
children: M.description ?? w("ggnomad.property.noDescription", "No description")
|
|
68
70
|
})
|
|
69
71
|
]
|
|
70
72
|
}),
|
|
71
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ C(_, {
|
|
72
74
|
treatment: "glass",
|
|
73
75
|
glow: !0,
|
|
74
76
|
className: "border-border-seam p-5",
|
|
75
|
-
children: [/* @__PURE__ */
|
|
76
|
-
className: "mb-4
|
|
77
|
-
children:
|
|
78
|
-
|
|
77
|
+
children: [/* @__PURE__ */ C("div", {
|
|
78
|
+
className: "mb-4 flex items-center justify-between gap-3",
|
|
79
|
+
children: [/* @__PURE__ */ S("h2", {
|
|
80
|
+
className: "text-lg font-medium tracking-tight text-text-primary",
|
|
81
|
+
children: w("ggnomad.property.details", "Details")
|
|
82
|
+
}), /* @__PURE__ */ S("button", {
|
|
83
|
+
onClick: () => k(!0),
|
|
84
|
+
className: "rounded-md p-2 text-text-secondary hover:bg-action-primary-bg hover:text-action-primary-text",
|
|
85
|
+
"aria-label": w("ggnomad.property.editListing", "Edit listing"),
|
|
86
|
+
title: w("ggnomad.property.editListing", "Edit listing"),
|
|
87
|
+
children: /* @__PURE__ */ S(f, { className: "size-4" })
|
|
88
|
+
})]
|
|
89
|
+
}), /* @__PURE__ */ C("dl", {
|
|
79
90
|
className: "space-y-2 text-sm",
|
|
80
91
|
children: [
|
|
81
|
-
/* @__PURE__ */
|
|
82
|
-
label:
|
|
83
|
-
value: `${
|
|
92
|
+
/* @__PURE__ */ S(r, {
|
|
93
|
+
label: w("ggnomad.property.price", "Price"),
|
|
94
|
+
value: `${M.currency} ${Number(M.pricePerNight).toFixed(2)}`
|
|
84
95
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
label:
|
|
87
|
-
value: String(
|
|
96
|
+
/* @__PURE__ */ S(r, {
|
|
97
|
+
label: w("ggnomad.property.guests", "Guests"),
|
|
98
|
+
value: String(M.maxGuests)
|
|
88
99
|
}),
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
-
label:
|
|
91
|
-
value: String(
|
|
100
|
+
/* @__PURE__ */ S(r, {
|
|
101
|
+
label: w("ggnomad.property.rating", "Rating"),
|
|
102
|
+
value: String(M.rating ?? w("ggnomad.property.noRating", "N/A"))
|
|
92
103
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
94
|
-
label:
|
|
95
|
-
value:
|
|
104
|
+
/* @__PURE__ */ S(r, {
|
|
105
|
+
label: w("ggnomad.property.provider", "Provider"),
|
|
106
|
+
value: M.provider?.name ?? w("ggnomad.property.unassigned", "Unassigned")
|
|
96
107
|
})
|
|
97
108
|
]
|
|
98
109
|
})]
|
|
99
110
|
}),
|
|
100
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ S(c, {
|
|
101
112
|
targetType: "PROPERTY",
|
|
102
|
-
targetId:
|
|
113
|
+
targetId: M.id ?? D
|
|
103
114
|
})
|
|
104
115
|
]
|
|
105
|
-
}), /* @__PURE__ */
|
|
116
|
+
}), /* @__PURE__ */ S("div", { children: /* @__PURE__ */ S(s, {
|
|
106
117
|
bookingType: "PROPERTY",
|
|
107
|
-
itemId:
|
|
108
|
-
itemName:
|
|
109
|
-
unitPrice:
|
|
110
|
-
currency:
|
|
118
|
+
itemId: M.id ?? D,
|
|
119
|
+
itemName: M.name,
|
|
120
|
+
unitPrice: M.pricePerNight ?? 0,
|
|
121
|
+
currency: M.currency ?? "USD",
|
|
111
122
|
nights: 1
|
|
112
123
|
}) })]
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ S(l, {
|
|
126
|
+
open: O,
|
|
127
|
+
onOpenChange: k,
|
|
128
|
+
targetType: "PROPERTY",
|
|
129
|
+
id: M.id ?? D,
|
|
130
|
+
initial: {
|
|
131
|
+
name: M.name,
|
|
132
|
+
description: M.description,
|
|
133
|
+
pricePerNight: M.pricePerNight,
|
|
134
|
+
status: M.status,
|
|
135
|
+
images: M.images
|
|
136
|
+
},
|
|
137
|
+
onSaved: () => j()
|
|
113
138
|
})
|
|
114
|
-
] }) : /* @__PURE__ */
|
|
139
|
+
] }) : /* @__PURE__ */ S(v, {
|
|
115
140
|
illustration: "empty-data",
|
|
116
|
-
title:
|
|
117
|
-
description:
|
|
141
|
+
title: w("ggnomad.property.notFoundTitle", "No property found"),
|
|
142
|
+
description: w("ggnomad.property.notFoundDescription", "This property is unavailable or may have been removed.")
|
|
118
143
|
})
|
|
119
144
|
});
|
|
120
145
|
}
|
|
121
146
|
//#endregion
|
|
122
|
-
export {
|
|
147
|
+
export { w as PropertyDetailsPage };
|
|
123
148
|
|
|
124
149
|
//# sourceMappingURL=PropertyDetailsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/PropertyDetailsPage.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 { Hotel } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_PROPERTY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport {
|
|
1
|
+
{"version":3,"file":"PropertyDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/PropertyDetailsPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { 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 { Hotel, Pencil } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_PROPERTY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport {\n DetailRow,\n SectionCard,\n DetailHero,\n BookingPanel,\n ReviewsSection,\n ListingEditDialog,\n} from '../components';\n\nexport function PropertyDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const { data, refetch } = useQuery(\n GGNOMAD_PROPERTY_QUERY as TypedDocumentNode<\n {\n ggnomadProperty: {\n id: string;\n name: string;\n type: string;\n description?: string;\n currency: string;\n pricePerNight: number;\n status?: string;\n maxGuests: number;\n rating?: number;\n provider?: { name: string };\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const property = data?.ggnomadProperty;\n\n return (\n <PageShell\n title={property?.name ?? t('ggnomad.property.fallbackTitle', 'Property details')}\n subtitle={t('ggnomad.property.subtitle', 'Detailed hospitality listing view')}\n >\n {!property ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.property.notFoundTitle', 'No property found')}\n description={t(\n 'ggnomad.property.notFoundDescription',\n 'This property is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={property.images?.[0]} alt={property.name} />\n <PagePurpose icon={<Hotel className=\"size-4\" />}>\n {t(\n 'ggnomad.property.purpose',\n 'Everything you need to decide on this stay — its type, description, nightly price, guest capacity, rating and the provider behind it — before you reserve it.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-property-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.property.next.browse', 'Compare other stays'),\n description: t(\n 'ggnomad.property.next.browseDesc',\n 'Go back to hospitality listings to compare options.'\n ),\n icon: <Hotel className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'hospitality')),\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 <SectionCard title={t('ggnomad.property.about', 'About')}>\n <p className=\"text-sm text-text-secondary\">{t('ggnomad.property.type', 'Type')}</p>\n <p className=\"text-text-primary\">{property.type}</p>\n <p className=\"mt-3 text-sm text-text-secondary\">\n {t('ggnomad.property.description', 'Description')}\n </p>\n <p className=\"text-text-primary\">\n {property.description ?? t('ggnomad.property.noDescription', 'No description')}\n </p>\n </SectionCard>\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <div className=\"mb-4 flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.property.details', 'Details')}\n </h2>\n <button\n onClick={() => setEditDialogOpen(true)}\n className=\"rounded-md p-2 text-text-secondary hover:bg-action-primary-bg hover:text-action-primary-text\"\n aria-label={t('ggnomad.property.editListing', 'Edit listing')}\n title={t('ggnomad.property.editListing', 'Edit listing')}\n >\n <Pencil className=\"size-4\" />\n </button>\n </div>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.property.price', 'Price')}\n value={`${property.currency} ${Number(property.pricePerNight).toFixed(2)}`}\n />\n <DetailRow\n label={t('ggnomad.property.guests', 'Guests')}\n value={String(property.maxGuests)}\n />\n <DetailRow\n label={t('ggnomad.property.rating', 'Rating')}\n value={String(property.rating ?? t('ggnomad.property.noRating', 'N/A'))}\n />\n <DetailRow\n label={t('ggnomad.property.provider', 'Provider')}\n value={\n property.provider?.name ?? t('ggnomad.property.unassigned', 'Unassigned')\n }\n />\n </dl>\n </GlassCard>\n <ReviewsSection targetType=\"PROPERTY\" targetId={property.id ?? id} />\n </div>\n <div>\n <BookingPanel\n bookingType=\"PROPERTY\"\n itemId={property.id ?? id}\n itemName={property.name}\n unitPrice={property.pricePerNight ?? 0}\n currency={property.currency ?? 'USD'}\n nights={1}\n />\n </div>\n </div>\n\n <ListingEditDialog\n open={editDialogOpen}\n onOpenChange={setEditDialogOpen}\n targetType=\"PROPERTY\"\n id={property.id ?? id}\n initial={{\n name: property.name,\n description: property.description,\n pricePerNight: property.pricePerNight,\n status: property.status,\n images: property.images,\n }}\n onSaved={() => refetch()}\n />\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,IAAsB;CACpC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,CAAC,GAAgB,KAAqB,EAAS,GAAM,EACrD,EAAE,SAAM,eAAY,EACxB,GAkBA;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,oCAAoC;YAE3E,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,EAAO,WAAU,UAAW,CAAA;cAC5C,EACC,4BACA,gKACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,gCAAgC,sBAAsB;KAC/D,aAAa,EACX,oCACA,sDACD;KACD,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;KAClC,eAAe,EAAS,EAAS,GAAU,cAAc,CAAC;KAC3D,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAa,OAAO,EAAE,0BAA0B,QAAQ;iBAAxD;QACE,kBAAC,KAAD;SAAG,WAAU;mBAA+B,EAAE,yBAAyB,OAAO;SAAK,CAAA;QACnF,kBAAC,KAAD;SAAG,WAAU;mBAAqB,EAAS;SAAS,CAAA;QACpD,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAE,gCAAgC,cAAc;SAC/C,CAAA;QACJ,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAS,eAAe,EAAE,kCAAkC,iBAAiB;SAC5E,CAAA;QACQ;;MACd,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,4BAA4B,UAAU;SACtC,CAAA,EACL,kBAAC,UAAD;SACE,eAAe,EAAkB,GAAK;SACtC,WAAU;SACV,cAAY,EAAE,gCAAgC,eAAe;SAC7D,OAAO,EAAE,gCAAgC,eAAe;mBAExD,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;SACtB,CAAA,CACL;WACN,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,GAAD;UACE,OAAO,EAAE,0BAA0B,QAAQ;UAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,cAAc,CAAC,QAAQ,EAAE;UACxE,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,2BAA2B,SAAS;UAC7C,OAAO,OAAO,EAAS,UAAU;UACjC,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,2BAA2B,SAAS;UAC7C,OAAO,OAAO,EAAS,UAAU,EAAE,6BAA6B,MAAM,CAAC;UACvE,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,6BAA6B,WAAW;UACjD,OACE,EAAS,UAAU,QAAQ,EAAE,+BAA+B,aAAa;UAE3E,CAAA;SACC;UACK;;MACZ,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,iBAAiB;KACrC,UAAU,EAAS,YAAY;KAC/B,QAAQ;KACR,CAAA,EACE,CAAA,CACF;;GAEN,kBAAC,GAAD;IACE,MAAM;IACN,cAAc;IACd,YAAW;IACX,IAAI,EAAS,MAAM;IACnB,SAAS;KACP,MAAM,EAAS;KACf,aAAa,EAAS;KACtB,eAAe,EAAS;KACxB,QAAQ,EAAS;KACjB,QAAQ,EAAS;KAClB;IACD,eAAe,GAAS;IACxB,CAAA;GACD,EAAA,CAAA,GA7GH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EAwGM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/ProviderPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,YAAY,gCA+F3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/SearchPage.tsx"],"names":[],"mappings":"AAeA,wBAAgB,UAAU,gCA0GzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TourDetailsPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/TourDetailsPage.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,eAAe,gCAiJ9B"}
|
|
@@ -7,109 +7,134 @@ 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
9
|
import { ReviewsSection as c } from "../components/ReviewsSection.js";
|
|
10
|
+
import { ListingEditDialog as l } from "../components/ListingEditDialog.js";
|
|
10
11
|
import "../components/index.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
12
|
+
import { useState as u } from "react";
|
|
13
|
+
import { CheckCircle2 as d, Compass as f, Pencil as p } from "lucide-react";
|
|
14
|
+
import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
15
|
+
import { useNavigate as h, useParams as g } from "react-router-dom";
|
|
16
|
+
import { useQuery as _ } from "@apollo/client/react";
|
|
17
|
+
import { GlassCard as v, IllustratedEmptyState as y, NextSteps as b, PagePurpose as x } from "@burdenoff/fe-libs/ui";
|
|
18
|
+
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
17
19
|
//#region src/ggnomad/pages/TourDetailsPage.tsx
|
|
18
|
-
function
|
|
19
|
-
let { t:
|
|
20
|
-
variables: { id:
|
|
21
|
-
skip: !
|
|
22
|
-
}),
|
|
23
|
-
return /* @__PURE__ */
|
|
24
|
-
title:
|
|
25
|
-
subtitle:
|
|
26
|
-
children:
|
|
27
|
-
/* @__PURE__ */
|
|
28
|
-
image:
|
|
29
|
-
alt:
|
|
20
|
+
function T() {
|
|
21
|
+
let { t: T } = m(), E = h(), { basePath: D = "/" } = a(), { id: O = "" } = g(), [k, A] = u(!1), { data: j, refetch: M } = _(e, {
|
|
22
|
+
variables: { id: O },
|
|
23
|
+
skip: !O
|
|
24
|
+
}), N = j?.ggnomadTour;
|
|
25
|
+
return /* @__PURE__ */ C(t, {
|
|
26
|
+
title: N?.name ?? T("ggnomad.tour.fallbackTitle", "Tour details"),
|
|
27
|
+
subtitle: T("ggnomad.tour.subtitle", "Tour package details and booking context"),
|
|
28
|
+
children: N ? /* @__PURE__ */ w(S, { children: [
|
|
29
|
+
/* @__PURE__ */ C(i, {
|
|
30
|
+
image: N.images?.[0],
|
|
31
|
+
alt: N.name
|
|
30
32
|
}),
|
|
31
|
-
/* @__PURE__ */
|
|
32
|
-
icon: /* @__PURE__ */
|
|
33
|
-
children:
|
|
33
|
+
/* @__PURE__ */ C(x, {
|
|
34
|
+
icon: /* @__PURE__ */ C(f, { className: "size-4" }),
|
|
35
|
+
children: T("ggnomad.tour.purpose", "See exactly what this tour involves — duration, difficulty, your guide, price and the highlights you’ll experience — so you can confirm it fits your trip before booking.")
|
|
34
36
|
}),
|
|
35
|
-
/* @__PURE__ */ b
|
|
37
|
+
/* @__PURE__ */ C(b, {
|
|
36
38
|
storageKey: "ggnomad-tour-detail",
|
|
37
39
|
steps: [{
|
|
38
40
|
id: "browse",
|
|
39
|
-
label:
|
|
40
|
-
description:
|
|
41
|
-
icon: /* @__PURE__ */
|
|
42
|
-
onClick: () =>
|
|
41
|
+
label: T("ggnomad.tour.next.browse", "Explore more experiences"),
|
|
42
|
+
description: T("ggnomad.tour.next.browseDesc", "Return to Tourism to compare tours and activities."),
|
|
43
|
+
icon: /* @__PURE__ */ C(f, { className: "size-4" }),
|
|
44
|
+
onClick: () => E(o(D, "tourism"))
|
|
43
45
|
}]
|
|
44
46
|
}),
|
|
45
|
-
/* @__PURE__ */
|
|
47
|
+
/* @__PURE__ */ w("div", {
|
|
46
48
|
className: "grid gap-4 lg:grid-cols-3",
|
|
47
|
-
children: [/* @__PURE__ */
|
|
49
|
+
children: [/* @__PURE__ */ w("div", {
|
|
48
50
|
className: "lg:col-span-2 space-y-4",
|
|
49
51
|
children: [
|
|
50
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ w(v, {
|
|
51
53
|
treatment: "glass",
|
|
52
54
|
glow: !0,
|
|
53
55
|
className: "border-border-seam p-5",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
55
|
-
className: "mb-4
|
|
56
|
-
children:
|
|
57
|
-
|
|
56
|
+
children: [/* @__PURE__ */ w("div", {
|
|
57
|
+
className: "mb-4 flex items-center justify-between gap-3",
|
|
58
|
+
children: [/* @__PURE__ */ C("h2", {
|
|
59
|
+
className: "text-lg font-medium tracking-tight text-text-primary",
|
|
60
|
+
children: T("ggnomad.tour.details", "Details")
|
|
61
|
+
}), /* @__PURE__ */ C("button", {
|
|
62
|
+
onClick: () => A(!0),
|
|
63
|
+
className: "rounded-md p-2 text-text-secondary hover:bg-action-primary-bg hover:text-action-primary-text",
|
|
64
|
+
"aria-label": T("ggnomad.tour.editListing", "Edit listing"),
|
|
65
|
+
title: T("ggnomad.tour.editListing", "Edit listing"),
|
|
66
|
+
children: /* @__PURE__ */ C(p, { className: "size-4" })
|
|
67
|
+
})]
|
|
68
|
+
}), /* @__PURE__ */ w("dl", {
|
|
58
69
|
className: "space-y-2 text-sm",
|
|
59
70
|
children: [
|
|
60
|
-
/* @__PURE__ */
|
|
61
|
-
label:
|
|
62
|
-
value:
|
|
71
|
+
/* @__PURE__ */ C(r, {
|
|
72
|
+
label: T("ggnomad.tour.duration", "Duration"),
|
|
73
|
+
value: N.duration
|
|
63
74
|
}),
|
|
64
|
-
/* @__PURE__ */
|
|
65
|
-
label:
|
|
66
|
-
value:
|
|
75
|
+
/* @__PURE__ */ C(r, {
|
|
76
|
+
label: T("ggnomad.tour.difficulty", "Difficulty"),
|
|
77
|
+
value: N.difficulty ?? T("ggnomad.tour.na", "N/A")
|
|
67
78
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
-
label:
|
|
70
|
-
value:
|
|
79
|
+
/* @__PURE__ */ C(r, {
|
|
80
|
+
label: T("ggnomad.tour.guide", "Guide"),
|
|
81
|
+
value: N.guideName ?? T("ggnomad.tour.na", "N/A")
|
|
71
82
|
}),
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
-
label:
|
|
74
|
-
value: `${
|
|
83
|
+
/* @__PURE__ */ C(r, {
|
|
84
|
+
label: T("ggnomad.tour.price", "Price"),
|
|
85
|
+
value: `${N.currency} ${Number(N.price).toFixed(2)}`
|
|
75
86
|
})
|
|
76
87
|
]
|
|
77
88
|
})]
|
|
78
89
|
}),
|
|
79
|
-
/* @__PURE__ */
|
|
80
|
-
title:
|
|
81
|
-
children: /* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ C(n, {
|
|
91
|
+
title: T("ggnomad.tour.highlights", "Highlights"),
|
|
92
|
+
children: /* @__PURE__ */ C("ul", {
|
|
82
93
|
className: "space-y-2 text-sm",
|
|
83
|
-
children: (
|
|
94
|
+
children: (N.highlights ?? []).map((e) => /* @__PURE__ */ w("li", {
|
|
84
95
|
className: "flex items-start gap-2 text-text-primary",
|
|
85
|
-
children: [/* @__PURE__ */
|
|
96
|
+
children: [/* @__PURE__ */ C(d, {
|
|
86
97
|
className: "mt-0.5 size-4 flex-shrink-0 text-status-success-text",
|
|
87
98
|
"aria-hidden": "true"
|
|
88
99
|
}), e]
|
|
89
100
|
}, e))
|
|
90
101
|
})
|
|
91
102
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
103
|
+
/* @__PURE__ */ C(c, {
|
|
93
104
|
targetType: "TOUR",
|
|
94
|
-
targetId:
|
|
105
|
+
targetId: N.id ?? O
|
|
95
106
|
})
|
|
96
107
|
]
|
|
97
|
-
}), /* @__PURE__ */
|
|
108
|
+
}), /* @__PURE__ */ C("div", { children: /* @__PURE__ */ C(s, {
|
|
98
109
|
bookingType: "TOUR",
|
|
99
|
-
itemId:
|
|
100
|
-
itemName:
|
|
101
|
-
unitPrice:
|
|
102
|
-
currency:
|
|
110
|
+
itemId: N.id ?? O,
|
|
111
|
+
itemName: N.name,
|
|
112
|
+
unitPrice: N.price ?? 0,
|
|
113
|
+
currency: N.currency ?? "USD"
|
|
103
114
|
}) })]
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ C(l, {
|
|
117
|
+
open: k,
|
|
118
|
+
onOpenChange: A,
|
|
119
|
+
targetType: "TOUR",
|
|
120
|
+
id: N.id ?? O,
|
|
121
|
+
initial: {
|
|
122
|
+
name: N.name,
|
|
123
|
+
description: N.description,
|
|
124
|
+
price: N.price,
|
|
125
|
+
status: N.status,
|
|
126
|
+
images: N.images
|
|
127
|
+
},
|
|
128
|
+
onSaved: () => M()
|
|
104
129
|
})
|
|
105
|
-
] }) : /* @__PURE__ */
|
|
130
|
+
] }) : /* @__PURE__ */ C(y, {
|
|
106
131
|
illustration: "empty-data",
|
|
107
|
-
title:
|
|
108
|
-
description:
|
|
132
|
+
title: T("ggnomad.tour.notFoundTitle", "No tour found"),
|
|
133
|
+
description: T("ggnomad.tour.notFoundDescription", "This tour is unavailable or may have been removed.")
|
|
109
134
|
})
|
|
110
135
|
});
|
|
111
136
|
}
|
|
112
137
|
//#endregion
|
|
113
|
-
export {
|
|
138
|
+
export { T as TourDetailsPage };
|
|
114
139
|
|
|
115
140
|
//# sourceMappingURL=TourDetailsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TourDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/TourDetailsPage.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 { CheckCircle2, Compass } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_TOUR_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport {
|
|
1
|
+
{"version":3,"file":"TourDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/TourDetailsPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { 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 { CheckCircle2, Compass, Pencil } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_TOUR_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport {\n DetailRow,\n SectionCard,\n DetailHero,\n BookingPanel,\n ReviewsSection,\n ListingEditDialog,\n} from '../components';\n\nexport function TourDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const { data, refetch } = useQuery(\n GGNOMAD_TOUR_QUERY as TypedDocumentNode<\n {\n ggnomadTour: {\n id: string;\n name: string;\n description?: string;\n duration: string;\n difficulty?: string;\n guideName?: string;\n currency: string;\n price: number;\n status?: string;\n highlights: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const tour = data?.ggnomadTour;\n\n return (\n <PageShell\n title={tour?.name ?? t('ggnomad.tour.fallbackTitle', 'Tour details')}\n subtitle={t('ggnomad.tour.subtitle', 'Tour package details and booking context')}\n >\n {!tour ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.tour.notFoundTitle', 'No tour found')}\n description={t(\n 'ggnomad.tour.notFoundDescription',\n 'This tour is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={tour.images?.[0]} alt={tour.name} />\n <PagePurpose icon={<Compass className=\"size-4\" />}>\n {t(\n 'ggnomad.tour.purpose',\n 'See exactly what this tour involves — duration, difficulty, your guide, price and the highlights you’ll experience — so you can confirm it fits your trip before booking.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-tour-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.tour.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.tour.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 <div className=\"mb-4 flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.tour.details', 'Details')}\n </h2>\n <button\n onClick={() => setEditDialogOpen(true)}\n className=\"rounded-md p-2 text-text-secondary hover:bg-action-primary-bg hover:text-action-primary-text\"\n aria-label={t('ggnomad.tour.editListing', 'Edit listing')}\n title={t('ggnomad.tour.editListing', 'Edit listing')}\n >\n <Pencil className=\"size-4\" />\n </button>\n </div>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow label={t('ggnomad.tour.duration', 'Duration')} value={tour.duration} />\n <DetailRow\n label={t('ggnomad.tour.difficulty', 'Difficulty')}\n value={tour.difficulty ?? t('ggnomad.tour.na', 'N/A')}\n />\n <DetailRow\n label={t('ggnomad.tour.guide', 'Guide')}\n value={tour.guideName ?? t('ggnomad.tour.na', 'N/A')}\n />\n <DetailRow\n label={t('ggnomad.tour.price', 'Price')}\n value={`${tour.currency} ${Number(tour.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.tour.highlights', 'Highlights')}>\n <ul className=\"space-y-2 text-sm\">\n {(tour.highlights ?? []).map((highlight) => (\n <li key={highlight} className=\"flex items-start gap-2 text-text-primary\">\n <CheckCircle2\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n {highlight}\n </li>\n ))}\n </ul>\n </SectionCard>\n <ReviewsSection targetType=\"TOUR\" targetId={tour.id ?? id} />\n </div>\n <div>\n <BookingPanel\n bookingType=\"TOUR\"\n itemId={tour.id ?? id}\n itemName={tour.name}\n unitPrice={tour.price ?? 0}\n currency={tour.currency ?? 'USD'}\n />\n </div>\n </div>\n\n <ListingEditDialog\n open={editDialogOpen}\n onOpenChange={setEditDialogOpen}\n targetType=\"TOUR\"\n id={tour.id ?? id}\n initial={{\n name: tour.name,\n description: tour.description,\n price: tour.price,\n status: tour.status,\n images: tour.images,\n }}\n onSaved={() => refetch()}\n />\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TourismPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/TourismPage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,WAAW,gCAiH1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TravelPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/TravelPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,gCAgEzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TripPlanDetailPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/TripPlanDetailPage.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,kBAAkB,gCAo2BjC"}
|