@instockng/api-client 1.0.9 → 1.0.11

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.
Files changed (117) hide show
  1. package/dist/apps/backend/src/lib/brand-response.d.ts +2 -0
  2. package/dist/apps/backend/src/lib/cart-helpers.d.ts +4 -0
  3. package/dist/apps/backend/src/lib/cart-response.d.ts +2 -0
  4. package/dist/apps/backend/src/lib/delivery-zone-response.d.ts +2 -0
  5. package/dist/apps/backend/src/lib/discount-code-response.d.ts +2 -0
  6. package/dist/apps/backend/src/lib/order-recovery.d.ts +6 -0
  7. package/dist/apps/backend/src/lib/order-response.d.ts +2 -0
  8. package/dist/apps/backend/src/lib/product-response.d.ts +2 -0
  9. package/dist/apps/backend/src/routes/admin/abandoned-carts.d.ts +4 -8
  10. package/dist/apps/backend/src/routes/admin/brands.d.ts +8 -0
  11. package/dist/apps/backend/src/routes/admin/customers.d.ts +2 -4
  12. package/dist/apps/backend/src/routes/admin/delivery-zones.d.ts +8 -0
  13. package/dist/apps/backend/src/routes/admin/discount-codes.d.ts +10 -0
  14. package/dist/apps/backend/src/routes/admin/inventory.d.ts +0 -4
  15. package/dist/apps/backend/src/routes/admin/orders.d.ts +12 -24
  16. package/dist/apps/backend/src/routes/admin/products.d.ts +8 -16
  17. package/dist/apps/backend/src/routes/admin/stats.d.ts +2 -4
  18. package/dist/apps/backend/src/routes/admin/warehouses.d.ts +2 -4
  19. package/dist/apps/backend/src/routes/public/brands.d.ts +1 -0
  20. package/dist/apps/backend/src/routes/public/brands.js +1 -0
  21. package/dist/apps/backend/src/routes/public/carts.d.ts +18 -36
  22. package/dist/apps/backend/src/routes/public/orders.d.ts +4 -8
  23. package/dist/apps/backend/src/routes/public/products.d.ts +4 -8
  24. package/dist/apps/backend/src/validators/brand.d.ts +4 -0
  25. package/dist/apps/backend/src/validators/brand.js +4 -0
  26. package/dist/packages/api-client/src/fetchers/brands.d.ts +1 -0
  27. package/dist/packages/api-client/src/fetchers/carts.d.ts +18 -36
  28. package/dist/packages/api-client/src/fetchers/orders.d.ts +4 -8
  29. package/dist/packages/api-client/src/fetchers/products.d.ts +4 -8
  30. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.d.ts +4 -8
  31. package/dist/packages/api-client/src/hooks/admin/brands.d.ts +8 -0
  32. package/dist/packages/api-client/src/hooks/admin/customers.d.ts +2 -4
  33. package/dist/packages/api-client/src/hooks/admin/delivery-zones.d.ts +8 -0
  34. package/dist/packages/api-client/src/hooks/admin/discount-codes.d.ts +10 -0
  35. package/dist/packages/api-client/src/hooks/admin/inventory.d.ts +0 -4
  36. package/dist/packages/api-client/src/hooks/admin/orders.d.ts +12 -24
  37. package/dist/packages/api-client/src/hooks/admin/products.d.ts +4 -8
  38. package/dist/packages/api-client/src/hooks/admin/stats.d.ts +2 -4
  39. package/dist/packages/api-client/src/hooks/admin/warehouses.d.ts +2 -4
  40. package/dist/packages/api-client/src/hooks/public/brands.d.ts +1 -0
  41. package/dist/packages/api-client/src/hooks/public/carts.d.ts +18 -36
  42. package/dist/packages/api-client/src/hooks/public/orders.d.ts +4 -8
  43. package/dist/packages/api-client/src/hooks/public/products.d.ts +4 -8
  44. package/dist/packages/api-client/src/rpc-client.d.ts +83 -116
  45. package/package.json +1 -1
  46. package/dist/apps/backend/src/generated/zod/index.d.ts +0 -1114
  47. package/dist/apps/backend/src/generated/zod/index.js +0 -670
  48. package/dist/backend-types.d.ts +0 -10
  49. package/dist/backend-types.js +0 -10
  50. package/dist/client.d.ts +0 -20
  51. package/dist/client.js +0 -40
  52. package/dist/enum-types.d.ts +0 -8
  53. package/dist/enum-types.js +0 -5
  54. package/dist/fetchers/brands.d.ts +0 -25
  55. package/dist/fetchers/brands.js +0 -26
  56. package/dist/fetchers/carts.d.ts +0 -2335
  57. package/dist/fetchers/carts.js +0 -174
  58. package/dist/fetchers/delivery-zones.d.ts +0 -28
  59. package/dist/fetchers/delivery-zones.js +0 -26
  60. package/dist/fetchers/index.d.ts +0 -22
  61. package/dist/fetchers/index.js +0 -22
  62. package/dist/fetchers/orders.d.ts +0 -540
  63. package/dist/fetchers/orders.js +0 -44
  64. package/dist/fetchers/products.d.ts +0 -386
  65. package/dist/fetchers/products.js +0 -42
  66. package/dist/hooks/admin/abandoned-carts.d.ts +0 -535
  67. package/dist/hooks/admin/abandoned-carts.js +0 -83
  68. package/dist/hooks/admin/brands.d.ts +0 -79
  69. package/dist/hooks/admin/brands.js +0 -108
  70. package/dist/hooks/admin/customers.d.ts +0 -278
  71. package/dist/hooks/admin/customers.js +0 -26
  72. package/dist/hooks/admin/delivery-zones.d.ts +0 -270
  73. package/dist/hooks/admin/delivery-zones.js +0 -176
  74. package/dist/hooks/admin/discount-codes.d.ts +0 -299
  75. package/dist/hooks/admin/discount-codes.js +0 -165
  76. package/dist/hooks/admin/index.d.ts +0 -16
  77. package/dist/hooks/admin/index.js +0 -16
  78. package/dist/hooks/admin/inventory.d.ts +0 -224
  79. package/dist/hooks/admin/inventory.js +0 -107
  80. package/dist/hooks/admin/orders.d.ts +0 -1662
  81. package/dist/hooks/admin/orders.js +0 -178
  82. package/dist/hooks/admin/products.d.ts +0 -374
  83. package/dist/hooks/admin/products.js +0 -89
  84. package/dist/hooks/admin/stats.d.ts +0 -277
  85. package/dist/hooks/admin/stats.js +0 -25
  86. package/dist/hooks/admin/variants.d.ts +0 -115
  87. package/dist/hooks/admin/variants.js +0 -127
  88. package/dist/hooks/admin/warehouses.d.ts +0 -277
  89. package/dist/hooks/admin/warehouses.js +0 -108
  90. package/dist/hooks/public/brands.d.ts +0 -33
  91. package/dist/hooks/public/brands.js +0 -30
  92. package/dist/hooks/public/carts.d.ts +0 -2405
  93. package/dist/hooks/public/carts.js +0 -213
  94. package/dist/hooks/public/delivery-zones.d.ts +0 -34
  95. package/dist/hooks/public/delivery-zones.js +0 -28
  96. package/dist/hooks/public/index.d.ts +0 -10
  97. package/dist/hooks/public/index.js +0 -10
  98. package/dist/hooks/public/orders.d.ts +0 -559
  99. package/dist/hooks/public/orders.js +0 -50
  100. package/dist/hooks/public/products.d.ts +0 -398
  101. package/dist/hooks/public/products.js +0 -47
  102. package/dist/hooks/use-query-unwrapped.d.ts +0 -20
  103. package/dist/hooks/use-query-unwrapped.js +0 -22
  104. package/dist/hooks/useApiConfig.d.ts +0 -12
  105. package/dist/hooks/useApiConfig.js +0 -14
  106. package/dist/index.d.ts +0 -20
  107. package/dist/index.js +0 -25
  108. package/dist/provider.d.ts +0 -36
  109. package/dist/provider.js +0 -54
  110. package/dist/rpc-client.d.ts +0 -9607
  111. package/dist/rpc-client.js +0 -78
  112. package/dist/rpc-types.d.ts +0 -76
  113. package/dist/rpc-types.js +0 -7
  114. package/dist/types.d.ts +0 -34
  115. package/dist/types.js +0 -16
  116. package/dist/utils/query-keys.d.ts +0 -106
  117. package/dist/utils/query-keys.js +0 -108
