@classytic/commerce-sdk 0.1.0
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.
Potentially problematic release.
This version of @classytic/commerce-sdk might be problematic. Click here for more details.
- package/LICENSE +14 -0
- package/README.md +104 -0
- package/dist/adjustment-DTSLM7AN.js +5 -0
- package/dist/adjustment-DTSLM7AN.js.map +1 -0
- package/dist/analytics/index.d.ts +27 -0
- package/dist/analytics/index.js +6 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics-DMcD-o8w.d.ts +76 -0
- package/dist/api-factory-B_h4RKBm.d.ts +280 -0
- package/dist/auth/index.d.ts +39 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/catalog/index.d.ts +479 -0
- package/dist/catalog/index.js +9 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/chunk-4ZQK3FFN.js +40 -0
- package/dist/chunk-4ZQK3FFN.js.map +1 -0
- package/dist/chunk-5L6EXDGH.js +465 -0
- package/dist/chunk-5L6EXDGH.js.map +1 -0
- package/dist/chunk-5ZFW3FEI.js +183 -0
- package/dist/chunk-5ZFW3FEI.js.map +1 -0
- package/dist/chunk-66OQAZSL.js +94 -0
- package/dist/chunk-66OQAZSL.js.map +1 -0
- package/dist/chunk-6RYGA6MF.js +123 -0
- package/dist/chunk-6RYGA6MF.js.map +1 -0
- package/dist/chunk-B6MPVOV7.js +328 -0
- package/dist/chunk-B6MPVOV7.js.map +1 -0
- package/dist/chunk-BDA2WSJA.js +148 -0
- package/dist/chunk-BDA2WSJA.js.map +1 -0
- package/dist/chunk-EIVYT3HM.js +126 -0
- package/dist/chunk-EIVYT3HM.js.map +1 -0
- package/dist/chunk-EPQN7ZKZ.js +27 -0
- package/dist/chunk-EPQN7ZKZ.js.map +1 -0
- package/dist/chunk-FA7QFJ2G.js +177 -0
- package/dist/chunk-FA7QFJ2G.js.map +1 -0
- package/dist/chunk-I5TIKUIQ.js +261 -0
- package/dist/chunk-I5TIKUIQ.js.map +1 -0
- package/dist/chunk-ILQUH444.js +135 -0
- package/dist/chunk-ILQUH444.js.map +1 -0
- package/dist/chunk-IXMWZJLV.js +616 -0
- package/dist/chunk-IXMWZJLV.js.map +1 -0
- package/dist/chunk-KZIGRIQG.js +75 -0
- package/dist/chunk-KZIGRIQG.js.map +1 -0
- package/dist/chunk-OF5M6R2S.js +769 -0
- package/dist/chunk-OF5M6R2S.js.map +1 -0
- package/dist/chunk-PYYLHUV6.js +3 -0
- package/dist/chunk-PYYLHUV6.js.map +1 -0
- package/dist/chunk-QO5AGZFP.js +159 -0
- package/dist/chunk-QO5AGZFP.js.map +1 -0
- package/dist/chunk-QUMTBLNE.js +76 -0
- package/dist/chunk-QUMTBLNE.js.map +1 -0
- package/dist/chunk-R5Z7NYLH.js +126 -0
- package/dist/chunk-R5Z7NYLH.js.map +1 -0
- package/dist/chunk-SZYWG5IB.js +75 -0
- package/dist/chunk-SZYWG5IB.js.map +1 -0
- package/dist/chunk-U3XT35GZ.js +202 -0
- package/dist/chunk-U3XT35GZ.js.map +1 -0
- package/dist/chunk-UGELTUIZ.js +830 -0
- package/dist/chunk-UGELTUIZ.js.map +1 -0
- package/dist/chunk-VR36QVX2.js +122 -0
- package/dist/chunk-VR36QVX2.js.map +1 -0
- package/dist/chunk-WUOQK7BO.js +13 -0
- package/dist/chunk-WUOQK7BO.js.map +1 -0
- package/dist/chunk-X6PV5MHG.js +582 -0
- package/dist/chunk-X6PV5MHG.js.map +1 -0
- package/dist/chunk-ZWLMFLLH.js +534 -0
- package/dist/chunk-ZWLMFLLH.js.map +1 -0
- package/dist/content/index.d.ts +309 -0
- package/dist/content/index.js +6 -0
- package/dist/content/index.js.map +1 -0
- package/dist/core/index.d.ts +107 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/react.d.ts +107 -0
- package/dist/core/react.js +5 -0
- package/dist/core/react.js.map +1 -0
- package/dist/coupon-CHFcw7cd.d.ts +632 -0
- package/dist/coupon-zGkvO-Xx.d.ts +129 -0
- package/dist/crud.factory-DyKaPHcU.d.ts +181 -0
- package/dist/finance/index.d.ts +81 -0
- package/dist/finance/index.js +5 -0
- package/dist/finance/index.js.map +1 -0
- package/dist/finance-BJdfKRw0.d.ts +135 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/inventory/index.d.ts +512 -0
- package/dist/inventory/index.js +16 -0
- package/dist/inventory/index.js.map +1 -0
- package/dist/inventory-DCiIZh8P.d.ts +742 -0
- package/dist/logistics/index.d.ts +226 -0
- package/dist/logistics/index.js +7 -0
- package/dist/logistics/index.js.map +1 -0
- package/dist/logistics-V8a9lUN3.d.ts +428 -0
- package/dist/media-CNLJK93J.d.ts +721 -0
- package/dist/movement-7MV3ADY5.js +5 -0
- package/dist/movement-7MV3ADY5.js.map +1 -0
- package/dist/payment-BRboLqvU.d.ts +127 -0
- package/dist/payments/index.d.ts +55 -0
- package/dist/payments/index.js +6 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/platform/index.d.ts +645 -0
- package/dist/platform/index.js +8 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/pos-D1jkkFl0.d.ts +885 -0
- package/dist/product-p09zXkXB.d.ts +260 -0
- package/dist/purchase-24BGT2HA.js +5 -0
- package/dist/purchase-24BGT2HA.js.map +1 -0
- package/dist/request-652PS6VR.js +5 -0
- package/dist/request-652PS6VR.js.map +1 -0
- package/dist/sales/index.d.ts +585 -0
- package/dist/sales/index.js +9 -0
- package/dist/sales/index.js.map +1 -0
- package/dist/server.d.ts +120 -0
- package/dist/server.js +27 -0
- package/dist/server.js.map +1 -0
- package/dist/size-guide-DgjzjM5P.d.ts +554 -0
- package/dist/stock-DEApGC-w.d.ts +632 -0
- package/dist/stock-OOUW57VQ.js +5 -0
- package/dist/stock-OOUW57VQ.js.map +1 -0
- package/dist/supplier-OC6JAWV6.js +5 -0
- package/dist/supplier-OC6JAWV6.js.map +1 -0
- package/dist/transaction/index.d.ts +104 -0
- package/dist/transaction/index.js +8 -0
- package/dist/transaction/index.js.map +1 -0
- package/dist/transaction-BTmoHpWh.d.ts +428 -0
- package/dist/transaction-u5oaNuav.d.ts +84 -0
- package/dist/transfer-7SYSH3RG.js +5 -0
- package/dist/transfer-7SYSH3RG.js.map +1 -0
- package/dist/user-data-DdLjAGwO.d.ts +132 -0
- package/package.json +146 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { handleApiRequest } from './chunk-VR36QVX2.js';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
|
|
4
|
+
// src/finance/api/finance.ts
|
|
5
|
+
var FinanceApi = class {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.baseUrl = "/api/v1/finance";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get finance statements (export)
|
|
11
|
+
* GET /finance/statements
|
|
12
|
+
*
|
|
13
|
+
* Query params:
|
|
14
|
+
* - startDate, endDate (ISO datetime) - required
|
|
15
|
+
* - branchId (optional)
|
|
16
|
+
* - source = web|pos|api (optional)
|
|
17
|
+
* - status (optional)
|
|
18
|
+
* - format = csv|json (default: csv)
|
|
19
|
+
* - page, limit (for JSON pagination)
|
|
20
|
+
*/
|
|
21
|
+
async getStatements({
|
|
22
|
+
token,
|
|
23
|
+
params,
|
|
24
|
+
options = {}
|
|
25
|
+
}) {
|
|
26
|
+
if (!token) {
|
|
27
|
+
throw new Error("Authentication required");
|
|
28
|
+
}
|
|
29
|
+
const queryParams = new URLSearchParams();
|
|
30
|
+
if (params.startDate) queryParams.append("startDate", params.startDate);
|
|
31
|
+
if (params.endDate) queryParams.append("endDate", params.endDate);
|
|
32
|
+
if (params.branchId) queryParams.append("branchId", params.branchId);
|
|
33
|
+
if (params.source) queryParams.append("source", params.source);
|
|
34
|
+
if (params.status) queryParams.append("status", params.status);
|
|
35
|
+
if (params.format) queryParams.append("format", params.format);
|
|
36
|
+
if (params.page) queryParams.append("page", params.page.toString());
|
|
37
|
+
if (params.limit) queryParams.append("limit", params.limit.toString());
|
|
38
|
+
const url = `${this.baseUrl}/statements${queryParams.toString() ? `?${queryParams}` : ""}`;
|
|
39
|
+
return handleApiRequest("GET", url, {
|
|
40
|
+
token,
|
|
41
|
+
...options
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get finance summary (dashboard)
|
|
46
|
+
* GET /finance/summary
|
|
47
|
+
*
|
|
48
|
+
* Query params:
|
|
49
|
+
* - startDate, endDate (ISO datetime) - required
|
|
50
|
+
* - branchId (optional)
|
|
51
|
+
* - source = web|pos|api (optional)
|
|
52
|
+
* - status (optional)
|
|
53
|
+
*
|
|
54
|
+
* Response:
|
|
55
|
+
* - data.totals: overall income/expense/net/count
|
|
56
|
+
* - data.byMethod: breakdown by payment method
|
|
57
|
+
* - data.byDay: per-day breakdown by branch
|
|
58
|
+
*/
|
|
59
|
+
async getSummary({
|
|
60
|
+
token,
|
|
61
|
+
params,
|
|
62
|
+
options = {}
|
|
63
|
+
}) {
|
|
64
|
+
if (!token) {
|
|
65
|
+
throw new Error("Authentication required");
|
|
66
|
+
}
|
|
67
|
+
const queryParams = new URLSearchParams();
|
|
68
|
+
if (params.startDate) queryParams.append("startDate", params.startDate);
|
|
69
|
+
if (params.endDate) queryParams.append("endDate", params.endDate);
|
|
70
|
+
if (params.branchId) queryParams.append("branchId", params.branchId);
|
|
71
|
+
if (params.source) queryParams.append("source", params.source);
|
|
72
|
+
if (params.status) queryParams.append("status", params.status);
|
|
73
|
+
const url = `${this.baseUrl}/summary${queryParams.toString() ? `?${queryParams}` : ""}`;
|
|
74
|
+
return handleApiRequest("GET", url, {
|
|
75
|
+
token,
|
|
76
|
+
...options
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
var financeApi = new FinanceApi();
|
|
81
|
+
var FINANCE_KEYS = {
|
|
82
|
+
all: ["finance"],
|
|
83
|
+
statements: () => [...FINANCE_KEYS.all, "statements"],
|
|
84
|
+
statementList: (params) => [...FINANCE_KEYS.statements(), params],
|
|
85
|
+
summary: () => [...FINANCE_KEYS.all, "summary"],
|
|
86
|
+
summaryData: (params) => [...FINANCE_KEYS.summary(), params]
|
|
87
|
+
};
|
|
88
|
+
function useFinanceStatements(token, params, options = {}) {
|
|
89
|
+
const { data, isLoading, isFetching, error, refetch } = useQuery({
|
|
90
|
+
queryKey: FINANCE_KEYS.statementList(params),
|
|
91
|
+
queryFn: () => financeApi.getStatements({ token, params }),
|
|
92
|
+
enabled: !!token && !!params.startDate && !!params.endDate && options.enabled !== false,
|
|
93
|
+
staleTime: options.staleTime ?? 2 * 60 * 1e3
|
|
94
|
+
// 2 minutes
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
statements: data?.data || [],
|
|
98
|
+
isLoading,
|
|
99
|
+
isFetching,
|
|
100
|
+
error,
|
|
101
|
+
refetch
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function useFinanceSummary(token, params, options = {}) {
|
|
105
|
+
const { data, isLoading, isFetching, error, refetch } = useQuery({
|
|
106
|
+
queryKey: FINANCE_KEYS.summaryData(params),
|
|
107
|
+
queryFn: () => financeApi.getSummary({ token, params }),
|
|
108
|
+
enabled: !!token && !!params.startDate && !!params.endDate && options.enabled !== false,
|
|
109
|
+
staleTime: options.staleTime ?? 2 * 60 * 1e3
|
|
110
|
+
// 2 minutes
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
summary: data?.data || null,
|
|
114
|
+
totals: data?.data?.totals || null,
|
|
115
|
+
byMethod: data?.data?.byMethod || [],
|
|
116
|
+
byDay: data?.data?.byDay || [],
|
|
117
|
+
isLoading,
|
|
118
|
+
isFetching,
|
|
119
|
+
error,
|
|
120
|
+
refetch
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export { FINANCE_KEYS, FinanceApi, financeApi, useFinanceStatements, useFinanceSummary };
|
|
125
|
+
//# sourceMappingURL=chunk-EIVYT3HM.js.map
|
|
126
|
+
//# sourceMappingURL=chunk-EIVYT3HM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/finance/api/finance.ts","../src/finance/hooks/finance.ts"],"names":[],"mappings":"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","file":"chunk-EIVYT3HM.js","sourcesContent":["// finance/api/finance.ts\r\nimport { handleApiRequest } from \"../../core/api-handler\";\r\nimport type { ApiResponse, RequestOptions } from \"../../core/api-factory\";\r\nimport type {\r\n FinanceStatement,\r\n FinanceStatementParams,\r\n FinanceSummary,\r\n FinanceSummaryParams,\r\n} from \"../types\";\r\n\r\ntype FetchOptions = Omit<RequestOptions, \"token\" | \"organizationId\">;\r\n\r\n/**\r\n * Finance API - Statements and summaries for backoffice\r\n *\r\n * Endpoints:\r\n * - getStatements({ token, params }) - Export statements (CSV/JSON)\r\n * - getSummary({ token, params }) - Get summary with breakdowns\r\n *\r\n * Roles:\r\n * - admin, superadmin, finance-admin, finance-manager\r\n */\r\nclass FinanceApi {\r\n private baseUrl: string;\r\n\r\n constructor() {\r\n this.baseUrl = \"/api/v1/finance\";\r\n }\r\n\r\n /**\r\n * Get finance statements (export)\r\n * GET /finance/statements\r\n *\r\n * Query params:\r\n * - startDate, endDate (ISO datetime) - required\r\n * - branchId (optional)\r\n * - source = web|pos|api (optional)\r\n * - status (optional)\r\n * - format = csv|json (default: csv)\r\n * - page, limit (for JSON pagination)\r\n */\r\n async getStatements({\r\n token,\r\n params,\r\n options = {},\r\n }: {\r\n token: string;\r\n params: FinanceStatementParams;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<FinanceStatement[]>> {\r\n if (!token) {\r\n throw new Error(\"Authentication required\");\r\n }\r\n\r\n const queryParams = new URLSearchParams();\r\n\r\n if (params.startDate) queryParams.append(\"startDate\", params.startDate);\r\n if (params.endDate) queryParams.append(\"endDate\", params.endDate);\r\n if (params.branchId) queryParams.append(\"branchId\", params.branchId);\r\n if (params.source) queryParams.append(\"source\", params.source);\r\n if (params.status) queryParams.append(\"status\", params.status);\r\n if (params.format) queryParams.append(\"format\", params.format);\r\n if (params.page) queryParams.append(\"page\", params.page.toString());\r\n if (params.limit) queryParams.append(\"limit\", params.limit.toString());\r\n\r\n const url = `${this.baseUrl}/statements${queryParams.toString() ? `?${queryParams}` : \"\"}`;\r\n\r\n return handleApiRequest(\"GET\", url, {\r\n token,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Get finance summary (dashboard)\r\n * GET /finance/summary\r\n *\r\n * Query params:\r\n * - startDate, endDate (ISO datetime) - required\r\n * - branchId (optional)\r\n * - source = web|pos|api (optional)\r\n * - status (optional)\r\n *\r\n * Response:\r\n * - data.totals: overall income/expense/net/count\r\n * - data.byMethod: breakdown by payment method\r\n * - data.byDay: per-day breakdown by branch\r\n */\r\n async getSummary({\r\n token,\r\n params,\r\n options = {},\r\n }: {\r\n token: string;\r\n params: FinanceSummaryParams;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<FinanceSummary>> {\r\n if (!token) {\r\n throw new Error(\"Authentication required\");\r\n }\r\n\r\n const queryParams = new URLSearchParams();\r\n\r\n if (params.startDate) queryParams.append(\"startDate\", params.startDate);\r\n if (params.endDate) queryParams.append(\"endDate\", params.endDate);\r\n if (params.branchId) queryParams.append(\"branchId\", params.branchId);\r\n if (params.source) queryParams.append(\"source\", params.source);\r\n if (params.status) queryParams.append(\"status\", params.status);\r\n\r\n const url = `${this.baseUrl}/summary${queryParams.toString() ? `?${queryParams}` : \"\"}`;\r\n\r\n return handleApiRequest(\"GET\", url, {\r\n token,\r\n ...options,\r\n });\r\n }\r\n}\r\n\r\nexport const financeApi = new FinanceApi();\r\nexport { FinanceApi };\r\n","\"use client\";\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { financeApi } from \"../api\";\r\nimport type {\r\n FinanceStatement,\r\n FinanceStatementParams,\r\n FinanceSummary,\r\n FinanceSummaryParams,\r\n} from \"../types\";\r\nimport type { ApiResponse } from \"../../core/api-factory\";\r\n\r\n// ============================================\r\n// Query Keys\r\n// ============================================\r\n\r\nexport const FINANCE_KEYS = {\r\n all: [\"finance\"] as const,\r\n statements: () => [...FINANCE_KEYS.all, \"statements\"] as const,\r\n statementList: (params: FinanceStatementParams) =>\r\n [...FINANCE_KEYS.statements(), params] as const,\r\n summary: () => [...FINANCE_KEYS.all, \"summary\"] as const,\r\n summaryData: (params: FinanceSummaryParams) =>\r\n [...FINANCE_KEYS.summary(), params] as const,\r\n};\r\n\r\n// ============================================\r\n// Types\r\n// ============================================\r\n\r\ninterface QueryOptions {\r\n enabled?: boolean;\r\n staleTime?: number;\r\n}\r\n\r\nexport interface UseFinanceStatementsReturn {\r\n statements: FinanceStatement[];\r\n isLoading: boolean;\r\n isFetching: boolean;\r\n error: Error | null;\r\n refetch: () => void;\r\n}\r\n\r\nexport interface UseFinanceSummaryReturn {\r\n summary: FinanceSummary | null;\r\n totals: FinanceSummary[\"totals\"] | null;\r\n byMethod: FinanceSummary[\"byMethod\"];\r\n byDay: FinanceSummary[\"byDay\"];\r\n isLoading: boolean;\r\n isFetching: boolean;\r\n error: Error | null;\r\n refetch: () => void;\r\n}\r\n\r\n// ============================================\r\n// Hooks\r\n// ============================================\r\n\r\n/**\r\n * Fetch finance statements for a date range\r\n *\r\n * @param token - Auth token (admin/finance roles)\r\n * @param params - Query parameters (startDate, endDate required)\r\n * @param options - Query options\r\n *\r\n * @example\r\n * ```tsx\r\n * function StatementTable() {\r\n * const { statements, isLoading } = useFinanceStatements(token, {\r\n * startDate: '2024-01-01T00:00:00Z',\r\n * endDate: '2024-01-31T23:59:59Z',\r\n * branchId: selectedBranch,\r\n * });\r\n *\r\n * return <DataTable data={statements} loading={isLoading} />;\r\n * }\r\n * ```\r\n */\r\nexport function useFinanceStatements(\r\n token: string,\r\n params: FinanceStatementParams,\r\n options: QueryOptions = {}\r\n): UseFinanceStatementsReturn {\r\n const { data, isLoading, isFetching, error, refetch } = useQuery<ApiResponse<FinanceStatement[]>>({\r\n queryKey: FINANCE_KEYS.statementList(params),\r\n queryFn: () => financeApi.getStatements({ token, params }),\r\n enabled: !!token && !!params.startDate && !!params.endDate && options.enabled !== false,\r\n staleTime: options.staleTime ?? 2 * 60 * 1000, // 2 minutes\r\n });\r\n\r\n return {\r\n statements: data?.data || [],\r\n isLoading,\r\n isFetching,\r\n error: error as Error | null,\r\n refetch,\r\n };\r\n}\r\n\r\n/**\r\n * Fetch finance summary with breakdowns\r\n *\r\n * @param token - Auth token (admin/finance roles)\r\n * @param params - Query parameters (startDate, endDate required)\r\n * @param options - Query options\r\n *\r\n * @example\r\n * ```tsx\r\n * function FinanceDashboard() {\r\n * const { totals, byMethod, byDay, isLoading } = useFinanceSummary(token, {\r\n * startDate: '2024-01-01T00:00:00Z',\r\n * endDate: '2024-01-31T23:59:59Z',\r\n * });\r\n *\r\n * return (\r\n * <>\r\n * <SummaryCards totals={totals} />\r\n * <MethodBreakdown data={byMethod} />\r\n * <DailyChart data={byDay} />\r\n * </>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useFinanceSummary(\r\n token: string,\r\n params: FinanceSummaryParams,\r\n options: QueryOptions = {}\r\n): UseFinanceSummaryReturn {\r\n const { data, isLoading, isFetching, error, refetch } = useQuery<ApiResponse<FinanceSummary>>({\r\n queryKey: FINANCE_KEYS.summaryData(params),\r\n queryFn: () => financeApi.getSummary({ token, params }),\r\n enabled: !!token && !!params.startDate && !!params.endDate && options.enabled !== false,\r\n staleTime: options.staleTime ?? 2 * 60 * 1000, // 2 minutes\r\n });\r\n\r\n return {\r\n summary: data?.data || null,\r\n totals: data?.data?.totals || null,\r\n byMethod: data?.data?.byMethod || [],\r\n byDay: data?.data?.byDay || [],\r\n isLoading,\r\n isFetching,\r\n error: error as Error | null,\r\n refetch,\r\n };\r\n}\r\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { analyticsApi } from './chunk-4ZQK3FFN.js';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
|
|
4
|
+
var ANALYTICS_KEYS = {
|
|
5
|
+
all: ["analytics"],
|
|
6
|
+
dashboard: (period) => ["analytics", "dashboard", period]
|
|
7
|
+
};
|
|
8
|
+
function useAnalyticsDashboard(token, params = {}, options = {}) {
|
|
9
|
+
const period = params.period || "30d";
|
|
10
|
+
return useQuery({
|
|
11
|
+
queryKey: ANALYTICS_KEYS.dashboard(period),
|
|
12
|
+
queryFn: () => analyticsApi.getDashboard({ token, params }),
|
|
13
|
+
enabled: !!token && options.enabled !== false,
|
|
14
|
+
staleTime: 2 * 60 * 1e3,
|
|
15
|
+
// 2 minutes (analytics data updates frequently)
|
|
16
|
+
gcTime: 10 * 60 * 1e3,
|
|
17
|
+
// 10 minutes
|
|
18
|
+
refetchOnWindowFocus: true,
|
|
19
|
+
// Refresh analytics on window focus
|
|
20
|
+
retry: 1,
|
|
21
|
+
select: (data) => data?.data
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { ANALYTICS_KEYS, useAnalyticsDashboard };
|
|
26
|
+
//# sourceMappingURL=chunk-EPQN7ZKZ.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-EPQN7ZKZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/analytics/hooks/analytics.ts"],"names":[],"mappings":";;;AAWO,IAAM,cAAA,GAAiB;AAAA,EAC5B,GAAA,EAAK,CAAC,WAAW,CAAA;AAAA,EACjB,WAAW,CAAC,MAAA,KAAoB,CAAC,WAAA,EAAa,aAAa,MAAM;AACnE;AAeO,SAAS,sBACd,KAAA,EACA,MAAA,GAAmC,EAAC,EACpC,OAAA,GAAiC,EAAC,EAClC;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,KAAA;AAEhC,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,cAAA,CAAe,SAAA,CAAU,MAAM,CAAA;AAAA,IACzC,SAAS,MAAM,YAAA,CAAa,aAAa,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC1D,OAAA,EAAS,CAAC,CAAC,KAAA,IAAS,QAAQ,OAAA,KAAY,KAAA;AAAA,IACxC,SAAA,EAAW,IAAI,EAAA,GAAK,GAAA;AAAA;AAAA,IACpB,MAAA,EAAQ,KAAK,EAAA,GAAK,GAAA;AAAA;AAAA,IAClB,oBAAA,EAAsB,IAAA;AAAA;AAAA,IACtB,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAC,IAAA,KAAS,IAAA,EAAM;AAAA,GACzB,CAAA;AACH","file":"chunk-EPQN7ZKZ.js","sourcesContent":["/**\r\n * Analytics Hooks\r\n *\r\n * React Query hooks for analytics data\r\n */\r\n\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport { analyticsApi } from \"../api\";\r\nimport type { AnalyticsDashboard, AnalyticsDashboardParams } from \"../types\";\r\n\r\n// Query keys for analytics\r\nexport const ANALYTICS_KEYS = {\r\n all: [\"analytics\"] as const,\r\n dashboard: (period?: string) => [\"analytics\", \"dashboard\", period] as const,\r\n};\r\n\r\n/**\r\n * Hook to fetch dashboard analytics data\r\n *\r\n * @param token - Auth token (required)\r\n * @param params.period - Time period: '7d' | '30d' | '90d' | '1y' (default: '30d')\r\n * @param params.branchId - Optional branch filter\r\n * @param options.enabled - Enable/disable query (default: true)\r\n *\r\n * @example\r\n * ```tsx\r\n * const { data, isLoading } = useAnalyticsDashboard(token, { period: '30d' });\r\n * ```\r\n */\r\nexport function useAnalyticsDashboard(\r\n token: string,\r\n params: AnalyticsDashboardParams = {},\r\n options: { enabled?: boolean } = {}\r\n) {\r\n const period = params.period || \"30d\";\r\n\r\n return useQuery({\r\n queryKey: ANALYTICS_KEYS.dashboard(period),\r\n queryFn: () => analyticsApi.getDashboard({ token, params }),\r\n enabled: !!token && options.enabled !== false,\r\n staleTime: 2 * 60 * 1000, // 2 minutes (analytics data updates frequently)\r\n gcTime: 10 * 60 * 1000, // 10 minutes\r\n refetchOnWindowFocus: true, // Refresh analytics on window focus\r\n retry: 1,\r\n select: (data) => data?.data as AnalyticsDashboard,\r\n });\r\n}\r\n"]}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { BaseApi } from './chunk-I5TIKUIQ.js';
|
|
2
|
+
import { handleApiRequest } from './chunk-VR36QVX2.js';
|
|
3
|
+
|
|
4
|
+
// src/inventory/api/transfer.ts
|
|
5
|
+
var TransferApi = class extends BaseApi {
|
|
6
|
+
constructor(config = {}) {
|
|
7
|
+
super("inventory/transfers", config);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* List transfers with filtering
|
|
11
|
+
* GET /inventory/transfers
|
|
12
|
+
*/
|
|
13
|
+
async list({
|
|
14
|
+
token,
|
|
15
|
+
params = {},
|
|
16
|
+
options = {}
|
|
17
|
+
}) {
|
|
18
|
+
const processedParams = this.prepareParams(params);
|
|
19
|
+
const queryString = this.createQueryString(processedParams);
|
|
20
|
+
return handleApiRequest("GET", `${this.baseUrl}?${queryString}`, {
|
|
21
|
+
token,
|
|
22
|
+
cache: this.config.cache,
|
|
23
|
+
...options
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get transfer by ID or challan number
|
|
28
|
+
* GET /inventory/transfers/:id
|
|
29
|
+
*/
|
|
30
|
+
async getById({
|
|
31
|
+
token,
|
|
32
|
+
id,
|
|
33
|
+
options = {}
|
|
34
|
+
}) {
|
|
35
|
+
if (!id) {
|
|
36
|
+
throw new Error("Transfer ID or challan number is required");
|
|
37
|
+
}
|
|
38
|
+
return handleApiRequest("GET", `${this.baseUrl}/${id}`, {
|
|
39
|
+
token,
|
|
40
|
+
cache: this.config.cache,
|
|
41
|
+
...options
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a new transfer (draft)
|
|
46
|
+
* POST /inventory/transfers
|
|
47
|
+
*/
|
|
48
|
+
async create({
|
|
49
|
+
token,
|
|
50
|
+
data,
|
|
51
|
+
options = {}
|
|
52
|
+
}) {
|
|
53
|
+
return handleApiRequest("POST", this.baseUrl, {
|
|
54
|
+
token,
|
|
55
|
+
body: data,
|
|
56
|
+
cache: this.config.cache,
|
|
57
|
+
...options
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Update a draft transfer
|
|
62
|
+
* PATCH /inventory/transfers/:id
|
|
63
|
+
*/
|
|
64
|
+
async update({
|
|
65
|
+
token,
|
|
66
|
+
id,
|
|
67
|
+
data,
|
|
68
|
+
options = {}
|
|
69
|
+
}) {
|
|
70
|
+
if (!id) {
|
|
71
|
+
throw new Error("Transfer ID is required");
|
|
72
|
+
}
|
|
73
|
+
return handleApiRequest("PATCH", `${this.baseUrl}/${id}`, {
|
|
74
|
+
token,
|
|
75
|
+
body: data,
|
|
76
|
+
cache: this.config.cache,
|
|
77
|
+
...options
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get transfer statistics
|
|
82
|
+
* GET /inventory/transfers/stats
|
|
83
|
+
*/
|
|
84
|
+
async stats({
|
|
85
|
+
token,
|
|
86
|
+
params = {},
|
|
87
|
+
options = {}
|
|
88
|
+
}) {
|
|
89
|
+
const queryString = this.createQueryString(params);
|
|
90
|
+
const url = queryString ? `${this.baseUrl}/stats?${queryString}` : `${this.baseUrl}/stats`;
|
|
91
|
+
return handleApiRequest("GET", url, {
|
|
92
|
+
token,
|
|
93
|
+
cache: this.config.cache,
|
|
94
|
+
...options
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// ==================== Transfer Actions (Stripe Pattern) ====================
|
|
98
|
+
/**
|
|
99
|
+
* Generic action endpoint
|
|
100
|
+
* POST /inventory/transfers/:id/action
|
|
101
|
+
*/
|
|
102
|
+
async action({
|
|
103
|
+
token,
|
|
104
|
+
id,
|
|
105
|
+
action,
|
|
106
|
+
data = {},
|
|
107
|
+
options = {}
|
|
108
|
+
}) {
|
|
109
|
+
if (!id) {
|
|
110
|
+
throw new Error("Transfer ID is required");
|
|
111
|
+
}
|
|
112
|
+
return handleApiRequest("POST", `${this.baseUrl}/${id}/action`, {
|
|
113
|
+
token,
|
|
114
|
+
body: { action, ...data },
|
|
115
|
+
cache: this.config.cache,
|
|
116
|
+
...options
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Approve a transfer (validates stock availability)
|
|
121
|
+
*/
|
|
122
|
+
async approve({
|
|
123
|
+
token,
|
|
124
|
+
id,
|
|
125
|
+
options = {}
|
|
126
|
+
}) {
|
|
127
|
+
return this.action({ token, id, action: "approve", options });
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Dispatch a transfer (decrements sender stock)
|
|
131
|
+
*/
|
|
132
|
+
async dispatch({
|
|
133
|
+
token,
|
|
134
|
+
id,
|
|
135
|
+
data,
|
|
136
|
+
options = {}
|
|
137
|
+
}) {
|
|
138
|
+
return this.action({ token, id, action: "dispatch", data, options });
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Mark transfer as in-transit
|
|
142
|
+
*/
|
|
143
|
+
async markInTransit({
|
|
144
|
+
token,
|
|
145
|
+
id,
|
|
146
|
+
options = {}
|
|
147
|
+
}) {
|
|
148
|
+
return this.action({ token, id, action: "in-transit", options });
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Receive a transfer (increments receiver stock)
|
|
152
|
+
*/
|
|
153
|
+
async receive({
|
|
154
|
+
token,
|
|
155
|
+
id,
|
|
156
|
+
data,
|
|
157
|
+
options = {}
|
|
158
|
+
}) {
|
|
159
|
+
return this.action({ token, id, action: "receive", data, options });
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Cancel a transfer
|
|
163
|
+
*/
|
|
164
|
+
async cancel({
|
|
165
|
+
token,
|
|
166
|
+
id,
|
|
167
|
+
reason,
|
|
168
|
+
options = {}
|
|
169
|
+
}) {
|
|
170
|
+
return this.action({ token, id, action: "cancel", data: { reason }, options });
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
var transferApi = new TransferApi();
|
|
174
|
+
|
|
175
|
+
export { TransferApi, transferApi };
|
|
176
|
+
//# sourceMappingURL=chunk-FA7QFJ2G.js.map
|
|
177
|
+
//# sourceMappingURL=chunk-FA7QFJ2G.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/inventory/api/transfer.ts"],"names":[],"mappings":"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","file":"chunk-FA7QFJ2G.js","sourcesContent":["/**\r\n * Transfer API - Inter-branch Stock Movement\r\n *\r\n * Handles challan/transfer documents following the Stripe action-based pattern.\r\n * Status flow: draft -> approved -> dispatched -> in_transit -> received\r\n */\r\n\r\nimport { BaseApi, type ApiResponse, type PaginatedResponse, type RequestOptions } from \"../../core/api-factory\";\r\nimport { handleApiRequest } from \"../../core/api-handler\";\r\nimport type {\r\n Transfer,\r\n CreateTransferPayload,\r\n UpdateTransferPayload,\r\n DispatchTransferPayload,\r\n ReceiveTransferPayload,\r\n TransferStats,\r\n} from \"../types\";\r\n\r\ntype FetchOptions = Omit<RequestOptions, \"token\" | \"organizationId\">;\r\n\r\nclass TransferApi extends BaseApi<Transfer, CreateTransferPayload, UpdateTransferPayload> {\r\n constructor(config = {}) {\r\n super(\"inventory/transfers\", config);\r\n }\r\n\r\n /**\r\n * List transfers with filtering\r\n * GET /inventory/transfers\r\n */\r\n async list({\r\n token,\r\n params = {},\r\n options = {},\r\n }: {\r\n token: string;\r\n params?: Record<string, unknown>;\r\n options?: FetchOptions;\r\n }): Promise<PaginatedResponse<Transfer>> {\r\n const processedParams = this.prepareParams(params);\r\n const queryString = this.createQueryString(processedParams);\r\n\r\n return handleApiRequest(\"GET\", `${this.baseUrl}?${queryString}`, {\r\n token,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Get transfer by ID or challan number\r\n * GET /inventory/transfers/:id\r\n */\r\n async getById({\r\n token,\r\n id,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n if (!id) {\r\n throw new Error(\"Transfer ID or challan number is required\");\r\n }\r\n\r\n return handleApiRequest(\"GET\", `${this.baseUrl}/${id}`, {\r\n token,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Create a new transfer (draft)\r\n * POST /inventory/transfers\r\n */\r\n async create({\r\n token,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n data: CreateTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return handleApiRequest(\"POST\", this.baseUrl, {\r\n token,\r\n body: data,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Update a draft transfer\r\n * PATCH /inventory/transfers/:id\r\n */\r\n async update({\r\n token,\r\n id,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n data: UpdateTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n if (!id) {\r\n throw new Error(\"Transfer ID is required\");\r\n }\r\n\r\n return handleApiRequest(\"PATCH\", `${this.baseUrl}/${id}`, {\r\n token,\r\n body: data,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Get transfer statistics\r\n * GET /inventory/transfers/stats\r\n */\r\n async stats({\r\n token,\r\n params = {},\r\n options = {},\r\n }: {\r\n token: string;\r\n params?: { branchId?: string };\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<TransferStats>> {\r\n const queryString = this.createQueryString(params);\r\n const url = queryString ? `${this.baseUrl}/stats?${queryString}` : `${this.baseUrl}/stats`;\r\n\r\n return handleApiRequest(\"GET\", url, {\r\n token,\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n // ==================== Transfer Actions (Stripe Pattern) ====================\r\n\r\n /**\r\n * Generic action endpoint\r\n * POST /inventory/transfers/:id/action\r\n */\r\n async action({\r\n token,\r\n id,\r\n action,\r\n data = {},\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n action: \"approve\" | \"dispatch\" | \"in-transit\" | \"receive\" | \"cancel\";\r\n data?: Record<string, unknown>;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n if (!id) {\r\n throw new Error(\"Transfer ID is required\");\r\n }\r\n\r\n return handleApiRequest(\"POST\", `${this.baseUrl}/${id}/action`, {\r\n token,\r\n body: { action, ...data },\r\n cache: this.config.cache,\r\n ...options,\r\n });\r\n }\r\n\r\n /**\r\n * Approve a transfer (validates stock availability)\r\n */\r\n async approve({\r\n token,\r\n id,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"approve\", options });\r\n }\r\n\r\n /**\r\n * Dispatch a transfer (decrements sender stock)\r\n */\r\n async dispatch({\r\n token,\r\n id,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n data?: DispatchTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"dispatch\", data: data as Record<string, unknown>, options });\r\n }\r\n\r\n /**\r\n * Mark transfer as in-transit\r\n */\r\n async markInTransit({\r\n token,\r\n id,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"in-transit\", options });\r\n }\r\n\r\n /**\r\n * Receive a transfer (increments receiver stock)\r\n */\r\n async receive({\r\n token,\r\n id,\r\n data,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n data?: ReceiveTransferPayload;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"receive\", data: data as Record<string, unknown>, options });\r\n }\r\n\r\n /**\r\n * Cancel a transfer\r\n */\r\n async cancel({\r\n token,\r\n id,\r\n reason,\r\n options = {},\r\n }: {\r\n token: string;\r\n id: string;\r\n reason?: string;\r\n options?: FetchOptions;\r\n }): Promise<ApiResponse<Transfer>> {\r\n return this.action({ token, id, action: \"cancel\", data: { reason }, options });\r\n }\r\n}\r\n\r\nexport const transferApi = new TransferApi();\r\nexport { TransferApi };\r\n"]}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { createQueryString, handleApiRequest } from './chunk-VR36QVX2.js';
|
|
2
|
+
|
|
3
|
+
// src/core/api-factory.ts
|
|
4
|
+
var BaseApi = class {
|
|
5
|
+
constructor(entity, config = {}) {
|
|
6
|
+
this.entity = entity;
|
|
7
|
+
this.config = {
|
|
8
|
+
basePath: config.basePath ?? "/api/v1",
|
|
9
|
+
defaultParams: {
|
|
10
|
+
limit: 10,
|
|
11
|
+
page: 1,
|
|
12
|
+
...config.defaultParams || {}
|
|
13
|
+
},
|
|
14
|
+
cache: config.cache ?? "no-store",
|
|
15
|
+
headers: {
|
|
16
|
+
"Content-Type": "application/json",
|
|
17
|
+
...config.headers || {}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
this.baseUrl = `${this.config.basePath}/${this.entity}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates query string from parameters
|
|
24
|
+
* Delegates to shared utility from api-handler.ts
|
|
25
|
+
*/
|
|
26
|
+
createQueryString(params = {}) {
|
|
27
|
+
return createQueryString(params);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Prepares parameters for API request
|
|
31
|
+
* Handles pagination, sorting, and filters
|
|
32
|
+
* Note: Critical security filters (organizationId, ownerId) are ALWAYS sent, even if null
|
|
33
|
+
*/
|
|
34
|
+
prepareParams(params = {}) {
|
|
35
|
+
const result = {};
|
|
36
|
+
const CRITICAL_FILTERS = ["organizationId", "ownerId"];
|
|
37
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
38
|
+
if (CRITICAL_FILTERS.includes(key)) {
|
|
39
|
+
result[key] = value || null;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (value !== void 0 && value !== "") {
|
|
43
|
+
if (["page", "limit"].includes(key)) {
|
|
44
|
+
result[key] = parseInt(String(value)) || (key === "page" ? 1 : 10);
|
|
45
|
+
} else if (Array.isArray(value)) {
|
|
46
|
+
if (value.length > 1) {
|
|
47
|
+
result[`${key}[in]`] = value.join(",");
|
|
48
|
+
} else if (value.length === 1) {
|
|
49
|
+
result[key] = value[0];
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
result[key] = value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get all records with pagination and filtering
|
|
60
|
+
* Returns offset or keyset pagination based on params
|
|
61
|
+
*/
|
|
62
|
+
async getAll({
|
|
63
|
+
token = null,
|
|
64
|
+
organizationId = null,
|
|
65
|
+
params = {},
|
|
66
|
+
options = {}
|
|
67
|
+
} = {}) {
|
|
68
|
+
const processedParams = this.prepareParams(params);
|
|
69
|
+
const queryString = this.createQueryString(processedParams);
|
|
70
|
+
const requestOptions = {
|
|
71
|
+
cache: this.config.cache,
|
|
72
|
+
...options
|
|
73
|
+
};
|
|
74
|
+
if (token) requestOptions.token = token;
|
|
75
|
+
if (organizationId) requestOptions.organizationId = organizationId;
|
|
76
|
+
return handleApiRequest(
|
|
77
|
+
"GET",
|
|
78
|
+
`${this.baseUrl}?${queryString}`,
|
|
79
|
+
requestOptions
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get a single record by ID
|
|
84
|
+
*/
|
|
85
|
+
async getById({
|
|
86
|
+
token = null,
|
|
87
|
+
organizationId = null,
|
|
88
|
+
id,
|
|
89
|
+
params = {},
|
|
90
|
+
options = {}
|
|
91
|
+
}) {
|
|
92
|
+
if (!id) throw new Error("ID is required");
|
|
93
|
+
const queryString = this.createQueryString(params);
|
|
94
|
+
const url = queryString ? `${this.baseUrl}/${id}?${queryString}` : `${this.baseUrl}/${id}`;
|
|
95
|
+
const requestOptions = {
|
|
96
|
+
cache: this.config.cache,
|
|
97
|
+
...options
|
|
98
|
+
};
|
|
99
|
+
if (token) requestOptions.token = token;
|
|
100
|
+
if (organizationId) requestOptions.organizationId = organizationId;
|
|
101
|
+
return handleApiRequest("GET", url, requestOptions);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Create a new record
|
|
105
|
+
*/
|
|
106
|
+
async create({
|
|
107
|
+
token,
|
|
108
|
+
organizationId = null,
|
|
109
|
+
data,
|
|
110
|
+
options = {}
|
|
111
|
+
}) {
|
|
112
|
+
return handleApiRequest("POST", this.baseUrl, {
|
|
113
|
+
token,
|
|
114
|
+
organizationId,
|
|
115
|
+
body: data,
|
|
116
|
+
...options
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Update an existing record
|
|
121
|
+
*/
|
|
122
|
+
async update({
|
|
123
|
+
token,
|
|
124
|
+
organizationId = null,
|
|
125
|
+
id,
|
|
126
|
+
data,
|
|
127
|
+
options = {}
|
|
128
|
+
}) {
|
|
129
|
+
if (!id) throw new Error("ID is required");
|
|
130
|
+
return handleApiRequest("PATCH", `${this.baseUrl}/${id}`, {
|
|
131
|
+
token,
|
|
132
|
+
organizationId,
|
|
133
|
+
body: data,
|
|
134
|
+
...options
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Delete a record
|
|
139
|
+
*/
|
|
140
|
+
async delete({
|
|
141
|
+
token,
|
|
142
|
+
organizationId = null,
|
|
143
|
+
id,
|
|
144
|
+
options = {}
|
|
145
|
+
}) {
|
|
146
|
+
if (!id) throw new Error("ID is required");
|
|
147
|
+
return handleApiRequest("DELETE", `${this.baseUrl}/${id}`, {
|
|
148
|
+
token,
|
|
149
|
+
organizationId,
|
|
150
|
+
...options
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Search with custom parameters
|
|
155
|
+
* @example
|
|
156
|
+
* search({ searchParams: { 'brand[contains]': 'nike' } })
|
|
157
|
+
* search({ searchParams: { upc: '123456789' } })
|
|
158
|
+
*/
|
|
159
|
+
async search({
|
|
160
|
+
token = null,
|
|
161
|
+
organizationId = null,
|
|
162
|
+
searchParams = {},
|
|
163
|
+
params = {},
|
|
164
|
+
options = {}
|
|
165
|
+
} = {}) {
|
|
166
|
+
const queryParams = { ...params, ...searchParams };
|
|
167
|
+
const processedParams = this.prepareParams(queryParams);
|
|
168
|
+
const queryString = this.createQueryString(processedParams);
|
|
169
|
+
const requestOptions = {
|
|
170
|
+
cache: this.config.cache,
|
|
171
|
+
...options
|
|
172
|
+
};
|
|
173
|
+
if (token) requestOptions.token = token;
|
|
174
|
+
if (organizationId) requestOptions.organizationId = organizationId;
|
|
175
|
+
return handleApiRequest(
|
|
176
|
+
"GET",
|
|
177
|
+
`${this.baseUrl}?${queryString}`,
|
|
178
|
+
requestOptions
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Find records by field with optional operator
|
|
183
|
+
* @example
|
|
184
|
+
* findBy({ field: 'brand', value: 'nike', operator: 'contains' })
|
|
185
|
+
* findBy({ field: 'status', value: ['active', 'pending'], operator: 'in' })
|
|
186
|
+
*/
|
|
187
|
+
async findBy({
|
|
188
|
+
token = null,
|
|
189
|
+
organizationId = null,
|
|
190
|
+
field,
|
|
191
|
+
value,
|
|
192
|
+
operator,
|
|
193
|
+
params = {},
|
|
194
|
+
options = {}
|
|
195
|
+
}) {
|
|
196
|
+
if (!field || value === void 0) {
|
|
197
|
+
throw new Error("Field and value are required");
|
|
198
|
+
}
|
|
199
|
+
const queryParams = { ...params };
|
|
200
|
+
if (operator) {
|
|
201
|
+
queryParams[`${field}[${operator}]`] = Array.isArray(value) ? value.join(",") : value;
|
|
202
|
+
} else {
|
|
203
|
+
queryParams[field] = value;
|
|
204
|
+
}
|
|
205
|
+
const processedParams = this.prepareParams(queryParams);
|
|
206
|
+
const queryString = this.createQueryString(processedParams);
|
|
207
|
+
const requestOptions = {
|
|
208
|
+
cache: this.config.cache,
|
|
209
|
+
...options
|
|
210
|
+
};
|
|
211
|
+
if (token) requestOptions.token = token;
|
|
212
|
+
if (organizationId) requestOptions.organizationId = organizationId;
|
|
213
|
+
return handleApiRequest(
|
|
214
|
+
"GET",
|
|
215
|
+
`${this.baseUrl}?${queryString}`,
|
|
216
|
+
requestOptions
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Make a custom API request to a sub-endpoint
|
|
221
|
+
* @example
|
|
222
|
+
* request('POST', `${this.baseUrl}/${id}/action`, { token, data: { ... } })
|
|
223
|
+
*/
|
|
224
|
+
async request(method, endpoint, {
|
|
225
|
+
token,
|
|
226
|
+
organizationId = null,
|
|
227
|
+
data,
|
|
228
|
+
params,
|
|
229
|
+
options = {}
|
|
230
|
+
} = {}) {
|
|
231
|
+
let url = endpoint;
|
|
232
|
+
if (params) {
|
|
233
|
+
const processedParams = this.prepareParams(params);
|
|
234
|
+
const queryString = this.createQueryString(processedParams);
|
|
235
|
+
url = `${endpoint}?${queryString}`;
|
|
236
|
+
}
|
|
237
|
+
return handleApiRequest(method, url, {
|
|
238
|
+
token,
|
|
239
|
+
organizationId,
|
|
240
|
+
body: data,
|
|
241
|
+
cache: this.config.cache,
|
|
242
|
+
...options
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
function createCrudApi(entity, config = {}) {
|
|
247
|
+
return new BaseApi(entity, config);
|
|
248
|
+
}
|
|
249
|
+
function isOffsetPagination(response) {
|
|
250
|
+
return response.method === "offset";
|
|
251
|
+
}
|
|
252
|
+
function isKeysetPagination(response) {
|
|
253
|
+
return response.method === "keyset";
|
|
254
|
+
}
|
|
255
|
+
function isAggregatePagination(response) {
|
|
256
|
+
return response.method === "aggregate";
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export { BaseApi, createCrudApi, isAggregatePagination, isKeysetPagination, isOffsetPagination };
|
|
260
|
+
//# sourceMappingURL=chunk-I5TIKUIQ.js.map
|
|
261
|
+
//# sourceMappingURL=chunk-I5TIKUIQ.js.map
|