@instockng/api-client 1.0.28 → 1.0.30

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.
@@ -5,20 +5,20 @@
5
5
  * providing end-to-end type safety without code generation.
6
6
  */
7
7
  import { UseQueryOptions } from '@tanstack/react-query';
8
- import { fetchProductsByBrand, fetchProductBySlug, fetchProductAddons } from '../../fetchers/products';
8
+ import { fetchProductsByBrand, fetchProductBySlug, fetchProductAddons, fetchProductRecommendations } from '../../fetchers/products';
9
9
  /**
10
- * Hook to get products by brand using RPC
10
+ * Hook to get products by brand slug using RPC
11
11
  *
12
- * @param brandId - Brand UUID
12
+ * @param brandSlug - Brand slug (e.g., 'toyland')
13
13
  * @param options - React Query options
14
14
  *
15
15
  * @example
16
16
  * ```tsx
17
- * const { data: products, isLoading } = useGetProducts('brand-123');
17
+ * const { data: products, isLoading } = useGetProducts('toyland');
18
18
  * console.log(products?.data[0].name); // Fully typed!
19
19
  * ```
20
20
  */
21
- export declare function useGetProducts(brandId: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof fetchProductsByBrand>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
21
+ export declare function useGetProducts(brandSlug: string, options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof fetchProductsByBrand>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
22
22
  id: string;
23
23
  name: string;
24
24
  slug: string;
@@ -991,3 +991,486 @@ export declare function useGetProduct(slug: string, options?: Omit<UseQueryOptio
991
991
  * @param limit - Max number of add-ons
992
992
  */
993
993
  export declare function useGetProductAddOns(slug: string, limit?: number, options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof fetchProductAddons>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<any, Error>;
994
+ /**
995
+ * Hook to get product recommendations (other products from same brand)
996
+ *
997
+ * @param slug - Product slug
998
+ * @param limit - Max number of recommendations (default 4)
999
+ */
1000
+ export declare function useGetProductRecommendations(slug: string, limit?: number, options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof fetchProductRecommendations>>, Error>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
1001
+ id: string;
1002
+ name: string;
1003
+ slug: string;
1004
+ description: string;
1005
+ thumbnailUrl: string;
1006
+ quantityDiscounts: string | number | boolean | {
1007
+ [x: string]: string | number | boolean | /*elided*/ any | {
1008
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1009
+ length: number;
1010
+ toString: never;
1011
+ toLocaleString: never;
1012
+ pop: never;
1013
+ push: never;
1014
+ concat: never;
1015
+ join: never;
1016
+ reverse: never;
1017
+ shift: never;
1018
+ slice: never;
1019
+ sort: never;
1020
+ splice: never;
1021
+ unshift: never;
1022
+ indexOf: never;
1023
+ lastIndexOf: never;
1024
+ every: never;
1025
+ some: never;
1026
+ forEach: never;
1027
+ map: never;
1028
+ filter: never;
1029
+ reduce: never;
1030
+ reduceRight: never;
1031
+ find: never;
1032
+ findIndex: never;
1033
+ fill: never;
1034
+ copyWithin: never;
1035
+ entries: never;
1036
+ keys: never;
1037
+ values: never;
1038
+ includes: never;
1039
+ flatMap: never;
1040
+ flat: never;
1041
+ [Symbol.iterator]: never;
1042
+ readonly [Symbol.unscopables]: {
1043
+ [x: number]: boolean;
1044
+ length?: boolean;
1045
+ toString?: boolean;
1046
+ toLocaleString?: boolean;
1047
+ pop?: boolean;
1048
+ push?: boolean;
1049
+ concat?: boolean;
1050
+ join?: boolean;
1051
+ reverse?: boolean;
1052
+ shift?: boolean;
1053
+ slice?: boolean;
1054
+ sort?: boolean;
1055
+ splice?: boolean;
1056
+ unshift?: boolean;
1057
+ indexOf?: boolean;
1058
+ lastIndexOf?: boolean;
1059
+ every?: boolean;
1060
+ some?: boolean;
1061
+ forEach?: boolean;
1062
+ map?: boolean;
1063
+ filter?: boolean;
1064
+ reduce?: boolean;
1065
+ reduceRight?: boolean;
1066
+ find?: boolean;
1067
+ findIndex?: boolean;
1068
+ fill?: boolean;
1069
+ copyWithin?: boolean;
1070
+ entries?: boolean;
1071
+ keys?: boolean;
1072
+ values?: boolean;
1073
+ includes?: boolean;
1074
+ flatMap?: boolean;
1075
+ flat?: boolean;
1076
+ };
1077
+ };
1078
+ } | {
1079
+ [x: number]: string | number | boolean | {
1080
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1081
+ } | /*elided*/ any;
1082
+ length: number;
1083
+ toString: never;
1084
+ toLocaleString: never;
1085
+ pop: never;
1086
+ push: never;
1087
+ concat: never;
1088
+ join: never;
1089
+ reverse: never;
1090
+ shift: never;
1091
+ slice: never;
1092
+ sort: never;
1093
+ splice: never;
1094
+ unshift: never;
1095
+ indexOf: never;
1096
+ lastIndexOf: never;
1097
+ every: never;
1098
+ some: never;
1099
+ forEach: never;
1100
+ map: never;
1101
+ filter: never;
1102
+ reduce: never;
1103
+ reduceRight: never;
1104
+ find: never;
1105
+ findIndex: never;
1106
+ fill: never;
1107
+ copyWithin: never;
1108
+ entries: never;
1109
+ keys: never;
1110
+ values: never;
1111
+ includes: never;
1112
+ flatMap: never;
1113
+ flat: never;
1114
+ [Symbol.iterator]: never;
1115
+ readonly [Symbol.unscopables]: {
1116
+ [x: number]: boolean;
1117
+ length?: boolean;
1118
+ toString?: boolean;
1119
+ toLocaleString?: boolean;
1120
+ pop?: boolean;
1121
+ push?: boolean;
1122
+ concat?: boolean;
1123
+ join?: boolean;
1124
+ reverse?: boolean;
1125
+ shift?: boolean;
1126
+ slice?: boolean;
1127
+ sort?: boolean;
1128
+ splice?: boolean;
1129
+ unshift?: boolean;
1130
+ indexOf?: boolean;
1131
+ lastIndexOf?: boolean;
1132
+ every?: boolean;
1133
+ some?: boolean;
1134
+ forEach?: boolean;
1135
+ map?: boolean;
1136
+ filter?: boolean;
1137
+ reduce?: boolean;
1138
+ reduceRight?: boolean;
1139
+ find?: boolean;
1140
+ findIndex?: boolean;
1141
+ fill?: boolean;
1142
+ copyWithin?: boolean;
1143
+ entries?: boolean;
1144
+ keys?: boolean;
1145
+ values?: boolean;
1146
+ includes?: boolean;
1147
+ flatMap?: boolean;
1148
+ flat?: boolean;
1149
+ };
1150
+ };
1151
+ brand: {
1152
+ id: string;
1153
+ name: string;
1154
+ slug: string;
1155
+ logoUrl: string;
1156
+ siteUrl: string;
1157
+ domain: string;
1158
+ metaPixelId: string;
1159
+ tiktokPixelId: string;
1160
+ paystackPublicKey: string;
1161
+ createdAt: string;
1162
+ updatedAt: string;
1163
+ deletedAt: string;
1164
+ };
1165
+ variants: {
1166
+ createdAt: string;
1167
+ updatedAt: string;
1168
+ price: number;
1169
+ compareAtPrice: number;
1170
+ deletedAt: string;
1171
+ id: string;
1172
+ name: string | null;
1173
+ isActive: boolean;
1174
+ thumbnailUrl: string | null;
1175
+ productId: string;
1176
+ sku: string;
1177
+ trackInventory: boolean;
1178
+ lowStockThreshold: number | null;
1179
+ }[];
1180
+ media: string | number | true | {
1181
+ [x: string]: string | number | boolean | /*elided*/ any | {
1182
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1183
+ length: number;
1184
+ toString: never;
1185
+ toLocaleString: never;
1186
+ pop: never;
1187
+ push: never;
1188
+ concat: never;
1189
+ join: never;
1190
+ reverse: never;
1191
+ shift: never;
1192
+ slice: never;
1193
+ sort: never;
1194
+ splice: never;
1195
+ unshift: never;
1196
+ indexOf: never;
1197
+ lastIndexOf: never;
1198
+ every: never;
1199
+ some: never;
1200
+ forEach: never;
1201
+ map: never;
1202
+ filter: never;
1203
+ reduce: never;
1204
+ reduceRight: never;
1205
+ find: never;
1206
+ findIndex: never;
1207
+ fill: never;
1208
+ copyWithin: never;
1209
+ entries: never;
1210
+ keys: never;
1211
+ values: never;
1212
+ includes: never;
1213
+ flatMap: never;
1214
+ flat: never;
1215
+ [Symbol.iterator]: never;
1216
+ readonly [Symbol.unscopables]: {
1217
+ [x: number]: boolean;
1218
+ length?: boolean;
1219
+ toString?: boolean;
1220
+ toLocaleString?: boolean;
1221
+ pop?: boolean;
1222
+ push?: boolean;
1223
+ concat?: boolean;
1224
+ join?: boolean;
1225
+ reverse?: boolean;
1226
+ shift?: boolean;
1227
+ slice?: boolean;
1228
+ sort?: boolean;
1229
+ splice?: boolean;
1230
+ unshift?: boolean;
1231
+ indexOf?: boolean;
1232
+ lastIndexOf?: boolean;
1233
+ every?: boolean;
1234
+ some?: boolean;
1235
+ forEach?: boolean;
1236
+ map?: boolean;
1237
+ filter?: boolean;
1238
+ reduce?: boolean;
1239
+ reduceRight?: boolean;
1240
+ find?: boolean;
1241
+ findIndex?: boolean;
1242
+ fill?: boolean;
1243
+ copyWithin?: boolean;
1244
+ entries?: boolean;
1245
+ keys?: boolean;
1246
+ values?: boolean;
1247
+ includes?: boolean;
1248
+ flatMap?: boolean;
1249
+ flat?: boolean;
1250
+ };
1251
+ };
1252
+ } | {
1253
+ [x: number]: string | number | boolean | {
1254
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1255
+ } | /*elided*/ any;
1256
+ length: number;
1257
+ toString: never;
1258
+ toLocaleString: never;
1259
+ pop: never;
1260
+ push: never;
1261
+ concat: never;
1262
+ join: never;
1263
+ reverse: never;
1264
+ shift: never;
1265
+ slice: never;
1266
+ sort: never;
1267
+ splice: never;
1268
+ unshift: never;
1269
+ indexOf: never;
1270
+ lastIndexOf: never;
1271
+ every: never;
1272
+ some: never;
1273
+ forEach: never;
1274
+ map: never;
1275
+ filter: never;
1276
+ reduce: never;
1277
+ reduceRight: never;
1278
+ find: never;
1279
+ findIndex: never;
1280
+ fill: never;
1281
+ copyWithin: never;
1282
+ entries: never;
1283
+ keys: never;
1284
+ values: never;
1285
+ includes: never;
1286
+ flatMap: never;
1287
+ flat: never;
1288
+ [Symbol.iterator]: never;
1289
+ readonly [Symbol.unscopables]: {
1290
+ [x: number]: boolean;
1291
+ length?: boolean;
1292
+ toString?: boolean;
1293
+ toLocaleString?: boolean;
1294
+ pop?: boolean;
1295
+ push?: boolean;
1296
+ concat?: boolean;
1297
+ join?: boolean;
1298
+ reverse?: boolean;
1299
+ shift?: boolean;
1300
+ slice?: boolean;
1301
+ sort?: boolean;
1302
+ splice?: boolean;
1303
+ unshift?: boolean;
1304
+ indexOf?: boolean;
1305
+ lastIndexOf?: boolean;
1306
+ every?: boolean;
1307
+ some?: boolean;
1308
+ forEach?: boolean;
1309
+ map?: boolean;
1310
+ filter?: boolean;
1311
+ reduce?: boolean;
1312
+ reduceRight?: boolean;
1313
+ find?: boolean;
1314
+ findIndex?: boolean;
1315
+ fill?: boolean;
1316
+ copyWithin?: boolean;
1317
+ entries?: boolean;
1318
+ keys?: boolean;
1319
+ values?: boolean;
1320
+ includes?: boolean;
1321
+ flatMap?: boolean;
1322
+ flat?: boolean;
1323
+ };
1324
+ };
1325
+ features: string;
1326
+ faqs: string | number | true | {
1327
+ [x: string]: string | number | boolean | /*elided*/ any | {
1328
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1329
+ length: number;
1330
+ toString: never;
1331
+ toLocaleString: never;
1332
+ pop: never;
1333
+ push: never;
1334
+ concat: never;
1335
+ join: never;
1336
+ reverse: never;
1337
+ shift: never;
1338
+ slice: never;
1339
+ sort: never;
1340
+ splice: never;
1341
+ unshift: never;
1342
+ indexOf: never;
1343
+ lastIndexOf: never;
1344
+ every: never;
1345
+ some: never;
1346
+ forEach: never;
1347
+ map: never;
1348
+ filter: never;
1349
+ reduce: never;
1350
+ reduceRight: never;
1351
+ find: never;
1352
+ findIndex: never;
1353
+ fill: never;
1354
+ copyWithin: never;
1355
+ entries: never;
1356
+ keys: never;
1357
+ values: never;
1358
+ includes: never;
1359
+ flatMap: never;
1360
+ flat: never;
1361
+ [Symbol.iterator]: never;
1362
+ readonly [Symbol.unscopables]: {
1363
+ [x: number]: boolean;
1364
+ length?: boolean;
1365
+ toString?: boolean;
1366
+ toLocaleString?: boolean;
1367
+ pop?: boolean;
1368
+ push?: boolean;
1369
+ concat?: boolean;
1370
+ join?: boolean;
1371
+ reverse?: boolean;
1372
+ shift?: boolean;
1373
+ slice?: boolean;
1374
+ sort?: boolean;
1375
+ splice?: boolean;
1376
+ unshift?: boolean;
1377
+ indexOf?: boolean;
1378
+ lastIndexOf?: boolean;
1379
+ every?: boolean;
1380
+ some?: boolean;
1381
+ forEach?: boolean;
1382
+ map?: boolean;
1383
+ filter?: boolean;
1384
+ reduce?: boolean;
1385
+ reduceRight?: boolean;
1386
+ find?: boolean;
1387
+ findIndex?: boolean;
1388
+ fill?: boolean;
1389
+ copyWithin?: boolean;
1390
+ entries?: boolean;
1391
+ keys?: boolean;
1392
+ values?: boolean;
1393
+ includes?: boolean;
1394
+ flatMap?: boolean;
1395
+ flat?: boolean;
1396
+ };
1397
+ };
1398
+ } | {
1399
+ [x: number]: string | number | boolean | {
1400
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1401
+ } | /*elided*/ any;
1402
+ length: number;
1403
+ toString: never;
1404
+ toLocaleString: never;
1405
+ pop: never;
1406
+ push: never;
1407
+ concat: never;
1408
+ join: never;
1409
+ reverse: never;
1410
+ shift: never;
1411
+ slice: never;
1412
+ sort: never;
1413
+ splice: never;
1414
+ unshift: never;
1415
+ indexOf: never;
1416
+ lastIndexOf: never;
1417
+ every: never;
1418
+ some: never;
1419
+ forEach: never;
1420
+ map: never;
1421
+ filter: never;
1422
+ reduce: never;
1423
+ reduceRight: never;
1424
+ find: never;
1425
+ findIndex: never;
1426
+ fill: never;
1427
+ copyWithin: never;
1428
+ entries: never;
1429
+ keys: never;
1430
+ values: never;
1431
+ includes: never;
1432
+ flatMap: never;
1433
+ flat: never;
1434
+ [Symbol.iterator]: never;
1435
+ readonly [Symbol.unscopables]: {
1436
+ [x: number]: boolean;
1437
+ length?: boolean;
1438
+ toString?: boolean;
1439
+ toLocaleString?: boolean;
1440
+ pop?: boolean;
1441
+ push?: boolean;
1442
+ concat?: boolean;
1443
+ join?: boolean;
1444
+ reverse?: boolean;
1445
+ shift?: boolean;
1446
+ slice?: boolean;
1447
+ sort?: boolean;
1448
+ splice?: boolean;
1449
+ unshift?: boolean;
1450
+ indexOf?: boolean;
1451
+ lastIndexOf?: boolean;
1452
+ every?: boolean;
1453
+ some?: boolean;
1454
+ forEach?: boolean;
1455
+ map?: boolean;
1456
+ filter?: boolean;
1457
+ reduce?: boolean;
1458
+ reduceRight?: boolean;
1459
+ find?: boolean;
1460
+ findIndex?: boolean;
1461
+ fill?: boolean;
1462
+ copyWithin?: boolean;
1463
+ entries?: boolean;
1464
+ keys?: boolean;
1465
+ values?: boolean;
1466
+ includes?: boolean;
1467
+ flatMap?: boolean;
1468
+ flat?: boolean;
1469
+ };
1470
+ };
1471
+ createdAt: string;
1472
+ updatedAt: string;
1473
+ deletedAt: string;
1474
+ brandId: string;
1475
+ isActive: boolean;
1476
+ }[], Error>;
@@ -6,23 +6,23 @@
6
6
  */
7
7
  import { useQueryUnwrapped } from '../use-query-unwrapped';
8
8
  import { queryKeys } from '../../utils/query-keys';
9
- import { fetchProductsByBrand, fetchProductBySlug, fetchProductAddons } from '../../fetchers/products';
9
+ import { fetchProductsByBrand, fetchProductBySlug, fetchProductAddons, fetchProductRecommendations } from '../../fetchers/products';
10
10
  /**
11
- * Hook to get products by brand using RPC
11
+ * Hook to get products by brand slug using RPC
12
12
  *
13
- * @param brandId - Brand UUID
13
+ * @param brandSlug - Brand slug (e.g., 'toyland')
14
14
  * @param options - React Query options
15
15
  *
16
16
  * @example
17
17
  * ```tsx
18
- * const { data: products, isLoading } = useGetProducts('brand-123');
18
+ * const { data: products, isLoading } = useGetProducts('toyland');
19
19
  * console.log(products?.data[0].name); // Fully typed!
20
20
  * ```
21
21
  */
22
- export function useGetProducts(brandId, options) {
22
+ export function useGetProducts(brandSlug, options) {
23
23
  return useQueryUnwrapped({
24
- queryKey: queryKeys.public.products.list(brandId),
25
- queryFn: () => fetchProductsByBrand(brandId),
24
+ queryKey: queryKeys.public.products.list(brandSlug),
25
+ queryFn: () => fetchProductsByBrand(brandSlug),
26
26
  ...options,
27
27
  });
28
28
  }
@@ -58,3 +58,16 @@ export function useGetProductAddOns(slug, limit, options) {
58
58
  ...options,
59
59
  });
60
60
  }
61
+ /**
62
+ * Hook to get product recommendations (other products from same brand)
63
+ *
64
+ * @param slug - Product slug
65
+ * @param limit - Max number of recommendations (default 4)
66
+ */
67
+ export function useGetProductRecommendations(slug, limit, options) {
68
+ return useQueryUnwrapped({
69
+ queryKey: queryKeys.public.products.recommendations(slug, limit),
70
+ queryFn: () => fetchProductRecommendations(slug, limit),
71
+ ...options,
72
+ });
73
+ }