@burdenoff/microfe-adaptercloud 2026.614.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/adaptercloud/AdapterCloudRoot.js +177 -0
- package/dist/adaptercloud/AdapterCloudRoot.js.map +1 -0
- package/dist/adaptercloud/AdapterCloudRoutes.js +215 -0
- package/dist/adaptercloud/AdapterCloudRoutes.js.map +1 -0
- package/dist/adaptercloud/components/EmptyState.js +28 -0
- package/dist/adaptercloud/components/EmptyState.js.map +1 -0
- package/dist/adaptercloud/components/InvestmentCard.js +96 -0
- package/dist/adaptercloud/components/InvestmentCard.js.map +1 -0
- package/dist/adaptercloud/components/MetricsCard.js +46 -0
- package/dist/adaptercloud/components/MetricsCard.js.map +1 -0
- package/dist/adaptercloud/components/PageLayout.js +26 -0
- package/dist/adaptercloud/components/PageLayout.js.map +1 -0
- package/dist/adaptercloud/components/RatingDisplay.js +35 -0
- package/dist/adaptercloud/components/RatingDisplay.js.map +1 -0
- package/dist/adaptercloud/components/StatusBadge.js +45 -0
- package/dist/adaptercloud/components/StatusBadge.js.map +1 -0
- package/dist/adaptercloud/context/AdapterCloudContext.js +93 -0
- package/dist/adaptercloud/context/AdapterCloudContext.js.map +1 -0
- package/dist/adaptercloud/context/index.js +1 -0
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js +223 -0
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -0
- package/dist/adaptercloud/index.js +7 -0
- package/dist/adaptercloud/mocks/data.js +1517 -0
- package/dist/adaptercloud/mocks/data.js.map +1 -0
- package/dist/adaptercloud/mocks/users.js +34 -0
- package/dist/adaptercloud/mocks/users.js.map +1 -0
- package/dist/adaptercloud/pages/HomePage.js +921 -0
- package/dist/adaptercloud/pages/HomePage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +645 -0
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +639 -0
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +421 -0
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +660 -0
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +259 -0
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +649 -0
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +869 -0
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +893 -0
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +834 -0
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +700 -0
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +760 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +886 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +631 -0
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +913 -0
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +881 -0
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +833 -0
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +1325 -0
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -0
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +665 -0
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -0
- package/dist/adaptercloud/pages/common/SettingsPage.js +964 -0
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +593 -0
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +620 -0
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +547 -0
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +532 -0
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +496 -0
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +621 -0
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +623 -0
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +477 -0
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +438 -0
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +388 -0
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +488 -0
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +606 -0
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +443 -0
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +849 -0
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +939 -0
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +681 -0
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +419 -0
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +399 -0
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +569 -0
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +1065 -0
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +496 -0
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +634 -0
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +675 -0
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +687 -0
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +578 -0
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -0
- package/dist/adaptercloud/store/adaptercloudStore.js +38 -0
- package/dist/adaptercloud/store/adaptercloudStore.js.map +1 -0
- package/dist/adaptercloud/store/index.js +1 -0
- package/dist/adaptercloud/utils/cn.js +10 -0
- package/dist/adaptercloud/utils/cn.js.map +1 -0
- package/dist/adaptercloud/utils/formatters.js +51 -0
- package/dist/adaptercloud/utils/formatters.js.map +1 -0
- package/dist/adaptercloud/utils/navigation.js +9 -0
- package/dist/adaptercloud/utils/navigation.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { Minus as t, TrendingDown as n, TrendingUp as r } from "lucide-react";
|
|
3
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
+
//#region src/adaptercloud/components/MetricsCard.tsx
|
|
5
|
+
var o = {
|
|
6
|
+
up: {
|
|
7
|
+
icon: r,
|
|
8
|
+
color: "text-green-600 dark:text-green-400"
|
|
9
|
+
},
|
|
10
|
+
down: {
|
|
11
|
+
icon: n,
|
|
12
|
+
color: "text-red-600 dark:text-red-400"
|
|
13
|
+
},
|
|
14
|
+
neutral: {
|
|
15
|
+
icon: t,
|
|
16
|
+
color: "text-muted-foreground"
|
|
17
|
+
}
|
|
18
|
+
}, s = ({ icon: t, value: n, label: r, trend: s, trendValue: c, className: l }) => {
|
|
19
|
+
let u = s ? o[s] : null, d = u?.icon;
|
|
20
|
+
return /* @__PURE__ */ a("div", {
|
|
21
|
+
className: e("rounded-lg border border-border bg-card p-6 shadow-sm", l),
|
|
22
|
+
children: [/* @__PURE__ */ a("div", {
|
|
23
|
+
className: "flex items-center justify-between",
|
|
24
|
+
children: [/* @__PURE__ */ i("div", {
|
|
25
|
+
className: "text-muted-foreground",
|
|
26
|
+
children: t
|
|
27
|
+
}), s && u && d && /* @__PURE__ */ a("div", {
|
|
28
|
+
className: e("flex items-center gap-1 text-xs font-medium", u.color),
|
|
29
|
+
children: [/* @__PURE__ */ i(d, { className: "h-3.5 w-3.5" }), c && /* @__PURE__ */ i("span", { children: c })]
|
|
30
|
+
})]
|
|
31
|
+
}), /* @__PURE__ */ a("div", {
|
|
32
|
+
className: "mt-3",
|
|
33
|
+
children: [/* @__PURE__ */ i("p", {
|
|
34
|
+
className: "text-2xl font-bold text-foreground",
|
|
35
|
+
children: n
|
|
36
|
+
}), /* @__PURE__ */ i("p", {
|
|
37
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
38
|
+
children: r
|
|
39
|
+
})]
|
|
40
|
+
})]
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
//#endregion
|
|
44
|
+
export { s as MetricsCard };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=MetricsCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsCard.js","names":[],"sources":["../../../src/adaptercloud/components/MetricsCard.tsx"],"sourcesContent":["/**\n * Metrics Card Component\n * @module adaptercloud/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport type { TrendDirection } from '../types';\n\ninterface MetricsCardProps {\n icon: ReactNode;\n value: string | number;\n label: string;\n trend?: TrendDirection;\n trendValue?: string;\n className?: string;\n}\n\nconst trendConfig: Record<TrendDirection, { icon: typeof TrendingUp; color: string }> = {\n up: { icon: TrendingUp, color: 'text-green-600 dark:text-green-400' },\n down: { icon: TrendingDown, color: 'text-red-600 dark:text-red-400' },\n neutral: { icon: Minus, color: 'text-muted-foreground' },\n};\n\nexport const MetricsCard: FC<MetricsCardProps> = ({\n icon,\n value,\n label,\n trend,\n trendValue,\n className,\n}) => {\n const trendInfo = trend ? trendConfig[trend] : null;\n const TrendIcon = trendInfo?.icon;\n\n return (\n <div className={cn('rounded-lg border border-border bg-card p-6 shadow-sm', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"text-muted-foreground\">{icon}</div>\n {trend && trendInfo && TrendIcon && (\n <div className={cn('flex items-center gap-1 text-xs font-medium', trendInfo.color)}>\n <TrendIcon className=\"h-3.5 w-3.5\" />\n {trendValue && <span>{trendValue}</span>}\n </div>\n )}\n </div>\n <div className=\"mt-3\">\n <p className=\"text-2xl font-bold text-foreground\">{value}</p>\n <p className=\"mt-1 text-sm text-muted-foreground\">{label}</p>\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AAmBA,IAAM,IAAkF;CACtF,IAAI;EAAE,MAAM;EAAY,OAAO;EAAsC;CACrE,MAAM;EAAE,MAAM;EAAc,OAAO;EAAkC;CACrE,SAAS;EAAE,MAAM;EAAO,OAAO;EAAyB;CACzD,EAEY,KAAqC,EAChD,SACA,UACA,UACA,UACA,eACA,mBACI;CACJ,IAAM,IAAY,IAAQ,EAAY,KAAS,MACzC,IAAY,GAAW;AAE7B,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,yDAAyD,EAAU;YAAtF,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAyB;IAAW,CAAA,EAClD,KAAS,KAAa,KACrB,kBAAC,OAAD;IAAK,WAAW,EAAG,+CAA+C,EAAU,MAAM;cAAlF,CACE,kBAAC,GAAD,EAAW,WAAU,eAAgB,CAAA,EACpC,KAAc,kBAAC,QAAD,EAAA,UAAO,GAAkB,CAAA,CACpC;MAEJ;MACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAsC;IAAU,CAAA,EAC7D,kBAAC,KAAD;IAAG,WAAU;cAAsC;IAAU,CAAA,CACzD;KACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
//#region src/adaptercloud/components/PageLayout.tsx
|
|
4
|
+
var r = ({ title: r, description: i, actions: a, children: o, className: s }) => /* @__PURE__ */ n("div", {
|
|
5
|
+
className: e("flex flex-col h-full", s),
|
|
6
|
+
children: [/* @__PURE__ */ n("div", {
|
|
7
|
+
className: "flex items-center justify-between px-6 py-4 border-b border-border bg-card",
|
|
8
|
+
children: [/* @__PURE__ */ n("div", { children: [/* @__PURE__ */ t("h1", {
|
|
9
|
+
className: "text-2xl font-semibold text-foreground",
|
|
10
|
+
children: r
|
|
11
|
+
}), i && /* @__PURE__ */ t("p", {
|
|
12
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
13
|
+
children: i
|
|
14
|
+
})] }), a && /* @__PURE__ */ t("div", {
|
|
15
|
+
className: "flex items-center gap-3",
|
|
16
|
+
children: a
|
|
17
|
+
})]
|
|
18
|
+
}), /* @__PURE__ */ t("div", {
|
|
19
|
+
className: "flex-1 overflow-auto p-6",
|
|
20
|
+
children: o
|
|
21
|
+
})]
|
|
22
|
+
});
|
|
23
|
+
//#endregion
|
|
24
|
+
export { r as PageLayout };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=PageLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/adaptercloud/components/PageLayout.tsx"],"sourcesContent":["/**\n * Page Layout Component\n * @module adaptercloud/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface PageLayoutProps {\n title: ReactNode;\n description?: string;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport const PageLayout: FC<PageLayoutProps> = ({\n title,\n description,\n actions,\n children,\n className,\n}) => {\n return (\n <div className={cn('flex flex-col h-full', className)}>\n {/* Page Header */}\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border bg-card\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">{title}</h1>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-3\">{actions}</div>}\n </div>\n\n {/* Page Content */}\n <div className=\"flex-1 overflow-auto p-6\">{children}</div>\n </div>\n );\n};\n"],"mappings":";;;AAgBA,IAAa,KAAmC,EAC9C,UACA,gBACA,YACA,aACA,mBAGE,kBAAC,OAAD;CAAK,WAAW,EAAG,wBAAwB,EAAU;WAArD,CAEE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aAA0C;GAAW,CAAA,EAClE,KAAe,kBAAC,KAAD;GAAG,WAAU;aAAsC;GAAgB,CAAA,CAC/E,EAAA,CAAA,EACL,KAAW,kBAAC,OAAD;GAAK,WAAU;aAA2B;GAAc,CAAA,CAChE;KAGN,kBAAC,OAAD;EAAK,WAAU;EAA4B;EAAe,CAAA,CACtD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { Star as t } from "lucide-react";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
//#region src/adaptercloud/components/RatingDisplay.tsx
|
|
5
|
+
var i = ({ value: i, count: a, maxStars: o = 5, size: s = "sm", className: c }) => {
|
|
6
|
+
let l = s === "sm" ? "h-3.5 w-3.5" : "h-4.5 w-4.5", u = Math.min(Math.max(i, 0), o);
|
|
7
|
+
return /* @__PURE__ */ r("div", {
|
|
8
|
+
className: e("flex items-center gap-1", c),
|
|
9
|
+
children: [
|
|
10
|
+
/* @__PURE__ */ n("div", {
|
|
11
|
+
className: "flex items-center",
|
|
12
|
+
children: Array.from({ length: o }, (r, i) => {
|
|
13
|
+
let a = i < Math.floor(u);
|
|
14
|
+
return /* @__PURE__ */ n(t, { className: e(l, a ? "fill-yellow-400 text-yellow-400" : !a && i < u ? "fill-yellow-400/50 text-yellow-400" : "fill-none text-muted-foreground/40") }, i);
|
|
15
|
+
})
|
|
16
|
+
}),
|
|
17
|
+
/* @__PURE__ */ n("span", {
|
|
18
|
+
className: "text-xs font-medium text-foreground",
|
|
19
|
+
children: u.toFixed(1)
|
|
20
|
+
}),
|
|
21
|
+
a !== void 0 && /* @__PURE__ */ r("span", {
|
|
22
|
+
className: "text-xs text-muted-foreground",
|
|
23
|
+
children: [
|
|
24
|
+
"(",
|
|
25
|
+
a,
|
|
26
|
+
")"
|
|
27
|
+
]
|
|
28
|
+
})
|
|
29
|
+
]
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { i as RatingDisplay };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=RatingDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RatingDisplay.js","names":[],"sources":["../../../src/adaptercloud/components/RatingDisplay.tsx"],"sourcesContent":["/**\n * Rating Display Component\n * @module adaptercloud/components\n *\n * Star rating display with value and review count.\n */\n\nimport type { FC } from 'react';\nimport { Star } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\ninterface RatingDisplayProps {\n value: number;\n count?: number;\n maxStars?: number;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport const RatingDisplay: FC<RatingDisplayProps> = ({\n value,\n count,\n maxStars = 5,\n size = 'sm',\n className,\n}) => {\n const starSize = size === 'sm' ? 'h-3.5 w-3.5' : 'h-4.5 w-4.5';\n const clampedValue = Math.min(Math.max(value, 0), maxStars);\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n <div className=\"flex items-center\">\n {Array.from({ length: maxStars }, (_, i) => {\n const filled = i < Math.floor(clampedValue);\n const halfFilled = !filled && i < clampedValue;\n\n return (\n <Star\n key={i}\n className={cn(\n starSize,\n filled\n ? 'fill-yellow-400 text-yellow-400'\n : halfFilled\n ? 'fill-yellow-400/50 text-yellow-400'\n : 'fill-none text-muted-foreground/40'\n )}\n />\n );\n })}\n </div>\n <span className=\"text-xs font-medium text-foreground\">{clampedValue.toFixed(1)}</span>\n {count !== undefined && <span className=\"text-xs text-muted-foreground\">({count})</span>}\n </div>\n );\n};\n"],"mappings":";;;;AAmBA,IAAa,KAAyC,EACpD,UACA,UACA,cAAW,GACX,UAAO,MACP,mBACI;CACJ,IAAM,IAAW,MAAS,OAAO,gBAAgB,eAC3C,IAAe,KAAK,IAAI,KAAK,IAAI,GAAO,EAAE,EAAE,EAAS;AAE3D,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,2BAA2B,EAAU;YAAxD;GACE,kBAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAU,GAAG,GAAG,MAAM;KAC1C,IAAM,IAAS,IAAI,KAAK,MAAM,EAAa;AAG3C,YACE,kBAAC,GAAD,EAEE,WAAW,EACT,GACA,IACI,oCARS,CAAC,KAAU,IAAI,IAUtB,uCACA,qCACP,EACD,EATK,EASL;MAEJ;IACE,CAAA;GACN,kBAAC,QAAD;IAAM,WAAU;cAAuC,EAAa,QAAQ,EAAE;IAAQ,CAAA;GACrF,MAAU,KAAA,KAAa,kBAAC,QAAD;IAAM,WAAU;cAAhB;KAAgD;KAAE;KAAM;KAAQ;;GACpF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
//#region src/adaptercloud/components/StatusBadge.tsx
|
|
4
|
+
var n = {
|
|
5
|
+
success: "bg-green-500/20 text-green-600 dark:text-green-400",
|
|
6
|
+
warning: "bg-yellow-500/20 text-yellow-600 dark:text-yellow-400",
|
|
7
|
+
destructive: "bg-destructive/20 text-destructive",
|
|
8
|
+
secondary: "bg-secondary text-secondary-foreground",
|
|
9
|
+
info: "bg-blue-500/20 text-blue-600 dark:text-blue-400",
|
|
10
|
+
outline: "border border-border text-foreground"
|
|
11
|
+
}, r = {
|
|
12
|
+
open: "success",
|
|
13
|
+
closed: "destructive",
|
|
14
|
+
busy: "warning",
|
|
15
|
+
temporarily_closed: "warning",
|
|
16
|
+
pending: "secondary",
|
|
17
|
+
confirmed: "info",
|
|
18
|
+
preparing: "warning",
|
|
19
|
+
ready: "success",
|
|
20
|
+
out_for_delivery: "info",
|
|
21
|
+
delivered: "success",
|
|
22
|
+
cancelled: "destructive",
|
|
23
|
+
refunded: "outline",
|
|
24
|
+
funded: "success",
|
|
25
|
+
returning: "info",
|
|
26
|
+
active: "success",
|
|
27
|
+
inactive: "secondary",
|
|
28
|
+
draft: "secondary",
|
|
29
|
+
archived: "outline",
|
|
30
|
+
error: "destructive",
|
|
31
|
+
failed: "destructive",
|
|
32
|
+
processing: "warning",
|
|
33
|
+
completed: "success"
|
|
34
|
+
};
|
|
35
|
+
function i(e) {
|
|
36
|
+
return e.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
|
|
37
|
+
}
|
|
38
|
+
var a = ({ status: a, className: o }) => /* @__PURE__ */ t("span", {
|
|
39
|
+
className: e("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium", n[r[a.toLowerCase()] || "secondary"], o),
|
|
40
|
+
children: i(a)
|
|
41
|
+
});
|
|
42
|
+
//#endregion
|
|
43
|
+
export { a as StatusBadge };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=StatusBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge.js","names":[],"sources":["../../../src/adaptercloud/components/StatusBadge.tsx"],"sourcesContent":["/**\n * Status Badge Component\n * @module adaptercloud/components\n *\n * A colored badge based on status value with semantic color mapping\n * for various order, cart, and investment statuses.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface StatusBadgeProps {\n status: string;\n className?: string;\n}\n\ntype BadgeVariant = 'success' | 'warning' | 'destructive' | 'secondary' | 'info' | 'outline';\n\nconst variantStyles: Record<BadgeVariant, string> = {\n success: 'bg-green-500/20 text-green-600 dark:text-green-400',\n warning: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400',\n destructive: 'bg-destructive/20 text-destructive',\n secondary: 'bg-secondary text-secondary-foreground',\n info: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n outline: 'border border-border text-foreground',\n};\n\nconst statusVariantMap: Record<string, BadgeVariant> = {\n // Cart statuses\n open: 'success',\n closed: 'destructive',\n busy: 'warning',\n temporarily_closed: 'warning',\n\n // Order statuses\n pending: 'secondary',\n confirmed: 'info',\n preparing: 'warning',\n ready: 'success',\n out_for_delivery: 'info',\n delivered: 'success',\n cancelled: 'destructive',\n refunded: 'outline',\n\n // Investment statuses\n funded: 'success',\n returning: 'info',\n\n // Generic statuses\n active: 'success',\n inactive: 'secondary',\n draft: 'secondary',\n archived: 'outline',\n error: 'destructive',\n failed: 'destructive',\n processing: 'warning',\n completed: 'success',\n};\n\nfunction formatStatusLabel(status: string): string {\n return status.replace(/_/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport const StatusBadge: FC<StatusBadgeProps> = ({ status, className }) => {\n const variant = statusVariantMap[status.toLowerCase()] || 'secondary';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n variantStyles[variant],\n className\n )}\n >\n {formatStatusLabel(status)}\n </span>\n );\n};\n"],"mappings":";;;AAkBA,IAAM,IAA8C;CAClD,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACV,EAEK,IAAiD;CAErD,MAAM;CACN,QAAQ;CACR,MAAM;CACN,oBAAoB;CAGpB,SAAS;CACT,WAAW;CACX,WAAW;CACX,OAAO;CACP,kBAAkB;CAClB,WAAW;CACX,WAAW;CACX,UAAU;CAGV,QAAQ;CACR,WAAW;CAGX,QAAQ;CACR,UAAU;CACV,OAAO;CACP,UAAU;CACV,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,WAAW;CACZ;AAED,SAAS,EAAkB,GAAwB;AACjD,QAAO,EAAO,QAAQ,MAAM,IAAI,CAAC,QAAQ,UAAU,MAAS,EAAK,aAAa,CAAC;;AAGjF,IAAa,KAAqC,EAAE,WAAQ,mBAIxD,kBAAC,QAAD;CACE,WAAW,EACT,2EACA,EANU,EAAiB,EAAO,aAAa,KAAK,cAOpD,EACD;WAEA,EAAkB,EAAO;CACrB,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { joinPath as e } from "../utils/navigation.js";
|
|
2
|
+
import { createContext as t, useCallback as n, useContext as r, useMemo as i } from "react";
|
|
3
|
+
import { MemoryRouter as a, useNavigate as o } from "react-router-dom";
|
|
4
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
5
|
+
//#region src/adaptercloud/context/AdapterCloudContext.tsx
|
|
6
|
+
var c = t(null);
|
|
7
|
+
function l() {
|
|
8
|
+
let e = r(c);
|
|
9
|
+
if (!e) throw Error("useAdapterCloud must be used within a AdapterCloudProvider");
|
|
10
|
+
return e;
|
|
11
|
+
}
|
|
12
|
+
var u = ({ children: t, basePath: r, currentUser: a, tenantId: l, workspaceId: u, apiGatewayUrl: d, authToken: f, onCartSelect: p, onOrderSelect: m }) => {
|
|
13
|
+
let h = o(), g = r || "/", _ = n((t) => e(g, t), [g]), v = n((t) => {
|
|
14
|
+
h(e(g, t));
|
|
15
|
+
}, [g, h]), y = i(() => ({
|
|
16
|
+
basePath: g,
|
|
17
|
+
navigate: void 0,
|
|
18
|
+
currentUser: a,
|
|
19
|
+
tenantId: l,
|
|
20
|
+
workspaceId: u,
|
|
21
|
+
apiGatewayUrl: d,
|
|
22
|
+
authToken: f,
|
|
23
|
+
onCartSelect: p,
|
|
24
|
+
onOrderSelect: m,
|
|
25
|
+
isStandalone: !0,
|
|
26
|
+
navigateTo: v,
|
|
27
|
+
getPath: _
|
|
28
|
+
}), [
|
|
29
|
+
g,
|
|
30
|
+
a,
|
|
31
|
+
l,
|
|
32
|
+
u,
|
|
33
|
+
d,
|
|
34
|
+
f,
|
|
35
|
+
p,
|
|
36
|
+
m,
|
|
37
|
+
v,
|
|
38
|
+
_
|
|
39
|
+
]);
|
|
40
|
+
return /* @__PURE__ */ s(c.Provider, {
|
|
41
|
+
value: y,
|
|
42
|
+
children: t
|
|
43
|
+
});
|
|
44
|
+
}, d = ({ children: t, basePath: r, navigate: a, currentUser: o, tenantId: l, workspaceId: u, apiGatewayUrl: d, authToken: f, onCartSelect: p, onOrderSelect: m }) => {
|
|
45
|
+
let h = r || "/", g = n((t) => e(h, t), [h]), _ = n((t) => {
|
|
46
|
+
a(e(h, t));
|
|
47
|
+
}, [h, a]), v = i(() => ({
|
|
48
|
+
basePath: h,
|
|
49
|
+
navigate: a,
|
|
50
|
+
currentUser: o,
|
|
51
|
+
tenantId: l,
|
|
52
|
+
workspaceId: u,
|
|
53
|
+
apiGatewayUrl: d,
|
|
54
|
+
authToken: f,
|
|
55
|
+
onCartSelect: p,
|
|
56
|
+
onOrderSelect: m,
|
|
57
|
+
isStandalone: !1,
|
|
58
|
+
navigateTo: _,
|
|
59
|
+
getPath: g
|
|
60
|
+
}), [
|
|
61
|
+
h,
|
|
62
|
+
a,
|
|
63
|
+
o,
|
|
64
|
+
l,
|
|
65
|
+
u,
|
|
66
|
+
d,
|
|
67
|
+
f,
|
|
68
|
+
p,
|
|
69
|
+
m,
|
|
70
|
+
_,
|
|
71
|
+
g
|
|
72
|
+
]);
|
|
73
|
+
return /* @__PURE__ */ s(c.Provider, {
|
|
74
|
+
value: v,
|
|
75
|
+
children: t
|
|
76
|
+
});
|
|
77
|
+
}, f = (e) => {
|
|
78
|
+
let { children: t, navigate: n } = e;
|
|
79
|
+
return n ? /* @__PURE__ */ s(d, {
|
|
80
|
+
...e,
|
|
81
|
+
navigate: n,
|
|
82
|
+
isStandalone: !1,
|
|
83
|
+
children: t
|
|
84
|
+
}) : /* @__PURE__ */ s(a, { children: /* @__PURE__ */ s(u, {
|
|
85
|
+
...e,
|
|
86
|
+
isStandalone: !0,
|
|
87
|
+
children: t
|
|
88
|
+
}) });
|
|
89
|
+
};
|
|
90
|
+
//#endregion
|
|
91
|
+
export { f as AdapterCloudProvider, l as useAdapterCloud };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=AdapterCloudContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterCloudContext.js","names":[],"sources":["../../../src/adaptercloud/context/AdapterCloudContext.tsx"],"sourcesContent":["/**\n * AdapterCloud Context Provider\n * @module adaptercloud/context\n */\n\nimport type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo, useCallback } from 'react';\nimport { MemoryRouter, useNavigate as useRouterNavigate } from 'react-router-dom';\nimport type { AdapterCloudRootProps } from '../types';\nimport { joinPath } from '../utils/navigation';\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface AdapterCloudContextValue extends Omit<\n AdapterCloudRootProps,\n 'registerNavItems' | 'registerFooterItems' | 'navigate'\n> {\n isStandalone: boolean;\n /** Shell's navigate function (only available in integrated mode) */\n navigate?: (path: string) => void;\n /** Navigate to a path relative to basePath */\n navigateTo: (relativePath: string) => void;\n /** Get the full path for a relative path */\n getPath: (relativePath: string) => string;\n}\n\nconst AdapterCloudContext = createContext<AdapterCloudContextValue | null>(null);\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useAdapterCloud(): AdapterCloudContextValue {\n const context = useContext(AdapterCloudContext);\n if (!context) {\n throw new Error('useAdapterCloud must be used within a AdapterCloudProvider');\n }\n return context;\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\ntype ProviderProps = Omit<AdapterCloudRootProps, 'registerNavItems' | 'registerFooterItems'> & {\n isStandalone: boolean;\n};\n\n/** Provider for standalone mode (has access to MemoryRouter) */\nconst StandaloneProviderInner: FC<PropsWithChildren<ProviderProps>> = ({\n children,\n basePath,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n onCartSelect,\n onOrderSelect,\n}) => {\n const routerNavigate = useRouterNavigate();\n const effectiveBasePath = basePath || '/';\n\n const getPath = useCallback(\n (relativePath: string) => joinPath(effectiveBasePath, relativePath),\n [effectiveBasePath]\n );\n\n const navigateTo = useCallback(\n (relativePath: string) => {\n const fullPath = joinPath(effectiveBasePath, relativePath);\n routerNavigate(fullPath);\n },\n [effectiveBasePath, routerNavigate]\n );\n\n const contextValue = useMemo<AdapterCloudContextValue>(\n () => ({\n basePath: effectiveBasePath,\n navigate: undefined,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n onCartSelect,\n onOrderSelect,\n isStandalone: true,\n navigateTo,\n getPath,\n }),\n [\n effectiveBasePath,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n onCartSelect,\n onOrderSelect,\n navigateTo,\n getPath,\n ]\n );\n\n return <AdapterCloudContext.Provider value={contextValue}>{children}</AdapterCloudContext.Provider>;\n};\n\n/** Provider for integrated mode (shell provides navigate) */\nconst IntegratedProviderInner: FC<\n PropsWithChildren<ProviderProps & { navigate: (path: string) => void }>\n> = ({\n children,\n basePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n onCartSelect,\n onOrderSelect,\n}) => {\n const effectiveBasePath = basePath || '/';\n\n const getPath = useCallback(\n (relativePath: string) => joinPath(effectiveBasePath, relativePath),\n [effectiveBasePath]\n );\n\n const navigateTo = useCallback(\n (relativePath: string) => {\n const fullPath = joinPath(effectiveBasePath, relativePath);\n navigate(fullPath);\n },\n [effectiveBasePath, navigate]\n );\n\n const contextValue = useMemo<AdapterCloudContextValue>(\n () => ({\n basePath: effectiveBasePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n onCartSelect,\n onOrderSelect,\n isStandalone: false,\n navigateTo,\n getPath,\n }),\n [\n effectiveBasePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n onCartSelect,\n onOrderSelect,\n navigateTo,\n getPath,\n ]\n );\n\n return <AdapterCloudContext.Provider value={contextValue}>{children}</AdapterCloudContext.Provider>;\n};\n\nexport const AdapterCloudProvider: FC<PropsWithChildren<AdapterCloudRootProps>> = (props) => {\n const { children, navigate } = props;\n // Standalone mode: no navigate function provided (MFE manages its own router)\n // Integrated mode: navigate function provided by shell (shell provides router)\n const isStandalone = !navigate;\n\n // Standalone mode: wrap in MemoryRouter\n if (isStandalone) {\n return (\n <MemoryRouter>\n <StandaloneProviderInner {...props} isStandalone={true}>\n {children}\n </StandaloneProviderInner>\n </MemoryRouter>\n );\n }\n\n // Integrated mode: shell provides router\n return (\n <IntegratedProviderInner {...props} navigate={navigate} isStandalone={false}>\n {children}\n </IntegratedProviderInner>\n );\n};\n"],"mappings":";;;;;AA4BA,IAAM,IAAsB,EAA+C,KAAK;AAMhF,SAAgB,IAA4C;CAC1D,IAAM,IAAU,EAAW,EAAoB;AAC/C,KAAI,CAAC,EACH,OAAU,MAAM,6DAA6D;AAE/E,QAAO;;AAYT,IAAM,KAAiE,EACrE,aACA,aACA,gBACA,aACA,gBACA,kBACA,cACA,iBACA,uBACI;CACJ,IAAM,IAAiB,GAAmB,EACpC,IAAoB,KAAY,KAEhC,IAAU,GACb,MAAyB,EAAS,GAAmB,EAAa,EACnE,CAAC,EAAkB,CACpB,EAEK,IAAa,GAChB,MAAyB;AAExB,IADiB,EAAS,GAAmB,EAAa,CAClC;IAE1B,CAAC,GAAmB,EAAe,CACpC,EAEK,IAAe,SACZ;EACL,UAAU;EACV,UAAU,KAAA;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QAAO,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAe;EAAwC,CAAA;GAI/F,KAED,EACH,aACA,aACA,aACA,gBACA,aACA,gBACA,kBACA,cACA,iBACA,uBACI;CACJ,IAAM,IAAoB,KAAY,KAEhC,IAAU,GACb,MAAyB,EAAS,GAAmB,EAAa,EACnE,CAAC,EAAkB,CACpB,EAEK,IAAa,GAChB,MAAyB;AAExB,IADiB,EAAS,GAAmB,EAAa,CACxC;IAEpB,CAAC,GAAmB,EAAS,CAC9B,EAEK,IAAe,SACZ;EACL,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QAAO,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAe;EAAwC,CAAA;GAGxF,KAAsE,MAAU;CAC3F,IAAM,EAAE,aAAU,gBAAa;AAiB/B,QAdsB,IAepB,kBAAC,GAAD;EAAyB,GAAI;EAAiB;EAAU,cAAc;EACnE;EACuB,CAAA,GAZxB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAyB,GAAI;EAAO,cAAc;EAC/C;EACuB,CAAA,EACb,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./AdapterCloudContext.js";
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { useAdapterCloud as e } from "../context/AdapterCloudContext.js";
|
|
2
|
+
import "../context/index.js";
|
|
3
|
+
import { useMemo as t } from "react";
|
|
4
|
+
import { useMutation as n, useQuery as r, useQueryClient as i } from "@tanstack/react-query";
|
|
5
|
+
import { graphqlFetch as a } from "@burdenoff/fe-libs/shared/graphql";
|
|
6
|
+
//#region src/adaptercloud/hooks/useAdapterCloudApi.ts
|
|
7
|
+
var o = async (e, t, n) => {
|
|
8
|
+
let r = await a({
|
|
9
|
+
gateway: "workspace",
|
|
10
|
+
baseUrl: n,
|
|
11
|
+
query: e,
|
|
12
|
+
variables: t,
|
|
13
|
+
workspaceToken: !0
|
|
14
|
+
});
|
|
15
|
+
if (r.errors?.length) throw Error(r.errors[0]?.message ?? "GraphQL request failed");
|
|
16
|
+
if (!r.data) throw Error("GraphQL response did not include data");
|
|
17
|
+
return r.data;
|
|
18
|
+
}, s = (t) => {
|
|
19
|
+
let { apiGatewayUrl: n } = e();
|
|
20
|
+
return r({
|
|
21
|
+
queryKey: [
|
|
22
|
+
"adaptercloud",
|
|
23
|
+
"providers",
|
|
24
|
+
t
|
|
25
|
+
],
|
|
26
|
+
queryFn: async () => (await o("query Providers($filter: AdapterCloudProviderFilterInput) {\n listServiceProviders(filter: $filter, limit: 200) {\n id name slug category status rating totalRatings averageOrderValue serviceTypes location businessHours createdAt\n }\n }", { filter: t ? { query: t } : void 0 }, n)).listServiceProviders.map((e) => ({
|
|
27
|
+
...e,
|
|
28
|
+
image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=400",
|
|
29
|
+
images: ["https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=400"],
|
|
30
|
+
isOpen: e.status === "ACTIVE" || e.status === "VERIFIED",
|
|
31
|
+
isVerified: e.status === "VERIFIED",
|
|
32
|
+
distance: .5,
|
|
33
|
+
estimatedTime: 20,
|
|
34
|
+
createdAt: e.createdAt
|
|
35
|
+
}))
|
|
36
|
+
});
|
|
37
|
+
}, c = (t) => {
|
|
38
|
+
let { apiGatewayUrl: n } = e();
|
|
39
|
+
return r({
|
|
40
|
+
queryKey: [
|
|
41
|
+
"adaptercloud",
|
|
42
|
+
"offerings",
|
|
43
|
+
t
|
|
44
|
+
],
|
|
45
|
+
queryFn: async () => (await o("query Offerings($providerId: String) {\n listOfferings(providerId: $providerId, limit: 300) {\n id providerId kind name slug category description price originalPrice stock durationMinutes serviceType tags isAvailable metadata media\n }\n }", { providerId: t }, n)).listOfferings,
|
|
46
|
+
enabled: !!t
|
|
47
|
+
});
|
|
48
|
+
}, l = (t = {}) => {
|
|
49
|
+
let { apiGatewayUrl: n } = e();
|
|
50
|
+
return r({
|
|
51
|
+
queryKey: [
|
|
52
|
+
"adaptercloud",
|
|
53
|
+
"orders",
|
|
54
|
+
t.providerId,
|
|
55
|
+
t.customerId
|
|
56
|
+
],
|
|
57
|
+
queryFn: async () => (await o("query Orders($providerId: String, $customerId: String) {\n listOrders(providerId: $providerId, customerId: $customerId, limit: 200) {\n id orderNumber providerId customerId status paymentStatus fulfillmentType subtotal tax deliveryFee discount total notes timeline paymentMethod deliveryAddress createdAt\n provider { name }\n items { id offeringId name quantity unitPrice totalPrice customizations }\n }\n }", t, n)).listOrders.map((e) => ({
|
|
58
|
+
id: e.id,
|
|
59
|
+
cartId: e.providerId,
|
|
60
|
+
cartName: e.provider?.name || "Unknown Cart",
|
|
61
|
+
cartImage: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=100",
|
|
62
|
+
items: e.items.map((e) => ({
|
|
63
|
+
id: e.id,
|
|
64
|
+
name: e.name,
|
|
65
|
+
quantity: e.quantity,
|
|
66
|
+
price: e.unitPrice,
|
|
67
|
+
customizations: e.customizations
|
|
68
|
+
})),
|
|
69
|
+
total: e.total,
|
|
70
|
+
subtotal: e.subtotal,
|
|
71
|
+
taxes: e.tax,
|
|
72
|
+
deliveryFee: e.deliveryFee,
|
|
73
|
+
discount: e.discount,
|
|
74
|
+
status: e.status.toLowerCase(),
|
|
75
|
+
orderDate: e.createdAt,
|
|
76
|
+
deliveryAddress: e.deliveryAddress,
|
|
77
|
+
paymentMethod: e.paymentMethod || "Cash",
|
|
78
|
+
paymentStatus: e.paymentStatus.toLowerCase(),
|
|
79
|
+
timeline: e.timeline || []
|
|
80
|
+
}))
|
|
81
|
+
});
|
|
82
|
+
}, u = () => {
|
|
83
|
+
let { apiGatewayUrl: t } = e();
|
|
84
|
+
return r({
|
|
85
|
+
queryKey: ["adaptercloud", "dashboard-stats"],
|
|
86
|
+
queryFn: async () => (await o("query DashboardStats { adaptercloudDashboardStats { totalOrders totalRevenue activeProviders activeCustomers avgRating pendingOrders } }", {}, t)).adaptercloudDashboardStats
|
|
87
|
+
});
|
|
88
|
+
}, d = () => {
|
|
89
|
+
let { apiGatewayUrl: t } = e();
|
|
90
|
+
return r({
|
|
91
|
+
queryKey: ["adaptercloud", "investment-opportunities"],
|
|
92
|
+
queryFn: async () => (await o("query Opportunities {\n listInvestmentOpportunities(limit: 200) {\n id providerId title description targetAmount raisedAmount minimumInvestment expectedReturnsPct lockInMonths riskLevel status expiresAt terms businessMetrics createdAt\n provider { name }\n }\n }", {}, t)).listInvestmentOpportunities.map((e) => ({
|
|
93
|
+
id: e.id,
|
|
94
|
+
cartId: e.providerId,
|
|
95
|
+
cartName: e.provider?.name || "Unknown Cart",
|
|
96
|
+
businessOwner: "Owner",
|
|
97
|
+
targetAmount: e.targetAmount,
|
|
98
|
+
raisedAmount: e.raisedAmount,
|
|
99
|
+
minimumInvestment: e.minimumInvestment,
|
|
100
|
+
expectedReturns: e.expectedReturnsPct,
|
|
101
|
+
investmentPeriod: e.lockInMonths,
|
|
102
|
+
riskLevel: e.riskLevel.toLowerCase(),
|
|
103
|
+
description: e.description,
|
|
104
|
+
businessPlan: "",
|
|
105
|
+
financialProjections: [],
|
|
106
|
+
documents: [],
|
|
107
|
+
investors: [],
|
|
108
|
+
status: e.status.toLowerCase(),
|
|
109
|
+
createdAt: e.createdAt,
|
|
110
|
+
expiresAt: e.expiresAt
|
|
111
|
+
}))
|
|
112
|
+
});
|
|
113
|
+
}, f = (t) => {
|
|
114
|
+
let { apiGatewayUrl: n } = e();
|
|
115
|
+
return r({
|
|
116
|
+
queryKey: [
|
|
117
|
+
"adaptercloud",
|
|
118
|
+
"investments",
|
|
119
|
+
t
|
|
120
|
+
],
|
|
121
|
+
queryFn: async () => (await o("query Investments($investorId: String!) {\n listInvestments(investorId: $investorId) {\n id opportunityId amount currentValue expectedReturnsPct status investedAt maturedAt realizedReturns\n opportunity { provider { name } }\n }\n }", { investorId: t }, n)).listInvestments.map((e) => ({
|
|
122
|
+
id: e.id,
|
|
123
|
+
opportunityId: e.opportunityId,
|
|
124
|
+
cartName: e.opportunity?.provider?.name || "Unknown Cart",
|
|
125
|
+
investedAmount: e.amount,
|
|
126
|
+
currentValue: e.currentValue,
|
|
127
|
+
returns: e.realizedReturns,
|
|
128
|
+
returnsPercentage: e.expectedReturnsPct,
|
|
129
|
+
investmentDate: e.investedAt,
|
|
130
|
+
status: e.status.toLowerCase()
|
|
131
|
+
})),
|
|
132
|
+
enabled: !!t
|
|
133
|
+
});
|
|
134
|
+
}, p = (t) => {
|
|
135
|
+
let { apiGatewayUrl: n } = e();
|
|
136
|
+
return r({
|
|
137
|
+
queryKey: [
|
|
138
|
+
"adaptercloud",
|
|
139
|
+
"worker-tasks",
|
|
140
|
+
t
|
|
141
|
+
],
|
|
142
|
+
queryFn: async () => (await o("query WorkerTasks($workerId: String!) {\n listWorkerTasks(workerId: $workerId, limit: 100) {\n id orderId providerId type description priority status assignedAt dueAt completedAt customerName customerPhone earnings distance notes\n provider { name }\n order { deliveryAddress }\n }\n }", { workerId: t }, n)).listWorkerTasks.map((e) => ({
|
|
143
|
+
id: e.id,
|
|
144
|
+
orderId: e.orderId,
|
|
145
|
+
cartId: e.providerId,
|
|
146
|
+
cartName: e.provider?.name || "Unknown Cart",
|
|
147
|
+
type: e.type.toLowerCase(),
|
|
148
|
+
description: e.description,
|
|
149
|
+
priority: e.priority.toLowerCase(),
|
|
150
|
+
status: e.status.toLowerCase(),
|
|
151
|
+
assignedAt: e.assignedAt,
|
|
152
|
+
dueAt: e.dueAt,
|
|
153
|
+
completedAt: e.completedAt,
|
|
154
|
+
customerName: e.customerName,
|
|
155
|
+
customerPhone: e.customerPhone,
|
|
156
|
+
deliveryAddress: e.order?.deliveryAddress,
|
|
157
|
+
earnings: e.earnings,
|
|
158
|
+
distance: e.distance,
|
|
159
|
+
notes: e.notes
|
|
160
|
+
})),
|
|
161
|
+
enabled: !!t
|
|
162
|
+
});
|
|
163
|
+
}, m = (t) => {
|
|
164
|
+
let { apiGatewayUrl: n } = e();
|
|
165
|
+
return r({
|
|
166
|
+
queryKey: [
|
|
167
|
+
"adaptercloud",
|
|
168
|
+
"worker-stats",
|
|
169
|
+
t
|
|
170
|
+
],
|
|
171
|
+
queryFn: async () => (await o("query WorkerStats($workerId: String!) {\n adaptercloudWorkerStats(workerId: $workerId) {\n totalDeliveries totalEarnings averageRating completionRate todayTasks todayEarnings\n }\n }", { workerId: t }, n)).adaptercloudWorkerStats,
|
|
172
|
+
enabled: !!t
|
|
173
|
+
});
|
|
174
|
+
}, h = () => {
|
|
175
|
+
let t = i(), { apiGatewayUrl: r } = e();
|
|
176
|
+
return n({
|
|
177
|
+
mutationFn: async (e) => (await o("mutation PlaceOrder($input: AdapterCloudPlaceOrderInput!) {\n placeOrder(input: $input) {\n id orderNumber status total createdAt\n }\n }", { input: e }, r)).placeOrder,
|
|
178
|
+
onSuccess: () => {
|
|
179
|
+
t.invalidateQueries({ queryKey: ["adaptercloud", "orders"] }), t.invalidateQueries({ queryKey: ["adaptercloud", "dashboard-stats"] });
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}, g = () => {
|
|
183
|
+
let t = i(), { apiGatewayUrl: r } = e();
|
|
184
|
+
return n({
|
|
185
|
+
mutationFn: async ({ taskId: e, status: t }) => (await o("mutation UpdateTaskStatus($taskId: String!, $status: AdapterCloudWorkerTaskStatus!) {\n adaptercloudUpdateWorkerTaskStatus(taskId: $taskId, status: $status) {\n id status\n }\n }", {
|
|
186
|
+
taskId: e,
|
|
187
|
+
status: t
|
|
188
|
+
}, r)).adaptercloudUpdateWorkerTaskStatus,
|
|
189
|
+
onSuccess: () => {
|
|
190
|
+
t.invalidateQueries({ queryKey: ["adaptercloud", "worker-tasks"] }), t.invalidateQueries({ queryKey: ["adaptercloud", "worker-stats"] });
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}, _ = () => {
|
|
194
|
+
let t = i(), { apiGatewayUrl: r } = e();
|
|
195
|
+
return n({
|
|
196
|
+
mutationFn: async ({ workerId: e, action: t }) => (await o("mutation ClockInOut($workerId: String!, $action: AdapterCloudClockAction!) {\n adaptercloudWorkerClockInOut(workerId: $workerId, action: $action) {\n success message\n }\n }", {
|
|
197
|
+
workerId: e,
|
|
198
|
+
action: t
|
|
199
|
+
}, r)).adaptercloudWorkerClockInOut,
|
|
200
|
+
onSuccess: () => {
|
|
201
|
+
t.invalidateQueries({ queryKey: ["adaptercloud", "worker-schedules"] });
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}, v = () => {
|
|
205
|
+
let { currentUser: n } = e(), r = s(), i = l({ customerId: n?.id }), a = u(), o = d(), c = f(n?.id || "");
|
|
206
|
+
return t(() => ({
|
|
207
|
+
providers: r,
|
|
208
|
+
orders: i,
|
|
209
|
+
dashboardStats: a,
|
|
210
|
+
investmentOpportunities: o,
|
|
211
|
+
investments: c
|
|
212
|
+
}), [
|
|
213
|
+
r,
|
|
214
|
+
i,
|
|
215
|
+
a,
|
|
216
|
+
o,
|
|
217
|
+
c
|
|
218
|
+
]);
|
|
219
|
+
};
|
|
220
|
+
//#endregion
|
|
221
|
+
export { v as useAdapterCloudApi, u as useDashboardStats, d as useInvestmentOpportunities, f as useInvestments, c as useOfferings, l as useOrders, h as usePlaceOrder, s as useProviders, g as useUpdateWorkerTaskStatus, _ as useWorkerClockInOut, m as useWorkerStats, p as useWorkerTasks };
|
|
222
|
+
|
|
223
|
+
//# sourceMappingURL=useAdapterCloudApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAdapterCloudApi.js","names":[],"sources":["../../../src/adaptercloud/hooks/useAdapterCloudApi.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useAdapterCloud } from '../context';\nimport type {\n MockCart,\n MockOrder,\n InvestmentOpportunity,\n Investment,\n DashboardStats,\n AdminAnalytics,\n WorkerTask,\n} from '../types';\n\nconst adaptercloudQuery = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string\n): Promise<TData> => {\n const response = await graphqlFetch<TData>({\n gateway: 'workspace',\n baseUrl,\n query,\n variables,\n workspaceToken: true,\n });\n\n if (response.errors?.length) {\n throw new Error(response.errors[0]?.message ?? 'GraphQL request failed');\n }\n\n if (!response.data) {\n throw new Error('GraphQL response did not include data');\n }\n\n return response.data;\n};\n\n// ============================================================================\n// Service Providers (Carts)\n// ============================================================================\n\nexport const useProviders = (query?: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'providers', query],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listServiceProviders: any[] }>(\n `query Providers($filter: AdapterCloudProviderFilterInput) {\n listServiceProviders(filter: $filter, limit: 200) {\n id name slug category status rating totalRatings averageOrderValue serviceTypes location businessHours createdAt\n }\n }`,\n {\n filter: query\n ? {\n query,\n }\n : undefined,\n },\n apiGatewayUrl\n );\n\n return result.listServiceProviders.map((p) => ({\n ...p,\n image: `https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=400`, // Placeholder\n images: [`https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=400`],\n isOpen: p.status === 'ACTIVE' || p.status === 'VERIFIED',\n isVerified: p.status === 'VERIFIED',\n distance: 0.5, // Mock\n estimatedTime: 20, // Mock\n createdAt: p.createdAt,\n })) as MockCart[];\n },\n });\n};\n\nexport const useOfferings = (providerId?: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'offerings', providerId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listOfferings: any[] }>(\n `query Offerings($providerId: String) {\n listOfferings(providerId: $providerId, limit: 300) {\n id providerId kind name slug category description price originalPrice stock durationMinutes serviceType tags isAvailable metadata media\n }\n }`,\n { providerId },\n apiGatewayUrl\n );\n return result.listOfferings;\n },\n enabled: Boolean(providerId),\n });\n};\n\n// ============================================================================\n// Orders\n// ============================================================================\n\nexport const useOrders = (input: { providerId?: string; customerId?: string } = {}) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'orders', input.providerId, input.customerId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listOrders: any[] }>(\n `query Orders($providerId: String, $customerId: String) {\n listOrders(providerId: $providerId, customerId: $customerId, limit: 200) {\n id orderNumber providerId customerId status paymentStatus fulfillmentType subtotal tax deliveryFee discount total notes timeline paymentMethod deliveryAddress createdAt\n provider { name }\n items { id offeringId name quantity unitPrice totalPrice customizations }\n }\n }`,\n input,\n apiGatewayUrl\n );\n\n return result.listOrders.map((o) => ({\n id: o.id,\n cartId: o.providerId,\n cartName: o.provider?.name || 'Unknown Cart',\n cartImage: `https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=100`, // Placeholder\n items: o.items.map((i: any) => ({\n id: i.id,\n name: i.name,\n quantity: i.quantity,\n price: i.unitPrice,\n customizations: i.customizations,\n })),\n total: o.total,\n subtotal: o.subtotal,\n taxes: o.tax,\n deliveryFee: o.deliveryFee,\n discount: o.discount,\n status: o.status.toLowerCase(),\n orderDate: o.createdAt,\n deliveryAddress: o.deliveryAddress,\n paymentMethod: o.paymentMethod || 'Cash',\n paymentStatus: o.paymentStatus.toLowerCase(),\n timeline: o.timeline || [],\n })) as MockOrder[];\n },\n });\n};\n\n// ============================================================================\n// Analytics & Stats\n// ============================================================================\n\nexport const useDashboardStats = () => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'dashboard-stats'],\n queryFn: async () => {\n const result = await adaptercloudQuery<{\n adaptercloudDashboardStats: DashboardStats;\n }>(\n `query DashboardStats { adaptercloudDashboardStats { totalOrders totalRevenue activeProviders activeCustomers avgRating pendingOrders } }`,\n {},\n apiGatewayUrl\n );\n return result.adaptercloudDashboardStats;\n },\n });\n};\n\nexport const useAdminAnalytics = () => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'admin-analytics'],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ adaptercloudAdminAnalytics: AdminAnalytics }>(\n `query AdminAnalytics { adaptercloudAdminAnalytics { revenueByCategory orderTrends topProviders customerGrowth categoryDistribution } }`,\n {},\n apiGatewayUrl\n );\n return result.adaptercloudAdminAnalytics;\n },\n });\n};\n\n// ============================================================================\n// Investments\n// ============================================================================\n\nexport const useInvestmentOpportunities = () => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'investment-opportunities'],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listInvestmentOpportunities: any[] }>(\n `query Opportunities {\n listInvestmentOpportunities(limit: 200) {\n id providerId title description targetAmount raisedAmount minimumInvestment expectedReturnsPct lockInMonths riskLevel status expiresAt terms businessMetrics createdAt\n provider { name }\n }\n }`,\n {},\n apiGatewayUrl\n );\n\n return result.listInvestmentOpportunities.map((o) => ({\n id: o.id,\n cartId: o.providerId,\n cartName: o.provider?.name || 'Unknown Cart',\n businessOwner: 'Owner', // Mock\n targetAmount: o.targetAmount,\n raisedAmount: o.raisedAmount,\n minimumInvestment: o.minimumInvestment,\n expectedReturns: o.expectedReturnsPct,\n investmentPeriod: o.lockInMonths,\n riskLevel: o.riskLevel.toLowerCase(),\n description: o.description,\n businessPlan: '',\n financialProjections: [],\n documents: [],\n investors: [],\n status: o.status.toLowerCase(),\n createdAt: o.createdAt,\n expiresAt: o.expiresAt,\n })) as InvestmentOpportunity[];\n },\n });\n};\n\nexport const useInvestments = (investorId: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'investments', investorId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listInvestments: any[] }>(\n `query Investments($investorId: String!) {\n listInvestments(investorId: $investorId) {\n id opportunityId amount currentValue expectedReturnsPct status investedAt maturedAt realizedReturns\n opportunity { provider { name } }\n }\n }`,\n { investorId },\n apiGatewayUrl\n );\n\n return result.listInvestments.map((i) => ({\n id: i.id,\n opportunityId: i.opportunityId,\n cartName: i.opportunity?.provider?.name || 'Unknown Cart',\n investedAmount: i.amount,\n currentValue: i.currentValue,\n returns: i.realizedReturns,\n returnsPercentage: i.expectedReturnsPct,\n investmentDate: i.investedAt,\n status: i.status.toLowerCase(),\n })) as Investment[];\n },\n enabled: Boolean(investorId),\n });\n};\n\n// ============================================================================\n// Workers & Tasks\n// ============================================================================\n\nexport const useWorkerTasks = (workerId: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'worker-tasks', workerId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listWorkerTasks: any[] }>(\n `query WorkerTasks($workerId: String!) {\n listWorkerTasks(workerId: $workerId, limit: 100) {\n id orderId providerId type description priority status assignedAt dueAt completedAt customerName customerPhone earnings distance notes\n provider { name }\n order { deliveryAddress }\n }\n }`,\n { workerId },\n apiGatewayUrl\n );\n\n return result.listWorkerTasks.map((t) => ({\n id: t.id,\n orderId: t.orderId,\n cartId: t.providerId,\n cartName: t.provider?.name || 'Unknown Cart',\n type: t.type.toLowerCase(),\n description: t.description,\n priority: t.priority.toLowerCase(),\n status: t.status.toLowerCase(),\n assignedAt: t.assignedAt,\n dueAt: t.dueAt,\n completedAt: t.completedAt,\n customerName: t.customerName,\n customerPhone: t.customerPhone,\n deliveryAddress: t.order?.deliveryAddress,\n earnings: t.earnings,\n distance: t.distance,\n notes: t.notes,\n })) as WorkerTask[];\n },\n enabled: Boolean(workerId),\n });\n};\n\nexport const useWorkerStats = (workerId: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'worker-stats', workerId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ adaptercloudWorkerStats: any }>(\n `query WorkerStats($workerId: String!) {\n adaptercloudWorkerStats(workerId: $workerId) {\n totalDeliveries totalEarnings averageRating completionRate todayTasks todayEarnings\n }\n }`,\n { workerId },\n apiGatewayUrl\n );\n return result.adaptercloudWorkerStats;\n },\n enabled: Boolean(workerId),\n });\n};\n\nexport const useWorkerSchedules = (workerId: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'worker-schedules', workerId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listWorkerSchedules: any[] }>(\n `query WorkerSchedules($workerId: String!) {\n listWorkerSchedules(workerId: $workerId) {\n id date startTime endTime providerId status tasksCompleted totalEarnings\n provider { name }\n }\n }`,\n { workerId },\n apiGatewayUrl\n );\n\n return result.listWorkerSchedules.map((s) => ({\n id: s.id,\n date: s.date,\n startTime: s.startTime,\n endTime: s.endTime,\n cartId: s.providerId,\n cartName: s.provider?.name || 'Unknown Cart',\n status: s.status.toLowerCase(),\n tasksCompleted: s.tasksCompleted,\n totalEarnings: s.totalEarnings,\n }));\n },\n enabled: Boolean(workerId),\n });\n};\n\n// ============================================================================\n// Reviews\n// ============================================================================\n\nexport const useReviews = (providerId: string) => {\n const { apiGatewayUrl } = useAdapterCloud();\n return useQuery({\n queryKey: ['adaptercloud', 'reviews', providerId],\n queryFn: async () => {\n const result = await adaptercloudQuery<{ listReviews: any[] }>(\n `query Reviews($providerId: String!) {\n listReviews(providerId: $providerId) {\n id providerId customerId rating review response createdAt updatedAt\n }\n }`,\n { providerId },\n apiGatewayUrl\n );\n return result.listReviews;\n },\n enabled: Boolean(providerId),\n });\n};\n\n// ============================================================================\n// Mutations\n// ============================================================================\n\nexport const usePlaceOrder = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useAdapterCloud();\n\n return useMutation({\n mutationFn: async (input: Record<string, unknown>) => {\n const result = await adaptercloudQuery<{ placeOrder: any }>(\n `mutation PlaceOrder($input: AdapterCloudPlaceOrderInput!) {\n placeOrder(input: $input) {\n id orderNumber status total createdAt\n }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.placeOrder;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'orders'] });\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'dashboard-stats'] });\n },\n });\n};\n\nexport const useCreateProvider = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useAdapterCloud();\n\n return useMutation({\n mutationFn: async (input: Record<string, unknown>) => {\n const result = await adaptercloudQuery<{ adaptercloudCreateServiceProvider: any }>(\n `mutation CreateProvider($input: AdapterCloudCreateServiceProviderInput!) {\n adaptercloudCreateServiceProvider(input: $input) {\n id name slug status category location rating\n }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.adaptercloudCreateServiceProvider;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'providers'] });\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'dashboard-stats'] });\n },\n });\n};\n\nexport const useUpdateWorkerTaskStatus = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useAdapterCloud();\n\n return useMutation({\n mutationFn: async ({ taskId, status }: { taskId: string; status: string }) => {\n const result = await adaptercloudQuery<{ adaptercloudUpdateWorkerTaskStatus: any }>(\n `mutation UpdateTaskStatus($taskId: String!, $status: AdapterCloudWorkerTaskStatus!) {\n adaptercloudUpdateWorkerTaskStatus(taskId: $taskId, status: $status) {\n id status\n }\n }`,\n { taskId, status },\n apiGatewayUrl\n );\n return result.adaptercloudUpdateWorkerTaskStatus;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'worker-tasks'] });\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'worker-stats'] });\n },\n });\n};\n\nexport const useWorkerClockInOut = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useAdapterCloud();\n\n return useMutation({\n mutationFn: async ({\n workerId,\n action,\n }: {\n workerId: string;\n action: 'CLOCK_IN' | 'CLOCK_OUT';\n }) => {\n const result = await adaptercloudQuery<{ adaptercloudWorkerClockInOut: any }>(\n `mutation ClockInOut($workerId: String!, $action: AdapterCloudClockAction!) {\n adaptercloudWorkerClockInOut(workerId: $workerId, action: $action) {\n success message\n }\n }`,\n { workerId, action },\n apiGatewayUrl\n );\n return result.adaptercloudWorkerClockInOut;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['adaptercloud', 'worker-schedules'] });\n },\n });\n};\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\nexport const useAdapterCloudApi = () => {\n const { currentUser } = useAdapterCloud();\n const providers = useProviders();\n const orders = useOrders({ customerId: currentUser?.id });\n const dashboardStats = useDashboardStats();\n const investmentOpportunities = useInvestmentOpportunities();\n const investments = useInvestments(currentUser?.id || '');\n\n return useMemo(\n () => ({\n providers,\n orders,\n dashboardStats,\n investmentOpportunities,\n investments,\n }),\n [providers, orders, dashboardStats, investmentOpportunities, investments]\n );\n};\n"],"mappings":"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"}
|