@fluid-app/portal-sdk 0.1.79 → 0.1.80
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-D2BvFHaa.mjs → AppDownloadScreen-B0BNM-6c.mjs} +2 -2
- package/dist/{AppDownloadScreen-D2BvFHaa.mjs.map → AppDownloadScreen-B0BNM-6c.mjs.map} +1 -1
- package/dist/{AppDownloadScreen-6y1seGY3.cjs → AppDownloadScreen-CgfEU2wC.cjs} +3 -3
- package/dist/{AppDownloadScreen-CDdpVdL_.cjs → AppDownloadScreen-DRwTJHQ8.cjs} +2 -2
- package/dist/{AppDownloadScreen-CDdpVdL_.cjs.map → AppDownloadScreen-DRwTJHQ8.cjs.map} +1 -1
- package/dist/{ContactsScreen-D5UaRgr5.mjs → ContactsScreen-BeN-m9ht.mjs} +2 -2
- package/dist/{ContactsScreen-D5UaRgr5.mjs.map → ContactsScreen-BeN-m9ht.mjs.map} +1 -1
- package/dist/{ContactsScreen-BRO0Ck6Q.cjs → ContactsScreen-DY-cfJc-.cjs} +2 -2
- package/dist/{ContactsScreen-BRO0Ck6Q.cjs.map → ContactsScreen-DY-cfJc-.cjs.map} +1 -1
- package/dist/{ContactsScreen-B8eVq5y2.cjs → ContactsScreen-Dt74iM-l.cjs} +3 -3
- package/dist/{FluidProvider-7o0dnbFe.cjs → FluidProvider-B7whI5Fk.cjs} +3 -3
- package/dist/{FluidProvider-7o0dnbFe.cjs.map → FluidProvider-B7whI5Fk.cjs.map} +1 -1
- package/dist/{FluidProvider-CiO9GrRT.mjs → FluidProvider-C4OAgBdt.mjs} +3 -3
- package/dist/{FluidProvider-CiO9GrRT.mjs.map → FluidProvider-C4OAgBdt.mjs.map} +1 -1
- package/dist/{MessagingScreen-BWXeBpfB.mjs → MessagingScreen-BgDTY3Ej.mjs} +3 -3
- package/dist/{MessagingScreen-BWXeBpfB.mjs.map → MessagingScreen-BgDTY3Ej.mjs.map} +1 -1
- package/dist/{MessagingScreen-Jwu6kKrB.cjs → MessagingScreen-CUbqMqWe.cjs} +3 -3
- package/dist/{MessagingScreen-Jwu6kKrB.cjs.map → MessagingScreen-CUbqMqWe.cjs.map} +1 -1
- package/dist/{MessagingScreen-D8pvtQxf.mjs → MessagingScreen-UiC3gK4x.mjs} +3 -3
- package/dist/{MessagingScreen-UrRkoFxL.cjs → MessagingScreen-rTJ0M2md.cjs} +3 -3
- package/dist/{MySiteScreen-CcCkaQa_.mjs → MySiteScreen-CGXVSu2s.mjs} +2 -2
- package/dist/{MySiteScreen-CcCkaQa_.mjs.map → MySiteScreen-CGXVSu2s.mjs.map} +1 -1
- package/dist/{MySiteScreen-C8117-zp.cjs → MySiteScreen-I6ebtBnN.cjs} +3 -3
- package/dist/{MySiteScreen-OvCPcgSF.cjs → MySiteScreen-jAT4_j14.cjs} +2 -2
- package/dist/{MySiteScreen-OvCPcgSF.cjs.map → MySiteScreen-jAT4_j14.cjs.map} +1 -1
- package/dist/{MySiteWidget-DI9-dyjX.mjs → MySiteWidget-DLBW4V7P.mjs} +25 -4
- package/dist/MySiteWidget-DLBW4V7P.mjs.map +1 -0
- package/dist/{MySiteWidget-BfBdrYgj.cjs → MySiteWidget-DUS5TAjk.cjs} +25 -4
- package/dist/MySiteWidget-DUS5TAjk.cjs.map +1 -0
- package/dist/{OrdersScreen-D0zERNH6.cjs → OrdersScreen-B5ANhAJJ.cjs} +3 -3
- package/dist/{OrdersScreen-DHJaHME4.cjs → OrdersScreen-D2wDUClf.cjs} +3 -3
- package/dist/{OrdersScreen-DHJaHME4.cjs.map → OrdersScreen-D2wDUClf.cjs.map} +1 -1
- package/dist/{OrdersScreen-CNPW9uXl.mjs → OrdersScreen-gYB5v9-2.mjs} +3 -3
- package/dist/{OrdersScreen-CNPW9uXl.mjs.map → OrdersScreen-gYB5v9-2.mjs.map} +1 -1
- package/dist/{ProductsScreen-CvIvqSV_.mjs → ProductsScreen-D0-AZMm-.mjs} +3 -3
- package/dist/{ProductsScreen-MLonUBzA.cjs → ProductsScreen-DerVrACc.cjs} +3 -3
- package/dist/{ProductsScreen-2N-HcLeP.mjs → ProductsScreen-yuVjp5Ia.mjs} +3 -3
- package/dist/{ProductsScreen-2N-HcLeP.mjs.map → ProductsScreen-yuVjp5Ia.mjs.map} +1 -1
- package/dist/{ProductsScreen-Cy70ceAN.cjs → ProductsScreen-zPoSxUNt.cjs} +3 -3
- package/dist/{ProductsScreen-Cy70ceAN.cjs.map → ProductsScreen-zPoSxUNt.cjs.map} +1 -1
- package/dist/{ProfileScreen-CLFs_gxl.mjs → ProfileScreen-B6YgnBLf.mjs} +3 -3
- package/dist/{ProfileScreen-CLFs_gxl.mjs.map → ProfileScreen-B6YgnBLf.mjs.map} +1 -1
- package/dist/{ProfileScreen-wOmUspta.cjs → ProfileScreen-BUtP6J5R.cjs} +3 -3
- package/dist/{ProfileScreen-wOmUspta.cjs.map → ProfileScreen-BUtP6J5R.cjs.map} +1 -1
- package/dist/{ProfileScreen-CZ44ROKG.cjs → ProfileScreen-H6Bf48IB.cjs} +3 -3
- package/dist/{ShareablesScreen-CKw0mto6.mjs → ShareablesScreen-D-1sBYBA.mjs} +3 -3
- package/dist/{ShareablesScreen-augy6BSd.cjs → ShareablesScreen-DQJX1_hv.cjs} +3 -3
- package/dist/{ShareablesScreen-augy6BSd.cjs.map → ShareablesScreen-DQJX1_hv.cjs.map} +1 -1
- package/dist/{ShareablesScreen-C4mm1R2g.mjs → ShareablesScreen-_W9PMbTW.mjs} +3 -3
- package/dist/{ShareablesScreen-C4mm1R2g.mjs.map → ShareablesScreen-_W9PMbTW.mjs.map} +1 -1
- package/dist/{ShareablesScreen-C1G_Kq5_.cjs → ShareablesScreen-vgMekz5j.cjs} +3 -3
- package/dist/{ShopScreen-Dutx59m8.cjs → ShopScreen-D7c5SS1G.cjs} +3 -3
- package/dist/{ShopScreen-JJnPosZq.mjs → ShopScreen-DRYCLI2E.mjs} +4 -4
- package/dist/{ShopScreen-JJnPosZq.mjs.map → ShopScreen-DRYCLI2E.mjs.map} +1 -1
- package/dist/{ShopScreen-BjzN4JAK.cjs → ShopScreen-DRgM8del.cjs} +4 -4
- package/dist/{ShopScreen-BjzN4JAK.cjs.map → ShopScreen-DRgM8del.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-BlFL-eMN.mjs → SubscriptionsScreen-B3c1ueS_.mjs} +3 -3
- package/dist/{SubscriptionsScreen-BlFL-eMN.mjs.map → SubscriptionsScreen-B3c1ueS_.mjs.map} +1 -1
- package/dist/{SubscriptionsScreen-BbLH9p8X.cjs → SubscriptionsScreen-CUE6aS8F.cjs} +3 -3
- package/dist/{SubscriptionsScreen-BbLH9p8X.cjs.map → SubscriptionsScreen-CUE6aS8F.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-BtuCHsSR.cjs → SubscriptionsScreen-CwBXa8Ft.cjs} +3 -3
- package/dist/index.cjs +35 -35
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +35 -35
- package/dist/{use-account-clients-C-0D2liR.mjs → use-account-clients-Bqwc4jT0.mjs} +2 -2
- package/dist/{use-account-clients-C-0D2liR.mjs.map → use-account-clients-Bqwc4jT0.mjs.map} +1 -1
- package/dist/{use-account-clients-BsxrtNFa.cjs → use-account-clients-N3gfibU3.cjs} +2 -2
- package/dist/{use-account-clients-BsxrtNFa.cjs.map → use-account-clients-N3gfibU3.cjs.map} +1 -1
- package/dist/{use-current-user-DWurIboQ.mjs → use-current-user-BUXtOeFz.mjs} +3 -3
- package/dist/{use-current-user-DWurIboQ.mjs.map → use-current-user-BUXtOeFz.mjs.map} +1 -1
- package/dist/{use-current-user-BHDPYzyF.cjs → use-current-user-C2A379kM.cjs} +3 -3
- package/dist/{use-current-user-BHDPYzyF.cjs.map → use-current-user-C2A379kM.cjs.map} +1 -1
- package/dist/{use-customer-account-mnEYhCCO.cjs → use-customer-account-DJxnOr1n.cjs} +3 -3
- package/dist/{use-customer-account-mnEYhCCO.cjs.map → use-customer-account-DJxnOr1n.cjs.map} +1 -1
- package/dist/{use-customer-account-4ciS4r5U.mjs → use-customer-account-DVQzpWxo.mjs} +3 -3
- package/dist/{use-customer-account-4ciS4r5U.mjs.map → use-customer-account-DVQzpWxo.mjs.map} +1 -1
- package/dist/{use-fluid-api-DSUwYl8B.mjs → use-fluid-api-BwYwsyDl.mjs} +2 -2
- package/dist/{use-fluid-api-DSUwYl8B.mjs.map → use-fluid-api-BwYwsyDl.mjs.map} +1 -1
- package/dist/{use-fluid-api-CEJVK01Q.cjs → use-fluid-api-C3T17MND.cjs} +2 -2
- package/dist/{use-fluid-api-CEJVK01Q.cjs.map → use-fluid-api-C3T17MND.cjs.map} +1 -1
- package/package.json +17 -17
- package/dist/MySiteWidget-BfBdrYgj.cjs.map +0 -1
- package/dist/MySiteWidget-DI9-dyjX.mjs.map +0 -1
|
@@ -4,6 +4,7 @@ import { i as getBorderColorField, l as getColorField, m as getPaddingField, n a
|
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { useQuery } from "@tanstack/react-query";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Globe } from "lucide-react";
|
|
7
8
|
//#region ../widgets/src/hooks/use-mysite.preview.ts
|
|
8
9
|
const PREVIEW_DATA = {
|
|
9
10
|
url: "https://mysite.example.com",
|
|
@@ -57,6 +58,7 @@ function MySiteWidget({ titleEnabled = true, titleText = "My Site", titleFontSiz
|
|
|
57
58
|
const backgroundColor = background.color || "background";
|
|
58
59
|
const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
|
|
59
60
|
const { data: mySite, isLoading, isError } = useMySite();
|
|
61
|
+
const { isPreview } = useWidgetPreviewContext();
|
|
60
62
|
const previewUrl = useMemo(() => {
|
|
61
63
|
if (!mySite?.url) return "";
|
|
62
64
|
try {
|
|
@@ -108,10 +110,10 @@ function MySiteWidget({ titleEnabled = true, titleText = "My Site", titleFontSiz
|
|
|
108
110
|
})
|
|
109
111
|
})]
|
|
110
112
|
})
|
|
111
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
112
|
-
className: "h-[200px] overflow-hidden bg-[#ffffff] @md:h-[280px]",
|
|
113
|
+
}), isPreview ? /* @__PURE__ */ jsx(MySiteStaticPreview, { displayUrl }) : /* @__PURE__ */ jsx("div", {
|
|
114
|
+
className: "relative h-[200px] overflow-hidden bg-[#ffffff] @md:h-[280px]",
|
|
113
115
|
children: /* @__PURE__ */ jsx("iframe", {
|
|
114
|
-
className: "pointer-events-none h-[
|
|
116
|
+
className: "pointer-events-none absolute inset-0 h-[250%] w-[250%] origin-top-left scale-[0.4] bg-[#ffffff]",
|
|
115
117
|
src: previewUrl,
|
|
116
118
|
title: "MySite Preview"
|
|
117
119
|
})
|
|
@@ -141,6 +143,25 @@ function MySiteWidget({ titleEnabled = true, titleText = "My Site", titleFontSiz
|
|
|
141
143
|
})]
|
|
142
144
|
});
|
|
143
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Static placeholder preview for the MySite widget shown in the builder palette,
|
|
148
|
+
* drag previews, and other preview contexts where an iframe cannot load.
|
|
149
|
+
*/
|
|
150
|
+
function MySiteStaticPreview({ displayUrl }) {
|
|
151
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
152
|
+
className: "bg-muted/30 flex h-[200px] flex-col items-center justify-center gap-3 p-4 text-center",
|
|
153
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
154
|
+
className: "bg-muted flex h-10 w-10 items-center justify-center rounded-full",
|
|
155
|
+
children: /* @__PURE__ */ jsx(Globe, { className: "text-muted-foreground h-5 w-5" })
|
|
156
|
+
}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
157
|
+
className: "text-foreground text-sm font-medium",
|
|
158
|
+
children: "My Site"
|
|
159
|
+
}), displayUrl && /* @__PURE__ */ jsx("p", {
|
|
160
|
+
className: "text-muted-foreground mt-0.5 text-xs",
|
|
161
|
+
children: displayUrl
|
|
162
|
+
})] })]
|
|
163
|
+
});
|
|
164
|
+
}
|
|
144
165
|
const mySiteWidgetPropertySchema = {
|
|
145
166
|
widgetType: "MySiteWidget",
|
|
146
167
|
displayName: "MySite Widget",
|
|
@@ -273,4 +294,4 @@ const mySiteWidgetPropertySchema = {
|
|
|
273
294
|
//#endregion
|
|
274
295
|
export { MySiteWidget_exports as n, mySiteWidgetPropertySchema as r, MySiteWidget as t };
|
|
275
296
|
|
|
276
|
-
//# sourceMappingURL=MySiteWidget-
|
|
297
|
+
//# sourceMappingURL=MySiteWidget-DLBW4V7P.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MySiteWidget-DLBW4V7P.mjs","names":[],"sources":["../../widgets/src/hooks/use-mysite.preview.ts","../../widgets/src/hooks/use-mysite.ts","../../widgets/src/widgets/MySiteWidget.tsx"],"sourcesContent":["import type { MySiteData } from \"./use-mysite.types\";\n\nexport const PREVIEW_DATA: MySiteData = {\n url: \"https://mysite.example.com\",\n views: 1248,\n leads: 43,\n userName: \"Jane\",\n};\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/portal-react/data-sources/context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { PREVIEW_DATA } from \"./use-mysite.preview\";\n\nimport type { MySiteData } from \"./use-mysite.types\";\n\nexport type { MySiteData } from \"./use-mysite.types\";\n\nexport function useMySite(): UseQueryResult<MySiteData, Error> {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n const { isPreview } = useWidgetPreviewContext();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"mysite\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: async ({ signal }): Promise<MySiteData> => {\n const url = baseUrl ? `${baseUrl}/me` : \"/me\";\n const response = await fetch(url, {\n headers: {\n \"content-type\": \"application/json\",\n ...getApiHeaders?.(),\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch MySite data: ${response.status}`);\n }\n\n const data = await response.json();\n return {\n url: data.mysite_url ?? null,\n views: data.mysite_views ?? 0,\n leads: data.mysite_leads ?? 0,\n userName: data.name || data.first_name || \"User\",\n };\n },\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import { useMemo, type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { Globe } from \"lucide-react\";\nimport { useMySite } from \"../hooks/use-mysite\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { ErrorState } from \"../components/error-state\";\n\ntype MySiteWidgetProps = ComponentProps<\"div\"> & {\n // Title settings\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Design settings\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n\n // Display settings\n showPreview?: boolean;\n showAnalytics?: boolean;\n};\n\nexport function MySiteWidget({\n // Title defaults\n titleEnabled = true,\n titleText = \"My Site\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n\n // Design defaults\n background = {\n type: \"solid\",\n color: \"background\",\n },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n\n // Display defaults\n showPreview = true,\n showAnalytics = true,\n\n className,\n ...props\n}: MySiteWidgetProps): React.JSX.Element | null {\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n const { data: mySite, isLoading, isError } = useMySite();\n const { isPreview } = useWidgetPreviewContext();\n\n // Generate preview URL with preview=true parameter\n const previewUrl = useMemo(() => {\n if (!mySite?.url) return \"\";\n try {\n const urlObj = new URL(mySite.url);\n urlObj.searchParams.set(\"preview\", \"true\");\n return urlObj.toString();\n } catch {\n return mySite.url;\n }\n }, [mySite?.url]);\n\n // Display URL without protocol\n const displayUrl = useMemo(\n () => (mySite?.url ? mySite.url.replace(/^https?:\\/\\//, \"\") : \"\"),\n [mySite?.url],\n );\n\n // Don't render if no MySite URL exists (but still render if errored or loading)\n if (!isLoading && !isError && !mySite?.url) {\n return null;\n }\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} bg-${backgroundColor} text-${textColor} ${className}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Title */}\n {titleEnabled && titleText && (\n <div className={`p-${padding} pb-0`}>\n <h2\n className={`text-${titleFontSize} font-header font-bold text-${titleColor}`}\n >\n {mySite?.userName ? `${mySite.userName}'s ${titleText}` : titleText}\n </h2>\n </div>\n )}\n\n {/* Loading state */}\n {isLoading ? (\n <div\n className={`flex min-h-[200px] items-center justify-center p-${padding}`}\n >\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n ) : isError ? (\n <ErrorState />\n ) : (\n <div className={`p-${padding}`}>\n {/* MySite preview */}\n {showPreview && (\n <div className=\"border-muted mb-4 overflow-hidden rounded-lg border\">\n {/* Browser chrome */}\n <div className=\"bg-[#f3f4f6] px-3 py-2 text-[#6b7280]\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex gap-1\">\n <div className=\"h-3 w-3 rounded-full bg-[#ff5f57]\" />\n <div className=\"h-3 w-3 rounded-full bg-[#febc2e]\" />\n <div className=\"h-3 w-3 rounded-full bg-[#28c840]\" />\n </div>\n <div className=\"flex-1 text-center\">\n <a\n href={mySite?.url ?? \"\"}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm opacity-60\"\n >\n {displayUrl}\n </a>\n </div>\n </div>\n </div>\n {/* Preview content: static placeholder in preview mode, iframe otherwise */}\n {isPreview ? (\n <MySiteStaticPreview displayUrl={displayUrl} />\n ) : (\n <div className=\"relative h-[200px] overflow-hidden bg-[#ffffff] @md:h-[280px]\">\n <iframe\n className=\"pointer-events-none absolute inset-0 h-[250%] w-[250%] origin-top-left scale-[0.4] bg-[#ffffff]\"\n src={previewUrl}\n title=\"MySite Preview\"\n />\n </div>\n )}\n </div>\n )}\n\n {/* Analytics data */}\n {showAnalytics && (\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"border-muted bg-background rounded-lg border p-3\">\n <div className=\"text-xs opacity-60\">Visitors This Month</div>\n <div className={`text-xl font-bold text-${accentColor}`}>\n {mySite?.views ?? 0}\n </div>\n </div>\n <div className=\"border-muted bg-background rounded-lg border p-3\">\n <div className=\"text-xs opacity-60\">Total Leads</div>\n <div className={`text-xl font-bold text-${accentColor}`}>\n {mySite?.leads ?? 0}\n </div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Static placeholder preview for the MySite widget shown in the builder palette,\n * drag previews, and other preview contexts where an iframe cannot load.\n */\nfunction MySiteStaticPreview({\n displayUrl,\n}: {\n displayUrl: string;\n}): React.JSX.Element {\n return (\n <div className=\"bg-muted/30 flex h-[200px] flex-col items-center justify-center gap-3 p-4 text-center\">\n <div className=\"bg-muted flex h-10 w-10 items-center justify-center rounded-full\">\n <Globe className=\"text-muted-foreground h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-foreground text-sm font-medium\">My Site</p>\n {displayUrl && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{displayUrl}</p>\n )}\n </div>\n </div>\n );\n}\n\nexport const mySiteWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"MySiteWidget\",\n displayName: \"MySite Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Styling Tab - Title Group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the widget\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Title text displayed above the widget\",\n defaultValue: \"My Site\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling Tab - Design Group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the widget container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for widget content\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color used for analytics numbers\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the widget container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n\n // Styling Tab - Display Group\n {\n key: \"showPreview\",\n label: \"Show Preview\",\n type: \"boolean\",\n description: \"Show the MySite iframe preview\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showAnalytics\",\n label: \"Show Analytics\",\n type: \"boolean\",\n description: \"Show the analytics section\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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AAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EAGF;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACF;CACF"}
|
|
@@ -4,6 +4,7 @@ const require_registries = require("./registries-CWjlN9GU.cjs");
|
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let lucide_react = require("lucide-react");
|
|
7
8
|
//#region ../widgets/src/hooks/use-mysite.preview.ts
|
|
8
9
|
const PREVIEW_DATA = {
|
|
9
10
|
url: "https://mysite.example.com",
|
|
@@ -57,6 +58,7 @@ function MySiteWidget({ titleEnabled = true, titleText = "My Site", titleFontSiz
|
|
|
57
58
|
const backgroundColor = background.color || "background";
|
|
58
59
|
const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
|
|
59
60
|
const { data: mySite, isLoading, isError } = useMySite();
|
|
61
|
+
const { isPreview } = require_error_state.useWidgetPreviewContext();
|
|
60
62
|
const previewUrl = (0, react.useMemo)(() => {
|
|
61
63
|
if (!mySite?.url) return "";
|
|
62
64
|
try {
|
|
@@ -108,10 +110,10 @@ function MySiteWidget({ titleEnabled = true, titleText = "My Site", titleFontSiz
|
|
|
108
110
|
})
|
|
109
111
|
})]
|
|
110
112
|
})
|
|
111
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
112
|
-
className: "h-[200px] overflow-hidden bg-[#ffffff] @md:h-[280px]",
|
|
113
|
+
}), isPreview ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySiteStaticPreview, { displayUrl }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
114
|
+
className: "relative h-[200px] overflow-hidden bg-[#ffffff] @md:h-[280px]",
|
|
113
115
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("iframe", {
|
|
114
|
-
className: "pointer-events-none h-[
|
|
116
|
+
className: "pointer-events-none absolute inset-0 h-[250%] w-[250%] origin-top-left scale-[0.4] bg-[#ffffff]",
|
|
115
117
|
src: previewUrl,
|
|
116
118
|
title: "MySite Preview"
|
|
117
119
|
})
|
|
@@ -141,6 +143,25 @@ function MySiteWidget({ titleEnabled = true, titleText = "My Site", titleFontSiz
|
|
|
141
143
|
})]
|
|
142
144
|
});
|
|
143
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Static placeholder preview for the MySite widget shown in the builder palette,
|
|
148
|
+
* drag previews, and other preview contexts where an iframe cannot load.
|
|
149
|
+
*/
|
|
150
|
+
function MySiteStaticPreview({ displayUrl }) {
|
|
151
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
152
|
+
className: "bg-muted/30 flex h-[200px] flex-col items-center justify-center gap-3 p-4 text-center",
|
|
153
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
154
|
+
className: "bg-muted flex h-10 w-10 items-center justify-center rounded-full",
|
|
155
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Globe, { className: "text-muted-foreground h-5 w-5" })
|
|
156
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
157
|
+
className: "text-foreground text-sm font-medium",
|
|
158
|
+
children: "My Site"
|
|
159
|
+
}), displayUrl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
160
|
+
className: "text-muted-foreground mt-0.5 text-xs",
|
|
161
|
+
children: displayUrl
|
|
162
|
+
})] })]
|
|
163
|
+
});
|
|
164
|
+
}
|
|
144
165
|
const mySiteWidgetPropertySchema = {
|
|
145
166
|
widgetType: "MySiteWidget",
|
|
146
167
|
displayName: "MySite Widget",
|
|
@@ -290,4 +311,4 @@ Object.defineProperty(exports, "mySiteWidgetPropertySchema", {
|
|
|
290
311
|
}
|
|
291
312
|
});
|
|
292
313
|
|
|
293
|
-
//# sourceMappingURL=MySiteWidget-
|
|
314
|
+
//# sourceMappingURL=MySiteWidget-DUS5TAjk.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MySiteWidget-DUS5TAjk.cjs","names":["useDataSourceConfig","useWidgetPreviewContext","useWidgetPreviewContext","borderWidthClasses","borderColorClasses","ErrorState","Globe","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField","getBorderWidthField","getBorderColorField"],"sources":["../../widgets/src/hooks/use-mysite.preview.ts","../../widgets/src/hooks/use-mysite.ts","../../widgets/src/widgets/MySiteWidget.tsx"],"sourcesContent":["import type { MySiteData } from \"./use-mysite.types\";\n\nexport const PREVIEW_DATA: MySiteData = {\n url: \"https://mysite.example.com\",\n views: 1248,\n leads: 43,\n userName: \"Jane\",\n};\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/portal-react/data-sources/context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { PREVIEW_DATA } from \"./use-mysite.preview\";\n\nimport type { MySiteData } from \"./use-mysite.types\";\n\nexport type { MySiteData } from \"./use-mysite.types\";\n\nexport function useMySite(): UseQueryResult<MySiteData, Error> {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n const { isPreview } = useWidgetPreviewContext();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"mysite\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: async ({ signal }): Promise<MySiteData> => {\n const url = baseUrl ? `${baseUrl}/me` : \"/me\";\n const response = await fetch(url, {\n headers: {\n \"content-type\": \"application/json\",\n ...getApiHeaders?.(),\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch MySite data: ${response.status}`);\n }\n\n const data = await response.json();\n return {\n url: data.mysite_url ?? null,\n views: data.mysite_views ?? 0,\n leads: data.mysite_leads ?? 0,\n userName: data.name || data.first_name || \"User\",\n };\n },\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import { useMemo, type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { Globe } from \"lucide-react\";\nimport { useMySite } from \"../hooks/use-mysite\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { ErrorState } from \"../components/error-state\";\n\ntype MySiteWidgetProps = ComponentProps<\"div\"> & {\n // Title settings\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Design settings\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n\n // Display settings\n showPreview?: boolean;\n showAnalytics?: boolean;\n};\n\nexport function MySiteWidget({\n // Title defaults\n titleEnabled = true,\n titleText = \"My Site\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n\n // Design defaults\n background = {\n type: \"solid\",\n color: \"background\",\n },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n\n // Display defaults\n showPreview = true,\n showAnalytics = true,\n\n className,\n ...props\n}: MySiteWidgetProps): React.JSX.Element | null {\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n const { data: mySite, isLoading, isError } = useMySite();\n const { isPreview } = useWidgetPreviewContext();\n\n // Generate preview URL with preview=true parameter\n const previewUrl = useMemo(() => {\n if (!mySite?.url) return \"\";\n try {\n const urlObj = new URL(mySite.url);\n urlObj.searchParams.set(\"preview\", \"true\");\n return urlObj.toString();\n } catch {\n return mySite.url;\n }\n }, [mySite?.url]);\n\n // Display URL without protocol\n const displayUrl = useMemo(\n () => (mySite?.url ? mySite.url.replace(/^https?:\\/\\//, \"\") : \"\"),\n [mySite?.url],\n );\n\n // Don't render if no MySite URL exists (but still render if errored or loading)\n if (!isLoading && !isError && !mySite?.url) {\n return null;\n }\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} bg-${backgroundColor} text-${textColor} ${className}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Title */}\n {titleEnabled && titleText && (\n <div className={`p-${padding} pb-0`}>\n <h2\n className={`text-${titleFontSize} font-header font-bold text-${titleColor}`}\n >\n {mySite?.userName ? `${mySite.userName}'s ${titleText}` : titleText}\n </h2>\n </div>\n )}\n\n {/* Loading state */}\n {isLoading ? (\n <div\n className={`flex min-h-[200px] items-center justify-center p-${padding}`}\n >\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n ) : isError ? (\n <ErrorState />\n ) : (\n <div className={`p-${padding}`}>\n {/* MySite preview */}\n {showPreview && (\n <div className=\"border-muted mb-4 overflow-hidden rounded-lg border\">\n {/* Browser chrome */}\n <div className=\"bg-[#f3f4f6] px-3 py-2 text-[#6b7280]\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex gap-1\">\n <div className=\"h-3 w-3 rounded-full bg-[#ff5f57]\" />\n <div className=\"h-3 w-3 rounded-full bg-[#febc2e]\" />\n <div className=\"h-3 w-3 rounded-full bg-[#28c840]\" />\n </div>\n <div className=\"flex-1 text-center\">\n <a\n href={mySite?.url ?? \"\"}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm opacity-60\"\n >\n {displayUrl}\n </a>\n </div>\n </div>\n </div>\n {/* Preview content: static placeholder in preview mode, iframe otherwise */}\n {isPreview ? (\n <MySiteStaticPreview displayUrl={displayUrl} />\n ) : (\n <div className=\"relative h-[200px] overflow-hidden bg-[#ffffff] @md:h-[280px]\">\n <iframe\n className=\"pointer-events-none absolute inset-0 h-[250%] w-[250%] origin-top-left scale-[0.4] bg-[#ffffff]\"\n src={previewUrl}\n title=\"MySite Preview\"\n />\n </div>\n )}\n </div>\n )}\n\n {/* Analytics data */}\n {showAnalytics && (\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"border-muted bg-background rounded-lg border p-3\">\n <div className=\"text-xs opacity-60\">Visitors This Month</div>\n <div className={`text-xl font-bold text-${accentColor}`}>\n {mySite?.views ?? 0}\n </div>\n </div>\n <div className=\"border-muted bg-background rounded-lg border p-3\">\n <div className=\"text-xs opacity-60\">Total Leads</div>\n <div className={`text-xl font-bold text-${accentColor}`}>\n {mySite?.leads ?? 0}\n </div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Static placeholder preview for the MySite widget shown in the builder palette,\n * drag previews, and other preview contexts where an iframe cannot load.\n */\nfunction MySiteStaticPreview({\n displayUrl,\n}: {\n displayUrl: string;\n}): React.JSX.Element {\n return (\n <div className=\"bg-muted/30 flex h-[200px] flex-col items-center justify-center gap-3 p-4 text-center\">\n <div className=\"bg-muted flex h-10 w-10 items-center justify-center rounded-full\">\n <Globe className=\"text-muted-foreground h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-foreground text-sm font-medium\">My Site</p>\n {displayUrl && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{displayUrl}</p>\n )}\n </div>\n </div>\n );\n}\n\nexport const mySiteWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"MySiteWidget\",\n displayName: \"MySite Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Styling Tab - Title Group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the widget\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Title text displayed above the widget\",\n defaultValue: \"My Site\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling Tab - Design Group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the widget container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for widget content\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color used for analytics numbers\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the widget container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n\n // Styling Tab - Display Group\n {\n key: \"showPreview\",\n label: \"Show Preview\",\n type: \"boolean\",\n description: \"Show the MySite iframe preview\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showAnalytics\",\n label: \"Show Analytics\",\n type: \"boolean\",\n description: \"Show the analytics section\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
require("./FluidProvider-
|
|
2
|
+
require("./FluidProvider-B7whI5Fk.cjs");
|
|
3
3
|
require("./PointsWidget-DgerTRwO.cjs");
|
|
4
4
|
require("./error-state-BDBF2JrB.cjs");
|
|
5
5
|
require("./ScreenRenderer-D65AsKjr.cjs");
|
|
@@ -24,7 +24,7 @@ require("./ContainerWidget-CcKBkPRM.cjs");
|
|
|
24
24
|
require("./ImageWidget-D_0Yb73S.cjs");
|
|
25
25
|
require("./LinkWidget-JKkMn6Pt.cjs");
|
|
26
26
|
require("./ListWidget-Ch386fkp.cjs");
|
|
27
|
-
require("./MySiteWidget-
|
|
27
|
+
require("./MySiteWidget-DUS5TAjk.cjs");
|
|
28
28
|
require("./NestedWidget-CR6d477_.cjs");
|
|
29
29
|
require("./QuickShareWidget-vnGkM3LR.cjs");
|
|
30
30
|
require("./RecentActivityWidget-BcVQ0Q4C.cjs");
|
|
@@ -35,6 +35,6 @@ require("./ToDoWidget-eGB9cfou.cjs");
|
|
|
35
35
|
require("./VideoWidget-C22_tAkf.cjs");
|
|
36
36
|
require("./ScreenHeaderContext-wrJlkhgN.cjs");
|
|
37
37
|
require("./order-detail-65Ln2EUO.cjs");
|
|
38
|
-
const require_OrdersScreen = require("./OrdersScreen-
|
|
38
|
+
const require_OrdersScreen = require("./OrdersScreen-D2wDUClf.cjs");
|
|
39
39
|
exports.OrdersScreen = require_OrdersScreen.OrdersScreen;
|
|
40
40
|
exports.ordersScreenPropertySchema = require_OrdersScreen.ordersScreenPropertySchema;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
2
|
const require_src = require("./src-DGjAAfmN.cjs");
|
|
3
|
-
const require_use_account_clients = require("./use-account-clients-
|
|
3
|
+
const require_use_account_clients = require("./use-account-clients-N3gfibU3.cjs");
|
|
4
4
|
const require_ScreenHeaderContext = require("./ScreenHeaderContext-wrJlkhgN.cjs");
|
|
5
5
|
const require_AppNavigationContext = require("./AppNavigationContext-Agp0UkCQ.cjs");
|
|
6
6
|
const require_order_detail = require("./order-detail-65Ln2EUO.cjs");
|
|
7
|
-
const require_use_customer_account = require("./use-customer-account-
|
|
7
|
+
const require_use_customer_account = require("./use-customer-account-DJxnOr1n.cjs");
|
|
8
8
|
let react = require("react");
|
|
9
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
10
|
//#region ../../orders/ui/src/screens/OrdersListScreen.tsx
|
|
@@ -180,4 +180,4 @@ Object.defineProperty(exports, "ordersScreenPropertySchema", {
|
|
|
180
180
|
}
|
|
181
181
|
});
|
|
182
182
|
|
|
183
|
-
//# sourceMappingURL=OrdersScreen-
|
|
183
|
+
//# sourceMappingURL=OrdersScreen-D2wDUClf.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrdersScreen-DHJaHME4.cjs","names":["OrdersListScreen","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","OrdersList","useOrdersClient","useAppNavigation","OrdersCoreProvider","OrdersListScreenContent","OrderDetailScreen","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","OrderDetail","useOrdersClient","useAppNavigation","OrdersCoreProvider","OrderDetailScreenContent","useAppNavigation","useCustomerAccount"],"sources":["../../../orders/ui/src/screens/OrdersListScreen.tsx","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/screens/OrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\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 { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrdersListScreen as OrdersListScreenContent } from \"@fluid-app/orders-ui/screens/OrdersListScreen\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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\ninterface OrdersListScreenProps {\n customerId: number | undefined;\n isLoadingCustomer: boolean;\n}\n\nexport function OrdersListScreen({\n customerId,\n isLoadingCustomer,\n}: OrdersListScreenProps): React.JSX.Element {\n const ordersClient = useOrdersClient();\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 client={ordersClient}>\n <OrdersListScreenContent\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n onOrderClick={handleOrderClick}\n onSubscriptionClick={handleSubscriptionClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\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 { OrderDetail } from \"../components/order-detail\";\n\nexport interface OrderDetailScreenProps {\n token: string;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onNavigateToList,\n onNotFound,\n onError,\n}: OrderDetailScreenProps) {\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 #{token}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [token, 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 <OrderDetail token={token} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrderDetailScreen as OrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/OrderDetailScreen\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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 = useOrdersClient();\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider client={client}>\n <OrderDetailScreenContent\n token={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 { useCustomerAccount } from \"../account/use-customer-account\";\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 const { customerId, isLoadingCustomer, isCustomerError } = useCustomerAccount(\n { enabled: !isDetailView },\n );\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n if (isCustomerError && !isLoadingCustomer) {\n return (\n <div {...divProps}>\n <div className=\"text-muted-foreground px-4 py-8 text-center text-sm\">\n Unable to load account data. Please try again later.\n </div>\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n />\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
|
+
{"version":3,"file":"OrdersScreen-D2wDUClf.cjs","names":["OrdersListScreen","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","OrdersList","useOrdersClient","useAppNavigation","OrdersCoreProvider","OrdersListScreenContent","OrderDetailScreen","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","OrderDetail","useOrdersClient","useAppNavigation","OrdersCoreProvider","OrderDetailScreenContent","useAppNavigation","useCustomerAccount"],"sources":["../../../orders/ui/src/screens/OrdersListScreen.tsx","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/screens/OrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\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 { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrdersListScreen as OrdersListScreenContent } from \"@fluid-app/orders-ui/screens/OrdersListScreen\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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\ninterface OrdersListScreenProps {\n customerId: number | undefined;\n isLoadingCustomer: boolean;\n}\n\nexport function OrdersListScreen({\n customerId,\n isLoadingCustomer,\n}: OrdersListScreenProps): React.JSX.Element {\n const ordersClient = useOrdersClient();\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 client={ordersClient}>\n <OrdersListScreenContent\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n onOrderClick={handleOrderClick}\n onSubscriptionClick={handleSubscriptionClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\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 { OrderDetail } from \"../components/order-detail\";\n\nexport interface OrderDetailScreenProps {\n token: string;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onNavigateToList,\n onNotFound,\n onError,\n}: OrderDetailScreenProps) {\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 #{token}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [token, 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 <OrderDetail token={token} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrderDetailScreen as OrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/OrderDetailScreen\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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 = useOrdersClient();\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider client={client}>\n <OrderDetailScreenContent\n token={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 { useCustomerAccount } from \"../account/use-customer-account\";\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 const { customerId, isLoadingCustomer, isCustomerError } = useCustomerAccount(\n { enabled: !isDetailView },\n );\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n if (isCustomerError && !isLoadingCustomer) {\n return (\n <div {...divProps}>\n <div className=\"text-muted-foreground px-4 py-8 text-center text-sm\">\n Unable to load account data. Please try again later.\n </div>\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n />\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":";;;;;;;;;;AAqBA,SAAgBA,mBAAiB,EAC/B,YACA,cACA,qBACA,GACA,qBACwB;AAaxB,6BAAA,4BAAA,GAAA,MAAA,eAVI,iBAAA,GAAA,kBAAA,KAACC,YAAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD;EAAgB,WAAU;YACxB,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD;GAAgB,WAAU;aAAgB;GAAuB,CAAA,EAClD,CAAA;EACF,CAAA,EACN,CAAA,EAEf,EAAE,CACH,CAC4C;AAE7C,KAAI,kBACF,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,uCAAwC,CAAA,EACvD,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,uCAAwC,CAAA,CACnD;;EACF,CAAA;AAIV,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACb,iBAAA,GAAA,kBAAA,KAACC,qBAAAA,YAAD;GACc;GACE;GACO;GAClB;GACH,CAAA;EACE,CAAA;;;;ACvDV,MAAM,eAAuC;CAC3C,eAAe;CACf,cAAc;CACd,MAAM;CACN,QAAQ;CACR,SAAS;CACT,iBAAiB;CACjB,oBAAoB;CACpB,oBAAoB;CACpB,+BAA+B;CAC/B,cAAc;CACd,mBAAmB;CACnB,OAAO;CACP,SAAS;CACT,UAAU;CACV,MAAM;CACN,YAAY;CACb;AAOD,SAAgB,iBAAiB,EAC/B,YACA,qBAC2C;CAC3C,MAAM,eAAeC,4BAAAA,iBAAiB;CACtC,MAAM,EAAE,aAAaC,6BAAAA,kBAAkB;CAEvC,MAAM,oBAAoB,UAA4B;AACpD,WAAS,UAAU,MAAM,QAAQ;;CAGnC,MAAM,2BAA2B,sBAA8B;AAC7D,WAAS,iBAAiB,oBAAoB;;AAGhD,QACE,iBAAA,GAAA,kBAAA,KAACC,qBAAAA,oBAAD;EAAoB,QAAQ;YAC1B,iBAAA,GAAA,kBAAA,KAACC,oBAAD;GACc;GACO;GACnB,cAAc;GACd,qBAAqB;GACrB,IAAI,QAAQ,aAAa,QAAQ;GACjC,CAAA;EACiB,CAAA;;;;ACjCzB,SAAgBC,oBAAkB,EAChC,OACA,kBACA,YACA,WACyB;AA2BzB,6BAAA,4BAAA,GAAA,MAAA,eAxBI,iBAAA,GAAA,kBAAA,KAACC,YAAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAACC,YAAAA,gBAAD;EAAgB,WAAU;YAA1B;GACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD;IACE,MAAK;IACL,UAAU,MAAM;AACd,OAAE,gBAAgB;AAClB,uBAAkB;;cAErB;IAEgB,CAAA,EACF,CAAA;GACjB,iBAAA,GAAA,kBAAA,KAACC,YAAAA,qBAAD,EAAuB,CAAA;GACvB,iBAAA,GAAA,kBAAA,KAACF,YAAAA,gBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAACG,YAAAA,gBAAD;IAAgB,WAAU;cAA1B,CAA0C,WAChC,MACO;OACF,CAAA;GACF;KACN,CAAA,EAEf,CAAC,OAAO,iBAAiB,CAC1B,CAC4C;AAE7C,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACb,iBAAA,GAAA,kBAAA,KAACC,qBAAAA,aAAD;GAAoB;GAAmB;GAAqB;GAAW,CAAA;EACnE,CAAA;;;;AChDV,SAAgB,kBAAkB,EAChC,OACA,WAC4C;CAC5C,MAAM,SAASC,4BAAAA,iBAAiB;CAChC,MAAM,EAAE,aAAaC,6BAAAA,kBAAkB;AAEvC,QACE,iBAAA,GAAA,kBAAA,KAACC,qBAAAA,oBAAD;EAA4B;YAC1B,iBAAA,GAAA,kBAAA,KAACC,qBAAD;GACS;GACP,wBAAwB,SAAS,SAAS;GAC1C,kBAAkB;AAChB,YAAQ,mBAAmB,UAAU;AACrC,aAAS,SAAS;;GAEpB,UAAU,QAAQ;AAGhB,YAAQ,yBADN,eAAe,QAAQ,IAAI,UAAU,uBACK,QAAQ;;GAEtD,CAAA;EACiB,CAAA;;;;ACVzB,SAAS,aAAa,SAAiB,MAAuC;AAC5E,KAAI,SAAS,WAAW,SAAS,UAC/B,SAAQ,KAAK,YAAY,QAAQ;KAEjC,SAAQ,KAAK,YAAY,QAAQ;;AAIrC,SAAgB,aAAa,EAC3B,SAEA,YACA,WACA,aACA,SACA,cAEA,GAAG,YACoC;CACvC,MAAM,EAAE,gBAAgBC,6BAAAA,kBAAkB;CAC1C,MAAM,iBAAiB,WAAW;CAGlC,MAAM,cAAc,YAAY,MAAM,IAAI,CAAC;CAC3C,MAAM,eAAe,gBAAgB,KAAA;CAErC,MAAM,EAAE,YAAY,mBAAmB,oBAAoBC,6BAAAA,mBACzD,EAAE,SAAS,CAAC,cAAc,CAC3B;AAED,KAAI,aACF,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI;YACP,iBAAA,GAAA,kBAAA,KAAC,mBAAD;GAAmB,OAAO;GAAa,SAAS;GAAkB,CAAA;EAC9D,CAAA;AAIV,KAAI,mBAAmB,CAAC,kBACtB,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI;YACP,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAU;aAAsD;GAE/D,CAAA;EACF,CAAA;AAIV,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI;YACP,iBAAA,GAAA,kBAAA,KAAC,kBAAD;GACc;GACO;GACnB,CAAA;EACE,CAAA;;AAIV,MAAa,6BAAmD;CAC9D,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ,EAAE;CACX"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as __exportAll } from "./chunk-ByhMGyNw.mjs";
|
|
2
2
|
import { Jt as BreadcrumbLink, Kt as Breadcrumb, Xt as BreadcrumbPage, Yt as BreadcrumbList, Zt as BreadcrumbSeparator, qt as BreadcrumbItem } from "./src-77nf0QPD.mjs";
|
|
3
|
-
import { r as useOrdersClient } from "./use-account-clients-
|
|
3
|
+
import { r as useOrdersClient } from "./use-account-clients-Bqwc4jT0.mjs";
|
|
4
4
|
import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-NdrJ58Mg.mjs";
|
|
5
5
|
import { n as useAppNavigation } from "./AppNavigationContext-Du3Qq0yc.mjs";
|
|
6
6
|
import { a as OrdersCoreProvider, n as OrdersList, t as OrderDetail } from "./order-detail-o-C0YhaZ.mjs";
|
|
7
|
-
import { t as useCustomerAccount } from "./use-customer-account-
|
|
7
|
+
import { t as useCustomerAccount } from "./use-customer-account-DVQzpWxo.mjs";
|
|
8
8
|
import { useMemo } from "react";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
//#region ../../orders/ui/src/screens/OrdersListScreen.tsx
|
|
@@ -173,4 +173,4 @@ const ordersScreenPropertySchema = {
|
|
|
173
173
|
//#endregion
|
|
174
174
|
export { OrdersScreen_exports as n, ordersScreenPropertySchema as r, OrdersScreen as t };
|
|
175
175
|
|
|
176
|
-
//# sourceMappingURL=OrdersScreen-
|
|
176
|
+
//# sourceMappingURL=OrdersScreen-gYB5v9-2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrdersScreen-CNPW9uXl.mjs","names":["OrdersListScreen","OrdersListScreenContent","OrderDetailScreen","OrderDetailScreenContent"],"sources":["../../../orders/ui/src/screens/OrdersListScreen.tsx","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/screens/OrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\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 { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrdersListScreen as OrdersListScreenContent } from \"@fluid-app/orders-ui/screens/OrdersListScreen\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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\ninterface OrdersListScreenProps {\n customerId: number | undefined;\n isLoadingCustomer: boolean;\n}\n\nexport function OrdersListScreen({\n customerId,\n isLoadingCustomer,\n}: OrdersListScreenProps): React.JSX.Element {\n const ordersClient = useOrdersClient();\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 client={ordersClient}>\n <OrdersListScreenContent\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n onOrderClick={handleOrderClick}\n onSubscriptionClick={handleSubscriptionClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\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 { OrderDetail } from \"../components/order-detail\";\n\nexport interface OrderDetailScreenProps {\n token: string;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onNavigateToList,\n onNotFound,\n onError,\n}: OrderDetailScreenProps) {\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 #{token}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [token, 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 <OrderDetail token={token} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrderDetailScreen as OrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/OrderDetailScreen\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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 = useOrdersClient();\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider client={client}>\n <OrderDetailScreenContent\n token={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 { useCustomerAccount } from \"../account/use-customer-account\";\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 const { customerId, isLoadingCustomer, isCustomerError } = useCustomerAccount(\n { enabled: !isDetailView },\n );\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n if (isCustomerError && !isLoadingCustomer) {\n return (\n <div {...divProps}>\n <div className=\"text-muted-foreground px-4 py-8 text-center text-sm\">\n Unable to load account data. Please try again later.\n </div>\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n />\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
|
+
{"version":3,"file":"OrdersScreen-gYB5v9-2.mjs","names":["OrdersListScreen","OrdersListScreenContent","OrderDetailScreen","OrderDetailScreenContent"],"sources":["../../../orders/ui/src/screens/OrdersListScreen.tsx","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/screens/OrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\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 { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrdersListScreen as OrdersListScreenContent } from \"@fluid-app/orders-ui/screens/OrdersListScreen\";\nimport type { orders } from \"@fluid-app/orders-api-client\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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\ninterface OrdersListScreenProps {\n customerId: number | undefined;\n isLoadingCustomer: boolean;\n}\n\nexport function OrdersListScreen({\n customerId,\n isLoadingCustomer,\n}: OrdersListScreenProps): React.JSX.Element {\n const ordersClient = useOrdersClient();\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 client={ordersClient}>\n <OrdersListScreenContent\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n onOrderClick={handleOrderClick}\n onSubscriptionClick={handleSubscriptionClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\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 { OrderDetail } from \"../components/order-detail\";\n\nexport interface OrderDetailScreenProps {\n token: string;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onNavigateToList,\n onNotFound,\n onError,\n}: OrderDetailScreenProps) {\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 #{token}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [token, 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 <OrderDetail token={token} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { OrderDetailScreen as OrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/OrderDetailScreen\";\nimport { useOrdersClient } from \"../account/use-account-clients\";\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 = useOrdersClient();\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider client={client}>\n <OrderDetailScreenContent\n token={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 { useCustomerAccount } from \"../account/use-customer-account\";\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 const { customerId, isLoadingCustomer, isCustomerError } = useCustomerAccount(\n { enabled: !isDetailView },\n );\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n if (isCustomerError && !isLoadingCustomer) {\n return (\n <div {...divProps}>\n <div className=\"text-muted-foreground px-4 py-8 text-center text-sm\">\n Unable to load account data. Please try again later.\n </div>\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n />\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,4 +1,4 @@
|
|
|
1
|
-
import "./FluidProvider-
|
|
1
|
+
import "./FluidProvider-C4OAgBdt.mjs";
|
|
2
2
|
import "./PointsWidget-KaaBr255.mjs";
|
|
3
3
|
import "./error-state-C9MqwdW7.mjs";
|
|
4
4
|
import "./ScreenRenderer-DoVfmxCl.mjs";
|
|
@@ -23,7 +23,7 @@ import "./ContainerWidget-BIMMO6W4.mjs";
|
|
|
23
23
|
import "./ImageWidget-zsu91PVR.mjs";
|
|
24
24
|
import "./LinkWidget-e0aFNkZJ.mjs";
|
|
25
25
|
import "./ListWidget-DhRPDaP7.mjs";
|
|
26
|
-
import "./MySiteWidget-
|
|
26
|
+
import "./MySiteWidget-DLBW4V7P.mjs";
|
|
27
27
|
import "./NestedWidget-CEbiRiS3.mjs";
|
|
28
28
|
import "./QuickShareWidget-D_0t-H69.mjs";
|
|
29
29
|
import "./RecentActivityWidget-DQClbYyM.mjs";
|
|
@@ -38,5 +38,5 @@ import "./es-1KItbbYg.mjs";
|
|
|
38
38
|
import "./dist-Cl4FsM3V.mjs";
|
|
39
39
|
import "./src-nhqydD53.mjs";
|
|
40
40
|
import "./sortable.esm-CzzU6kIR.mjs";
|
|
41
|
-
import { n as productsScreenPropertySchema, t as ProductsScreen } from "./ProductsScreen-
|
|
41
|
+
import { n as productsScreenPropertySchema, t as ProductsScreen } from "./ProductsScreen-yuVjp5Ia.mjs";
|
|
42
42
|
export { ProductsScreen, productsScreenPropertySchema };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
require("./FluidProvider-
|
|
2
|
+
require("./FluidProvider-B7whI5Fk.cjs");
|
|
3
3
|
require("./PointsWidget-DgerTRwO.cjs");
|
|
4
4
|
require("./error-state-BDBF2JrB.cjs");
|
|
5
5
|
require("./ScreenRenderer-D65AsKjr.cjs");
|
|
@@ -24,7 +24,7 @@ require("./ContainerWidget-CcKBkPRM.cjs");
|
|
|
24
24
|
require("./ImageWidget-D_0Yb73S.cjs");
|
|
25
25
|
require("./LinkWidget-JKkMn6Pt.cjs");
|
|
26
26
|
require("./ListWidget-Ch386fkp.cjs");
|
|
27
|
-
require("./MySiteWidget-
|
|
27
|
+
require("./MySiteWidget-DUS5TAjk.cjs");
|
|
28
28
|
require("./NestedWidget-CR6d477_.cjs");
|
|
29
29
|
require("./QuickShareWidget-vnGkM3LR.cjs");
|
|
30
30
|
require("./RecentActivityWidget-BcVQ0Q4C.cjs");
|
|
@@ -39,6 +39,6 @@ require("./es-BSkb3AZk.cjs");
|
|
|
39
39
|
require("./dist-B4Ke7bHH.cjs");
|
|
40
40
|
require("./src-fXyI4AWk.cjs");
|
|
41
41
|
require("./dist-lO2OG0T5.cjs");
|
|
42
|
-
const require_ProductsScreen = require("./ProductsScreen-
|
|
42
|
+
const require_ProductsScreen = require("./ProductsScreen-zPoSxUNt.cjs");
|
|
43
43
|
exports.ProductsScreen = require_ProductsScreen.ProductsScreen;
|
|
44
44
|
exports.productsScreenPropertySchema = require_ProductsScreen.productsScreenPropertySchema;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as useSdkClient } from "./use-account-clients-
|
|
2
|
-
import { n as useCurrentUser } from "./use-current-user-
|
|
1
|
+
import { i as useSdkClient } from "./use-account-clients-Bqwc4jT0.mjs";
|
|
2
|
+
import { n as useCurrentUser } from "./use-current-user-BUXtOeFz.mjs";
|
|
3
3
|
import { n as useAppNavigation } from "./AppNavigationContext-Du3Qq0yc.mjs";
|
|
4
4
|
import { i as ShareablesCoreProvider, r as ShareablesUIProvider, t as ProductsApp } from "./src-nhqydD53.mjs";
|
|
5
5
|
import { useCallback, useMemo } from "react";
|
|
@@ -65,4 +65,4 @@ const productsScreenPropertySchema = {
|
|
|
65
65
|
//#endregion
|
|
66
66
|
export { productsScreenPropertySchema as n, ProductsScreen as t };
|
|
67
67
|
|
|
68
|
-
//# sourceMappingURL=ProductsScreen-
|
|
68
|
+
//# sourceMappingURL=ProductsScreen-yuVjp5Ia.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsScreen-
|
|
1
|
+
{"version":3,"file":"ProductsScreen-yuVjp5Ia.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 { ShareablesCoreProvider } 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\";\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 { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\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 }),\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 <ShareablesUIProvider config={uiConfig}>\n <ProductsApp\n countryCode={userData?.country?.iso}\n companyLogoUrl={userData?.company?.logo_url}\n productId={productId}\n onSelectProduct={handleSelectProduct}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\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":";;;;;;;AAsBA,SAAgB,eAAe,EAE7B,YACA,WACA,aACA,SACA,cAEA,GAAG,YACsC;CACzC,MAAM,eAAe,cAAc;CACnC,MAAM,EAAE,MAAM,aAAa,gBAAgB;CAC3C,MAAM,EAAE,aAAa,aAAa,kBAAkB;CAGpD,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;EACxC,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,sBAAD;IAAsB,QAAQ;cAC5B,oBAAC,aAAD;KACE,aAAa,UAAU,SAAS;KAChC,gBAAgB,UAAU,SAAS;KACxB;KACX,iBAAiB;KACjB,QAAQ;KACR,CAAA;IACmB,CAAA;GACA,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
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
const require_use_account_clients = require("./use-account-clients-
|
|
3
|
-
const require_use_current_user = require("./use-current-user-
|
|
2
|
+
const require_use_account_clients = require("./use-account-clients-N3gfibU3.cjs");
|
|
3
|
+
const require_use_current_user = require("./use-current-user-C2A379kM.cjs");
|
|
4
4
|
const require_AppNavigationContext = require("./AppNavigationContext-Agp0UkCQ.cjs");
|
|
5
5
|
const require_src = require("./src-fXyI4AWk.cjs");
|
|
6
6
|
let react = require("react");
|
|
@@ -77,4 +77,4 @@ Object.defineProperty(exports, "productsScreenPropertySchema", {
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
//# sourceMappingURL=ProductsScreen-
|
|
80
|
+
//# sourceMappingURL=ProductsScreen-zPoSxUNt.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsScreen-
|
|
1
|
+
{"version":3,"file":"ProductsScreen-zPoSxUNt.cjs","names":["useSdkClient","useCurrentUser","useAppNavigation","ShareablesCoreProvider","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 { ShareablesCoreProvider } 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\";\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 { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\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 }),\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 <ShareablesUIProvider config={uiConfig}>\n <ProductsApp\n countryCode={userData?.country?.iso}\n companyLogoUrl={userData?.company?.logo_url}\n productId={productId}\n onSelectProduct={handleSelectProduct}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\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":";;;;;;;;AAsBA,SAAgB,eAAe,EAE7B,YACA,WACA,aACA,SACA,cAEA,GAAG,YACsC;CACzC,MAAM,eAAeA,4BAAAA,cAAc;CACnC,MAAM,EAAE,MAAM,aAAaC,yBAAAA,gBAAgB;CAC3C,MAAM,EAAE,aAAa,aAAaC,6BAAAA,kBAAkB;CAGpD,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;EACxC,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,YAAAA,wBAAD;GAAwB,QAAQ;aAC9B,iBAAA,GAAA,kBAAA,KAACC,YAAAA,sBAAD;IAAsB,QAAQ;cAC5B,iBAAA,GAAA,kBAAA,KAACC,YAAAA,aAAD;KACE,aAAa,UAAU,SAAS;KAChC,gBAAgB,UAAU,SAAS;KACxB;KACX,iBAAiB;KACjB,QAAQ;KACR,CAAA;IACmB,CAAA;GACA,CAAA;EACrB,CAAA;;AAIV,MAAa,+BAAqD;CAChE,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ,EAAE;CACX"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as __exportAll } from "./chunk-ByhMGyNw.mjs";
|
|
2
|
-
import { _t as fetchCustomerAccount, n as useFluidContext, vt as updateCustomer } from "./FluidProvider-
|
|
2
|
+
import { _t as fetchCustomerAccount, n as useFluidContext, vt as updateCustomer } from "./FluidProvider-C4OAgBdt.mjs";
|
|
3
3
|
import { t as parseApiErrors } from "./parse-api-errors-Dy2gL1eC.mjs";
|
|
4
4
|
import { $t as Avatar, A as SelectContent, G as Label, I as Input, J as DropdownMenuItem, K as DropdownMenu, Kt as Breadcrumb, M as SelectTrigger, N as SelectValue, X as DropdownMenuSeparator, Xt as BreadcrumbPage, Yt as BreadcrumbList, _n as AccordionTrigger, at as DialogFooter, dn as Button, en as AvatarFallback, et as DropdownMenuTrigger, gn as AccordionItem, hn as AccordionContent, j as SelectItem, k as Select, lt as DialogTitle, mn as Accordion, nt as DialogClose, ot as DialogHeader, q as DropdownMenuContent, qt as BreadcrumbItem, rt as DialogContent, tt as Dialog, vn as useZodForm, x as Skeleton, y as fluidToast, yn as cn } from "./src-77nf0QPD.mjs";
|
|
5
|
-
import { i as useSdkClient, n as useFluidPayClient, o as useFluidAuth, t as API_VERSION } from "./use-account-clients-
|
|
5
|
+
import { i as useSdkClient, n as useFluidPayClient, o as useFluidAuth, t as API_VERSION } from "./use-account-clients-Bqwc4jT0.mjs";
|
|
6
6
|
import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-NdrJ58Mg.mjs";
|
|
7
7
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
8
8
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
@@ -2757,4 +2757,4 @@ const profileScreenPropertySchema = {
|
|
|
2757
2757
|
//#endregion
|
|
2758
2758
|
export { ProfileScreen_exports as n, profileScreenPropertySchema as r, ProfileScreen as t };
|
|
2759
2759
|
|
|
2760
|
-
//# sourceMappingURL=ProfileScreen-
|
|
2760
|
+
//# sourceMappingURL=ProfileScreen-B6YgnBLf.mjs.map
|