@instockng/api-client 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apps/backend/src/generated/zod/index.d.ts +1114 -0
- package/dist/apps/backend/src/generated/zod/index.js +670 -0
- package/dist/apps/backend/src/http-app.d.ts +40 -0
- package/dist/apps/backend/src/http-app.js +106 -0
- package/dist/apps/backend/src/lib/brand-response.d.ts +14 -0
- package/dist/apps/backend/src/lib/brand-response.js +8 -0
- package/dist/apps/backend/src/lib/cart-helpers.d.ts +280 -0
- package/dist/apps/backend/src/lib/cart-helpers.js +93 -0
- package/dist/apps/backend/src/lib/cart-recovery.d.ts +30 -0
- package/dist/apps/backend/src/lib/cart-recovery.js +147 -0
- package/dist/apps/backend/src/lib/cart-response.d.ts +121 -0
- package/dist/apps/backend/src/lib/cart-response.js +150 -0
- package/dist/apps/backend/src/lib/clerk.d.ts +18 -0
- package/dist/apps/backend/src/lib/clerk.js +167 -0
- package/dist/apps/backend/src/lib/delivery-zone-response.d.ts +62 -0
- package/dist/apps/backend/src/lib/delivery-zone-response.js +24 -0
- package/dist/apps/backend/src/lib/discount-code-response.d.ts +42 -0
- package/dist/apps/backend/src/lib/discount-code-response.js +19 -0
- package/dist/apps/backend/src/lib/discount.d.ts +20 -0
- package/dist/apps/backend/src/lib/discount.js +35 -0
- package/dist/apps/backend/src/lib/inventory.d.ts +26 -0
- package/dist/apps/backend/src/lib/inventory.js +160 -0
- package/dist/apps/backend/src/lib/meta-capi.d.ts +48 -0
- package/dist/apps/backend/src/lib/meta-capi.js +120 -0
- package/dist/apps/backend/src/lib/openapi.d.ts +36 -0
- package/dist/apps/backend/src/lib/openapi.js +69 -0
- package/dist/apps/backend/src/lib/order-recovery.d.ts +367 -0
- package/dist/apps/backend/src/lib/order-recovery.js +373 -0
- package/dist/apps/backend/src/lib/order-response.d.ts +136 -0
- package/dist/apps/backend/src/lib/order-response.js +61 -0
- package/dist/apps/backend/src/lib/pricing.d.ts +39 -0
- package/dist/apps/backend/src/lib/pricing.js +62 -0
- package/dist/apps/backend/src/lib/prisma.d.ts +9 -0
- package/dist/apps/backend/src/lib/prisma.js +30 -0
- package/dist/apps/backend/src/lib/product-response.d.ts +82 -0
- package/dist/apps/backend/src/lib/product-response.js +29 -0
- package/dist/apps/backend/src/lib/utils.d.ts +32 -0
- package/dist/apps/backend/src/lib/utils.js +63 -0
- package/dist/apps/backend/src/middleware/clerk-auth.d.ts +8 -0
- package/dist/apps/backend/src/middleware/clerk-auth.js +89 -0
- package/dist/apps/backend/src/middleware/cors.d.ts +8 -0
- package/dist/apps/backend/src/middleware/cors.js +11 -0
- package/dist/apps/backend/src/notifications/producers/meta-capi-producer.d.ts +55 -0
- package/dist/apps/backend/src/notifications/producers/meta-capi-producer.js +125 -0
- package/dist/apps/backend/src/notifications/producers/order-notification.d.ts +9 -0
- package/dist/apps/backend/src/notifications/producers/order-notification.js +18 -0
- package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.d.ts +10 -0
- package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.js +11 -0
- package/dist/apps/backend/src/routes/admin/abandoned-carts.d.ts +605 -0
- package/dist/apps/backend/src/routes/admin/abandoned-carts.js +194 -0
- package/dist/apps/backend/src/routes/admin/brands.d.ts +175 -0
- package/dist/apps/backend/src/routes/admin/brands.js +118 -0
- package/dist/apps/backend/src/routes/admin/customers.d.ts +306 -0
- package/dist/apps/backend/src/routes/admin/customers.js +39 -0
- package/dist/apps/backend/src/routes/admin/delivery-zones.d.ts +438 -0
- package/dist/apps/backend/src/routes/admin/delivery-zones.js +300 -0
- package/dist/apps/backend/src/routes/admin/discount-codes.d.ts +478 -0
- package/dist/apps/backend/src/routes/admin/discount-codes.js +418 -0
- package/dist/apps/backend/src/routes/admin/inventory.d.ts +273 -0
- package/dist/apps/backend/src/routes/admin/inventory.js +189 -0
- package/dist/apps/backend/src/routes/admin/orders.d.ts +1478 -0
- package/dist/apps/backend/src/routes/admin/orders.js +503 -0
- package/dist/apps/backend/src/routes/admin/products.d.ts +860 -0
- package/dist/apps/backend/src/routes/admin/products.js +107 -0
- package/dist/apps/backend/src/routes/admin/stats.d.ts +288 -0
- package/dist/apps/backend/src/routes/admin/stats.js +55 -0
- package/dist/apps/backend/src/routes/admin/variants.d.ts +239 -0
- package/dist/apps/backend/src/routes/admin/variants.js +173 -0
- package/dist/apps/backend/src/routes/admin/warehouses.d.ts +373 -0
- package/dist/apps/backend/src/routes/admin/warehouses.js +123 -0
- package/dist/apps/backend/src/routes/public/brands.d.ts +40 -0
- package/dist/apps/backend/src/routes/public/brands.js +38 -0
- package/dist/apps/backend/src/routes/public/carts.d.ts +2655 -0
- package/dist/apps/backend/src/routes/public/carts.js +631 -0
- package/dist/apps/backend/src/routes/public/delivery-zones.d.ts +35 -0
- package/dist/apps/backend/src/routes/public/delivery-zones.js +62 -0
- package/dist/apps/backend/src/routes/public/orders.d.ts +323 -0
- package/dist/apps/backend/src/routes/public/orders.js +160 -0
- package/dist/apps/backend/src/routes/public/products.d.ts +449 -0
- package/dist/apps/backend/src/routes/public/products.js +133 -0
- package/dist/apps/backend/src/types/index.d.ts +42 -0
- package/dist/apps/backend/src/types/index.js +2 -0
- package/dist/apps/backend/src/validators/brand.d.ts +17 -0
- package/dist/apps/backend/src/validators/brand.js +15 -0
- package/dist/apps/backend/src/validators/delivery-zone.d.ts +31 -0
- package/dist/apps/backend/src/validators/delivery-zone.js +51 -0
- package/dist/apps/backend/src/validators/discount-code.d.ts +74 -0
- package/dist/apps/backend/src/validators/discount-code.js +50 -0
- package/dist/apps/backend/src/validators/inventory.d.ts +20 -0
- package/dist/apps/backend/src/validators/inventory.js +15 -0
- package/dist/apps/backend/src/validators/order.d.ts +87 -0
- package/dist/apps/backend/src/validators/order.js +61 -0
- package/dist/apps/backend/src/validators/product.d.ts +18 -0
- package/dist/apps/backend/src/validators/product.js +19 -0
- package/dist/apps/backend/src/validators/variant.d.ts +19 -0
- package/dist/apps/backend/src/validators/variant.js +19 -0
- package/dist/apps/backend/src/validators/warehouse.d.ts +15 -0
- package/dist/apps/backend/src/validators/warehouse.js +15 -0
- package/dist/fetchers/carts.d.ts +746 -754
- package/dist/hooks/public/carts.d.ts +694 -702
- package/dist/packages/api-client/src/backend-types.d.ts +10 -0
- package/dist/packages/api-client/src/backend-types.js +10 -0
- package/dist/packages/api-client/src/client.d.ts +20 -0
- package/dist/packages/api-client/src/client.js +40 -0
- package/dist/packages/api-client/src/fetchers/brands.d.ts +25 -0
- package/dist/packages/api-client/src/fetchers/brands.js +26 -0
- package/dist/packages/api-client/src/fetchers/carts.d.ts +2335 -0
- package/dist/packages/api-client/src/fetchers/carts.js +169 -0
- package/dist/packages/api-client/src/fetchers/delivery-zones.d.ts +28 -0
- package/dist/packages/api-client/src/fetchers/delivery-zones.js +26 -0
- package/dist/packages/api-client/src/fetchers/index.d.ts +22 -0
- package/dist/packages/api-client/src/fetchers/index.js +22 -0
- package/dist/packages/api-client/src/fetchers/orders.d.ts +283 -0
- package/dist/packages/api-client/src/fetchers/orders.js +44 -0
- package/dist/packages/api-client/src/fetchers/products.d.ts +386 -0
- package/dist/packages/api-client/src/fetchers/products.js +42 -0
- package/dist/packages/api-client/src/hooks/admin/abandoned-carts.d.ts +535 -0
- package/dist/packages/api-client/src/hooks/admin/abandoned-carts.js +83 -0
- package/dist/packages/api-client/src/hooks/admin/brands.d.ts +79 -0
- package/dist/packages/api-client/src/hooks/admin/brands.js +108 -0
- package/dist/packages/api-client/src/hooks/admin/customers.d.ts +278 -0
- package/dist/packages/api-client/src/hooks/admin/customers.js +26 -0
- package/dist/packages/api-client/src/hooks/admin/delivery-zones.d.ts +270 -0
- package/dist/packages/api-client/src/hooks/admin/delivery-zones.js +176 -0
- package/dist/packages/api-client/src/hooks/admin/discount-codes.d.ts +299 -0
- package/dist/packages/api-client/src/hooks/admin/discount-codes.js +165 -0
- package/dist/packages/api-client/src/hooks/admin/index.d.ts +16 -0
- package/dist/packages/api-client/src/hooks/admin/index.js +16 -0
- package/dist/packages/api-client/src/hooks/admin/inventory.d.ts +224 -0
- package/dist/packages/api-client/src/hooks/admin/inventory.js +107 -0
- package/dist/packages/api-client/src/hooks/admin/orders.d.ts +1380 -0
- package/dist/packages/api-client/src/hooks/admin/orders.js +175 -0
- package/dist/packages/api-client/src/hooks/admin/products.d.ts +374 -0
- package/dist/packages/api-client/src/hooks/admin/products.js +89 -0
- package/dist/packages/api-client/src/hooks/admin/stats.d.ts +277 -0
- package/dist/packages/api-client/src/hooks/admin/stats.js +25 -0
- package/dist/packages/api-client/src/hooks/admin/variants.d.ts +115 -0
- package/dist/packages/api-client/src/hooks/admin/variants.js +127 -0
- package/dist/packages/api-client/src/hooks/admin/warehouses.d.ts +277 -0
- package/dist/packages/api-client/src/hooks/admin/warehouses.js +108 -0
- package/dist/packages/api-client/src/hooks/public/brands.d.ts +33 -0
- package/dist/packages/api-client/src/hooks/public/brands.js +30 -0
- package/dist/packages/api-client/src/hooks/public/carts.d.ts +2405 -0
- package/dist/packages/api-client/src/hooks/public/carts.js +213 -0
- package/dist/packages/api-client/src/hooks/public/delivery-zones.d.ts +34 -0
- package/dist/packages/api-client/src/hooks/public/delivery-zones.js +28 -0
- package/dist/packages/api-client/src/hooks/public/index.d.ts +10 -0
- package/dist/packages/api-client/src/hooks/public/index.js +10 -0
- package/dist/packages/api-client/src/hooks/public/orders.d.ts +302 -0
- package/dist/packages/api-client/src/hooks/public/orders.js +50 -0
- package/dist/packages/api-client/src/hooks/public/products.d.ts +398 -0
- package/dist/packages/api-client/src/hooks/public/products.js +47 -0
- package/dist/packages/api-client/src/hooks/use-query-unwrapped.d.ts +20 -0
- package/dist/packages/api-client/src/hooks/use-query-unwrapped.js +22 -0
- package/dist/packages/api-client/src/hooks/useApiConfig.d.ts +12 -0
- package/dist/packages/api-client/src/hooks/useApiConfig.js +14 -0
- package/dist/packages/api-client/src/index.d.ts +20 -0
- package/dist/packages/api-client/src/index.js +25 -0
- package/dist/packages/api-client/src/provider.d.ts +36 -0
- package/dist/packages/api-client/src/provider.js +54 -0
- package/dist/packages/api-client/src/rpc-client.d.ts +9035 -0
- package/dist/packages/api-client/src/rpc-client.js +78 -0
- package/dist/packages/api-client/src/rpc-types.d.ts +76 -0
- package/dist/packages/api-client/src/rpc-types.js +7 -0
- package/dist/packages/api-client/src/types.d.ts +37 -0
- package/dist/packages/api-client/src/types.js +16 -0
- package/dist/packages/api-client/src/utils/query-keys.d.ts +106 -0
- package/dist/packages/api-client/src/utils/query-keys.js +108 -0
- package/dist/rpc-client.d.ts +685 -693
- package/package.json +10 -9
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe RPC hooks for cart operations
|
|
3
|
+
*
|
|
4
|
+
* These hooks use Hono RPC client with types directly from the backend,
|
|
5
|
+
* providing end-to-end type safety without code generation.
|
|
6
|
+
*/
|
|
7
|
+
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
8
|
+
import { useQueryUnwrapped } from '../use-query-unwrapped';
|
|
9
|
+
import { queryKeys } from '../../utils/query-keys';
|
|
10
|
+
import { fetchCart, updateCart, createCart, addCartItem, updateCartItem, removeCartItem, applyDiscount, removeDiscount, checkoutCart, } from '../../fetchers/carts';
|
|
11
|
+
/**
|
|
12
|
+
* Hook to get cart by ID using RPC
|
|
13
|
+
*
|
|
14
|
+
* @param cartId - Cart UUID
|
|
15
|
+
* @param options - React Query options
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* const { data: cart, isLoading } = useGetCart('cart-123');
|
|
20
|
+
* console.log(cart?.cart.brand.name); // Fully typed!
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function useGetCart(cartId, options) {
|
|
24
|
+
return useQueryUnwrapped({
|
|
25
|
+
queryKey: queryKeys.public.carts.detail(cartId),
|
|
26
|
+
queryFn: () => fetchCart(cartId),
|
|
27
|
+
...options,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Hook to update cart using RPC
|
|
32
|
+
*
|
|
33
|
+
* @param cartId - Cart UUID
|
|
34
|
+
* @param options - React Query mutation options
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* const updateCart = useUpdateCart('cart-123');
|
|
39
|
+
* updateCart.mutate({
|
|
40
|
+
* customerEmail: 'user@example.com',
|
|
41
|
+
* deliveryZoneId: 'zone-123'
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function useUpdateCart(cartId, options) {
|
|
46
|
+
const queryClient = useQueryClient();
|
|
47
|
+
return useMutation({
|
|
48
|
+
mutationFn: (data) => updateCart(cartId, data),
|
|
49
|
+
onSuccess: () => {
|
|
50
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
51
|
+
},
|
|
52
|
+
...options,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Hook to create a new cart using RPC
|
|
57
|
+
*
|
|
58
|
+
* @param options - React Query mutation options
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```tsx
|
|
62
|
+
* const createCart = useCreateCart();
|
|
63
|
+
* createCart.mutate('my-brand');
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function useCreateCart(options) {
|
|
67
|
+
return useMutation({
|
|
68
|
+
mutationFn: (brandSlug) => createCart(brandSlug),
|
|
69
|
+
...options,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Hook to apply discount code to cart using RPC
|
|
74
|
+
*
|
|
75
|
+
* @param cartId - Cart UUID
|
|
76
|
+
* @param options - React Query mutation options
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* const applyDiscount = useApplyDiscount('cart-123');
|
|
81
|
+
* applyDiscount.mutate({ code: 'SAVE10' });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export function useApplyDiscount(cartId, options) {
|
|
85
|
+
const queryClient = useQueryClient();
|
|
86
|
+
return useMutation({
|
|
87
|
+
mutationFn: (data) => applyDiscount(cartId, data.code),
|
|
88
|
+
onSuccess: () => {
|
|
89
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
90
|
+
},
|
|
91
|
+
...options,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Hook to remove discount code from cart using RPC
|
|
96
|
+
*
|
|
97
|
+
* @param cartId - Cart UUID
|
|
98
|
+
* @param options - React Query mutation options
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```tsx
|
|
102
|
+
* const removeDiscount = useRemoveDiscount('cart-123');
|
|
103
|
+
* removeDiscount.mutate();
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export function useRemoveDiscount(cartId, options) {
|
|
107
|
+
const queryClient = useQueryClient();
|
|
108
|
+
return useMutation({
|
|
109
|
+
mutationFn: () => removeDiscount(cartId),
|
|
110
|
+
onSuccess: () => {
|
|
111
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
112
|
+
},
|
|
113
|
+
...options,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Hook to add item to cart using RPC
|
|
118
|
+
*
|
|
119
|
+
* @param cartId - Cart UUID
|
|
120
|
+
* @param options - React Query mutation options
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```tsx
|
|
124
|
+
* const addItem = useAddCartItem('cart-123');
|
|
125
|
+
* addItem.mutate({ sku: 'PROD-001', quantity: 2, fbc: '_fbc_cookie', fbp: '_fbp_cookie' });
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export function useAddCartItem(cartId, options) {
|
|
129
|
+
const queryClient = useQueryClient();
|
|
130
|
+
return useMutation({
|
|
131
|
+
mutationFn: (data) => addCartItem(cartId, data.sku, data.quantity, data.fbc, data.fbp),
|
|
132
|
+
onSuccess: () => {
|
|
133
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
134
|
+
},
|
|
135
|
+
...options,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Hook to update cart item quantity using RPC
|
|
140
|
+
*
|
|
141
|
+
* @param cartId - Cart UUID
|
|
142
|
+
* @param options - React Query mutation options
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```tsx
|
|
146
|
+
* const updateItem = useUpdateCartItem('cart-123');
|
|
147
|
+
* updateItem.mutate({ itemId: 'item-456', quantity: 3 });
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export function useUpdateCartItem(cartId, options) {
|
|
151
|
+
const queryClient = useQueryClient();
|
|
152
|
+
return useMutation({
|
|
153
|
+
mutationFn: ({ itemId, quantity }) => updateCartItem(cartId, itemId, quantity),
|
|
154
|
+
onSuccess: () => {
|
|
155
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
156
|
+
},
|
|
157
|
+
...options,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Hook to remove item from cart using RPC
|
|
162
|
+
*
|
|
163
|
+
* @param cartId - Cart UUID
|
|
164
|
+
* @param options - React Query mutation options
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```tsx
|
|
168
|
+
* const removeItem = useRemoveCartItem('cart-123');
|
|
169
|
+
* removeItem.mutate('item-456'); // Pass itemId in mutate call
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export function useRemoveCartItem(cartId, options) {
|
|
173
|
+
const queryClient = useQueryClient();
|
|
174
|
+
return useMutation({
|
|
175
|
+
mutationFn: (itemId) => removeCartItem(cartId, itemId),
|
|
176
|
+
onSuccess: () => {
|
|
177
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
178
|
+
},
|
|
179
|
+
...options,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Hook to checkout a cart and create an order using RPC
|
|
184
|
+
*
|
|
185
|
+
* @param cartId - Cart UUID
|
|
186
|
+
* @param options - React Query mutation options
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```tsx
|
|
190
|
+
* const checkout = useCheckoutCart('cart-123');
|
|
191
|
+
* checkout.mutate({
|
|
192
|
+
* firstName: 'John',
|
|
193
|
+
* lastName: 'Doe',
|
|
194
|
+
* email: 'john@example.com',
|
|
195
|
+
* phone: '+1234567890',
|
|
196
|
+
* address: '123 Main St',
|
|
197
|
+
* city: 'New York',
|
|
198
|
+
* deliveryZoneId: 'zone-123',
|
|
199
|
+
* paymentMethod: 'cod'
|
|
200
|
+
* });
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
export function useCheckoutCart(cartId, options) {
|
|
204
|
+
const queryClient = useQueryClient();
|
|
205
|
+
return useMutation({
|
|
206
|
+
mutationFn: (data) => checkoutCart(cartId, data),
|
|
207
|
+
onSuccess: () => {
|
|
208
|
+
// Invalidate cart query since it's now converted to an order
|
|
209
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.public.carts.detail(cartId) });
|
|
210
|
+
},
|
|
211
|
+
...options,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe RPC hooks for delivery zone operations
|
|
3
|
+
*
|
|
4
|
+
* These hooks use Hono RPC client with types directly from the backend,
|
|
5
|
+
* providing end-to-end type safety without code generation.
|
|
6
|
+
*/
|
|
7
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
8
|
+
import { fetchDeliveryZones } from '../../fetchers/delivery-zones';
|
|
9
|
+
/**
|
|
10
|
+
* Hook to get delivery zones using RPC
|
|
11
|
+
*
|
|
12
|
+
* @param brandId - Optional brand UUID to filter brand-specific zones
|
|
13
|
+
* @param options - React Query options
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* const { data: zones, isLoading } = useGetDeliveryZones(undefined);
|
|
18
|
+
* console.log(zones?.data[0].name); // Fully typed!
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function useGetDeliveryZones(brandId: string | undefined, options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof fetchDeliveryZones>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
zones: {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
deliveryCost: number;
|
|
28
|
+
freeShippingThreshold: number;
|
|
29
|
+
allowCOD: boolean;
|
|
30
|
+
allowOnline: boolean;
|
|
31
|
+
waybillOnly: boolean;
|
|
32
|
+
estimatedDays: number;
|
|
33
|
+
}[];
|
|
34
|
+
}[], Error>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe RPC hooks for delivery zone operations
|
|
3
|
+
*
|
|
4
|
+
* These hooks use Hono RPC client with types directly from the backend,
|
|
5
|
+
* providing end-to-end type safety without code generation.
|
|
6
|
+
*/
|
|
7
|
+
import { useQueryUnwrapped } from '../use-query-unwrapped';
|
|
8
|
+
import { queryKeys } from '../../utils/query-keys';
|
|
9
|
+
import { fetchDeliveryZones } from '../../fetchers/delivery-zones';
|
|
10
|
+
/**
|
|
11
|
+
* Hook to get delivery zones using RPC
|
|
12
|
+
*
|
|
13
|
+
* @param brandId - Optional brand UUID to filter brand-specific zones
|
|
14
|
+
* @param options - React Query options
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const { data: zones, isLoading } = useGetDeliveryZones(undefined);
|
|
19
|
+
* console.log(zones?.data[0].name); // Fully typed!
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function useGetDeliveryZones(brandId, options) {
|
|
23
|
+
return useQueryUnwrapped({
|
|
24
|
+
queryKey: queryKeys.public.deliveryZones.list(brandId),
|
|
25
|
+
queryFn: () => fetchDeliveryZones(brandId),
|
|
26
|
+
...options,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe RPC hooks for order operations
|
|
3
|
+
*
|
|
4
|
+
* These hooks use Hono RPC client with types directly from the backend,
|
|
5
|
+
* providing end-to-end type safety without code generation.
|
|
6
|
+
*/
|
|
7
|
+
import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
|
|
8
|
+
import { fetchOrder, confirmOrder } from '../../fetchers/orders';
|
|
9
|
+
/**
|
|
10
|
+
* Hook to get order by ID and token using RPC
|
|
11
|
+
*
|
|
12
|
+
* @param orderId - Order UUID
|
|
13
|
+
* @param token - User action token
|
|
14
|
+
* @param options - React Query options
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const { data: order, isLoading } = useGetOrder('order-123', 'token-456');
|
|
19
|
+
* console.log(order?.order.status); // Fully typed!
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function useGetOrder(orderId: string, token: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof fetchOrder>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
23
|
+
canConfirm: boolean;
|
|
24
|
+
confirmationMessage: string;
|
|
25
|
+
subtotal: number;
|
|
26
|
+
deliveryCharge: number;
|
|
27
|
+
totalPrice: number;
|
|
28
|
+
discountAmount: number;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
updatedAt: string;
|
|
31
|
+
deletedAt: string;
|
|
32
|
+
prospectSince: string;
|
|
33
|
+
lastRecoveryAttemptAt: string;
|
|
34
|
+
brand: {
|
|
35
|
+
createdAt: string;
|
|
36
|
+
updatedAt: string;
|
|
37
|
+
deletedAt: string;
|
|
38
|
+
name: string;
|
|
39
|
+
id: string;
|
|
40
|
+
slug: string;
|
|
41
|
+
logoUrl: string | null;
|
|
42
|
+
siteUrl: string;
|
|
43
|
+
domain: string;
|
|
44
|
+
metaPixelId: string | null;
|
|
45
|
+
};
|
|
46
|
+
deliveryZone: {
|
|
47
|
+
deliveryCost: number;
|
|
48
|
+
freeShippingThreshold: number;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
updatedAt: string;
|
|
51
|
+
deletedAt: string;
|
|
52
|
+
state: {
|
|
53
|
+
createdAt: string;
|
|
54
|
+
updatedAt: string;
|
|
55
|
+
deletedAt: string;
|
|
56
|
+
name: string;
|
|
57
|
+
id: string;
|
|
58
|
+
isActive: boolean;
|
|
59
|
+
};
|
|
60
|
+
name: string;
|
|
61
|
+
id: string;
|
|
62
|
+
brandId: string | null;
|
|
63
|
+
stateId: string;
|
|
64
|
+
allowCOD: boolean;
|
|
65
|
+
allowOnline: boolean;
|
|
66
|
+
waybillOnly: boolean;
|
|
67
|
+
estimatedDays: number | null;
|
|
68
|
+
isActive: boolean;
|
|
69
|
+
};
|
|
70
|
+
items: {
|
|
71
|
+
priceAtPurchase: number;
|
|
72
|
+
variant: {
|
|
73
|
+
price: number;
|
|
74
|
+
createdAt: string;
|
|
75
|
+
updatedAt: string;
|
|
76
|
+
deletedAt: string;
|
|
77
|
+
product: {
|
|
78
|
+
createdAt: string;
|
|
79
|
+
updatedAt: string;
|
|
80
|
+
deletedAt: string;
|
|
81
|
+
name: string;
|
|
82
|
+
id: string;
|
|
83
|
+
slug: string;
|
|
84
|
+
brandId: string;
|
|
85
|
+
isActive: boolean;
|
|
86
|
+
description: string | null;
|
|
87
|
+
thumbnailUrl: string | null;
|
|
88
|
+
quantityDiscounts: string | number | boolean | {
|
|
89
|
+
[x: string]: string | number | boolean | /*elided*/ any | {
|
|
90
|
+
[x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
|
|
91
|
+
length: number;
|
|
92
|
+
toString: never;
|
|
93
|
+
toLocaleString: never;
|
|
94
|
+
pop: never;
|
|
95
|
+
push: never;
|
|
96
|
+
concat: never;
|
|
97
|
+
join: never;
|
|
98
|
+
reverse: never;
|
|
99
|
+
shift: never;
|
|
100
|
+
slice: never;
|
|
101
|
+
sort: never;
|
|
102
|
+
splice: never;
|
|
103
|
+
unshift: never;
|
|
104
|
+
indexOf: never;
|
|
105
|
+
lastIndexOf: never;
|
|
106
|
+
every: never;
|
|
107
|
+
some: never;
|
|
108
|
+
forEach: never;
|
|
109
|
+
map: never;
|
|
110
|
+
filter: never;
|
|
111
|
+
reduce: never;
|
|
112
|
+
reduceRight: never;
|
|
113
|
+
find: never;
|
|
114
|
+
findIndex: never;
|
|
115
|
+
fill: never;
|
|
116
|
+
copyWithin: never;
|
|
117
|
+
entries: never;
|
|
118
|
+
keys: never;
|
|
119
|
+
values: never;
|
|
120
|
+
includes: never;
|
|
121
|
+
flatMap: never;
|
|
122
|
+
flat: never;
|
|
123
|
+
[Symbol.iterator]: never;
|
|
124
|
+
readonly [Symbol.unscopables]: {
|
|
125
|
+
[x: number]: boolean;
|
|
126
|
+
length?: boolean;
|
|
127
|
+
toString?: boolean;
|
|
128
|
+
toLocaleString?: boolean;
|
|
129
|
+
pop?: boolean;
|
|
130
|
+
push?: boolean;
|
|
131
|
+
concat?: boolean;
|
|
132
|
+
join?: boolean;
|
|
133
|
+
reverse?: boolean;
|
|
134
|
+
shift?: boolean;
|
|
135
|
+
slice?: boolean;
|
|
136
|
+
sort?: boolean;
|
|
137
|
+
splice?: boolean;
|
|
138
|
+
unshift?: boolean;
|
|
139
|
+
indexOf?: boolean;
|
|
140
|
+
lastIndexOf?: boolean;
|
|
141
|
+
every?: boolean;
|
|
142
|
+
some?: boolean;
|
|
143
|
+
forEach?: boolean;
|
|
144
|
+
map?: boolean;
|
|
145
|
+
filter?: boolean;
|
|
146
|
+
reduce?: boolean;
|
|
147
|
+
reduceRight?: boolean;
|
|
148
|
+
find?: boolean;
|
|
149
|
+
findIndex?: boolean;
|
|
150
|
+
fill?: boolean;
|
|
151
|
+
copyWithin?: boolean;
|
|
152
|
+
entries?: boolean;
|
|
153
|
+
keys?: boolean;
|
|
154
|
+
values?: boolean;
|
|
155
|
+
includes?: boolean;
|
|
156
|
+
flatMap?: boolean;
|
|
157
|
+
flat?: boolean;
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
} | {
|
|
161
|
+
[x: number]: string | number | boolean | {
|
|
162
|
+
[x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
|
|
163
|
+
} | /*elided*/ any;
|
|
164
|
+
length: number;
|
|
165
|
+
toString: never;
|
|
166
|
+
toLocaleString: never;
|
|
167
|
+
pop: never;
|
|
168
|
+
push: never;
|
|
169
|
+
concat: never;
|
|
170
|
+
join: never;
|
|
171
|
+
reverse: never;
|
|
172
|
+
shift: never;
|
|
173
|
+
slice: never;
|
|
174
|
+
sort: never;
|
|
175
|
+
splice: never;
|
|
176
|
+
unshift: never;
|
|
177
|
+
indexOf: never;
|
|
178
|
+
lastIndexOf: never;
|
|
179
|
+
every: never;
|
|
180
|
+
some: never;
|
|
181
|
+
forEach: never;
|
|
182
|
+
map: never;
|
|
183
|
+
filter: never;
|
|
184
|
+
reduce: never;
|
|
185
|
+
reduceRight: never;
|
|
186
|
+
find: never;
|
|
187
|
+
findIndex: never;
|
|
188
|
+
fill: never;
|
|
189
|
+
copyWithin: never;
|
|
190
|
+
entries: never;
|
|
191
|
+
keys: never;
|
|
192
|
+
values: never;
|
|
193
|
+
includes: never;
|
|
194
|
+
flatMap: never;
|
|
195
|
+
flat: never;
|
|
196
|
+
[Symbol.iterator]: never;
|
|
197
|
+
readonly [Symbol.unscopables]: {
|
|
198
|
+
[x: number]: boolean;
|
|
199
|
+
length?: boolean;
|
|
200
|
+
toString?: boolean;
|
|
201
|
+
toLocaleString?: boolean;
|
|
202
|
+
pop?: boolean;
|
|
203
|
+
push?: boolean;
|
|
204
|
+
concat?: boolean;
|
|
205
|
+
join?: boolean;
|
|
206
|
+
reverse?: boolean;
|
|
207
|
+
shift?: boolean;
|
|
208
|
+
slice?: boolean;
|
|
209
|
+
sort?: boolean;
|
|
210
|
+
splice?: boolean;
|
|
211
|
+
unshift?: boolean;
|
|
212
|
+
indexOf?: boolean;
|
|
213
|
+
lastIndexOf?: boolean;
|
|
214
|
+
every?: boolean;
|
|
215
|
+
some?: boolean;
|
|
216
|
+
forEach?: boolean;
|
|
217
|
+
map?: boolean;
|
|
218
|
+
filter?: boolean;
|
|
219
|
+
reduce?: boolean;
|
|
220
|
+
reduceRight?: boolean;
|
|
221
|
+
find?: boolean;
|
|
222
|
+
findIndex?: boolean;
|
|
223
|
+
fill?: boolean;
|
|
224
|
+
copyWithin?: boolean;
|
|
225
|
+
entries?: boolean;
|
|
226
|
+
keys?: boolean;
|
|
227
|
+
values?: boolean;
|
|
228
|
+
includes?: boolean;
|
|
229
|
+
flatMap?: boolean;
|
|
230
|
+
flat?: boolean;
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
};
|
|
234
|
+
name: string | null;
|
|
235
|
+
id: string;
|
|
236
|
+
isActive: boolean;
|
|
237
|
+
thumbnailUrl: string | null;
|
|
238
|
+
productId: string;
|
|
239
|
+
sku: string;
|
|
240
|
+
trackInventory: boolean;
|
|
241
|
+
lowStockThreshold: number | null;
|
|
242
|
+
};
|
|
243
|
+
warehouse: {
|
|
244
|
+
createdAt: string;
|
|
245
|
+
updatedAt: string;
|
|
246
|
+
deletedAt: string;
|
|
247
|
+
name: string;
|
|
248
|
+
id: string;
|
|
249
|
+
isActive: boolean;
|
|
250
|
+
address: string | null;
|
|
251
|
+
city: string | null;
|
|
252
|
+
state: string | null;
|
|
253
|
+
};
|
|
254
|
+
id: string;
|
|
255
|
+
orderId: string;
|
|
256
|
+
variantId: string;
|
|
257
|
+
warehouseId: string | null;
|
|
258
|
+
quantity: number;
|
|
259
|
+
}[];
|
|
260
|
+
id: string;
|
|
261
|
+
email: string | null;
|
|
262
|
+
brandId: string;
|
|
263
|
+
deliveryZoneId: string;
|
|
264
|
+
recoveryAttempts: number;
|
|
265
|
+
recoveryDiscountCodeId: string | null;
|
|
266
|
+
wasRecovered: boolean;
|
|
267
|
+
estimatedDays: number | null;
|
|
268
|
+
orderNumber: number;
|
|
269
|
+
firstName: string;
|
|
270
|
+
lastName: string;
|
|
271
|
+
phone: string;
|
|
272
|
+
address: string;
|
|
273
|
+
city: string;
|
|
274
|
+
discountCodeId: string | null;
|
|
275
|
+
paymentMethod: import("@prisma/client").$Enums.PaymentMethod;
|
|
276
|
+
paystackReference: string | null;
|
|
277
|
+
status: import("@prisma/client").$Enums.OrderStatus;
|
|
278
|
+
cancellationReason: string | null;
|
|
279
|
+
prospectReason: import("@prisma/client").$Enums.ProspectReason | null;
|
|
280
|
+
userActionToken: string;
|
|
281
|
+
}, Error>;
|
|
282
|
+
/**
|
|
283
|
+
* Hook to confirm a prospect order using RPC
|
|
284
|
+
*
|
|
285
|
+
* @param options - React Query mutation options
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```tsx
|
|
289
|
+
* const confirmOrder = useConfirmOrder();
|
|
290
|
+
* confirmOrder.mutate({
|
|
291
|
+
* orderId: 'order-123',
|
|
292
|
+
* token: 'token-456'
|
|
293
|
+
* });
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
export declare function useConfirmOrder(options?: UseMutationOptions<Awaited<ReturnType<typeof confirmOrder>>, Error, {
|
|
297
|
+
orderId: string;
|
|
298
|
+
token: string;
|
|
299
|
+
}>): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
|
|
300
|
+
orderId: string;
|
|
301
|
+
token: string;
|
|
302
|
+
}, unknown>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe RPC hooks for order operations
|
|
3
|
+
*
|
|
4
|
+
* These hooks use Hono RPC client with types directly from the backend,
|
|
5
|
+
* providing end-to-end type safety without code generation.
|
|
6
|
+
*/
|
|
7
|
+
import { useMutation } from '@tanstack/react-query';
|
|
8
|
+
import { useQueryUnwrapped } from '../use-query-unwrapped';
|
|
9
|
+
import { queryKeys } from '../../utils/query-keys';
|
|
10
|
+
import { fetchOrder, confirmOrder } from '../../fetchers/orders';
|
|
11
|
+
/**
|
|
12
|
+
* Hook to get order by ID and token using RPC
|
|
13
|
+
*
|
|
14
|
+
* @param orderId - Order UUID
|
|
15
|
+
* @param token - User action token
|
|
16
|
+
* @param options - React Query options
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* const { data: order, isLoading } = useGetOrder('order-123', 'token-456');
|
|
21
|
+
* console.log(order?.order.status); // Fully typed!
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function useGetOrder(orderId, token, options) {
|
|
25
|
+
return useQueryUnwrapped({
|
|
26
|
+
queryKey: queryKeys.public.orders.detail(orderId, token),
|
|
27
|
+
queryFn: () => fetchOrder(orderId, token),
|
|
28
|
+
...options,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Hook to confirm a prospect order using RPC
|
|
33
|
+
*
|
|
34
|
+
* @param options - React Query mutation options
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* const confirmOrder = useConfirmOrder();
|
|
39
|
+
* confirmOrder.mutate({
|
|
40
|
+
* orderId: 'order-123',
|
|
41
|
+
* token: 'token-456'
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function useConfirmOrder(options) {
|
|
46
|
+
return useMutation({
|
|
47
|
+
mutationFn: (data) => confirmOrder(data.orderId, data.token),
|
|
48
|
+
...options,
|
|
49
|
+
});
|
|
50
|
+
}
|