@burdenoff/microfe-ggnomad 2026.705.2 → 2026.705.4
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/GGNomadRoot.js +60 -53
- package/dist/ggnomad/GGNomadRoot.js.map +1 -1
- package/dist/ggnomad/GGNomadRoutes.js +13 -5
- package/dist/ggnomad/GGNomadRoutes.js.map +1 -1
- package/dist/ggnomad/components/BookingPanel.js +219 -0
- package/dist/ggnomad/components/BookingPanel.js.map +1 -0
- package/dist/ggnomad/components/index.js +1 -0
- package/dist/ggnomad/graphql.js +109 -2
- package/dist/ggnomad/graphql.js.map +1 -1
- package/dist/ggnomad/pages/ActivityDetailsPage.js +51 -47
- package/dist/ggnomad/pages/ActivityDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/BookingsPage.js +1 -1
- package/dist/ggnomad/pages/EventDetailsPage.js +54 -49
- package/dist/ggnomad/pages/EventDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/FavoritesPage.js +1 -1
- package/dist/ggnomad/pages/PropertyDetailsPage.js +56 -51
- package/dist/ggnomad/pages/PropertyDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/TourDetailsPage.js +53 -49
- package/dist/ggnomad/pages/TourDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/TripPlanDetailPage.js +605 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.js.map +1 -0
- package/dist/ggnomad/pages/TripsPage.js +181 -0
- package/dist/ggnomad/pages/TripsPage.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,118 +1,125 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { GGNomadProvider as e } from "./providers/GGNomadProvider.js";
|
|
2
|
+
import { joinPath as t } from "./utils/navigation.js";
|
|
3
|
+
import { GGNomadRoutes as n } from "./GGNomadRoutes.js";
|
|
4
4
|
import { useEffect as r } from "react";
|
|
5
|
-
import { Activity as i, BarChart3 as a, Building as o, CalendarCheck as s, Compass as c, LayoutDashboard as l,
|
|
6
|
-
import { useI18n as
|
|
7
|
-
import { jsx as
|
|
8
|
-
import { FeatureFlagProvider as
|
|
5
|
+
import { Activity as i, BarChart3 as a, Building as o, CalendarCheck as s, Compass as c, LayoutDashboard as l, Map as u, MapPinned as d, Search as f, Star as p, Tickets as m } from "lucide-react";
|
|
6
|
+
import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
7
|
+
import { jsx as g } from "react/jsx-runtime";
|
|
8
|
+
import { FeatureFlagProvider as _ } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
9
9
|
//#region src/ggnomad/GGNomadRoot.tsx
|
|
10
|
-
var
|
|
11
|
-
let { registerNavItems:
|
|
10
|
+
var v = (v) => {
|
|
11
|
+
let { registerNavItems: y, registerFooterItems: b, basePath: x = "/" } = v, { t: S } = h();
|
|
12
12
|
return r(() => {
|
|
13
|
-
if (
|
|
13
|
+
if (y) return y({
|
|
14
14
|
id: "ggnomad",
|
|
15
|
-
label:
|
|
16
|
-
path:
|
|
17
|
-
icon: /* @__PURE__ */
|
|
15
|
+
label: S("ggnomad.nav.root", "GGNomad"),
|
|
16
|
+
path: x,
|
|
17
|
+
icon: /* @__PURE__ */ g(l, { size: 18 }),
|
|
18
18
|
order: 80,
|
|
19
19
|
group: "products",
|
|
20
20
|
children: [
|
|
21
21
|
{
|
|
22
22
|
id: "ggnomad-dashboard",
|
|
23
|
-
label:
|
|
24
|
-
path:
|
|
25
|
-
icon: /* @__PURE__ */
|
|
23
|
+
label: S("ggnomad.nav.dashboard", "Dashboard"),
|
|
24
|
+
path: x,
|
|
25
|
+
icon: /* @__PURE__ */ g(l, { size: 16 }),
|
|
26
26
|
order: 0
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
id: "ggnomad-search",
|
|
30
|
-
label:
|
|
31
|
-
path:
|
|
32
|
-
icon: /* @__PURE__ */
|
|
30
|
+
label: S("ggnomad.nav.search", "Search"),
|
|
31
|
+
path: t(x, "search"),
|
|
32
|
+
icon: /* @__PURE__ */ g(f, { size: 16 }),
|
|
33
33
|
order: 5
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
id: "ggnomad-travel",
|
|
37
|
-
label:
|
|
38
|
-
path:
|
|
39
|
-
icon: /* @__PURE__ */
|
|
37
|
+
label: S("ggnomad.nav.travel", "Travel"),
|
|
38
|
+
path: t(x, "travel"),
|
|
39
|
+
icon: /* @__PURE__ */ g(c, { size: 16 }),
|
|
40
40
|
order: 10
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
id: "ggnomad-hospitality",
|
|
44
|
-
label:
|
|
45
|
-
path:
|
|
46
|
-
icon: /* @__PURE__ */
|
|
44
|
+
label: S("ggnomad.nav.hospitality", "Hospitality"),
|
|
45
|
+
path: t(x, "hospitality"),
|
|
46
|
+
icon: /* @__PURE__ */ g(o, { size: 16 }),
|
|
47
47
|
order: 20
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
id: "ggnomad-tourism",
|
|
51
|
-
label:
|
|
52
|
-
path:
|
|
53
|
-
icon: /* @__PURE__ */
|
|
51
|
+
label: S("ggnomad.nav.tourism", "Tourism"),
|
|
52
|
+
path: t(x, "tourism"),
|
|
53
|
+
icon: /* @__PURE__ */ g(d, { size: 16 }),
|
|
54
54
|
order: 30
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
id: "ggnomad-entertainment",
|
|
58
|
-
label:
|
|
59
|
-
path:
|
|
60
|
-
icon: /* @__PURE__ */
|
|
58
|
+
label: S("ggnomad.nav.entertainment", "Entertainment"),
|
|
59
|
+
path: t(x, "entertainment"),
|
|
60
|
+
icon: /* @__PURE__ */ g(i, { size: 16 }),
|
|
61
61
|
order: 40
|
|
62
62
|
},
|
|
63
|
+
{
|
|
64
|
+
id: "ggnomad-trips",
|
|
65
|
+
label: S("ggnomad.nav.trips", "Trips"),
|
|
66
|
+
path: t(x, "trips"),
|
|
67
|
+
icon: /* @__PURE__ */ g(u, { size: 16 }),
|
|
68
|
+
order: 45
|
|
69
|
+
},
|
|
63
70
|
{
|
|
64
71
|
id: "ggnomad-bookings",
|
|
65
|
-
label:
|
|
66
|
-
path:
|
|
67
|
-
icon: /* @__PURE__ */
|
|
72
|
+
label: S("ggnomad.nav.bookings", "Bookings"),
|
|
73
|
+
path: t(x, "bookings"),
|
|
74
|
+
icon: /* @__PURE__ */ g(s, { size: 16 }),
|
|
68
75
|
order: 50
|
|
69
76
|
},
|
|
70
77
|
{
|
|
71
78
|
id: "ggnomad-favorites",
|
|
72
|
-
label:
|
|
73
|
-
path:
|
|
74
|
-
icon: /* @__PURE__ */
|
|
79
|
+
label: S("ggnomad.nav.favorites", "Favorites"),
|
|
80
|
+
path: t(x, "favorites"),
|
|
81
|
+
icon: /* @__PURE__ */ g(p, { size: 16 }),
|
|
75
82
|
order: 60
|
|
76
83
|
},
|
|
77
84
|
{
|
|
78
85
|
id: "ggnomad-provider",
|
|
79
|
-
label:
|
|
80
|
-
path:
|
|
81
|
-
icon: /* @__PURE__ */
|
|
86
|
+
label: S("ggnomad.nav.providers", "Providers"),
|
|
87
|
+
path: t(x, "provider"),
|
|
88
|
+
icon: /* @__PURE__ */ g(m, { size: 16 }),
|
|
82
89
|
order: 70
|
|
83
90
|
},
|
|
84
91
|
{
|
|
85
92
|
id: "ggnomad-analytics",
|
|
86
|
-
label:
|
|
87
|
-
path:
|
|
88
|
-
icon: /* @__PURE__ */
|
|
93
|
+
label: S("ggnomad.nav.analytics", "Analytics"),
|
|
94
|
+
path: t(x, "analytics"),
|
|
95
|
+
icon: /* @__PURE__ */ g(a, { size: 16 }),
|
|
89
96
|
order: 80
|
|
90
97
|
}
|
|
91
98
|
]
|
|
92
99
|
});
|
|
93
100
|
}, [
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
y,
|
|
102
|
+
x,
|
|
103
|
+
S
|
|
97
104
|
]), r(() => {
|
|
98
|
-
if (
|
|
105
|
+
if (b) return b([{
|
|
99
106
|
id: "ggnomad-ready",
|
|
100
|
-
label:
|
|
107
|
+
label: S("ggnomad.footer.ready", "GGNomad Ready"),
|
|
101
108
|
type: "status",
|
|
102
109
|
section: "left",
|
|
103
110
|
order: 10
|
|
104
111
|
}]);
|
|
105
|
-
}, [
|
|
112
|
+
}, [b, S]), /* @__PURE__ */ g(_, {
|
|
106
113
|
workspaceId: null,
|
|
107
114
|
gateway: "global",
|
|
108
115
|
defaultEnabled: !0,
|
|
109
|
-
children: /* @__PURE__ */
|
|
110
|
-
...
|
|
111
|
-
children: /* @__PURE__ */
|
|
116
|
+
children: /* @__PURE__ */ g(e, {
|
|
117
|
+
...v,
|
|
118
|
+
children: /* @__PURE__ */ g(n, {})
|
|
112
119
|
})
|
|
113
120
|
});
|
|
114
121
|
};
|
|
115
122
|
//#endregion
|
|
116
|
-
export {
|
|
123
|
+
export { v as GGNomadRoot };
|
|
117
124
|
|
|
118
125
|
//# sourceMappingURL=GGNomadRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GGNomadRoot.js","names":[],"sources":["../../src/ggnomad/GGNomadRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport {\n Activity,\n BarChart3,\n Building,\n CalendarCheck,\n Compass,\n LayoutDashboard,\n MapPinned,\n Search,\n Star,\n Tickets,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\nimport { GGNomadRoutes } from './GGNomadRoutes';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { GGNomadProvider } from './providers/GGNomadProvider';\nimport type { GGNomadRootProps, NavItem } from './types';\nimport { joinPath } from './utils/navigation';\n\nexport const GGNomadRoot: FC<GGNomadRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t } = useI18n();\n\n useEffect(() => {\n if (!registerNavItems) {\n return;\n }\n\n const navItem: NavItem = {\n id: 'ggnomad',\n label: t('ggnomad.nav.root', 'GGNomad'),\n path: basePath,\n icon: <LayoutDashboard size={18} />,\n order: 80,\n group: 'products',\n children: [\n {\n id: 'ggnomad-dashboard',\n label: t('ggnomad.nav.dashboard', 'Dashboard'),\n path: basePath,\n icon: <LayoutDashboard size={16} />,\n order: 0,\n },\n {\n id: 'ggnomad-search',\n label: t('ggnomad.nav.search', 'Search'),\n path: joinPath(basePath, 'search'),\n icon: <Search size={16} />,\n order: 5,\n },\n {\n id: 'ggnomad-travel',\n label: t('ggnomad.nav.travel', 'Travel'),\n path: joinPath(basePath, 'travel'),\n icon: <Compass size={16} />,\n order: 10,\n },\n {\n id: 'ggnomad-hospitality',\n label: t('ggnomad.nav.hospitality', 'Hospitality'),\n path: joinPath(basePath, 'hospitality'),\n icon: <Building size={16} />,\n order: 20,\n },\n {\n id: 'ggnomad-tourism',\n label: t('ggnomad.nav.tourism', 'Tourism'),\n path: joinPath(basePath, 'tourism'),\n icon: <MapPinned size={16} />,\n order: 30,\n },\n {\n id: 'ggnomad-entertainment',\n label: t('ggnomad.nav.entertainment', 'Entertainment'),\n path: joinPath(basePath, 'entertainment'),\n icon: <Activity size={16} />,\n order: 40,\n },\n {\n id: 'ggnomad-bookings',\n label: t('ggnomad.nav.bookings', 'Bookings'),\n path: joinPath(basePath, 'bookings'),\n icon: <CalendarCheck size={16} />,\n order: 50,\n },\n {\n id: 'ggnomad-favorites',\n label: t('ggnomad.nav.favorites', 'Favorites'),\n path: joinPath(basePath, 'favorites'),\n icon: <Star size={16} />,\n order: 60,\n },\n {\n id: 'ggnomad-provider',\n label: t('ggnomad.nav.providers', 'Providers'),\n path: joinPath(basePath, 'provider'),\n icon: <Tickets size={16} />,\n order: 70,\n },\n {\n id: 'ggnomad-analytics',\n label: t('ggnomad.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart3 size={16} />,\n order: 80,\n },\n ],\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, t]);\n\n useEffect(() => {\n if (!registerFooterItems) {\n return;\n }\n return registerFooterItems([\n {\n id: 'ggnomad-ready',\n label: t('ggnomad.footer.ready', 'GGNomad Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, t]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <GGNomadProvider {...props}>\n <GGNomadRoutes />\n </GGNomadProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"GGNomadRoot.js","names":[],"sources":["../../src/ggnomad/GGNomadRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport {\n Activity,\n BarChart3,\n Building,\n CalendarCheck,\n Compass,\n LayoutDashboard,\n MapPinned,\n Map,\n Search,\n Star,\n Tickets,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\nimport { GGNomadRoutes } from './GGNomadRoutes';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { GGNomadProvider } from './providers/GGNomadProvider';\nimport type { GGNomadRootProps, NavItem } from './types';\nimport { joinPath } from './utils/navigation';\n\nexport const GGNomadRoot: FC<GGNomadRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t } = useI18n();\n\n useEffect(() => {\n if (!registerNavItems) {\n return;\n }\n\n const navItem: NavItem = {\n id: 'ggnomad',\n label: t('ggnomad.nav.root', 'GGNomad'),\n path: basePath,\n icon: <LayoutDashboard size={18} />,\n order: 80,\n group: 'products',\n children: [\n {\n id: 'ggnomad-dashboard',\n label: t('ggnomad.nav.dashboard', 'Dashboard'),\n path: basePath,\n icon: <LayoutDashboard size={16} />,\n order: 0,\n },\n {\n id: 'ggnomad-search',\n label: t('ggnomad.nav.search', 'Search'),\n path: joinPath(basePath, 'search'),\n icon: <Search size={16} />,\n order: 5,\n },\n {\n id: 'ggnomad-travel',\n label: t('ggnomad.nav.travel', 'Travel'),\n path: joinPath(basePath, 'travel'),\n icon: <Compass size={16} />,\n order: 10,\n },\n {\n id: 'ggnomad-hospitality',\n label: t('ggnomad.nav.hospitality', 'Hospitality'),\n path: joinPath(basePath, 'hospitality'),\n icon: <Building size={16} />,\n order: 20,\n },\n {\n id: 'ggnomad-tourism',\n label: t('ggnomad.nav.tourism', 'Tourism'),\n path: joinPath(basePath, 'tourism'),\n icon: <MapPinned size={16} />,\n order: 30,\n },\n {\n id: 'ggnomad-entertainment',\n label: t('ggnomad.nav.entertainment', 'Entertainment'),\n path: joinPath(basePath, 'entertainment'),\n icon: <Activity size={16} />,\n order: 40,\n },\n {\n id: 'ggnomad-trips',\n label: t('ggnomad.nav.trips', 'Trips'),\n path: joinPath(basePath, 'trips'),\n icon: <Map size={16} />,\n order: 45,\n },\n {\n id: 'ggnomad-bookings',\n label: t('ggnomad.nav.bookings', 'Bookings'),\n path: joinPath(basePath, 'bookings'),\n icon: <CalendarCheck size={16} />,\n order: 50,\n },\n {\n id: 'ggnomad-favorites',\n label: t('ggnomad.nav.favorites', 'Favorites'),\n path: joinPath(basePath, 'favorites'),\n icon: <Star size={16} />,\n order: 60,\n },\n {\n id: 'ggnomad-provider',\n label: t('ggnomad.nav.providers', 'Providers'),\n path: joinPath(basePath, 'provider'),\n icon: <Tickets size={16} />,\n order: 70,\n },\n {\n id: 'ggnomad-analytics',\n label: t('ggnomad.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart3 size={16} />,\n order: 80,\n },\n ],\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, t]);\n\n useEffect(() => {\n if (!registerFooterItems) {\n return;\n }\n return registerFooterItems([\n {\n id: 'ggnomad-ready',\n label: t('ggnomad.footer.ready', 'GGNomad Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, t]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <GGNomadProvider {...props}>\n <GGNomadRoutes />\n </GGNomadProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;AAuBA,IAAa,KAAqC,MAAU;CAC1D,IAAM,EAAE,qBAAkB,wBAAqB,cAAW,QAAQ,GAC5D,EAAE,SAAM,GAAS;AAiHvB,QA/GA,QAAgB;AACT,QA4FL,QAAO,EAxFkB;GACvB,IAAI;GACJ,OAAO,EAAE,oBAAoB,UAAU;GACvC,MAAM;GACN,MAAM,kBAAC,GAAD,EAAiB,MAAM,IAAM,CAAA;GACnC,OAAO;GACP,OAAO;GACP,UAAU;IACR;KACE,IAAI;KACJ,OAAO,EAAE,yBAAyB,YAAY;KAC9C,MAAM;KACN,MAAM,kBAAC,GAAD,EAAiB,MAAM,IAAM,CAAA;KACnC,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,sBAAsB,SAAS;KACxC,MAAM,EAAS,GAAU,SAAS;KAClC,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;KAC1B,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,sBAAsB,SAAS;KACxC,MAAM,EAAS,GAAU,SAAS;KAClC,MAAM,kBAAC,GAAD,EAAS,MAAM,IAAM,CAAA;KAC3B,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,2BAA2B,cAAc;KAClD,MAAM,EAAS,GAAU,cAAc;KACvC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;KAC5B,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,uBAAuB,UAAU;KAC1C,MAAM,EAAS,GAAU,UAAU;KACnC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;KAC7B,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,6BAA6B,gBAAgB;KACtD,MAAM,EAAS,GAAU,gBAAgB;KACzC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;KAC5B,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,qBAAqB,QAAQ;KACtC,MAAM,EAAS,GAAU,QAAQ;KACjC,MAAM,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;KACvB,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,wBAAwB,WAAW;KAC5C,MAAM,EAAS,GAAU,WAAW;KACpC,MAAM,kBAAC,GAAD,EAAe,MAAM,IAAM,CAAA;KACjC,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,yBAAyB,YAAY;KAC9C,MAAM,EAAS,GAAU,YAAY;KACrC,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;KACxB,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,yBAAyB,YAAY;KAC9C,MAAM,EAAS,GAAU,WAAW;KACpC,MAAM,kBAAC,GAAD,EAAS,MAAM,IAAM,CAAA;KAC3B,OAAO;KACR;IACD;KACE,IAAI;KACJ,OAAO,EAAE,yBAAyB,YAAY;KAC9C,MAAM,EAAS,GAAU,YAAY;KACrC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;KAC7B,OAAO;KACR;IACF;GACF,CAE+B;IAC/B;EAAC;EAAkB;EAAU;EAAE,CAAC,EAEnC,QAAgB;AACT,QAGL,QAAO,EAAoB,CACzB;GACE,IAAI;GACJ,OAAO,EAAE,wBAAwB,gBAAgB;GACjD,MAAM;GACN,SAAS;GACT,OAAO;GACR,CACF,CAAC;IACD,CAAC,GAAqB,EAAE,CAAC,EAG1B,kBAAC,GAAD;EAAqB,aAAa;EAAM,SAAQ;EAAS,gBAAgB;YACvE,kBAAC,GAAD;GAAiB,GAAI;aACnB,kBAAC,GAAD,EAAiB,CAAA;GACD,CAAA;EACE,CAAA"}
|
|
@@ -4,16 +4,16 @@ import { Loader2 as r } from "lucide-react";
|
|
|
4
4
|
import { Navigate as i, Route as a, Routes as o } from "react-router-dom";
|
|
5
5
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
6
6
|
//#region src/ggnomad/GGNomadRoutes.tsx
|
|
7
|
-
var l = n(() => import("./pages/SearchPage.js").then((e) => ({ default: e.SearchPage }))), u = n(() => import("./pages/TravelPage.js").then((e) => ({ default: e.TravelPage }))), d = n(() => import("./pages/HospitalityPage.js").then((e) => ({ default: e.HospitalityPage }))), f = n(() => import("./pages/PropertyDetailsPage.js").then((e) => ({ default: e.PropertyDetailsPage }))), p = n(() => import("./pages/TourismPage.js").then((e) => ({ default: e.TourismPage }))), m = n(() => import("./pages/TourDetailsPage.js").then((e) => ({ default: e.TourDetailsPage }))), h = n(() => import("./pages/ActivityDetailsPage.js").then((e) => ({ default: e.ActivityDetailsPage }))), g = n(() => import("./pages/EntertainmentPage.js").then((e) => ({ default: e.EntertainmentPage }))), _ = n(() => import("./pages/EventDetailsPage.js").then((e) => ({ default: e.EventDetailsPage }))), v = n(() => import("./pages/BookingsPage.js").then((e) => ({ default: e.BookingsPage }))), y = n(() => import("./pages/FavoritesPage.js").then((e) => ({ default: e.FavoritesPage }))), b = n(() => import("./pages/ProviderPage.js").then((e) => ({ default: e.ProviderPage }))), x = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage })));
|
|
8
|
-
function
|
|
7
|
+
var l = n(() => import("./pages/SearchPage.js").then((e) => ({ default: e.SearchPage }))), u = n(() => import("./pages/TravelPage.js").then((e) => ({ default: e.TravelPage }))), d = n(() => import("./pages/HospitalityPage.js").then((e) => ({ default: e.HospitalityPage }))), f = n(() => import("./pages/PropertyDetailsPage.js").then((e) => ({ default: e.PropertyDetailsPage }))), p = n(() => import("./pages/TourismPage.js").then((e) => ({ default: e.TourismPage }))), m = n(() => import("./pages/TourDetailsPage.js").then((e) => ({ default: e.TourDetailsPage }))), h = n(() => import("./pages/ActivityDetailsPage.js").then((e) => ({ default: e.ActivityDetailsPage }))), g = n(() => import("./pages/EntertainmentPage.js").then((e) => ({ default: e.EntertainmentPage }))), _ = n(() => import("./pages/EventDetailsPage.js").then((e) => ({ default: e.EventDetailsPage }))), v = n(() => import("./pages/BookingsPage.js").then((e) => ({ default: e.BookingsPage }))), y = n(() => import("./pages/FavoritesPage.js").then((e) => ({ default: e.FavoritesPage }))), b = n(() => import("./pages/ProviderPage.js").then((e) => ({ default: e.ProviderPage }))), x = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), S = n(() => import("./pages/TripsPage.js").then((e) => ({ default: e.TripsPage }))), C = n(() => import("./pages/TripPlanDetailPage.js").then((e) => ({ default: e.TripPlanDetailPage })));
|
|
8
|
+
function w() {
|
|
9
9
|
return /* @__PURE__ */ s("div", {
|
|
10
10
|
className: "flex min-h-[320px] items-center justify-center",
|
|
11
11
|
children: /* @__PURE__ */ s(r, { className: "h-8 w-8 animate-spin text-primary" })
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function T() {
|
|
15
15
|
return /* @__PURE__ */ s(t, {
|
|
16
|
-
fallback: /* @__PURE__ */ s(
|
|
16
|
+
fallback: /* @__PURE__ */ s(w, {}),
|
|
17
17
|
children: /* @__PURE__ */ c(o, { children: [
|
|
18
18
|
/* @__PURE__ */ s(a, {
|
|
19
19
|
index: !0,
|
|
@@ -71,6 +71,14 @@ function C() {
|
|
|
71
71
|
path: "analytics",
|
|
72
72
|
element: /* @__PURE__ */ s(x, {})
|
|
73
73
|
}),
|
|
74
|
+
/* @__PURE__ */ s(a, {
|
|
75
|
+
path: "trips",
|
|
76
|
+
element: /* @__PURE__ */ s(S, {})
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ s(a, {
|
|
79
|
+
path: "trips/:id",
|
|
80
|
+
element: /* @__PURE__ */ s(C, {})
|
|
81
|
+
}),
|
|
74
82
|
/* @__PURE__ */ s(a, {
|
|
75
83
|
path: "*",
|
|
76
84
|
element: /* @__PURE__ */ s(i, {
|
|
@@ -82,6 +90,6 @@ function C() {
|
|
|
82
90
|
});
|
|
83
91
|
}
|
|
84
92
|
//#endregion
|
|
85
|
-
export {
|
|
93
|
+
export { T as GGNomadRoutes };
|
|
86
94
|
|
|
87
95
|
//# sourceMappingURL=GGNomadRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GGNomadRoutes.js","names":[],"sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\n\nimport { DashboardPage } from './pages/DashboardPage';\n\nconst SearchPage = lazy(() =>\n import('./pages/SearchPage').then((m) => ({ default: m.SearchPage }))\n);\nconst TravelPage = lazy(() =>\n import('./pages/TravelPage').then((m) => ({ default: m.TravelPage }))\n);\nconst HospitalityPage = lazy(() =>\n import('./pages/HospitalityPage').then((m) => ({ default: m.HospitalityPage }))\n);\nconst PropertyDetailsPage = lazy(() =>\n import('./pages/PropertyDetailsPage').then((m) => ({ default: m.PropertyDetailsPage }))\n);\nconst TourismPage = lazy(() =>\n import('./pages/TourismPage').then((m) => ({ default: m.TourismPage }))\n);\nconst TourDetailsPage = lazy(() =>\n import('./pages/TourDetailsPage').then((m) => ({ default: m.TourDetailsPage }))\n);\nconst ActivityDetailsPage = lazy(() =>\n import('./pages/ActivityDetailsPage').then((m) => ({ default: m.ActivityDetailsPage }))\n);\nconst EntertainmentPage = lazy(() =>\n import('./pages/EntertainmentPage').then((m) => ({ default: m.EntertainmentPage }))\n);\nconst EventDetailsPage = lazy(() =>\n import('./pages/EventDetailsPage').then((m) => ({ default: m.EventDetailsPage }))\n);\nconst BookingsPage = lazy(() =>\n import('./pages/BookingsPage').then((m) => ({ default: m.BookingsPage }))\n);\nconst FavoritesPage = lazy(() =>\n import('./pages/FavoritesPage').then((m) => ({ default: m.FavoritesPage }))\n);\nconst ProviderPage = lazy(() =>\n import('./pages/ProviderPage').then((m) => ({ default: m.ProviderPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function GGNomadRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardPage />} />\n <Route path=\"search\" element={<SearchPage />} />\n <Route path=\"travel\" element={<TravelPage />} />\n <Route path=\"hospitality\" element={<HospitalityPage />} />\n <Route path=\"hospitality/:id\" element={<PropertyDetailsPage />} />\n <Route path=\"tourism\" element={<TourismPage />} />\n <Route path=\"tourism/tours/:id\" element={<TourDetailsPage />} />\n <Route path=\"tourism/activities/:id\" element={<ActivityDetailsPage />} />\n <Route path=\"entertainment\" element={<EntertainmentPage />} />\n <Route path=\"entertainment/:id\" element={<EventDetailsPage />} />\n <Route path=\"bookings\" element={<BookingsPage />} />\n <Route path=\"favorites\" element={<FavoritesPage />} />\n <Route path=\"provider\" element={<ProviderPage />} />\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GGNomadRoutes.js","names":[],"sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\n\nimport { DashboardPage } from './pages/DashboardPage';\n\nconst SearchPage = lazy(() =>\n import('./pages/SearchPage').then((m) => ({ default: m.SearchPage }))\n);\nconst TravelPage = lazy(() =>\n import('./pages/TravelPage').then((m) => ({ default: m.TravelPage }))\n);\nconst HospitalityPage = lazy(() =>\n import('./pages/HospitalityPage').then((m) => ({ default: m.HospitalityPage }))\n);\nconst PropertyDetailsPage = lazy(() =>\n import('./pages/PropertyDetailsPage').then((m) => ({ default: m.PropertyDetailsPage }))\n);\nconst TourismPage = lazy(() =>\n import('./pages/TourismPage').then((m) => ({ default: m.TourismPage }))\n);\nconst TourDetailsPage = lazy(() =>\n import('./pages/TourDetailsPage').then((m) => ({ default: m.TourDetailsPage }))\n);\nconst ActivityDetailsPage = lazy(() =>\n import('./pages/ActivityDetailsPage').then((m) => ({ default: m.ActivityDetailsPage }))\n);\nconst EntertainmentPage = lazy(() =>\n import('./pages/EntertainmentPage').then((m) => ({ default: m.EntertainmentPage }))\n);\nconst EventDetailsPage = lazy(() =>\n import('./pages/EventDetailsPage').then((m) => ({ default: m.EventDetailsPage }))\n);\nconst BookingsPage = lazy(() =>\n import('./pages/BookingsPage').then((m) => ({ default: m.BookingsPage }))\n);\nconst FavoritesPage = lazy(() =>\n import('./pages/FavoritesPage').then((m) => ({ default: m.FavoritesPage }))\n);\nconst ProviderPage = lazy(() =>\n import('./pages/ProviderPage').then((m) => ({ default: m.ProviderPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst TripsPage = lazy(() =>\n import('./pages/TripsPage').then((m) => ({ default: m.TripsPage }))\n);\nconst TripPlanDetailPage = lazy(() =>\n import('./pages/TripPlanDetailPage').then((m) => ({ default: m.TripPlanDetailPage }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function GGNomadRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardPage />} />\n <Route path=\"search\" element={<SearchPage />} />\n <Route path=\"travel\" element={<TravelPage />} />\n <Route path=\"hospitality\" element={<HospitalityPage />} />\n <Route path=\"hospitality/:id\" element={<PropertyDetailsPage />} />\n <Route path=\"tourism\" element={<TourismPage />} />\n <Route path=\"tourism/tours/:id\" element={<TourDetailsPage />} />\n <Route path=\"tourism/activities/:id\" element={<ActivityDetailsPage />} />\n <Route path=\"entertainment\" element={<EntertainmentPage />} />\n <Route path=\"entertainment/:id\" element={<EventDetailsPage />} />\n <Route path=\"bookings\" element={<BookingsPage />} />\n <Route path=\"favorites\" element={<FavoritesPage />} />\n <Route path=\"provider\" element={<ProviderPage />} />\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n <Route path=\"trips\" element={<TripsPage />} />\n <Route path=\"trips/:id\" element={<TripPlanDetailPage />} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { CREATE_GGNOMAD_BOOKING_MUTATION as e } from "../graphql.js";
|
|
2
|
+
import { cn as t } from "../utils/cn.js";
|
|
3
|
+
import { useGGNomad as n } from "../providers/GGNomadProvider.js";
|
|
4
|
+
import { joinPath as r } from "../utils/navigation.js";
|
|
5
|
+
import { notify as i } from "../utils/notify.js";
|
|
6
|
+
import { useState as a } from "react";
|
|
7
|
+
import { Minus as o, Plus as s } from "lucide-react";
|
|
8
|
+
import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
9
|
+
import { useNavigate as l } from "react-router-dom";
|
|
10
|
+
import { useMutation as u } from "@apollo/client/react";
|
|
11
|
+
import { Button as d, GlassCard as f, Input as p } from "@burdenoff/fe-libs/ui";
|
|
12
|
+
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
13
|
+
//#region src/ggnomad/components/BookingPanel.tsx
|
|
14
|
+
function _({ bookingType: _, itemId: v, itemName: y, unitPrice: b, currency: x, nights: S, eventDate: C }) {
|
|
15
|
+
let { t: w } = c(), T = l(), { basePath: E = "/" } = n(), [D, O] = a(""), [k, A] = a(""), [j, M] = a(""), [N, P] = a(1), [F, { loading: I }] = u(e), L = b * (_ === "PROPERTY" && S ? S : N), R = L * .1, z = L + R, B = async () => {
|
|
16
|
+
if (_ === "PROPERTY") {
|
|
17
|
+
if (!k || !j) {
|
|
18
|
+
i.warning(w("ggnomad.booking.validation.missingDates", "Missing dates"), w("ggnomad.booking.validation.propertyDatesRequired", "Please select both check-in and check-out dates."));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
} else if (_ === "EVENT") {
|
|
22
|
+
if (!C) {
|
|
23
|
+
i.warning(w("ggnomad.booking.validation.missingDate", "Missing date"), w("ggnomad.booking.validation.eventDateRequired", "Event date is required for booking."));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
} else if (!D) {
|
|
27
|
+
i.warning(w("ggnomad.booking.validation.missingDate", "Missing date"), w("ggnomad.booking.validation.dateRequired", "Please select a date for your booking."));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
let e = {
|
|
32
|
+
bookingType: _,
|
|
33
|
+
itemId: v,
|
|
34
|
+
itemName: y,
|
|
35
|
+
guestName: w("ggnomad.booking.defaultGuestName", "Demo Guest"),
|
|
36
|
+
guestEmail: "demo@burdenoff.com",
|
|
37
|
+
guests: N,
|
|
38
|
+
totalPrice: Math.round(z * 100) / 100,
|
|
39
|
+
currency: x,
|
|
40
|
+
paymentMethod: "card"
|
|
41
|
+
}, t = await F({ variables: { input: _ === "PROPERTY" ? {
|
|
42
|
+
...e,
|
|
43
|
+
checkIn: k,
|
|
44
|
+
checkOut: j
|
|
45
|
+
} : _ === "EVENT" ? {
|
|
46
|
+
...e,
|
|
47
|
+
eventDate: C
|
|
48
|
+
} : {
|
|
49
|
+
...e,
|
|
50
|
+
eventDate: D
|
|
51
|
+
} } });
|
|
52
|
+
if (t.error) {
|
|
53
|
+
i.error(w("ggnomad.booking.toast.createErrorTitle", "Could not create booking"), t.error.message);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
let n = t.data?.createGgnomadBooking;
|
|
57
|
+
i.success(w("ggnomad.booking.toast.createSuccessTitle", "Booking confirmed"), n ? w("ggnomad.booking.toast.createSuccessBody", "{{ref}} · {{item}}").replace("{{ref}}", n.referenceCode).replace("{{item}}", n.itemName) : y), T(r(E, "bookings"));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
i.error(w("ggnomad.booking.toast.createErrorTitle", "Could not create booking"), e instanceof Error ? e.message : String(e));
|
|
60
|
+
}
|
|
61
|
+
}, V = "text-sm font-medium text-text-primary", H = "w-full";
|
|
62
|
+
return /* @__PURE__ */ g(f, {
|
|
63
|
+
treatment: "glass",
|
|
64
|
+
glow: !0,
|
|
65
|
+
className: "border-border-seam p-5 sticky top-6",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ h("h2", {
|
|
68
|
+
className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
|
|
69
|
+
children: _ === "PROPERTY" ? w("ggnomad.booking.title.property", "Book this stay") : _ === "EVENT" ? w("ggnomad.booking.title.event", "Book tickets") : _ === "TOUR" ? w("ggnomad.booking.title.tour", "Book this tour") : w("ggnomad.booking.title.activity", "Book this activity")
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ g("div", {
|
|
72
|
+
className: "space-y-4 mb-6",
|
|
73
|
+
children: [_ === "PROPERTY" ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
|
|
74
|
+
htmlFor: "check-in",
|
|
75
|
+
className: V,
|
|
76
|
+
children: w("ggnomad.booking.checkIn", "Check-in")
|
|
77
|
+
}), /* @__PURE__ */ h(p, {
|
|
78
|
+
id: "check-in",
|
|
79
|
+
type: "date",
|
|
80
|
+
value: k,
|
|
81
|
+
onChange: (e) => A(e.target.value),
|
|
82
|
+
className: t(H, "mt-2"),
|
|
83
|
+
"aria-label": w("ggnomad.booking.checkIn", "Check-in")
|
|
84
|
+
})] }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
|
|
85
|
+
htmlFor: "check-out",
|
|
86
|
+
className: V,
|
|
87
|
+
children: w("ggnomad.booking.checkOut", "Check-out")
|
|
88
|
+
}), /* @__PURE__ */ h(p, {
|
|
89
|
+
id: "check-out",
|
|
90
|
+
type: "date",
|
|
91
|
+
value: j,
|
|
92
|
+
onChange: (e) => M(e.target.value),
|
|
93
|
+
className: t(H, "mt-2"),
|
|
94
|
+
"aria-label": w("ggnomad.booking.checkOut", "Check-out")
|
|
95
|
+
})] })] }) : _ === "EVENT" ? /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
|
|
96
|
+
htmlFor: "event-date",
|
|
97
|
+
className: V,
|
|
98
|
+
children: w("ggnomad.booking.date", "Date")
|
|
99
|
+
}), /* @__PURE__ */ h(p, {
|
|
100
|
+
id: "event-date",
|
|
101
|
+
type: "date",
|
|
102
|
+
value: C ? C.split("T")[0] : "",
|
|
103
|
+
disabled: !0,
|
|
104
|
+
className: t(H, "mt-2"),
|
|
105
|
+
"aria-label": w("ggnomad.booking.date", "Date")
|
|
106
|
+
})] }) : /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
|
|
107
|
+
htmlFor: "booking-date",
|
|
108
|
+
className: V,
|
|
109
|
+
children: w("ggnomad.booking.date", "Date")
|
|
110
|
+
}), /* @__PURE__ */ h(p, {
|
|
111
|
+
id: "booking-date",
|
|
112
|
+
type: "date",
|
|
113
|
+
value: D,
|
|
114
|
+
onChange: (e) => O(e.target.value),
|
|
115
|
+
className: t(H, "mt-2"),
|
|
116
|
+
"aria-label": w("ggnomad.booking.date", "Date")
|
|
117
|
+
})] }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
|
|
118
|
+
className: V,
|
|
119
|
+
children: _ === "PROPERTY" ? w("ggnomad.booking.guests", "Guests") : _ === "EVENT" ? w("ggnomad.booking.tickets", "Tickets") : w("ggnomad.booking.participants", "Participants")
|
|
120
|
+
}), /* @__PURE__ */ g("div", {
|
|
121
|
+
className: "flex items-center gap-2 mt-2",
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ h(d, {
|
|
124
|
+
variant: "outline",
|
|
125
|
+
size: "sm",
|
|
126
|
+
onClick: () => P(Math.max(1, N - 1)),
|
|
127
|
+
disabled: N <= 1 || I,
|
|
128
|
+
"aria-label": w("ggnomad.booking.decreaseQuantity", "Decrease quantity"),
|
|
129
|
+
className: "flex-shrink-0",
|
|
130
|
+
children: /* @__PURE__ */ h(o, { className: "size-4" })
|
|
131
|
+
}),
|
|
132
|
+
/* @__PURE__ */ h("input", {
|
|
133
|
+
type: "number",
|
|
134
|
+
min: 1,
|
|
135
|
+
value: N,
|
|
136
|
+
onChange: (e) => P(Math.max(1, parseInt(e.target.value) || 1)),
|
|
137
|
+
className: "flex-1 h-9 rounded-input border border-border-default bg-bg-surface px-3 py-1 text-center text-sm text-text-primary",
|
|
138
|
+
"aria-label": _ === "PROPERTY" ? w("ggnomad.booking.guests", "Guests") : _ === "EVENT" ? w("ggnomad.booking.tickets", "Tickets") : w("ggnomad.booking.participants", "Participants")
|
|
139
|
+
}),
|
|
140
|
+
/* @__PURE__ */ h(d, {
|
|
141
|
+
variant: "outline",
|
|
142
|
+
size: "sm",
|
|
143
|
+
onClick: () => P(N + 1),
|
|
144
|
+
disabled: I,
|
|
145
|
+
"aria-label": w("ggnomad.booking.increaseQuantity", "Increase quantity"),
|
|
146
|
+
className: "flex-shrink-0",
|
|
147
|
+
children: /* @__PURE__ */ h(s, { className: "size-4" })
|
|
148
|
+
})
|
|
149
|
+
]
|
|
150
|
+
})] })]
|
|
151
|
+
}),
|
|
152
|
+
/* @__PURE__ */ g("div", {
|
|
153
|
+
className: "space-y-2 mb-6 p-3 rounded-md bg-bg-sunken",
|
|
154
|
+
children: [
|
|
155
|
+
/* @__PURE__ */ g("div", {
|
|
156
|
+
className: "flex justify-between text-sm",
|
|
157
|
+
children: [/* @__PURE__ */ g("span", {
|
|
158
|
+
className: "text-text-secondary",
|
|
159
|
+
children: [
|
|
160
|
+
x,
|
|
161
|
+
" ",
|
|
162
|
+
b.toFixed(2),
|
|
163
|
+
" ×",
|
|
164
|
+
" ",
|
|
165
|
+
_ === "PROPERTY" ? `${S ?? 1} ${w("ggnomad.booking.nights", "nights")}` : `${N} ${w("ggnomad.booking.item", "item")}`
|
|
166
|
+
]
|
|
167
|
+
}), /* @__PURE__ */ g("span", {
|
|
168
|
+
className: "text-text-primary font-medium",
|
|
169
|
+
children: [
|
|
170
|
+
x,
|
|
171
|
+
" ",
|
|
172
|
+
L.toFixed(2)
|
|
173
|
+
]
|
|
174
|
+
})]
|
|
175
|
+
}),
|
|
176
|
+
/* @__PURE__ */ g("div", {
|
|
177
|
+
className: "flex justify-between text-sm",
|
|
178
|
+
children: [/* @__PURE__ */ h("span", {
|
|
179
|
+
className: "text-text-secondary",
|
|
180
|
+
children: w("ggnomad.booking.tax", "Tax (10%)")
|
|
181
|
+
}), /* @__PURE__ */ g("span", {
|
|
182
|
+
className: "text-text-primary",
|
|
183
|
+
children: [
|
|
184
|
+
x,
|
|
185
|
+
" ",
|
|
186
|
+
R.toFixed(2)
|
|
187
|
+
]
|
|
188
|
+
})]
|
|
189
|
+
}),
|
|
190
|
+
/* @__PURE__ */ g("div", {
|
|
191
|
+
className: "border-t border-border-seam pt-2 flex justify-between",
|
|
192
|
+
children: [/* @__PURE__ */ h("span", {
|
|
193
|
+
className: "font-semibold text-text-primary",
|
|
194
|
+
children: w("ggnomad.booking.total", "Total")
|
|
195
|
+
}), /* @__PURE__ */ g("span", {
|
|
196
|
+
className: "font-bold text-lg text-text-primary",
|
|
197
|
+
children: [
|
|
198
|
+
x,
|
|
199
|
+
" ",
|
|
200
|
+
z.toFixed(2)
|
|
201
|
+
]
|
|
202
|
+
})]
|
|
203
|
+
})
|
|
204
|
+
]
|
|
205
|
+
}),
|
|
206
|
+
/* @__PURE__ */ h(d, {
|
|
207
|
+
onClick: () => void B(),
|
|
208
|
+
disabled: I,
|
|
209
|
+
className: "w-full bg-gradient-to-r from-action-primary-bg to-action-success-bg text-white font-semibold",
|
|
210
|
+
size: "lg",
|
|
211
|
+
children: I ? w("ggnomad.booking.button.creating", "Creating booking…") : _ === "PROPERTY" ? w("ggnomad.booking.button.property", "Book this stay") : _ === "EVENT" ? w("ggnomad.booking.button.event", "Book tickets") : _ === "TOUR" ? w("ggnomad.booking.button.tour", "Book this tour") : w("ggnomad.booking.button.activity", "Book this activity")
|
|
212
|
+
})
|
|
213
|
+
]
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
//#endregion
|
|
217
|
+
export { _ as BookingPanel };
|
|
218
|
+
|
|
219
|
+
//# sourceMappingURL=BookingPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BookingPanel.js","names":[],"sources":["../../../src/ggnomad/components/BookingPanel.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useMutation } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate } from 'react-router-dom';\nimport { Minus, Plus } from 'lucide-react';\nimport { Button, GlassCard, Input } from '@burdenoff/fe-libs/ui';\n\nimport { CREATE_GGNOMAD_BOOKING_MUTATION } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { notify } from '../utils/notify';\nimport { cn } from '../utils/cn';\n\ntype BookingType = 'PROPERTY' | 'TOUR' | 'EVENT' | 'ACTIVITY';\n\ntype BookingPanelProps = {\n bookingType: BookingType;\n itemId: string;\n itemName: string;\n unitPrice: number;\n currency: string;\n /** For PROPERTY bookings, the number of nights to calculate price */\n nights?: number;\n /** For EVENT bookings, the event date (ISO string) */\n eventDate?: string;\n};\n\n/** Frosted glass booking panel with type-specific inputs and real createGgnomadBooking mutation. */\nexport function BookingPanel({\n bookingType,\n itemId,\n itemName,\n unitPrice,\n currency,\n nights,\n eventDate,\n}: BookingPanelProps) {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n\n // For properties: check-in and check-out dates\n // For events/tours/activities: a single date\n const [selectedDate, setSelectedDate] = useState<string>('');\n const [checkInDate, setCheckInDate] = useState<string>('');\n const [checkOutDate, setCheckOutDate] = useState<string>('');\n\n // Quantity: guests (property), participants (tour/activity), tickets (event)\n const [quantity, setQuantity] = useState(1);\n\n type BookingInput = {\n bookingType: BookingType;\n itemId: string;\n itemName: string;\n guestName: string;\n guestEmail: string;\n guests: number;\n totalPrice: number;\n currency: string;\n paymentMethod: string;\n checkIn?: string;\n checkOut?: string;\n eventDate?: string;\n };\n\n const [createBooking, { loading: creating }] = useMutation(\n CREATE_GGNOMAD_BOOKING_MUTATION as TypedDocumentNode<\n { createGgnomadBooking: { id: string; referenceCode: string; itemName: string } },\n { input: BookingInput }\n >\n );\n\n // Calculate total: for properties, multiply by nights; for others, multiply by quantity\n const multiplier = bookingType === 'PROPERTY' && nights ? nights : quantity;\n const subtotal = unitPrice * multiplier;\n const taxAmount = subtotal * 0.1; // 10% tax\n const total = subtotal + taxAmount;\n\n const handleBooking = async () => {\n // Validate required fields\n if (bookingType === 'PROPERTY') {\n if (!checkInDate || !checkOutDate) {\n notify.warning(\n t('ggnomad.booking.validation.missingDates', 'Missing dates'),\n t(\n 'ggnomad.booking.validation.propertyDatesRequired',\n 'Please select both check-in and check-out dates.'\n )\n );\n return;\n }\n } else if (bookingType === 'EVENT') {\n if (!eventDate) {\n notify.warning(\n t('ggnomad.booking.validation.missingDate', 'Missing date'),\n t('ggnomad.booking.validation.eventDateRequired', 'Event date is required for booking.')\n );\n return;\n }\n } else {\n if (!selectedDate) {\n notify.warning(\n t('ggnomad.booking.validation.missingDate', 'Missing date'),\n t('ggnomad.booking.validation.dateRequired', 'Please select a date for your booking.')\n );\n return;\n }\n }\n\n try {\n const baseInput = {\n bookingType,\n itemId,\n itemName,\n guestName: t('ggnomad.booking.defaultGuestName', 'Demo Guest'),\n guestEmail: 'demo@burdenoff.com',\n guests: quantity,\n totalPrice: Math.round(total * 100) / 100,\n currency,\n paymentMethod: 'card',\n };\n\n const input: BookingInput =\n bookingType === 'PROPERTY'\n ? { ...baseInput, checkIn: checkInDate, checkOut: checkOutDate }\n : bookingType === 'EVENT'\n ? { ...baseInput, eventDate: eventDate }\n : { ...baseInput, eventDate: selectedDate };\n\n const result = await createBooking({\n variables: { input },\n });\n\n if (result.error) {\n notify.error(\n t('ggnomad.booking.toast.createErrorTitle', 'Could not create booking'),\n result.error.message\n );\n return;\n }\n\n const created = result.data?.createGgnomadBooking;\n notify.success(\n t('ggnomad.booking.toast.createSuccessTitle', 'Booking confirmed'),\n created\n ? t('ggnomad.booking.toast.createSuccessBody', '{{ref}} · {{item}}')\n .replace('{{ref}}', created.referenceCode)\n .replace('{{item}}', created.itemName)\n : itemName\n );\n\n // Navigate to bookings list\n navigate(joinPath(basePath, 'bookings'));\n } catch (err) {\n notify.error(\n t('ggnomad.booking.toast.createErrorTitle', 'Could not create booking'),\n err instanceof Error ? err.message : String(err)\n );\n }\n };\n\n const labelClass = 'text-sm font-medium text-text-primary';\n const inputClass = 'w-full';\n\n return (\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5 sticky top-6\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {bookingType === 'PROPERTY'\n ? t('ggnomad.booking.title.property', 'Book this stay')\n : bookingType === 'EVENT'\n ? t('ggnomad.booking.title.event', 'Book tickets')\n : bookingType === 'TOUR'\n ? t('ggnomad.booking.title.tour', 'Book this tour')\n : t('ggnomad.booking.title.activity', 'Book this activity')}\n </h2>\n\n <div className=\"space-y-4 mb-6\">\n {/* Dates section */}\n {bookingType === 'PROPERTY' ? (\n <>\n <div>\n <label htmlFor=\"check-in\" className={labelClass}>\n {t('ggnomad.booking.checkIn', 'Check-in')}\n </label>\n <Input\n id=\"check-in\"\n type=\"date\"\n value={checkInDate}\n onChange={(e) => setCheckInDate(e.target.value)}\n className={cn(inputClass, 'mt-2')}\n aria-label={t('ggnomad.booking.checkIn', 'Check-in')}\n />\n </div>\n <div>\n <label htmlFor=\"check-out\" className={labelClass}>\n {t('ggnomad.booking.checkOut', 'Check-out')}\n </label>\n <Input\n id=\"check-out\"\n type=\"date\"\n value={checkOutDate}\n onChange={(e) => setCheckOutDate(e.target.value)}\n className={cn(inputClass, 'mt-2')}\n aria-label={t('ggnomad.booking.checkOut', 'Check-out')}\n />\n </div>\n </>\n ) : bookingType === 'EVENT' ? (\n <div>\n <label htmlFor=\"event-date\" className={labelClass}>\n {t('ggnomad.booking.date', 'Date')}\n </label>\n <Input\n id=\"event-date\"\n type=\"date\"\n value={eventDate ? eventDate.split('T')[0] : ''}\n disabled\n className={cn(inputClass, 'mt-2')}\n aria-label={t('ggnomad.booking.date', 'Date')}\n />\n </div>\n ) : (\n <div>\n <label htmlFor=\"booking-date\" className={labelClass}>\n {t('ggnomad.booking.date', 'Date')}\n </label>\n <Input\n id=\"booking-date\"\n type=\"date\"\n value={selectedDate}\n onChange={(e) => setSelectedDate(e.target.value)}\n className={cn(inputClass, 'mt-2')}\n aria-label={t('ggnomad.booking.date', 'Date')}\n />\n </div>\n )}\n\n {/* Quantity section */}\n <div>\n <label className={labelClass}>\n {bookingType === 'PROPERTY'\n ? t('ggnomad.booking.guests', 'Guests')\n : bookingType === 'EVENT'\n ? t('ggnomad.booking.tickets', 'Tickets')\n : t('ggnomad.booking.participants', 'Participants')}\n </label>\n <div className=\"flex items-center gap-2 mt-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setQuantity(Math.max(1, quantity - 1))}\n disabled={quantity <= 1 || creating}\n aria-label={t('ggnomad.booking.decreaseQuantity', 'Decrease quantity')}\n className=\"flex-shrink-0\"\n >\n <Minus className=\"size-4\" />\n </Button>\n <input\n type=\"number\"\n min={1}\n value={quantity}\n onChange={(e) => setQuantity(Math.max(1, parseInt(e.target.value) || 1))}\n className=\"flex-1 h-9 rounded-input border border-border-default bg-bg-surface px-3 py-1 text-center text-sm text-text-primary\"\n aria-label={\n bookingType === 'PROPERTY'\n ? t('ggnomad.booking.guests', 'Guests')\n : bookingType === 'EVENT'\n ? t('ggnomad.booking.tickets', 'Tickets')\n : t('ggnomad.booking.participants', 'Participants')\n }\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setQuantity(quantity + 1)}\n disabled={creating}\n aria-label={t('ggnomad.booking.increaseQuantity', 'Increase quantity')}\n className=\"flex-shrink-0\"\n >\n <Plus className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n\n {/* Pricing breakdown */}\n <div className=\"space-y-2 mb-6 p-3 rounded-md bg-bg-sunken\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-text-secondary\">\n {currency} {unitPrice.toFixed(2)} ×{' '}\n {bookingType === 'PROPERTY'\n ? `${nights ?? 1} ${t('ggnomad.booking.nights', 'nights')}`\n : `${quantity} ${t('ggnomad.booking.item', 'item')}`}\n </span>\n <span className=\"text-text-primary font-medium\">\n {currency} {subtotal.toFixed(2)}\n </span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-text-secondary\">{t('ggnomad.booking.tax', 'Tax (10%)')}</span>\n <span className=\"text-text-primary\">\n {currency} {taxAmount.toFixed(2)}\n </span>\n </div>\n <div className=\"border-t border-border-seam pt-2 flex justify-between\">\n <span className=\"font-semibold text-text-primary\">\n {t('ggnomad.booking.total', 'Total')}\n </span>\n <span className=\"font-bold text-lg text-text-primary\">\n {currency} {total.toFixed(2)}\n </span>\n </div>\n </div>\n\n {/* Book button */}\n <Button\n onClick={() => void handleBooking()}\n disabled={creating}\n className=\"w-full bg-gradient-to-r from-action-primary-bg to-action-success-bg text-white font-semibold\"\n size=\"lg\"\n >\n {creating\n ? t('ggnomad.booking.button.creating', 'Creating booking…')\n : bookingType === 'PROPERTY'\n ? t('ggnomad.booking.button.property', 'Book this stay')\n : bookingType === 'EVENT'\n ? t('ggnomad.booking.button.event', 'Book tickets')\n : bookingType === 'TOUR'\n ? t('ggnomad.booking.button.tour', 'Book this tour')\n : t('ggnomad.booking.button.activity', 'Book this activity')}\n </Button>\n </GlassCard>\n );\n}\n"],"mappings":"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"}
|