@@ -1,277 +0,0 @@
1
- /**
2
- * Type-safe admin RPC hooks for statistics
3
- */
4
- import { UseQueryOptions } from '@tanstack/react-query';
5
- import { createAdminRpcClients } from '../../rpc-client';
6
- /**
7
- * Hook to get dashboard statistics using admin RPC
8
- */
9
- export declare function useGetStats(params?: {
10
- brandId?: string;
11
- }, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['stats']['index']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
12
- overview: {
13
- totalOrders: number;
14
- pendingOrders: number;
15
- shippedOrders: number;
16
- deliveredOrders: number;
17
- totalRevenue: number;
18
- };
19
- recentOrders: {
20
- subtotal: number;
21
- deliveryCharge: number;
22
- totalPrice: number;
23
- discountAmount: number;
24
- createdAt: string;
25
- updatedAt: string;
26
- deletedAt: string;
27
- prospectSince: string;
28
- lastRecoveryAttemptAt: string;
29
- brand: {
30
- createdAt: string;
31
- updatedAt: string;
32
- deletedAt: string;
33
- name: string;
34
- id: string;
35
- slug: string;
36
- logoUrl: string | null;
37
- siteUrl: string;
38
- domain: string;
39
- metaPixelId: string | null;
40
- };
41
- deliveryZone: {
42
- deliveryCost: number;
43
- freeShippingThreshold: number;
44
- createdAt: string;
45
- updatedAt: string;
46
- deletedAt: string;
47
- state: {
48
- createdAt: string;
49
- updatedAt: string;
50
- deletedAt: string;
51
- name: string;
52
- id: string;
53
- isActive: boolean;
54
- };
55
- name: string;
56
- id: string;
57
- brandId: string | null;
58
- stateId: string;
59
- allowCOD: boolean;
60
- allowOnline: boolean;
61
- waybillOnly: boolean;
62
- estimatedDays: number | null;
63
- isActive: boolean;
64
- };
65
- items: {
66
- priceAtPurchase: number;
67
- variant: {
68
- price: number;
69
- createdAt: string;
70
- updatedAt: string;
71
- deletedAt: string;
72
- product: {
73
- createdAt: string;
74
- updatedAt: string;
75
- deletedAt: string;
76
- name: string;
77
- id: string;
78
- slug: string;
79
- brandId: string;
80
- isActive: boolean;
81
- description: string | null;
82
- thumbnailUrl: string | null;
83
- quantityDiscounts: string | number | boolean | {
84
- [x: string]: string | number | boolean | /*elided*/ any | {
85
- [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
86
- length: number;
87
- toString: never;
88
- toLocaleString: never;
89
- pop: never;
90
- push: never;
91
- concat: never;
92
- join: never;
93
- reverse: never;
94
- shift: never;
95
- slice: never;
96
- sort: never;
97
- splice: never;
98
- unshift: never;
99
- indexOf: never;
100
- lastIndexOf: never;
101
- every: never;
102
- some: never;
103
- forEach: never;
104
- map: never;
105
- filter: never;
106
- reduce: never;
107
- reduceRight: never;
108
- find: never;
109
- findIndex: never;
110
- fill: never;
111
- copyWithin: never;
112
- entries: never;
113
- keys: never;
114
- values: never;
115
- includes: never;
116
- flatMap: never;
117
- flat: never;
118
- [Symbol.iterator]: never;
119
- readonly [Symbol.unscopables]: {
120
- [x: number]: boolean;
121
- length?: boolean;
122
- toString?: boolean;
123
- toLocaleString?: boolean;
124
- pop?: boolean;
125
- push?: boolean;
126
- concat?: boolean;
127
- join?: boolean;
128
- reverse?: boolean;
129
- shift?: boolean;
130
- slice?: boolean;
131
- sort?: boolean;
132
- splice?: boolean;
133
- unshift?: boolean;
134
- indexOf?: boolean;
135
- lastIndexOf?: boolean;
136
- every?: boolean;
137
- some?: boolean;
138
- forEach?: boolean;
139
- map?: boolean;
140
- filter?: boolean;
141
- reduce?: boolean;
142
- reduceRight?: boolean;
143
- find?: boolean;
144
- findIndex?: boolean;
145
- fill?: boolean;
146
- copyWithin?: boolean;
147
- entries?: boolean;
148
- keys?: boolean;
149
- values?: boolean;
150
- includes?: boolean;
151
- flatMap?: boolean;
152
- flat?: boolean;
153
- };
154
- };
155
- } | {
156
- [x: number]: string | number | boolean | {
157
- [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
158
- } | /*elided*/ any;
159
- length: number;
160
- toString: never;
161
- toLocaleString: never;
162
- pop: never;
163
- push: never;
164
- concat: never;
165
- join: never;
166
- reverse: never;
167
- shift: never;
168
- slice: never;
169
- sort: never;
170
- splice: never;
171
- unshift: never;
172
- indexOf: never;
173
- lastIndexOf: never;
174
- every: never;
175
- some: never;
176
- forEach: never;
177
- map: never;
178
- filter: never;
179
- reduce: never;
180
- reduceRight: never;
181
- find: never;
182
- findIndex: never;
183
- fill: never;
184
- copyWithin: never;
185
- entries: never;
186
- keys: never;
187
- values: never;
188
- includes: never;
189
- flatMap: never;
190
- flat: never;
191
- [Symbol.iterator]: never;
192
- readonly [Symbol.unscopables]: {
193
- [x: number]: boolean;
194
- length?: boolean;
195
- toString?: boolean;
196
- toLocaleString?: boolean;
197
- pop?: boolean;
198
- push?: boolean;
199
- concat?: boolean;
200
- join?: boolean;
201
- reverse?: boolean;
202
- shift?: boolean;
203
- slice?: boolean;
204
- sort?: boolean;
205
- splice?: boolean;
206
- unshift?: boolean;
207
- indexOf?: boolean;
208
- lastIndexOf?: boolean;
209
- every?: boolean;
210
- some?: boolean;
211
- forEach?: boolean;
212
- map?: boolean;
213
- filter?: boolean;
214
- reduce?: boolean;
215
- reduceRight?: boolean;
216
- find?: boolean;
217
- findIndex?: boolean;
218
- fill?: boolean;
219
- copyWithin?: boolean;
220
- entries?: boolean;
221
- keys?: boolean;
222
- values?: boolean;
223
- includes?: boolean;
224
- flatMap?: boolean;
225
- flat?: boolean;
226
- };
227
- };
228
- };
229
- name: string | null;
230
- id: string;
231
- isActive: boolean;
232
- thumbnailUrl: string | null;
233
- productId: string;
234
- sku: string;
235
- trackInventory: boolean;
236
- lowStockThreshold: number | null;
237
- };
238
- warehouse: {
239
- createdAt: string;
240
- updatedAt: string;
241
- deletedAt: string;
242
- name: string;
243
- id: string;
244
- isActive: boolean;
245
- address: string | null;
246
- city: string | null;
247
- state: string | null;
248
- };
249
- id: string;
250
- orderId: string;
251
- variantId: string;
252
- warehouseId: string | null;
253
- quantity: number;
254
- }[];
255
- id: string;
256
- email: string | null;
257
- brandId: string;
258
- deliveryZoneId: string;
259
- recoveryAttempts: number;
260
- recoveryDiscountCodeId: string | null;
261
- wasRecovered: boolean;
262
- estimatedDays: number | null;
263
- orderNumber: number;
264
- firstName: string;
265
- lastName: string;
266
- phone: string;
267
- address: string;
268
- city: string;
269
- discountCodeId: string | null;
270
- paymentMethod: import("@prisma/client").$Enums.PaymentMethod;
271
- paystackReference: string | null;
272
- status: import("@prisma/client").$Enums.OrderStatus;
273
- cancellationReason: string | null;
274
- prospectReason: import("@prisma/client").$Enums.ProspectReason | null;
275
- userActionToken: string;
276
- }[];
277
- }, Error>;
@@ -1,25 +0,0 @@
1
- /**
2
- * Type-safe admin RPC hooks for statistics
3
- */
4
- import { useQueryUnwrapped } from '../use-query-unwrapped';
5
- import { createAdminRpcClients, authHeaders } from '../../rpc-client';
6
- import { queryKeys } from '../../utils/query-keys';
7
- import { useApiConfig } from '../useApiConfig';
8
- /**
9
- * Hook to get dashboard statistics using admin RPC
10
- */
11
- export function useGetStats(params, options) {
12
- const { baseURL, getAuthToken } = useApiConfig();
13
- return useQueryUnwrapped({
14
- queryKey: queryKeys.admin.stats.overview(params?.brandId),
15
- queryFn: async () => {
16
- const token = await getAuthToken();
17
- const clients = createAdminRpcClients(baseURL);
18
- const res = await clients.stats.index.$get({ query: params }, authHeaders(token));
19
- if (!res.ok)
20
- throw new Error(`Failed to fetch statistics: ${res.statusText}`);
21
- return res.json();
22
- },
23
- ...options,
24
- });
25
- }
@@ -1,115 +0,0 @@
1
- /**
2
- * Type-safe admin RPC hooks for variant management
3
- */
4
- import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
5
- import { createAdminRpcClients } from '../../rpc-client';
6
- /**
7
- * Hook to search variants across all products using admin RPC
8
- */
9
- export declare function useSearchVariants(params?: {
10
- brandId?: string;
11
- search?: string;
12
- }, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['variants']['index']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
13
- createdAt: string;
14
- updatedAt: string;
15
- price: number;
16
- deletedAt: string;
17
- name: string | null;
18
- id: string;
19
- isActive: boolean;
20
- thumbnailUrl: string | null;
21
- productId: string;
22
- sku: string;
23
- trackInventory: boolean;
24
- lowStockThreshold: number | null;
25
- }[], Error>;
26
- /**
27
- * Hook to list variants for a specific product using admin RPC
28
- */
29
- export declare function useListProductVariants(productId: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['variants']['products'][':productId']['variants']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
30
- createdAt: string;
31
- updatedAt: string;
32
- price: number;
33
- deletedAt: string;
34
- name: string | null;
35
- id: string;
36
- isActive: boolean;
37
- thumbnailUrl: string | null;
38
- productId: string;
39
- sku: string;
40
- trackInventory: boolean;
41
- lowStockThreshold: number | null;
42
- }[], Error>;
43
- /**
44
- * Hook to create a variant for a product using admin RPC
45
- */
46
- export declare function useCreateVariant(productId: string, options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['variants']['products'][':productId']['variants']['$post']>>['json']>>, Error, any>): import("@tanstack/react-query").UseMutationResult<{
47
- createdAt: string;
48
- updatedAt: string;
49
- price: number;
50
- deletedAt: string;
51
- name: string | null;
52
- id: string;
53
- isActive: boolean;
54
- thumbnailUrl: string | null;
55
- productId: string;
56
- sku: string;
57
- trackInventory: boolean;
58
- lowStockThreshold: number | null;
59
- } | {
60
- error: {
61
- code: string;
62
- message: string;
63
- };
64
- }, Error, any, unknown>;
65
- /**
66
- * Hook to update a variant using admin RPC
67
- */
68
- export declare function useUpdateVariant(variantId: string, options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['variants'][':id']['$patch']>>['json']>>, Error, any>): import("@tanstack/react-query").UseMutationResult<{
69
- createdAt: string;
70
- updatedAt: string;
71
- price: number;
72
- deletedAt: string;
73
- name: string | null;
74
- id: string;
75
- isActive: boolean;
76
- thumbnailUrl: string | null;
77
- productId: string;
78
- sku: string;
79
- trackInventory: boolean;
80
- lowStockThreshold: number | null;
81
- } | {
82
- error: {
83
- code: string;
84
- message: string;
85
- };
86
- }, Error, any, unknown>;
87
- /**
88
- * Hook to get variant inventory across all warehouses using admin RPC
89
- */
90
- export declare function useGetVariantInventory(variantId: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['variants'][':id']['inventory']['$get']>>['json']>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
91
- variant: {
92
- createdAt: string;
93
- updatedAt: string;
94
- price: number;
95
- deletedAt: string;
96
- name: string | null;
97
- id: string;
98
- isActive: boolean;
99
- thumbnailUrl: string | null;
100
- productId: string;
101
- sku: string;
102
- trackInventory: boolean;
103
- lowStockThreshold: number | null;
104
- };
105
- totalInventory: number;
106
- warehouses: {
107
- warehouseId: string;
108
- warehouseName: string;
109
- inventoryCount: number;
110
- }[];
111
- }, Error>;
112
- /**
113
- * Hook to delete a variant using admin RPC
114
- */
115
- export declare function useDeleteVariant(variantId: string, options?: UseMutationOptions<Awaited<ReturnType<Awaited<ReturnType<ReturnType<typeof createAdminRpcClients>['variants'][':id']['$delete']>>['json']>>, Error, void>): import("@tanstack/react-query").UseMutationResult<unknown, Error, void, unknown>;
@@ -1,127 +0,0 @@
1
- /**
2
- * Type-safe admin RPC hooks for variant management
3
- */
4
- import { useMutation, useQueryClient } from '@tanstack/react-query';
5
- import { useQueryUnwrapped } from '../use-query-unwrapped';
6
- import { createAdminRpcClients, authHeaders } from '../../rpc-client';
7
- import { queryKeys } from '../../utils/query-keys';
8
- import { useApiConfig } from '../useApiConfig';
9
- /**
10
- * Hook to search variants across all products using admin RPC
11
- */
12
- export function useSearchVariants(params, options) {
13
- const { baseURL, getAuthToken } = useApiConfig();
14
- return useQueryUnwrapped({
15
- queryKey: queryKeys.admin.variants.search(params),
16
- queryFn: async () => {
17
- const token = await getAuthToken();
18
- const clients = createAdminRpcClients(baseURL);
19
- const res = await clients.variants.index.$get({ query: params }, authHeaders(token));
20
- if (!res.ok)
21
- throw new Error(`Failed to search variants: ${res.statusText}`);
22
- return res.json();
23
- },
24
- ...options,
25
- });
26
- }
27
- /**
28
- * Hook to list variants for a specific product using admin RPC
29
- */
30
- export function useListProductVariants(productId, options) {
31
- const { baseURL, getAuthToken } = useApiConfig();
32
- return useQueryUnwrapped({
33
- queryKey: queryKeys.admin.variants.byProduct(productId),
34
- queryFn: async () => {
35
- const token = await getAuthToken();
36
- const clients = createAdminRpcClients(baseURL);
37
- const res = await clients.variants.products[':productId'].variants.$get({ param: { productId } }, authHeaders(token));
38
- if (!res.ok)
39
- throw new Error(`Failed to fetch product variants: ${res.statusText}`);
40
- return res.json();
41
- },
42
- ...options,
43
- });
44
- }
45
- /**
46
- * Hook to create a variant for a product using admin RPC
47
- */
48
- export function useCreateVariant(productId, options) {
49
- const { baseURL, getAuthToken } = useApiConfig();
50
- const queryClient = useQueryClient();
51
- return useMutation({
52
- mutationFn: async (data) => {
53
- const token = await getAuthToken();
54
- const clients = createAdminRpcClients(baseURL);
55
- const res = await clients.variants.products[':productId'].variants.$post({ json: data, param: { productId } }, authHeaders(token));
56
- if (!res.ok)
57
- throw new Error(`Failed to create variant: ${res.statusText}`);
58
- return res.json();
59
- },
60
- onSuccess: () => {
61
- queryClient.invalidateQueries({ queryKey: queryKeys.admin.variants.all });
62
- queryClient.invalidateQueries({ queryKey: queryKeys.admin.products.detail(productId) });
63
- },
64
- ...options,
65
- });
66
- }
67
- /**
68
- * Hook to update a variant using admin RPC
69
- */
70
- export function useUpdateVariant(variantId, options) {
71
- const { baseURL, getAuthToken } = useApiConfig();
72
- const queryClient = useQueryClient();
73
- return useMutation({
74
- mutationFn: async (data) => {
75
- const token = await getAuthToken();
76
- const clients = createAdminRpcClients(baseURL);
77
- const res = await clients.variants[':id'].$patch({ json: data, param: { id: variantId } }, authHeaders(token));
78
- if (!res.ok)
79
- throw new Error(`Failed to update variant: ${res.statusText}`);
80
- return res.json();
81
- },
82
- onSuccess: () => {
83
- queryClient.invalidateQueries({ queryKey: queryKeys.admin.variants.detail(variantId) });
84
- queryClient.invalidateQueries({ queryKey: queryKeys.admin.variants.all });
85
- },
86
- ...options,
87
- });
88
- }
89
- /**
90
- * Hook to get variant inventory across all warehouses using admin RPC
91
- */
92
- export function useGetVariantInventory(variantId, options) {
93
- const { baseURL, getAuthToken } = useApiConfig();
94
- return useQueryUnwrapped({
95
- queryKey: queryKeys.admin.variants.inventory(variantId),
96
- queryFn: async () => {
97
- const token = await getAuthToken();
98
- const clients = createAdminRpcClients(baseURL);
99
- const res = await clients.variants[':id'].inventory.$get({ param: { id: variantId } }, authHeaders(token));
100
- if (!res.ok)
101
- throw new Error(`Failed to fetch variant inventory: ${res.statusText}`);
102
- return res.json();
103
- },
104
- ...options,
105
- });
106
- }
107
- /**
108
- * Hook to delete a variant using admin RPC
109
- */
110
- export function useDeleteVariant(variantId, options) {
111
- const { baseURL, getAuthToken } = useApiConfig();
112
- const queryClient = useQueryClient();
113
- return useMutation({
114
- mutationFn: async () => {
115
- const token = await getAuthToken();
116
- const clients = createAdminRpcClients(baseURL);
117
- const res = await clients.variants[':id'].$delete({ param: { id: variantId } }, authHeaders(token));
118
- if (!res.ok)
119
- throw new Error(`Failed to delete variant: ${res.statusText}`);
120
- return res.json();
121
- },
122
- onSuccess: () => {
123
- queryClient.invalidateQueries({ queryKey: queryKeys.admin.variants.all });
124
- },
125
- ...options,
126
- });
127
- }