@fluid-app/portal-sdk 0.1.150 → 0.1.151
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/{AppDownloadScreen-sGvzVEOC.cjs → AppDownloadScreen-CjKkw4Fg.cjs} +2 -2
- package/dist/{AppDownloadScreen-sGvzVEOC.cjs.map → AppDownloadScreen-CjKkw4Fg.cjs.map} +1 -1
- package/dist/{AppDownloadScreen-D8Y7JAgO.mjs → AppDownloadScreen-DRnjxlvT.mjs} +2 -2
- package/dist/{AppDownloadScreen-D8Y7JAgO.mjs.map → AppDownloadScreen-DRnjxlvT.mjs.map} +1 -1
- package/dist/{AppDownloadScreen-B1_C7kjK.cjs → AppDownloadScreen-ooVsEvs8.cjs} +2 -2
- package/dist/{ContactsScreen-BRLqZ5Aj.cjs → ContactsScreen-BTff-1nA.cjs} +2 -2
- package/dist/{ContactsScreen--c03aFBb.mjs → ContactsScreen-Cy5bom0o.mjs} +2 -2
- package/dist/{ContactsScreen--c03aFBb.mjs.map → ContactsScreen-Cy5bom0o.mjs.map} +1 -1
- package/dist/{ContactsScreen-C-wNg4uQ.cjs → ContactsScreen-IfYXlJhs.cjs} +2 -2
- package/dist/{ContactsScreen-C-wNg4uQ.cjs.map → ContactsScreen-IfYXlJhs.cjs.map} +1 -1
- package/dist/{FluidProvider-BbMqSBkY.mjs → FluidProvider-BdfmEGWq.mjs} +2 -2
- package/dist/{FluidProvider-BbMqSBkY.mjs.map → FluidProvider-BdfmEGWq.mjs.map} +1 -1
- package/dist/{FluidProvider-C6WODD6y.cjs → FluidProvider-DNrnrUMP.cjs} +2 -2
- package/dist/{FluidProvider-C6WODD6y.cjs.map → FluidProvider-DNrnrUMP.cjs.map} +1 -1
- package/dist/{MessagingScreen-gbTy8V_o.mjs → MessagingScreen-B90e8S3J.mjs} +3 -3
- package/dist/{MessagingScreen-gbTy8V_o.mjs.map → MessagingScreen-B90e8S3J.mjs.map} +1 -1
- package/dist/{MessagingScreen-DSU_xyHK.cjs → MessagingScreen-J0CN90BV.cjs} +3 -3
- package/dist/{MessagingScreen-DSU_xyHK.cjs.map → MessagingScreen-J0CN90BV.cjs.map} +1 -1
- package/dist/{MessagingScreen-B5lqBpVo.cjs → MessagingScreen-mVyTAxP0.cjs} +2 -2
- package/dist/{OrdersScreen-CeyfnOeb.cjs → OrdersScreen-CwrDNuJd.cjs} +85 -235
- package/dist/OrdersScreen-CwrDNuJd.cjs.map +1 -0
- package/dist/{OrdersScreen-DZ0sgSHZ.mjs → OrdersScreen-DWBMyuuW.mjs} +87 -237
- package/dist/OrdersScreen-DWBMyuuW.mjs.map +1 -0
- package/dist/{OrdersScreen-CCpGsP-L.cjs → OrdersScreen-Ygf_IvG8.cjs} +3 -2
- package/dist/{ProductsScreen-DG_SMNs5.cjs → ProductsScreen-B9h7P0pF.cjs} +3 -3
- package/dist/{ProductsScreen-C8wwsfu0.cjs → ProductsScreen-BiTzo11P.cjs} +3 -3
- package/dist/{ProductsScreen-C8wwsfu0.cjs.map → ProductsScreen-BiTzo11P.cjs.map} +1 -1
- package/dist/{ProductsScreen--hkyw5c3.mjs → ProductsScreen-R8wkxAQz.mjs} +3 -3
- package/dist/{ProductsScreen--hkyw5c3.mjs.map → ProductsScreen-R8wkxAQz.mjs.map} +1 -1
- package/dist/{ProductsScreen-C5BF7B4b.mjs → ProductsScreen-icFY3n_C.mjs} +3 -3
- package/dist/{ProfileScreen-CvtEh4hl.cjs → ProfileScreen-DT_ihepQ.cjs} +2 -2
- package/dist/{ProfileScreen-B3bK-8Lp.mjs → ProfileScreen-OKbwvvjy.mjs} +2 -2
- package/dist/{ProfileScreen-B3bK-8Lp.mjs.map → ProfileScreen-OKbwvvjy.mjs.map} +1 -1
- package/dist/{ProfileScreen-k9HsbdhW.cjs → ProfileScreen-Spy0wH4C.cjs} +2 -2
- package/dist/{ProfileScreen-k9HsbdhW.cjs.map → ProfileScreen-Spy0wH4C.cjs.map} +1 -1
- package/dist/{ShareablesScreen-Caf2fI3S.cjs → ShareablesScreen-BTvAr7Ok.cjs} +3 -3
- package/dist/{ShareablesScreen-B8ZsEkgi.mjs → ShareablesScreen-CHmLiKBq.mjs} +4 -4
- package/dist/{ShareablesScreen-B8ZsEkgi.mjs.map → ShareablesScreen-CHmLiKBq.mjs.map} +1 -1
- package/dist/{ShareablesScreen-B0JMhiKA.cjs → ShareablesScreen-DzN2T7WM.cjs} +4 -4
- package/dist/{ShareablesScreen-B0JMhiKA.cjs.map → ShareablesScreen-DzN2T7WM.cjs.map} +1 -1
- package/dist/{ShareablesScreen-DutWYuKD.mjs → ShareablesScreen-bDjb5T1-.mjs} +3 -3
- package/dist/{ShopScreen-a3P0O4WA.cjs → ShopScreen-BW2Dx21M.cjs} +4 -4
- package/dist/{ShopScreen-a3P0O4WA.cjs.map → ShopScreen-BW2Dx21M.cjs.map} +1 -1
- package/dist/{ShopScreen-5PBOI4UO.cjs → ShopScreen-DnZsZ9_o.cjs} +2 -2
- package/dist/{ShopScreen-DMVWsOB-.mjs → ShopScreen-DzloqmdT.mjs} +4 -4
- package/dist/{ShopScreen-DMVWsOB-.mjs.map → ShopScreen-DzloqmdT.mjs.map} +1 -1
- package/dist/{SubscriptionsScreen-B6Wy4na9.cjs → SubscriptionsScreen-9rur531Y.cjs} +3 -3
- package/dist/{SubscriptionsScreen-B6Wy4na9.cjs.map → SubscriptionsScreen-9rur531Y.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-BITwBKgB.cjs → SubscriptionsScreen-CSiEOTPS.cjs} +2 -2
- package/dist/{SubscriptionsScreen-DzfYCz8K.mjs → SubscriptionsScreen-DpPl_eEV.mjs} +3 -3
- package/dist/{SubscriptionsScreen-DzfYCz8K.mjs.map → SubscriptionsScreen-DpPl_eEV.mjs.map} +1 -1
- package/dist/index.cjs +32 -32
- package/dist/index.mjs +32 -32
- package/dist/order-status-badge-C5K03hR8.cjs +592 -0
- package/dist/order-status-badge-C5K03hR8.cjs.map +1 -0
- package/dist/order-status-badge-CzCxrkzq.mjs +556 -0
- package/dist/order-status-badge-CzCxrkzq.mjs.map +1 -0
- package/dist/{portal_tenant-z_4uJF7r.cjs → portal_tenant-BTRzzEQu.cjs} +5 -5
- package/dist/portal_tenant-BTRzzEQu.cjs.map +1 -0
- package/dist/{portal_tenant-D9tdph5J.mjs → portal_tenant-BuhowW58.mjs} +5 -5
- package/dist/portal_tenant-BuhowW58.mjs.map +1 -0
- package/dist/{use-current-user-Cj2_q6uf.mjs → use-current-user-CdCeH7yF.mjs} +2 -2
- package/dist/{use-current-user-Cj2_q6uf.mjs.map → use-current-user-CdCeH7yF.mjs.map} +1 -1
- package/dist/{use-current-user-0N-2bZRJ.cjs → use-current-user-cyO8A9sS.cjs} +2 -2
- package/dist/{use-current-user-0N-2bZRJ.cjs.map → use-current-user-cyO8A9sS.cjs.map} +1 -1
- package/dist/{use-fluid-api-DzyyTeeh.mjs → use-fluid-api-BEaf_TzG.mjs} +2 -2
- package/dist/{use-fluid-api-DzyyTeeh.mjs.map → use-fluid-api-BEaf_TzG.mjs.map} +1 -1
- package/dist/{use-fluid-api-gTgB7jKG.cjs → use-fluid-api-BjIXhuT7.cjs} +2 -2
- package/dist/{use-fluid-api-gTgB7jKG.cjs.map → use-fluid-api-BjIXhuT7.cjs.map} +1 -1
- package/dist/{use-portal-products-client-CYenp38s.cjs → use-portal-products-client-BDE9BflI.cjs} +2 -2
- package/dist/{use-portal-products-client-CYenp38s.cjs.map → use-portal-products-client-BDE9BflI.cjs.map} +1 -1
- package/dist/{use-portal-products-client-cK-Vbzv_.mjs → use-portal-products-client-DBxWCLx0.mjs} +2 -2
- package/dist/{use-portal-products-client-cK-Vbzv_.mjs.map → use-portal-products-client-DBxWCLx0.mjs.map} +1 -1
- package/dist/{use-portal-shareables-api-CwSezl14.cjs → use-portal-shareables-api-CH38IaKt.cjs} +3 -3
- package/dist/{use-portal-shareables-api-CwSezl14.cjs.map → use-portal-shareables-api-CH38IaKt.cjs.map} +1 -1
- package/dist/{use-portal-shareables-api-CCRQARQM.mjs → use-portal-shareables-api-CaXsju8A.mjs} +3 -3
- package/dist/{use-portal-shareables-api-CCRQARQM.mjs.map → use-portal-shareables-api-CaXsju8A.mjs.map} +1 -1
- package/package.json +10 -10
- package/dist/OrdersScreen-CeyfnOeb.cjs.map +0 -1
- package/dist/OrdersScreen-DZ0sgSHZ.mjs.map +0 -1
- package/dist/order-status-badge-CAO-R9SO.cjs +0 -304
- package/dist/order-status-badge-CAO-R9SO.cjs.map +0 -1
- package/dist/order-status-badge-Dy8w7xHm.mjs +0 -262
- package/dist/order-status-badge-Dy8w7xHm.mjs.map +0 -1
- package/dist/portal_tenant-D9tdph5J.mjs.map +0 -1
- package/dist/portal_tenant-z_4uJF7r.cjs.map +0 -1
|
@@ -1,209 +1,14 @@
|
|
|
1
1
|
import { r as __exportAll } from "./es-C12InFRn.mjs";
|
|
2
|
-
import { a as orders_show, i as orders_list } from "./portal_tenant-
|
|
2
|
+
import { a as orders_show, i as orders_list } from "./portal_tenant-BuhowW58.mjs";
|
|
3
3
|
import { n as usePortalTenantClient } from "./PortalTenantClientProvider-Bg0pUj4O.mjs";
|
|
4
|
-
import { Gt as BreadcrumbList, Ht as Breadcrumb, Kt as BreadcrumbPage, Ut as BreadcrumbItem, Wt as BreadcrumbLink,
|
|
4
|
+
import { Gt as BreadcrumbList, Ht as Breadcrumb, Kt as BreadcrumbPage, Ut as BreadcrumbItem, Wt as BreadcrumbLink, qt as BreadcrumbSeparator, y as Skeleton } from "./src-CRDhXvlT.mjs";
|
|
5
5
|
import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-DjSO5A8k.mjs";
|
|
6
6
|
import { n as useAppNavigation } from "./AppNavigationContext-CAnb2Qxs.mjs";
|
|
7
|
-
import { a as usePortalTenantOrder,
|
|
8
|
-
import {
|
|
7
|
+
import { a as usePortalTenantOrder, n as OrdersList, o as OrdersCoreProvider, t as OrderStatusBadge } from "./order-status-badge-CzCxrkzq.mjs";
|
|
8
|
+
import { useEffect, useMemo } from "react";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
-
//#region ../../orders/ui/src/
|
|
11
|
-
function
|
|
12
|
-
return `${order.currency} ${Number(order.total).toFixed(2)}`;
|
|
13
|
-
}
|
|
14
|
-
function PortalOrdersList({ onOrderClick, t, pageSize = 10 }) {
|
|
15
|
-
const [cursor, setCursor] = useState(null);
|
|
16
|
-
const { data, isLoading } = usePortalTenantOrders({
|
|
17
|
-
limit: pageSize,
|
|
18
|
-
cursor: cursor || void 0
|
|
19
|
-
});
|
|
20
|
-
const handleNextPage = useCallback(() => {
|
|
21
|
-
const nextCursor = data?.meta?.pagination?.next_cursor;
|
|
22
|
-
if (nextCursor) setCursor(nextCursor);
|
|
23
|
-
}, [data?.meta?.pagination?.next_cursor]);
|
|
24
|
-
const handlePrevPage = useCallback(() => {
|
|
25
|
-
const prevCursor = data?.meta?.pagination?.prev_cursor;
|
|
26
|
-
if (prevCursor) setCursor(prevCursor);
|
|
27
|
-
else setCursor(null);
|
|
28
|
-
}, [data?.meta?.pagination?.prev_cursor]);
|
|
29
|
-
const ordersList = data?.orders || [];
|
|
30
|
-
const pagination = data?.meta?.pagination;
|
|
31
|
-
const totalItems = ordersList.length;
|
|
32
|
-
const hasNextPage = !!pagination?.next_cursor;
|
|
33
|
-
const hasPrevPage = !!pagination?.prev_cursor;
|
|
34
|
-
const firstItem = (order) => order.line_items[0];
|
|
35
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
36
|
-
className: "border-border overflow-hidden rounded-lg border shadow-sm",
|
|
37
|
-
children: [
|
|
38
|
-
/* @__PURE__ */ jsx("div", {
|
|
39
|
-
className: "block md:hidden",
|
|
40
|
-
children: isLoading ? Array(5).fill(0).map((_, index) => /* @__PURE__ */ jsx("div", {
|
|
41
|
-
className: "border-border border-b p-4",
|
|
42
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
43
|
-
className: "flex space-x-3",
|
|
44
|
-
children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-12 w-12 rounded-md" }), /* @__PURE__ */ jsxs("div", {
|
|
45
|
-
className: "flex-1 space-y-2",
|
|
46
|
-
children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-3/4" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-1/2" })]
|
|
47
|
-
})]
|
|
48
|
-
})
|
|
49
|
-
}, `skeleton-${index}`)) : ordersList.length === 0 ? /* @__PURE__ */ jsx("div", {
|
|
50
|
-
className: "text-muted-foreground px-3 py-8 text-center text-sm",
|
|
51
|
-
children: t("no_orders_found")
|
|
52
|
-
}) : ordersList.map((order) => /* @__PURE__ */ jsx("div", {
|
|
53
|
-
className: "border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0",
|
|
54
|
-
onClick: () => onOrderClick(order),
|
|
55
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
56
|
-
className: "flex items-start space-x-3",
|
|
57
|
-
children: [/* @__PURE__ */ jsx("div", { className: "bg-border h-12 w-12 flex-shrink-0 rounded-md" }), /* @__PURE__ */ jsxs("div", {
|
|
58
|
-
className: "w-0 min-w-0 flex-1",
|
|
59
|
-
children: [firstItem(order) ? /* @__PURE__ */ jsx("p", {
|
|
60
|
-
className: "text-foreground truncate text-sm font-medium",
|
|
61
|
-
children: firstItem(order)?.product_name
|
|
62
|
-
}) : /* @__PURE__ */ jsx("div", {
|
|
63
|
-
className: "bg-muted rounded-lg p-2",
|
|
64
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
65
|
-
className: "text-muted-foreground text-xs",
|
|
66
|
-
children: t("this_product_no_longer_exists")
|
|
67
|
-
})
|
|
68
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
69
|
-
className: "mt-2 grid grid-cols-2 gap-x-4 gap-y-1 text-sm",
|
|
70
|
-
children: [
|
|
71
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("span", {
|
|
72
|
-
className: "text-muted-foreground block text-xs",
|
|
73
|
-
children: t("date")
|
|
74
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
75
|
-
className: "text-muted-foreground",
|
|
76
|
-
children: new Date(order.created_at).toLocaleDateString()
|
|
77
|
-
})] }),
|
|
78
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("span", {
|
|
79
|
-
className: "text-muted-foreground block text-xs",
|
|
80
|
-
children: t("status")
|
|
81
|
-
}), /* @__PURE__ */ jsx(StatusBadge, {
|
|
82
|
-
color: order.status === "delivered" || order.status === "shipped" ? "green" : order.status === "cancelled" || order.status === "returned" ? "red" : "yellow",
|
|
83
|
-
size: "xs",
|
|
84
|
-
children: order.status
|
|
85
|
-
})] }),
|
|
86
|
-
/* @__PURE__ */ jsx("div", {
|
|
87
|
-
className: "col-span-2 mt-1",
|
|
88
|
-
children: /* @__PURE__ */ jsx("span", {
|
|
89
|
-
className: "text-foreground font-medium",
|
|
90
|
-
children: formatTotal(order)
|
|
91
|
-
})
|
|
92
|
-
})
|
|
93
|
-
]
|
|
94
|
-
})]
|
|
95
|
-
})]
|
|
96
|
-
})
|
|
97
|
-
}, order.id))
|
|
98
|
-
}),
|
|
99
|
-
/* @__PURE__ */ jsx("div", {
|
|
100
|
-
className: "hidden md:block",
|
|
101
|
-
children: /* @__PURE__ */ jsxs(Table, {
|
|
102
|
-
className: "min-w-full table-fixed",
|
|
103
|
-
children: [
|
|
104
|
-
/* @__PURE__ */ jsxs("colgroup", { children: [
|
|
105
|
-
/* @__PURE__ */ jsx("col", { className: "w-2/5 min-w-[240px]" }),
|
|
106
|
-
/* @__PURE__ */ jsx("col", { className: "w-[20%] min-w-[100px]" }),
|
|
107
|
-
/* @__PURE__ */ jsx("col", { className: "w-[20%] min-w-[100px]" }),
|
|
108
|
-
/* @__PURE__ */ jsx("col", { className: "w-[20%] min-w-[100px]" })
|
|
109
|
-
] }),
|
|
110
|
-
/* @__PURE__ */ jsx(TableHeader, {
|
|
111
|
-
className: "bg-muted",
|
|
112
|
-
children: /* @__PURE__ */ jsxs(TableRow, {
|
|
113
|
-
className: "hover:bg-muted h-10",
|
|
114
|
-
children: [
|
|
115
|
-
/* @__PURE__ */ jsx(TableColumn, {
|
|
116
|
-
label: t("product"),
|
|
117
|
-
sortable: false
|
|
118
|
-
}),
|
|
119
|
-
/* @__PURE__ */ jsx(TableColumn, {
|
|
120
|
-
label: t("date"),
|
|
121
|
-
sortable: false
|
|
122
|
-
}),
|
|
123
|
-
/* @__PURE__ */ jsx(TableColumn, {
|
|
124
|
-
label: t("status"),
|
|
125
|
-
sortable: false
|
|
126
|
-
}),
|
|
127
|
-
/* @__PURE__ */ jsx(TableColumn, {
|
|
128
|
-
label: t("total"),
|
|
129
|
-
sortable: false
|
|
130
|
-
})
|
|
131
|
-
]
|
|
132
|
-
})
|
|
133
|
-
}),
|
|
134
|
-
/* @__PURE__ */ jsx(TableBody, {
|
|
135
|
-
className: "bg-background",
|
|
136
|
-
children: isLoading ? Array(5).fill(0).map((_, index) => /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
137
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
138
|
-
className: "px-3 py-4",
|
|
139
|
-
children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-32" })
|
|
140
|
-
}),
|
|
141
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
142
|
-
className: "px-3 py-4",
|
|
143
|
-
children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
|
|
144
|
-
}),
|
|
145
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
146
|
-
className: "px-3 py-4",
|
|
147
|
-
children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-20" })
|
|
148
|
-
}),
|
|
149
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
150
|
-
className: "px-3 py-4",
|
|
151
|
-
children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
|
|
152
|
-
})
|
|
153
|
-
] }, `skeleton-${index}`)) : ordersList.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
|
|
154
|
-
colSpan: 4,
|
|
155
|
-
className: "text-muted-foreground px-3 py-8 text-center text-sm",
|
|
156
|
-
children: t("no_orders_found")
|
|
157
|
-
}) }) : ordersList.map((order) => /* @__PURE__ */ jsxs(TableRow, {
|
|
158
|
-
className: "cursor-pointer",
|
|
159
|
-
onClick: () => onOrderClick(order),
|
|
160
|
-
children: [
|
|
161
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
162
|
-
className: "text-foreground px-3 py-4 text-sm font-medium",
|
|
163
|
-
children: firstItem(order)?.product_name ?? /* @__PURE__ */ jsx("span", {
|
|
164
|
-
className: "text-muted-foreground italic",
|
|
165
|
-
children: t("this_product_no_longer_exists")
|
|
166
|
-
})
|
|
167
|
-
}),
|
|
168
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
169
|
-
className: "text-muted-foreground px-3 py-4 text-sm whitespace-nowrap",
|
|
170
|
-
children: new Date(order.created_at).toLocaleDateString()
|
|
171
|
-
}),
|
|
172
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
173
|
-
className: "px-3 py-4 text-sm",
|
|
174
|
-
children: /* @__PURE__ */ jsx(StatusBadge, {
|
|
175
|
-
color: order.status === "delivered" || order.status === "shipped" ? "green" : order.status === "cancelled" || order.status === "returned" ? "red" : "yellow",
|
|
176
|
-
size: "xs",
|
|
177
|
-
children: order.status
|
|
178
|
-
})
|
|
179
|
-
}),
|
|
180
|
-
/* @__PURE__ */ jsx(TableCell, {
|
|
181
|
-
className: "text-foreground px-3 py-4 text-sm whitespace-nowrap",
|
|
182
|
-
children: formatTotal(order)
|
|
183
|
-
})
|
|
184
|
-
]
|
|
185
|
-
}, order.id))
|
|
186
|
-
})
|
|
187
|
-
]
|
|
188
|
-
})
|
|
189
|
-
}),
|
|
190
|
-
/* @__PURE__ */ jsx(PaginationFooter, {
|
|
191
|
-
currentPage: 1,
|
|
192
|
-
totalPages: 1,
|
|
193
|
-
pageSize,
|
|
194
|
-
totalItems,
|
|
195
|
-
cursorPaginationMode: true,
|
|
196
|
-
hasNextPage,
|
|
197
|
-
hasPrevPage,
|
|
198
|
-
onCursorNext: handleNextPage,
|
|
199
|
-
onCursorPrev: handlePrevPage
|
|
200
|
-
})
|
|
201
|
-
]
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
//#endregion
|
|
205
|
-
//#region ../../orders/ui/src/screens/PortalOrdersListScreen.tsx
|
|
206
|
-
function PortalOrdersListScreen({ onOrderClick, t, pageSize }) {
|
|
10
|
+
//#region ../../orders/ui/src/screens/OrdersListScreen.tsx
|
|
11
|
+
function OrdersListScreen$1({ customerId, onOrderClick, onSubscriptionClick, t, isLoadingCustomer }) {
|
|
207
12
|
useScreenHeaderBreadcrumbs(useMemo(() => /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, {
|
|
208
13
|
className: "text-lg",
|
|
209
14
|
children: /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, {
|
|
@@ -211,25 +16,26 @@ function PortalOrdersListScreen({ onOrderClick, t, pageSize }) {
|
|
|
211
16
|
children: "Orders"
|
|
212
17
|
}) })
|
|
213
18
|
}) }), []));
|
|
19
|
+
if (isLoadingCustomer) return /* @__PURE__ */ jsx("div", {
|
|
20
|
+
className: "mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8",
|
|
21
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
22
|
+
className: "space-y-3",
|
|
23
|
+
children: [/* @__PURE__ */ jsx("div", { className: "bg-muted h-10 animate-pulse rounded" }), /* @__PURE__ */ jsx("div", { className: "bg-muted h-64 animate-pulse rounded" })]
|
|
24
|
+
})
|
|
25
|
+
});
|
|
214
26
|
return /* @__PURE__ */ jsx("div", {
|
|
215
27
|
className: "mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8",
|
|
216
|
-
children: /* @__PURE__ */ jsx(
|
|
28
|
+
children: /* @__PURE__ */ jsx(OrdersList, {
|
|
29
|
+
customerId,
|
|
217
30
|
onOrderClick,
|
|
218
|
-
|
|
219
|
-
|
|
31
|
+
onSubscriptionClick,
|
|
32
|
+
t
|
|
220
33
|
})
|
|
221
34
|
});
|
|
222
35
|
}
|
|
223
36
|
//#endregion
|
|
224
37
|
//#region ../../orders/api-client/src/portal-tenant-adapter.ts
|
|
225
|
-
|
|
226
|
-
* Creates an OrdersApi adapter backed by the portal-tenant BFF.
|
|
227
|
-
*
|
|
228
|
-
* Maps the generated portal-tenant namespace functions to the abstract
|
|
229
|
-
* OrdersApi port, closing over the FetchClient so consumers don't need
|
|
230
|
-
* to pass it per-call.
|
|
231
|
-
*/
|
|
232
|
-
function mapOrder(raw) {
|
|
38
|
+
function mapToPortalTenantOrder(raw) {
|
|
233
39
|
return {
|
|
234
40
|
id: raw.id ?? 0,
|
|
235
41
|
token: raw.token ?? "",
|
|
@@ -246,22 +52,55 @@ function mapOrder(raw) {
|
|
|
246
52
|
})),
|
|
247
53
|
customer_name: raw.customer_name ?? null,
|
|
248
54
|
customer_email: raw.customer_email ?? null,
|
|
55
|
+
subscription_order: raw.subscription_order ?? false,
|
|
56
|
+
subscription_token: raw.subscription_token ?? null,
|
|
249
57
|
total_points_credited: typeof raw.total_points_credited === "number" ? raw.total_points_credited : void 0,
|
|
250
58
|
customer_points_balance: typeof raw.customer_points_balance === "number" ? raw.customer_points_balance : void 0,
|
|
251
59
|
created_at: raw.created_at ?? "",
|
|
252
60
|
updated_at: raw.updated_at ?? ""
|
|
253
61
|
};
|
|
254
62
|
}
|
|
255
|
-
function
|
|
63
|
+
function mapToListOrder(raw) {
|
|
64
|
+
const firstLineItem = raw.line_items?.[0];
|
|
256
65
|
return {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
66
|
+
id: raw.id ?? 0,
|
|
67
|
+
external_id: null,
|
|
68
|
+
order_number: "",
|
|
69
|
+
email: raw.customer_email ?? null,
|
|
70
|
+
first_name: raw.customer_name?.split(" ")[0] ?? null,
|
|
71
|
+
last_name: raw.customer_name?.split(" ").slice(1).join(" ") || null,
|
|
72
|
+
amount: raw.total ?? "0",
|
|
73
|
+
status: raw.status ?? "pending",
|
|
74
|
+
order_status: raw.status ?? "pending",
|
|
75
|
+
fulfillment_status: "unfulfilled",
|
|
76
|
+
financial_status: "pending",
|
|
77
|
+
currency_code: raw.currency ?? "",
|
|
78
|
+
note: null,
|
|
79
|
+
token: raw.token ?? "",
|
|
80
|
+
warehouse_id: null,
|
|
81
|
+
source: "web",
|
|
82
|
+
created_at: raw.created_at ?? "",
|
|
83
|
+
updated_at: raw.updated_at ?? "",
|
|
84
|
+
total_display_amount: `${raw.currency ?? ""} ${raw.total ?? "0"}`,
|
|
85
|
+
total_cv: 0,
|
|
86
|
+
total_qv: 0,
|
|
87
|
+
currency_symbol: raw.currency ?? "",
|
|
88
|
+
items_count: raw.line_items?.length ?? 0,
|
|
89
|
+
quantity_count: raw.line_items?.reduce((sum, li) => sum + (li.quantity ?? 0), 0) ?? 0,
|
|
90
|
+
order_on_behalf_of: false,
|
|
91
|
+
sale_date: null,
|
|
92
|
+
customer: null,
|
|
93
|
+
first_item: firstLineItem ? {
|
|
94
|
+
title: firstLineItem.product_name ?? "",
|
|
95
|
+
image_url: ""
|
|
96
|
+
} : null,
|
|
97
|
+
subscription: raw.subscription_order && raw.subscription_token ? {
|
|
98
|
+
subscription_token: raw.subscription_token,
|
|
99
|
+
status: "active"
|
|
100
|
+
} : raw.subscription_order ? {
|
|
101
|
+
subscription_token: "",
|
|
102
|
+
status: "active"
|
|
103
|
+
} : null
|
|
265
104
|
};
|
|
266
105
|
}
|
|
267
106
|
function createPortalTenantOrdersAdapter(client) {
|
|
@@ -269,22 +108,33 @@ function createPortalTenantOrdersAdapter(client) {
|
|
|
269
108
|
fetchOrderById: async (id) => {
|
|
270
109
|
const response = await orders_show(client, id);
|
|
271
110
|
return {
|
|
272
|
-
order:
|
|
111
|
+
order: mapToPortalTenantOrder(response.order ?? {}),
|
|
273
112
|
meta: {
|
|
274
113
|
request_id: response.meta?.request_id ?? "",
|
|
275
114
|
timestamp: response.meta?.timestamp ?? ""
|
|
276
115
|
}
|
|
277
116
|
};
|
|
278
117
|
},
|
|
279
|
-
|
|
118
|
+
fetchCustomerOrders: async (params) => {
|
|
280
119
|
const response = await orders_list(client, {
|
|
281
120
|
"page[cursor]": params.cursor,
|
|
282
121
|
"page[limit]": params.limit,
|
|
283
|
-
status: params.status
|
|
122
|
+
status: params.status,
|
|
123
|
+
q: params.search
|
|
284
124
|
});
|
|
285
125
|
return {
|
|
286
|
-
orders: (response.orders ?? []).map(
|
|
287
|
-
meta:
|
|
126
|
+
orders: (response.orders ?? []).map(mapToListOrder),
|
|
127
|
+
meta: {
|
|
128
|
+
request_id: response.meta?.request_id ?? "",
|
|
129
|
+
timestamp: response.meta?.timestamp ?? "",
|
|
130
|
+
pagination: {
|
|
131
|
+
cursor: response.meta?.pagination?.cursor ?? null,
|
|
132
|
+
limit: response.meta?.pagination?.limit ?? 25,
|
|
133
|
+
next_cursor: response.meta?.pagination?.next_cursor ?? null,
|
|
134
|
+
prev_cursor: response.meta?.pagination?.prev_cursor ?? null,
|
|
135
|
+
total_count: response.meta?.pagination?.total_count ?? 0
|
|
136
|
+
}
|
|
137
|
+
}
|
|
288
138
|
};
|
|
289
139
|
}
|
|
290
140
|
};
|
|
@@ -294,17 +144,11 @@ function createPortalTenantOrdersAdapter(client) {
|
|
|
294
144
|
/**
|
|
295
145
|
* Creates an OrdersApi adapter for the portal-tenant BFF.
|
|
296
146
|
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
* fetchCustomerOrders) are not used by portal UI — portal-specific hooks
|
|
300
|
-
* call fetchOrders/fetchOrderById directly.
|
|
147
|
+
* Provides fetchOrderById (for PortalOrderDetail) and fetchCustomerOrders
|
|
148
|
+
* (for the shared OrdersList). Other OrdersApi methods remain unset.
|
|
301
149
|
*/
|
|
302
150
|
function createPortalOrdersAdapter(client) {
|
|
303
|
-
|
|
304
|
-
return {
|
|
305
|
-
fetchOrderById: bffAdapter.fetchOrderById,
|
|
306
|
-
fetchOrders: bffAdapter.fetchOrders
|
|
307
|
-
};
|
|
151
|
+
return createPortalTenantOrdersAdapter(client);
|
|
308
152
|
}
|
|
309
153
|
//#endregion
|
|
310
154
|
//#region src/screens/OrdersListScreen.tsx
|
|
@@ -326,6 +170,7 @@ const translations = {
|
|
|
326
170
|
next: "Next",
|
|
327
171
|
pagination: "Pagination"
|
|
328
172
|
};
|
|
173
|
+
const BFF_SCOPED_CUSTOMER_ID = 1;
|
|
329
174
|
function OrdersListScreen() {
|
|
330
175
|
const client = usePortalTenantClient();
|
|
331
176
|
const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);
|
|
@@ -333,10 +178,15 @@ function OrdersListScreen() {
|
|
|
333
178
|
const handleOrderClick = (order) => {
|
|
334
179
|
navigate(`orders/${order.token}`);
|
|
335
180
|
};
|
|
181
|
+
const handleSubscriptionClick = (subscriptionToken) => {
|
|
182
|
+
navigate(`subscriptions/${subscriptionToken}`);
|
|
183
|
+
};
|
|
336
184
|
return /* @__PURE__ */ jsx(OrdersCoreProvider, {
|
|
337
185
|
api: ordersApi,
|
|
338
|
-
children: /* @__PURE__ */ jsx(
|
|
186
|
+
children: /* @__PURE__ */ jsx(OrdersListScreen$1, {
|
|
187
|
+
customerId: BFF_SCOPED_CUSTOMER_ID,
|
|
339
188
|
onOrderClick: handleOrderClick,
|
|
189
|
+
onSubscriptionClick: handleSubscriptionClick,
|
|
340
190
|
t: (key) => translations[key] ?? key
|
|
341
191
|
})
|
|
342
192
|
});
|
|
@@ -669,4 +519,4 @@ const ordersScreenPropertySchema = {
|
|
|
669
519
|
//#endregion
|
|
670
520
|
export { OrdersScreen_exports as n, ordersScreenPropertySchema as r, OrdersScreen as t };
|
|
671
521
|
|
|
672
|
-
//# sourceMappingURL=OrdersScreen-
|
|
522
|
+
//# sourceMappingURL=OrdersScreen-DWBMyuuW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrdersScreen-DWBMyuuW.mjs","names":["OrdersListScreen","portalTenant.orders_show","portalTenant.orders_list","OrdersListScreenContent","PortalOrderDetailScreenContent"],"sources":["../../../orders/ui/src/screens/OrdersListScreen.tsx","../../../orders/api-client/src/portal-tenant-adapter.ts","../src/adapters/orders-api-adapter.ts","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/components/portal-order-detail.tsx","../../../orders/ui/src/screens/PortalOrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbPage,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { OrdersList } from \"../components/orders-list\";\n\nexport interface OrdersListScreenProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n isLoadingCustomer?: boolean;\n}\n\nexport function OrdersListScreen({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n isLoadingCustomer,\n}: OrdersListScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">Orders</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n if (isLoadingCustomer) {\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <div className=\"space-y-3\">\n <div className=\"bg-muted h-10 animate-pulse rounded\" />\n <div className=\"bg-muted h-64 animate-pulse rounded\" />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <OrdersList\n customerId={customerId}\n onOrderClick={onOrderClick}\n onSubscriptionClick={onSubscriptionClick}\n t={t}\n />\n </div>\n );\n}\n","import type { FetchClient } from \"./lib/fetch-client\";\nimport type { OrdersApi } from \"@fluid-app/orders-core\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { portalTenant } from \"@fluid-app/portal-tenant-api-client\";\n\n/**\n * Creates an OrdersApi adapter backed by the portal-tenant BFF.\n *\n * Provides two methods:\n * - fetchOrderById → PortalTenantOrderResponse (for PortalOrderDetail screen)\n * - fetchCustomerOrders → CustomerOrdersResponse with ListOrder[] (for shared OrdersList)\n *\n * The BFF uses a single Order schema for both endpoints, but consumers need\n * different shapes: the detail screen works with PortalTenantOrder (matches the\n * BFF's limited data), while the list screen needs the canonical ListOrder so\n * the shared OrdersList component works unchanged.\n */\n\ntype RawOrder = NonNullable<\n Awaited<ReturnType<typeof portalTenant.orders_show>>[\"order\"]\n>;\n\nfunction mapToPortalTenantOrder(raw: RawOrder): orders.PortalTenantOrder {\n return {\n id: raw.id ?? 0,\n token: raw.token ?? \"\",\n status: (raw.status ?? \"pending\") as orders.PortalTenantOrderStatus,\n total: raw.total ?? \"0\",\n currency: raw.currency ?? \"\",\n line_items: (raw.line_items ?? []).map((li) => ({\n id: li.id ?? 0,\n product_id: li.product_id ?? 0,\n product_name: li.product_name ?? \"\",\n quantity: li.quantity ?? 0,\n price: li.price ?? \"0\",\n total: li.total ?? \"0\",\n })),\n customer_name: raw.customer_name ?? null,\n customer_email: raw.customer_email ?? null,\n subscription_order: raw.subscription_order ?? false,\n subscription_token: raw.subscription_token ?? null,\n // These fields are returned by the BFF but not yet in the OpenAPI spec.\n total_points_credited:\n typeof (raw as Record<string, unknown>).total_points_credited === \"number\"\n ? ((raw as Record<string, unknown>).total_points_credited as number)\n : undefined,\n customer_points_balance:\n typeof (raw as Record<string, unknown>).customer_points_balance ===\n \"number\"\n ? ((raw as Record<string, unknown>).customer_points_balance as number)\n : undefined,\n created_at: raw.created_at ?? \"\",\n updated_at: raw.updated_at ?? \"\",\n } satisfies orders.PortalTenantOrder;\n}\n\nfunction mapToListOrder(raw: RawOrder): orders.ListOrder {\n const firstLineItem = raw.line_items?.[0];\n return {\n id: raw.id ?? 0,\n external_id: null,\n order_number: \"\",\n email: raw.customer_email ?? null,\n first_name: raw.customer_name?.split(\" \")[0] ?? null,\n last_name: raw.customer_name?.split(\" \").slice(1).join(\" \") || null,\n amount: raw.total ?? \"0\",\n status: raw.status ?? \"pending\",\n order_status: raw.status ?? \"pending\",\n fulfillment_status: \"unfulfilled\",\n financial_status: \"pending\",\n currency_code: raw.currency ?? \"\",\n note: null,\n token: raw.token ?? \"\",\n warehouse_id: null,\n source: \"web\",\n created_at: raw.created_at ?? \"\",\n updated_at: raw.updated_at ?? \"\",\n total_display_amount: `${raw.currency ?? \"\"} ${raw.total ?? \"0\"}`,\n total_cv: 0,\n total_qv: 0,\n currency_symbol: raw.currency ?? \"\",\n items_count: raw.line_items?.length ?? 0,\n quantity_count:\n raw.line_items?.reduce((sum, li) => sum + (li.quantity ?? 0), 0) ?? 0,\n order_on_behalf_of: false,\n sale_date: null,\n customer: null,\n first_item: firstLineItem\n ? { title: firstLineItem.product_name ?? \"\", image_url: \"\" }\n : null,\n // The BFF indicates subscription_order but doesn't expose the\n // subscription's lifecycle status. We set \"active\" because the order's\n // existence implies the subscription was active at purchase time. The\n // real status is shown on the subscription detail screen.\n subscription:\n raw.subscription_order && raw.subscription_token\n ? { subscription_token: raw.subscription_token, status: \"active\" }\n : raw.subscription_order\n ? { subscription_token: \"\", status: \"active\" }\n : null,\n };\n}\n\nexport function createPortalTenantOrdersAdapter(\n client: FetchClient,\n): Required<Pick<OrdersApi, \"fetchOrderById\" | \"fetchCustomerOrders\">> {\n return {\n fetchOrderById: async (id: string | number) => {\n const response = await portalTenant.orders_show(client, id);\n return {\n order: mapToPortalTenantOrder(response.order ?? {}),\n meta: {\n request_id: response.meta?.request_id ?? \"\",\n timestamp: response.meta?.timestamp ?? \"\",\n },\n } satisfies orders.PortalTenantOrderResponse;\n },\n\n fetchCustomerOrders: async (params: orders.FetchOrdersParams) => {\n const response = await portalTenant.orders_list(client, {\n \"page[cursor]\": params.cursor,\n \"page[limit]\": params.limit,\n status: params.status,\n q: params.search,\n });\n return {\n orders: (response.orders ?? []).map(mapToListOrder),\n meta: {\n request_id: response.meta?.request_id ?? \"\",\n timestamp: response.meta?.timestamp ?? \"\",\n pagination: {\n cursor: response.meta?.pagination?.cursor ?? null,\n limit: response.meta?.pagination?.limit ?? 25,\n next_cursor: response.meta?.pagination?.next_cursor ?? null,\n prev_cursor: response.meta?.pagination?.prev_cursor ?? null,\n total_count: response.meta?.pagination?.total_count ?? 0,\n },\n },\n } satisfies orders.CustomerOrdersResponse;\n },\n };\n}\n","import type { OrdersApi } from \"@fluid-app/orders-core\";\nimport type { FetchClient } from \"@fluid-app/portal-tenant-api-client\";\nimport { createPortalTenantOrdersAdapter } from \"@fluid-app/orders-api-client\";\n\n/**\n * Creates an OrdersApi adapter for the portal-tenant BFF.\n *\n * Provides fetchOrderById (for PortalOrderDetail) and fetchCustomerOrders\n * (for the shared OrdersList). Other OrdersApi methods remain unset.\n */\nexport function createPortalOrdersAdapter(client: FetchClient): OrdersApi {\n return createPortalTenantOrdersAdapter(client) as OrdersApi;\n}\n","import { useMemo } from \"react\";\nimport { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { OrdersListScreen as OrdersListScreenContent } from \"@fluid-app/orders-ui/screens/OrdersListScreen\";\nimport { createPortalOrdersAdapter } from \"../adapters/orders-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\nconst translations: Record<string, string> = {\n search_orders: \"Search orders...\",\n order_number: \"Order #\",\n date: \"Date\",\n status: \"Status\",\n product: \"Product\",\n no_orders_found: \"No orders found\",\n no_matching_orders: \"No matching orders\",\n no_image_available: \"No image available\",\n this_product_no_longer_exists: \"This product no longer exists\",\n subscription: \"Subscription\",\n view_subscription: \"View Subscription\",\n total: \"Total\",\n results: \"results\",\n previous: \"Previous\",\n next: \"Next\",\n pagination: \"Pagination\",\n};\n\n// The portal-tenant BFF scopes orders to the logged-in user server-side,\n// so customerId is not used by the adapter. We pass a sentinel value to\n// satisfy the enabled guard in useCustomerOrders.\nconst BFF_SCOPED_CUSTOMER_ID = 1;\n\nexport function OrdersListScreen(): React.JSX.Element {\n const client = usePortalTenantClient();\n const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);\n const { navigate } = useAppNavigation();\n\n const handleOrderClick = (order: orders.ListOrder) => {\n navigate(`orders/${order.token}`);\n };\n\n const handleSubscriptionClick = (subscriptionToken: string) => {\n navigate(`subscriptions/${subscriptionToken}`);\n };\n\n return (\n <OrdersCoreProvider api={ordersApi}>\n <OrdersListScreenContent\n customerId={BFF_SCOPED_CUSTOMER_ID}\n onOrderClick={handleOrderClick}\n onSubscriptionClick={handleSubscriptionClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\n );\n}\n","import { useEffect } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { usePortalTenantOrder } from \"@fluid-app/orders-core\";\nimport { Skeleton } from \"@fluid-app/ui-primitives\";\nimport { OrderStatusBadge } from \"./order-status-badge\";\n\nexport interface PortalOrderDetailProps {\n id: string | number;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nfunction DetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <div className=\"bg-muted flex flex-col items-center px-8 lg:col-span-4\">\n <div className=\"w-full max-w-lg py-6\">\n <Skeleton className=\"mb-4 h-6 w-48\" />\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-4\">\n <Skeleton className=\"h-24 w-24 rounded\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n <Skeleton className=\"mb-4 h-10 w-full rounded\" />\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ItemRow({ item }: { item: orders.PortalTenantOrderLineItem }) {\n return (\n <div className=\"flex items-center space-x-4 py-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted text-muted-foreground flex h-24 w-24 items-center justify-center overflow-hidden rounded\">\n No image\n </div>\n {item.quantity > 1 && (\n <span className=\"bg-foreground text-background absolute -top-2 -right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium\">\n {item.quantity}\n </span>\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col space-y-0.5\">\n <p\n className=\"text-foreground truncate text-sm font-medium\"\n title={item.product_name}\n >\n {item.product_name}\n </p>\n <p className=\"text-foreground text-sm font-medium\">{item.total}</p>\n {item.quantity > 1 && (\n <p className=\"text-muted-foreground text-xs\">\n {item.price} x {item.quantity}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nfunction ItemsSection({ order }: { order: orders.PortalTenantOrder }) {\n return (\n <section className=\"bg-muted flex w-full flex-col items-center px-8 lg:col-span-4\">\n <div className=\"flex w-full max-w-lg flex-col\">\n <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n Items ({order.line_items.length})\n </h2>\n <hr className=\"border-border\" />\n </div>\n\n <div className=\"divide-border divide-y\">\n {order.line_items.map((item) => (\n <ItemRow key={item.id} item={item} />\n ))}\n </div>\n\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"mt-4 flex items-center justify-between text-base font-medium\">\n <p className=\"text-muted-foreground text-sm font-medium\">Total</p>\n <p className=\"text-foreground text-base font-bold\">\n {order.currency} {order.total}\n </p>\n </div>\n </div>\n\n {/* TODO: i18n */}\n {/* TODO: gate on reward_points_enabled when available on PortalTenantOrder */}\n {order.total_points_credited != null &&\n order.total_points_credited > 0 && (\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"flex items-baseline justify-between\">\n <div>\n <p className=\"text-foreground text-sm font-semibold\">\n points earned on this order!\n </p>\n {order.customer_points_balance != null && (\n <p className=\"text-muted-foreground text-xs\">\n {order.customer_points_balance.toLocaleString()} points\n total\n </p>\n )}\n </div>\n <div className=\"text-right\">\n <p className=\"text-foreground text-sm font-semibold\">\n +{order.total_points_credited.toLocaleString()}\n </p>\n <p className=\"text-muted-foreground text-xs\">points</p>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction DetailsSection({ order }: { order: orders.PortalTenantOrder }) {\n return (\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n {/* Order Status */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">Status:</span>\n <OrderStatusBadge status={order.status} />\n </div>\n </div>\n </div>\n\n {/* Order Info */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n Order Info\n </h3>\n <div className=\"divide-border flex divide-x\">\n <div className=\"flex-1 pr-4\">\n <div className=\"text-muted-foreground text-sm\">Order</div>\n <div className=\"text-foreground font-medium\">#{order.id}</div>\n </div>\n <div className=\"flex-1 pl-4 text-right\">\n <div className=\"text-muted-foreground text-sm\">Date</div>\n <div className=\"text-foreground font-medium\">\n {new Date(order.created_at).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })}\n </div>\n </div>\n </div>\n {order.customer_email && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">Email</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.customer_email}\n </div>\n </div>\n )}\n {order.customer_name && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">Customer</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.customer_name}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function PortalOrderDetail({\n id,\n onNotFound,\n onError,\n}: PortalOrderDetailProps) {\n const { data, isLoading, error } = usePortalTenantOrder(id);\n const order = data?.order;\n\n useEffect(() => {\n if (!isLoading && error) {\n onError?.(error as Error);\n }\n }, [isLoading, error, onError]);\n\n useEffect(() => {\n if (!isLoading && !error && !order) {\n onNotFound?.();\n }\n }, [isLoading, error, order, onNotFound]);\n\n if (isLoading) {\n return <DetailSkeleton />;\n }\n\n if (!order) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <ItemsSection order={order} />\n <DetailsSection order={order} />\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { PortalOrderDetail } from \"../components/portal-order-detail\";\n\nexport interface PortalOrderDetailScreenProps {\n id: string | number;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function PortalOrderDetailScreen({\n id,\n onNavigateToList,\n onNotFound,\n onError,\n}: PortalOrderDetailScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onNavigateToList();\n }}\n >\n Orders\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n Order #{id}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [id, onNavigateToList],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <PortalOrderDetail id={id} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { PortalOrderDetailScreen as PortalOrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/PortalOrderDetailScreen\";\nimport { createPortalOrdersAdapter } from \"../adapters/orders-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\ninterface OrderDetailScreenProps {\n token: string;\n onToast: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onToast,\n}: OrderDetailScreenProps): React.JSX.Element {\n const client = usePortalTenantClient();\n const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider api={ordersApi}>\n <PortalOrderDetailScreenContent\n id={token}\n onNavigateToList={() => navigate(\"orders\")}\n onNotFound={() => {\n onToast(\"Order not found\", \"warning\");\n navigate(\"orders\");\n }}\n onError={(err) => {\n const message =\n err instanceof Error ? err.message : \"An error occurred\";\n onToast(`Failed to load order: ${message}`, \"error\");\n }}\n />\n </OrdersCoreProvider>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { OrdersListScreen } from \"./OrdersListScreen\";\nimport { OrderDetailScreen } from \"./OrderDetailScreen\";\n\ntype OrdersScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n onToast?: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n};\n\nfunction defaultToast(message: string, type: \"success\" | \"error\" | \"warning\") {\n if (type === \"error\" || type === \"warning\") {\n console.warn(\"[Orders]\", message);\n } else {\n console.info(\"[Orders]\", message);\n }\n}\n\nexport function OrdersScreen({\n onToast,\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: OrdersScreenProps): React.JSX.Element {\n const { currentSlug } = useAppNavigation();\n const effectiveToast = onToast ?? defaultToast;\n\n // Parse slug: \"orders\" → list, \"orders/{token}\" → detail\n const detailToken = currentSlug.split(\"/\")[1];\n const isDetailView = detailToken !== undefined;\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen />\n </div>\n );\n}\n\nexport const ordersScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"OrdersScreen\",\n displayName: \"Orders Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
2
|
require("./src-DvJ4o9Sq.cjs");
|
|
3
3
|
require("./ScreenHeaderContext-DRIKmM2G.cjs");
|
|
4
|
-
require("./
|
|
5
|
-
|
|
4
|
+
require("./SearchSort-29u6qhlf.cjs");
|
|
5
|
+
require("./order-status-badge-C5K03hR8.cjs");
|
|
6
|
+
const require_OrdersScreen = require("./OrdersScreen-CwrDNuJd.cjs");
|
|
6
7
|
exports.OrdersScreen = require_OrdersScreen.OrdersScreen;
|
|
7
8
|
exports.ordersScreenPropertySchema = require_OrdersScreen.ordersScreenPropertySchema;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
require("./FluidProvider-
|
|
2
|
+
require("./FluidProvider-DNrnrUMP.cjs");
|
|
3
3
|
require("./countries-api-context-Cllm9Vs3.cjs");
|
|
4
4
|
require("./PointsWidget-y97Di8lr.cjs");
|
|
5
5
|
require("./error-state-C_P7Brd2.cjs");
|
|
@@ -39,8 +39,8 @@ require("./dist-C-JA9EGF.cjs");
|
|
|
39
39
|
require("./es-D_ZSl548.cjs");
|
|
40
40
|
require("./SearchSort-29u6qhlf.cjs");
|
|
41
41
|
require("./dist-CAB6oMLL.cjs");
|
|
42
|
-
require("./use-portal-shareables-api-
|
|
42
|
+
require("./use-portal-shareables-api-CH38IaKt.cjs");
|
|
43
43
|
require("./dist-Mf7Sx86H.cjs");
|
|
44
|
-
const require_ProductsScreen = require("./ProductsScreen-
|
|
44
|
+
const require_ProductsScreen = require("./ProductsScreen-BiTzo11P.cjs");
|
|
45
45
|
exports.ProductsScreen = require_ProductsScreen.ProductsScreen;
|
|
46
46
|
exports.productsScreenPropertySchema = require_ProductsScreen.productsScreenPropertySchema;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
const require_use_current_user = require("./use-current-user-
|
|
2
|
+
const require_use_current_user = require("./use-current-user-cyO8A9sS.cjs");
|
|
3
3
|
const require_AppNavigationContext = require("./AppNavigationContext-Cenx07xI.cjs");
|
|
4
|
-
const require_use_portal_shareables_api = require("./use-portal-shareables-api-
|
|
4
|
+
const require_use_portal_shareables_api = require("./use-portal-shareables-api-CH38IaKt.cjs");
|
|
5
5
|
let react = require("react");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
//#region src/screens/ProductsScreen.tsx
|
|
@@ -99,4 +99,4 @@ Object.defineProperty(exports, "productsScreenPropertySchema", {
|
|
|
99
99
|
}
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
//# sourceMappingURL=ProductsScreen-
|
|
102
|
+
//# sourceMappingURL=ProductsScreen-BiTzo11P.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsScreen-
|
|
1
|
+
{"version":3,"file":"ProductsScreen-BiTzo11P.cjs","names":["useSdkClient","usePortalShareablesApi","useCurrentUser","useAppNavigation","ShareablesCoreProvider","ShareablesApiProvider","ShareablesUIProvider","ProductsApp"],"sources":["../src/screens/ProductsScreen.tsx"],"sourcesContent":["import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ProductsApp } from \"@fluid-app/shareables-ui\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { usePortalShareablesApi } from \"../shareables/use-portal-shareables-api\";\n\ntype ProductsScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n};\n\nexport function ProductsScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: ProductsScreenProps): React.JSX.Element {\n const domainClient = useSdkClient();\n const shareablesApi = usePortalShareablesApi();\n const { productsApi: portalProductsApi } = shareablesApi;\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n\n const fetchProducts = useCallback(\n async (search: string, cursor?: string, limit?: number) => {\n if (search) {\n return portalProductsApi.searchProducts(search, { cursor, limit });\n }\n return portalProductsApi.listProducts({ cursor, limit });\n },\n [portalProductsApi],\n );\n\n const fetchProduct = useCallback(\n async (id: string | number) => portalProductsApi.getProduct(id),\n [portalProductsApi],\n );\n\n // Extract product ID from slug: \"products/123\" → \"123\"\n const productId = useMemo(() => {\n const match = currentSlug.match(/^products\\/(.+)/);\n return match?.[1] ?? null;\n }, [currentSlug]);\n\n const handleSelectProduct = useCallback(\n (id: string) => {\n navigate(`products/${id}`);\n },\n [navigate],\n );\n\n const handleBack = useCallback(() => {\n navigate(\"products\");\n }, [navigate]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n basePath: \"\",\n navigate: (path: string) => {\n navigate(path);\n },\n showToast: (opts: {\n title: string;\n type: \"success\" | \"error\" | \"warning\";\n }) => {\n console.log(`[Products] ${opts.type}: ${opts.title}`);\n },\n }),\n [userData, navigate],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider\n media={shareablesApi.media}\n playlists={shareablesApi.playlists}\n fileResources={shareablesApi.fileResources}\n share={shareablesApi.share}\n productMedia={shareablesApi.productMedia}\n >\n <ShareablesUIProvider config={uiConfig}>\n <ProductsApp\n countryCode={userData?.country?.iso}\n companyLogoUrl={userData?.company?.logo_url}\n fetchProducts={fetchProducts}\n fetchProduct={fetchProduct}\n productId={productId}\n onSelectProduct={handleSelectProduct}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\n );\n}\n\nexport const productsScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"ProductsScreen\",\n displayName: \"Products Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;;AA0BA,SAAgB,eAAe,EAE7B,YACA,WACA,aACA,SACA,cAEA,GAAG,YACsC;CACzC,MAAM,eAAeA,kCAAAA,cAAc;CACnC,MAAM,gBAAgBC,kCAAAA,wBAAwB;CAC9C,MAAM,EAAE,aAAa,sBAAsB;CAC3C,MAAM,EAAE,MAAM,aAAaC,yBAAAA,gBAAgB;CAC3C,MAAM,EAAE,aAAa,aAAaC,6BAAAA,kBAAkB;CAEpD,MAAM,iBAAA,GAAA,MAAA,aACJ,OAAO,QAAgB,QAAiB,UAAmB;AACzD,MAAI,OACF,QAAO,kBAAkB,eAAe,QAAQ;GAAE;GAAQ;GAAO,CAAC;AAEpE,SAAO,kBAAkB,aAAa;GAAE;GAAQ;GAAO,CAAC;IAE1D,CAAC,kBAAkB,CACpB;CAED,MAAM,gBAAA,GAAA,MAAA,aACJ,OAAO,OAAwB,kBAAkB,WAAW,GAAG,EAC/D,CAAC,kBAAkB,CACpB;CAGD,MAAM,aAAA,GAAA,MAAA,eAA0B;AAE9B,SADc,YAAY,MAAM,kBAAkB,GACnC,MAAM;IACpB,CAAC,YAAY,CAAC;CAEjB,MAAM,uBAAA,GAAA,MAAA,cACH,OAAe;AACd,WAAS,YAAY,KAAK;IAE5B,CAAC,SAAS,CACX;CAED,MAAM,cAAA,GAAA,MAAA,mBAA+B;AACnC,WAAS,WAAW;IACnB,CAAC,SAAS,CAAC;CAEd,MAAM,cAAA,GAAA,MAAA,gBACG;EACL,QAAQ;EACR,MAAM,WAAW,EAAE,IAAI,SAAS,IAAI,GAAG;EACvC,YAAY;EACb,GACD,CAAC,cAAc,SAAS,CACzB;CAED,MAAM,YAAA,GAAA,MAAA,gBACG;EACL,MAAM,WACF;GACE,IAAI,SAAS;GACb,SAAS,SAAS,UACd,EAAE,UAAU,SAAS,QAAQ,UAAU,GACvC;GACL,GACD,KAAA;EACJ,UAAU;EACV,WAAW,SAAiB;AAC1B,YAAS,KAAK;;EAEhB,YAAY,SAGN;AACJ,WAAQ,IAAI,cAAc,KAAK,KAAK,IAAI,KAAK,QAAQ;;EAExD,GACD,CAAC,UAAU,SAAS,CACrB;AAED,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI;EAAU,WAAW,UAAU,SAAS,aAAa;YAC5D,iBAAA,GAAA,kBAAA,KAACC,kCAAAA,wBAAD;GAAwB,QAAQ;aAC9B,iBAAA,GAAA,kBAAA,KAACC,kCAAAA,uBAAD;IACE,OAAO,cAAc;IACrB,WAAW,cAAc;IACzB,eAAe,cAAc;IAC7B,OAAO,cAAc;IACrB,cAAc,cAAc;cAE5B,iBAAA,GAAA,kBAAA,KAACC,kCAAAA,sBAAD;KAAsB,QAAQ;eAC5B,iBAAA,GAAA,kBAAA,KAACC,kCAAAA,aAAD;MACE,aAAa,UAAU,SAAS;MAChC,gBAAgB,UAAU,SAAS;MACpB;MACD;MACH;MACX,iBAAiB;MACjB,QAAQ;MACR,CAAA;KACmB,CAAA;IACD,CAAA;GACD,CAAA;EACrB,CAAA;;AAIV,MAAa,+BAAqD;CAChE,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ,EAAE;CACX"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as useCurrentUser } from "./use-current-user-
|
|
1
|
+
import { n as useCurrentUser } from "./use-current-user-CdCeH7yF.mjs";
|
|
2
2
|
import { n as useAppNavigation } from "./AppNavigationContext-CAnb2Qxs.mjs";
|
|
3
|
-
import { c as ProductsApp, d as ShareablesApiProvider, f as ShareablesCoreProvider, s as useSdkClient, t as usePortalShareablesApi, u as ShareablesUIProvider } from "./use-portal-shareables-api-
|
|
3
|
+
import { c as ProductsApp, d as ShareablesApiProvider, f as ShareablesCoreProvider, s as useSdkClient, t as usePortalShareablesApi, u as ShareablesUIProvider } from "./use-portal-shareables-api-CaXsju8A.mjs";
|
|
4
4
|
import { useCallback, useMemo } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/screens/ProductsScreen.tsx
|
|
@@ -87,4 +87,4 @@ const productsScreenPropertySchema = {
|
|
|
87
87
|
//#endregion
|
|
88
88
|
export { productsScreenPropertySchema as n, ProductsScreen as t };
|
|
89
89
|
|
|
90
|
-
//# sourceMappingURL=ProductsScreen
|
|
90
|
+
//# sourceMappingURL=ProductsScreen-R8wkxAQz.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsScreen
|
|
1
|
+
{"version":3,"file":"ProductsScreen-R8wkxAQz.mjs","names":[],"sources":["../src/screens/ProductsScreen.tsx"],"sourcesContent":["import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ProductsApp } from \"@fluid-app/shareables-ui\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { usePortalShareablesApi } from \"../shareables/use-portal-shareables-api\";\n\ntype ProductsScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n};\n\nexport function ProductsScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: ProductsScreenProps): React.JSX.Element {\n const domainClient = useSdkClient();\n const shareablesApi = usePortalShareablesApi();\n const { productsApi: portalProductsApi } = shareablesApi;\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n\n const fetchProducts = useCallback(\n async (search: string, cursor?: string, limit?: number) => {\n if (search) {\n return portalProductsApi.searchProducts(search, { cursor, limit });\n }\n return portalProductsApi.listProducts({ cursor, limit });\n },\n [portalProductsApi],\n );\n\n const fetchProduct = useCallback(\n async (id: string | number) => portalProductsApi.getProduct(id),\n [portalProductsApi],\n );\n\n // Extract product ID from slug: \"products/123\" → \"123\"\n const productId = useMemo(() => {\n const match = currentSlug.match(/^products\\/(.+)/);\n return match?.[1] ?? null;\n }, [currentSlug]);\n\n const handleSelectProduct = useCallback(\n (id: string) => {\n navigate(`products/${id}`);\n },\n [navigate],\n );\n\n const handleBack = useCallback(() => {\n navigate(\"products\");\n }, [navigate]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n basePath: \"\",\n navigate: (path: string) => {\n navigate(path);\n },\n showToast: (opts: {\n title: string;\n type: \"success\" | \"error\" | \"warning\";\n }) => {\n console.log(`[Products] ${opts.type}: ${opts.title}`);\n },\n }),\n [userData, navigate],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider\n media={shareablesApi.media}\n playlists={shareablesApi.playlists}\n fileResources={shareablesApi.fileResources}\n share={shareablesApi.share}\n productMedia={shareablesApi.productMedia}\n >\n <ShareablesUIProvider config={uiConfig}>\n <ProductsApp\n countryCode={userData?.country?.iso}\n companyLogoUrl={userData?.company?.logo_url}\n fetchProducts={fetchProducts}\n fetchProduct={fetchProduct}\n productId={productId}\n onSelectProduct={handleSelectProduct}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\n );\n}\n\nexport const productsScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"ProductsScreen\",\n displayName: \"Products Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;AA0BA,SAAgB,eAAe,EAE7B,YACA,WACA,aACA,SACA,cAEA,GAAG,YACsC;CACzC,MAAM,eAAe,cAAc;CACnC,MAAM,gBAAgB,wBAAwB;CAC9C,MAAM,EAAE,aAAa,sBAAsB;CAC3C,MAAM,EAAE,MAAM,aAAa,gBAAgB;CAC3C,MAAM,EAAE,aAAa,aAAa,kBAAkB;CAEpD,MAAM,gBAAgB,YACpB,OAAO,QAAgB,QAAiB,UAAmB;AACzD,MAAI,OACF,QAAO,kBAAkB,eAAe,QAAQ;GAAE;GAAQ;GAAO,CAAC;AAEpE,SAAO,kBAAkB,aAAa;GAAE;GAAQ;GAAO,CAAC;IAE1D,CAAC,kBAAkB,CACpB;CAED,MAAM,eAAe,YACnB,OAAO,OAAwB,kBAAkB,WAAW,GAAG,EAC/D,CAAC,kBAAkB,CACpB;CAGD,MAAM,YAAY,cAAc;AAE9B,SADc,YAAY,MAAM,kBAAkB,GACnC,MAAM;IACpB,CAAC,YAAY,CAAC;CAEjB,MAAM,sBAAsB,aACzB,OAAe;AACd,WAAS,YAAY,KAAK;IAE5B,CAAC,SAAS,CACX;CAED,MAAM,aAAa,kBAAkB;AACnC,WAAS,WAAW;IACnB,CAAC,SAAS,CAAC;CAEd,MAAM,aAAa,eACV;EACL,QAAQ;EACR,MAAM,WAAW,EAAE,IAAI,SAAS,IAAI,GAAG;EACvC,YAAY;EACb,GACD,CAAC,cAAc,SAAS,CACzB;CAED,MAAM,WAAW,eACR;EACL,MAAM,WACF;GACE,IAAI,SAAS;GACb,SAAS,SAAS,UACd,EAAE,UAAU,SAAS,QAAQ,UAAU,GACvC;GACL,GACD,KAAA;EACJ,UAAU;EACV,WAAW,SAAiB;AAC1B,YAAS,KAAK;;EAEhB,YAAY,SAGN;AACJ,WAAQ,IAAI,cAAc,KAAK,KAAK,IAAI,KAAK,QAAQ;;EAExD,GACD,CAAC,UAAU,SAAS,CACrB;AAED,QACE,oBAAC,OAAD;EAAK,GAAI;EAAU,WAAW,UAAU,SAAS,aAAa;YAC5D,oBAAC,wBAAD;GAAwB,QAAQ;aAC9B,oBAAC,uBAAD;IACE,OAAO,cAAc;IACrB,WAAW,cAAc;IACzB,eAAe,cAAc;IAC7B,OAAO,cAAc;IACrB,cAAc,cAAc;cAE5B,oBAAC,sBAAD;KAAsB,QAAQ;eAC5B,oBAAC,aAAD;MACE,aAAa,UAAU,SAAS;MAChC,gBAAgB,UAAU,SAAS;MACpB;MACD;MACH;MACX,iBAAiB;MACjB,QAAQ;MACR,CAAA;KACmB,CAAA;IACD,CAAA;GACD,CAAA;EACrB,CAAA;;AAIV,MAAa,+BAAqD;CAChE,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ,EAAE;CACX"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./es-C12InFRn.mjs";
|
|
2
|
-
import "./FluidProvider-
|
|
2
|
+
import "./FluidProvider-BdfmEGWq.mjs";
|
|
3
3
|
import "./countries-api-context-CyU5GW3w.mjs";
|
|
4
4
|
import "./PointsWidget-CuTMhDpn.mjs";
|
|
5
5
|
import "./error-state-CLl40bNr.mjs";
|
|
@@ -38,7 +38,7 @@ import "./ScreenHeaderContext-DjSO5A8k.mjs";
|
|
|
38
38
|
import "./dist-BjehZaTg.mjs";
|
|
39
39
|
import "./SearchSort-M8cu-Jnj.mjs";
|
|
40
40
|
import "./dist-Bo6ZG9XC.mjs";
|
|
41
|
-
import "./use-portal-shareables-api-
|
|
41
|
+
import "./use-portal-shareables-api-CaXsju8A.mjs";
|
|
42
42
|
import "./sortable.esm-CzzU6kIR.mjs";
|
|
43
|
-
import { n as productsScreenPropertySchema, t as ProductsScreen } from "./ProductsScreen
|
|
43
|
+
import { n as productsScreenPropertySchema, t as ProductsScreen } from "./ProductsScreen-R8wkxAQz.mjs";
|
|
44
44
|
export { ProductsScreen, productsScreenPropertySchema };
|