@burdenoff/microfe-subscriberbot 2026.615.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/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/dist/subscriberbot/SubscriberBotRoot.js +177 -0
- package/dist/subscriberbot/SubscriberBotRoot.js.map +1 -0
- package/dist/subscriberbot/SubscriberBotRoutes.js +215 -0
- package/dist/subscriberbot/SubscriberBotRoutes.js.map +1 -0
- package/dist/subscriberbot/components/EmptyState.js +28 -0
- package/dist/subscriberbot/components/EmptyState.js.map +1 -0
- package/dist/subscriberbot/components/InvestmentCard.js +96 -0
- package/dist/subscriberbot/components/InvestmentCard.js.map +1 -0
- package/dist/subscriberbot/components/MetricsCard.js +46 -0
- package/dist/subscriberbot/components/MetricsCard.js.map +1 -0
- package/dist/subscriberbot/components/PageLayout.js +26 -0
- package/dist/subscriberbot/components/PageLayout.js.map +1 -0
- package/dist/subscriberbot/components/RatingDisplay.js +35 -0
- package/dist/subscriberbot/components/RatingDisplay.js.map +1 -0
- package/dist/subscriberbot/components/StatusBadge.js +45 -0
- package/dist/subscriberbot/components/StatusBadge.js.map +1 -0
- package/dist/subscriberbot/context/SubscriberBotContext.js +93 -0
- package/dist/subscriberbot/context/SubscriberBotContext.js.map +1 -0
- package/dist/subscriberbot/context/index.js +1 -0
- package/dist/subscriberbot/hooks/useSubscriberBotApi.js +223 -0
- package/dist/subscriberbot/hooks/useSubscriberBotApi.js.map +1 -0
- package/dist/subscriberbot/index.js +7 -0
- package/dist/subscriberbot/mocks/data.js +1517 -0
- package/dist/subscriberbot/mocks/data.js.map +1 -0
- package/dist/subscriberbot/mocks/users.js +34 -0
- package/dist/subscriberbot/mocks/users.js.map +1 -0
- package/dist/subscriberbot/pages/HomePage.js +921 -0
- package/dist/subscriberbot/pages/HomePage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js +645 -0
- package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/AdminDashboard.js +639 -0
- package/dist/subscriberbot/pages/admin/AdminDashboard.js.map +1 -0
- package/dist/subscriberbot/pages/admin/AdminFinancialPage.js +421 -0
- package/dist/subscriberbot/pages/admin/AdminFinancialPage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/AdminOrdersPage.js +660 -0
- package/dist/subscriberbot/pages/admin/AdminOrdersPage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/AdminProfilePage.js +259 -0
- package/dist/subscriberbot/pages/admin/AdminProfilePage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/AdminSettingsPage.js +649 -0
- package/dist/subscriberbot/pages/admin/AdminSettingsPage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/CartManagementPage.js +869 -0
- package/dist/subscriberbot/pages/admin/CartManagementPage.js.map +1 -0
- package/dist/subscriberbot/pages/admin/UserManagementPage.js +893 -0
- package/dist/subscriberbot/pages/admin/UserManagementPage.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js +834 -0
- package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js +700 -0
- package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js +760 -0
- package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js +886 -0
- package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js +631 -0
- package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js +913 -0
- package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js +881 -0
- package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js.map +1 -0
- package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js +833 -0
- package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js.map +1 -0
- package/dist/subscriberbot/pages/common/HelpSupportPage.js +1325 -0
- package/dist/subscriberbot/pages/common/HelpSupportPage.js.map +1 -0
- package/dist/subscriberbot/pages/common/NotificationCenterPage.js +665 -0
- package/dist/subscriberbot/pages/common/NotificationCenterPage.js.map +1 -0
- package/dist/subscriberbot/pages/common/SettingsPage.js +964 -0
- package/dist/subscriberbot/pages/common/SettingsPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/BookingDetailsPage.js +593 -0
- package/dist/subscriberbot/pages/customer/BookingDetailsPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/CartDetailPage.js +620 -0
- package/dist/subscriberbot/pages/customer/CartDetailPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js +547 -0
- package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/CheckoutPage.js +532 -0
- package/dist/subscriberbot/pages/customer/CheckoutPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/CustomerDashboard.js +496 -0
- package/dist/subscriberbot/pages/customer/CustomerDashboard.js.map +1 -0
- package/dist/subscriberbot/pages/customer/CustomerProfilePage.js +621 -0
- package/dist/subscriberbot/pages/customer/CustomerProfilePage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js +623 -0
- package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/FavoritesPage.js +477 -0
- package/dist/subscriberbot/pages/customer/FavoritesPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/OrderHistoryPage.js +438 -0
- package/dist/subscriberbot/pages/customer/OrderHistoryPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/OrderTrackingPage.js +388 -0
- package/dist/subscriberbot/pages/customer/OrderTrackingPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js +488 -0
- package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/ReviewsPage.js +606 -0
- package/dist/subscriberbot/pages/customer/ReviewsPage.js.map +1 -0
- package/dist/subscriberbot/pages/customer/SavedAddressesPage.js +443 -0
- package/dist/subscriberbot/pages/customer/SavedAddressesPage.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js +849 -0
- package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js +939 -0
- package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js +681 -0
- package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestorDashboard.js +419 -0
- package/dist/subscriberbot/pages/investor/InvestorDashboard.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js +399 -0
- package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js +569 -0
- package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js.map +1 -0
- package/dist/subscriberbot/pages/investor/InvestorProfilePage.js +1065 -0
- package/dist/subscriberbot/pages/investor/InvestorProfilePage.js.map +1 -0
- package/dist/subscriberbot/pages/worker/TaskDetailsPage.js +496 -0
- package/dist/subscriberbot/pages/worker/TaskDetailsPage.js.map +1 -0
- package/dist/subscriberbot/pages/worker/WorkerDashboard.js +634 -0
- package/dist/subscriberbot/pages/worker/WorkerDashboard.js.map +1 -0
- package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js +675 -0
- package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js.map +1 -0
- package/dist/subscriberbot/pages/worker/WorkerProfilePage.js +687 -0
- package/dist/subscriberbot/pages/worker/WorkerProfilePage.js.map +1 -0
- package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js +578 -0
- package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js.map +1 -0
- package/dist/subscriberbot/store/index.js +1 -0
- package/dist/subscriberbot/store/subscriberbotStore.js +38 -0
- package/dist/subscriberbot/store/subscriberbotStore.js.map +1 -0
- package/dist/subscriberbot/utils/cn.js +10 -0
- package/dist/subscriberbot/utils/cn.js.map +1 -0
- package/dist/subscriberbot/utils/formatters.js +51 -0
- package/dist/subscriberbot/utils/formatters.js.map +1 -0
- package/dist/subscriberbot/utils/navigation.js +9 -0
- package/dist/subscriberbot/utils/navigation.js.map +1 -0
- package/package.json +106 -0
|
@@ -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/subscriberbot/context/SubscriberBotContext.tsx
|
|
6
|
+
var c = t(null);
|
|
7
|
+
function l() {
|
|
8
|
+
let e = r(c);
|
|
9
|
+
if (!e) throw Error("useSubscriberBot must be used within a SubscriberBotProvider");
|
|
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 SubscriberBotProvider, l as useSubscriberBot };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=SubscriberBotContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberBotContext.js","names":[],"sources":["../../../src/subscriberbot/context/SubscriberBotContext.tsx"],"sourcesContent":["/**\n * SubscriberBot Context Provider\n * @module subscriberbot/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 { SubscriberBotRootProps } from '../types';\nimport { joinPath } from '../utils/navigation';\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface SubscriberBotContextValue extends Omit<\n SubscriberBotRootProps,\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 SubscriberBotContext = createContext<SubscriberBotContextValue | null>(null);\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useSubscriberBot(): SubscriberBotContextValue {\n const context = useContext(SubscriberBotContext);\n if (!context) {\n throw new Error('useSubscriberBot must be used within a SubscriberBotProvider');\n }\n return context;\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\ntype ProviderProps = Omit<SubscriberBotRootProps, '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<SubscriberBotContextValue>(\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 <SubscriberBotContext.Provider value={contextValue}>{children}</SubscriberBotContext.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<SubscriberBotContextValue>(\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 <SubscriberBotContext.Provider value={contextValue}>{children}</SubscriberBotContext.Provider>;\n};\n\nexport const SubscriberBotProvider: FC<PropsWithChildren<SubscriberBotRootProps>> = (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,IAAuB,EAAgD,KAAK;AAMlF,SAAgB,IAA8C;CAC5D,IAAM,IAAU,EAAW,EAAqB;AAChD,KAAI,CAAC,EACH,OAAU,MAAM,+DAA+D;AAEjF,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,EAAqB,UAAtB;EAA+B,OAAO;EAAe;EAAyC,CAAA;GAIjG,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,EAAqB,UAAtB;EAA+B,OAAO;EAAe;EAAyC,CAAA;GAG1F,KAAwE,MAAU;CAC7F,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 "./SubscriberBotContext.js";
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { useSubscriberBot as e } from "../context/SubscriberBotContext.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/subscriberbot/hooks/useSubscriberBotApi.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
|
+
"subscriberbot",
|
|
23
|
+
"providers",
|
|
24
|
+
t
|
|
25
|
+
],
|
|
26
|
+
queryFn: async () => (await o("query Providers($filter: SubscriberBotProviderFilterInput) {\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
|
+
"subscriberbot",
|
|
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
|
+
"subscriberbot",
|
|
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: ["subscriberbot", "dashboard-stats"],
|
|
86
|
+
queryFn: async () => (await o("query DashboardStats { subscriberbotDashboardStats { totalOrders totalRevenue activeProviders activeCustomers avgRating pendingOrders } }", {}, t)).subscriberbotDashboardStats
|
|
87
|
+
});
|
|
88
|
+
}, d = () => {
|
|
89
|
+
let { apiGatewayUrl: t } = e();
|
|
90
|
+
return r({
|
|
91
|
+
queryKey: ["subscriberbot", "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
|
+
"subscriberbot",
|
|
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
|
+
"subscriberbot",
|
|
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
|
+
"subscriberbot",
|
|
168
|
+
"worker-stats",
|
|
169
|
+
t
|
|
170
|
+
],
|
|
171
|
+
queryFn: async () => (await o("query WorkerStats($workerId: String!) {\n subscriberbotWorkerStats(workerId: $workerId) {\n totalDeliveries totalEarnings averageRating completionRate todayTasks todayEarnings\n }\n }", { workerId: t }, n)).subscriberbotWorkerStats,
|
|
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: SubscriberBotPlaceOrderInput!) {\n placeOrder(input: $input) {\n id orderNumber status total createdAt\n }\n }", { input: e }, r)).placeOrder,
|
|
178
|
+
onSuccess: () => {
|
|
179
|
+
t.invalidateQueries({ queryKey: ["subscriberbot", "orders"] }), t.invalidateQueries({ queryKey: ["subscriberbot", "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: SubscriberBotWorkerTaskStatus!) {\n subscriberbotUpdateWorkerTaskStatus(taskId: $taskId, status: $status) {\n id status\n }\n }", {
|
|
186
|
+
taskId: e,
|
|
187
|
+
status: t
|
|
188
|
+
}, r)).subscriberbotUpdateWorkerTaskStatus,
|
|
189
|
+
onSuccess: () => {
|
|
190
|
+
t.invalidateQueries({ queryKey: ["subscriberbot", "worker-tasks"] }), t.invalidateQueries({ queryKey: ["subscriberbot", "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: SubscriberBotClockAction!) {\n subscriberbotWorkerClockInOut(workerId: $workerId, action: $action) {\n success message\n }\n }", {
|
|
197
|
+
workerId: e,
|
|
198
|
+
action: t
|
|
199
|
+
}, r)).subscriberbotWorkerClockInOut,
|
|
200
|
+
onSuccess: () => {
|
|
201
|
+
t.invalidateQueries({ queryKey: ["subscriberbot", "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 { u as useDashboardStats, d as useInvestmentOpportunities, f as useInvestments, c as useOfferings, l as useOrders, h as usePlaceOrder, s as useProviders, v as useSubscriberBotApi, g as useUpdateWorkerTaskStatus, _ as useWorkerClockInOut, m as useWorkerStats, p as useWorkerTasks };
|
|
222
|
+
|
|
223
|
+
//# sourceMappingURL=useSubscriberBotApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSubscriberBotApi.js","names":[],"sources":["../../../src/subscriberbot/hooks/useSubscriberBotApi.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 { useSubscriberBot } from '../context';\nimport type {\n MockCart,\n MockOrder,\n InvestmentOpportunity,\n Investment,\n DashboardStats,\n AdminAnalytics,\n WorkerTask,\n} from '../types';\n\nconst subscriberbotQuery = 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'providers', query],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ listServiceProviders: any[] }>(\n `query Providers($filter: SubscriberBotProviderFilterInput) {\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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'offerings', providerId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'orders', input.providerId, input.customerId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'dashboard-stats'],\n queryFn: async () => {\n const result = await subscriberbotQuery<{\n subscriberbotDashboardStats: DashboardStats;\n }>(\n `query DashboardStats { subscriberbotDashboardStats { totalOrders totalRevenue activeProviders activeCustomers avgRating pendingOrders } }`,\n {},\n apiGatewayUrl\n );\n return result.subscriberbotDashboardStats;\n },\n });\n};\n\nexport const useAdminAnalytics = () => {\n const { apiGatewayUrl } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'admin-analytics'],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ subscriberbotAdminAnalytics: AdminAnalytics }>(\n `query AdminAnalytics { subscriberbotAdminAnalytics { revenueByCategory orderTrends topProviders customerGrowth categoryDistribution } }`,\n {},\n apiGatewayUrl\n );\n return result.subscriberbotAdminAnalytics;\n },\n });\n};\n\n// ============================================================================\n// Investments\n// ============================================================================\n\nexport const useInvestmentOpportunities = () => {\n const { apiGatewayUrl } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'investment-opportunities'],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'investments', investorId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'worker-tasks', workerId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'worker-stats', workerId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ subscriberbotWorkerStats: any }>(\n `query WorkerStats($workerId: String!) {\n subscriberbotWorkerStats(workerId: $workerId) {\n totalDeliveries totalEarnings averageRating completionRate todayTasks todayEarnings\n }\n }`,\n { workerId },\n apiGatewayUrl\n );\n return result.subscriberbotWorkerStats;\n },\n enabled: Boolean(workerId),\n });\n};\n\nexport const useWorkerSchedules = (workerId: string) => {\n const { apiGatewayUrl } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'worker-schedules', workerId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n return useQuery({\n queryKey: ['subscriberbot', 'reviews', providerId],\n queryFn: async () => {\n const result = await subscriberbotQuery<{ 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 } = useSubscriberBot();\n\n return useMutation({\n mutationFn: async (input: Record<string, unknown>) => {\n const result = await subscriberbotQuery<{ placeOrder: any }>(\n `mutation PlaceOrder($input: SubscriberBotPlaceOrderInput!) {\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: ['subscriberbot', 'orders'] });\n void queryClient.invalidateQueries({ queryKey: ['subscriberbot', 'dashboard-stats'] });\n },\n });\n};\n\nexport const useCreateProvider = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useSubscriberBot();\n\n return useMutation({\n mutationFn: async (input: Record<string, unknown>) => {\n const result = await subscriberbotQuery<{ subscriberbotCreateServiceProvider: any }>(\n `mutation CreateProvider($input: SubscriberBotCreateServiceProviderInput!) {\n subscriberbotCreateServiceProvider(input: $input) {\n id name slug status category location rating\n }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.subscriberbotCreateServiceProvider;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['subscriberbot', 'providers'] });\n void queryClient.invalidateQueries({ queryKey: ['subscriberbot', 'dashboard-stats'] });\n },\n });\n};\n\nexport const useUpdateWorkerTaskStatus = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useSubscriberBot();\n\n return useMutation({\n mutationFn: async ({ taskId, status }: { taskId: string; status: string }) => {\n const result = await subscriberbotQuery<{ subscriberbotUpdateWorkerTaskStatus: any }>(\n `mutation UpdateTaskStatus($taskId: String!, $status: SubscriberBotWorkerTaskStatus!) {\n subscriberbotUpdateWorkerTaskStatus(taskId: $taskId, status: $status) {\n id status\n }\n }`,\n { taskId, status },\n apiGatewayUrl\n );\n return result.subscriberbotUpdateWorkerTaskStatus;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['subscriberbot', 'worker-tasks'] });\n void queryClient.invalidateQueries({ queryKey: ['subscriberbot', 'worker-stats'] });\n },\n });\n};\n\nexport const useWorkerClockInOut = () => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useSubscriberBot();\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 subscriberbotQuery<{ subscriberbotWorkerClockInOut: any }>(\n `mutation ClockInOut($workerId: String!, $action: SubscriberBotClockAction!) {\n subscriberbotWorkerClockInOut(workerId: $workerId, action: $action) {\n success message\n }\n }`,\n { workerId, action },\n apiGatewayUrl\n );\n return result.subscriberbotWorkerClockInOut;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['subscriberbot', 'worker-schedules'] });\n },\n });\n};\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\nexport const useSubscriberBotApi = () => {\n const { currentUser } = useSubscriberBot();\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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"}
|