@react-pakistan/util-functions 1.25.9 → 1.25.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.
- package/api/stellar-solutions/bank/cache.d.ts +0 -104
- package/api/stellar-solutions/bank/cache.js +237 -296
- package/api/stellar-solutions/bank/index.d.ts +1 -1
- package/api/stellar-solutions/bank/index.js +0 -15
- package/api/stellar-solutions/branch/cache.d.ts +0 -102
- package/api/stellar-solutions/branch/cache.js +241 -296
- package/api/stellar-solutions/branch/index.d.ts +1 -1
- package/api/stellar-solutions/branch/index.js +0 -15
- package/api/stellar-solutions/company/cache.d.ts +0 -106
- package/api/stellar-solutions/company/cache.js +247 -308
- package/api/stellar-solutions/company/index.d.ts +1 -1
- package/api/stellar-solutions/company/index.js +0 -15
- package/api/stellar-solutions/contact/cache.d.ts +0 -108
- package/api/stellar-solutions/contact/cache.js +247 -308
- package/api/stellar-solutions/contact/index.d.ts +1 -1
- package/api/stellar-solutions/contact/index.js +0 -15
- package/api/stellar-solutions/currency/cache.d.ts +0 -104
- package/api/stellar-solutions/currency/cache.js +243 -296
- package/api/stellar-solutions/currency/index.d.ts +1 -1
- package/api/stellar-solutions/currency/index.js +0 -15
- package/api/stellar-solutions/customer/cache.d.ts +0 -108
- package/api/stellar-solutions/customer/cache.js +249 -308
- package/api/stellar-solutions/customer/index.d.ts +1 -1
- package/api/stellar-solutions/customer/index.js +0 -15
- package/api/stellar-solutions/expense/cache.d.ts +0 -106
- package/api/stellar-solutions/expense/cache.js +247 -308
- package/api/stellar-solutions/expense/index.d.ts +1 -1
- package/api/stellar-solutions/expense/index.js +0 -15
- package/api/stellar-solutions/expense-category/cache.d.ts +0 -94
- package/api/stellar-solutions/expense-category/cache.js +224 -281
- package/api/stellar-solutions/expense-category/index.d.ts +1 -1
- package/api/stellar-solutions/expense-category/index.js +0 -15
- package/api/stellar-solutions/payment-mode/cache.d.ts +0 -102
- package/api/stellar-solutions/payment-mode/cache.js +245 -296
- package/api/stellar-solutions/payment-mode/index.d.ts +1 -1
- package/api/stellar-solutions/payment-mode/index.js +0 -15
- package/api/stellar-solutions/preference/cache.d.ts +0 -90
- package/api/stellar-solutions/preference/cache.js +218 -269
- package/api/stellar-solutions/preference/index.d.ts +1 -1
- package/api/stellar-solutions/preference/index.js +0 -15
- package/api/stellar-solutions/product/cache.d.ts +0 -94
- package/api/stellar-solutions/product/cache.js +222 -281
- package/api/stellar-solutions/product/index.d.ts +1 -1
- package/api/stellar-solutions/product/index.js +0 -15
- package/api/stellar-solutions/product-category/cache.d.ts +0 -94
- package/api/stellar-solutions/product-category/cache.js +224 -281
- package/api/stellar-solutions/product-category/index.d.ts +1 -1
- package/api/stellar-solutions/product-category/index.js +0 -15
- package/api/stellar-solutions/tax/cache.d.ts +0 -102
- package/api/stellar-solutions/tax/cache.js +235 -296
- package/api/stellar-solutions/tax/index.d.ts +1 -1
- package/api/stellar-solutions/tax/index.js +0 -15
- package/general/format-secs.d.ts +1 -0
- package/general/format-secs.js +21 -0
- package/general/index.d.ts +1 -0
- package/general/index.js +1 -0
- package/package.json +1 -1
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { ProductBE } from '../type';
|
|
2
|
-
/**
|
|
3
|
-
* Synchronous utility function to get products from cache only
|
|
4
|
-
* Returns cached data immediately if available and fresh, otherwise returns empty array
|
|
5
|
-
* Does not trigger any API calls
|
|
6
|
-
*
|
|
7
|
-
* @returns ProductBE[] - Array of cached products or empty array wrapper ({count, items})
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* const products = getCachedProductsSync();
|
|
11
|
-
* if (products.items.length > 0) {
|
|
12
|
-
* console.log(products.items[0].name);
|
|
13
|
-
* }
|
|
14
|
-
*/
|
|
15
|
-
export declare const getCachedProductsSync: () => {
|
|
16
|
-
count: number;
|
|
17
|
-
items: ProductBE[];
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Utility function to get products from cache or fetch from API
|
|
21
|
-
*
|
|
22
|
-
* This function manages a localStorage cache of products with the following logic:
|
|
23
|
-
* - If products exist in cache and are less than 1 day old, return cached version
|
|
24
|
-
* - If products exist but are older than 1 day, fetch fresh data and update cache
|
|
25
|
-
* - If products don't exist in cache, fetch from API and cache them
|
|
26
|
-
*
|
|
27
|
-
* @param searchQuery - Optional search query to filter products
|
|
28
|
-
* @param filters - Optional filters object to apply additional filtering (bypasses cache)
|
|
29
|
-
* @param pageLimit - Number of products to fetch (default: 100)
|
|
30
|
-
* @returns Promise<{count:number, items: ProductBE[]}> - Paged products
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* const products = await getCachedProducts();
|
|
34
|
-
* console.log(products.items[0].name);
|
|
35
|
-
*
|
|
36
|
-
* // With search
|
|
37
|
-
* const filtered = await getCachedProducts('Samsung');
|
|
38
|
-
*
|
|
39
|
-
* // With filters
|
|
40
|
-
* const filteredByCategory = await getCachedProducts(undefined, { productCategoryId: 'cat-123' });
|
|
41
|
-
*/
|
|
42
|
-
export declare const getCachedProducts: (searchQuery?: string, filters?: Record<string, unknown>, pageLimit?: number) => Promise<{
|
|
43
|
-
count: number;
|
|
44
|
-
items: ProductBE[];
|
|
45
|
-
}>;
|
|
46
|
-
/**
|
|
47
|
-
* Utility function to get a specific product by ID from cache
|
|
48
|
-
* If not found in cache, returns null (does not trigger API call)
|
|
49
|
-
*
|
|
50
|
-
* @param productId - The ID of the product to retrieve
|
|
51
|
-
* @returns ProductBE | null - The product or null if not found
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* const product = getCachedProductById('prod-123');
|
|
55
|
-
* if (product) {
|
|
56
|
-
* console.log(product.name);
|
|
57
|
-
* }
|
|
58
|
-
*/
|
|
59
|
-
export declare const getCachedProductById: (categoryId: string) => ProductBE | null;
|
|
60
|
-
/**
|
|
61
|
-
* Utility function to invalidate (remove) products from cache
|
|
62
|
-
* Useful when products have been updated and you want to force a refresh
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* invalidateProductsCache();
|
|
66
|
-
* const freshProducts = await getCachedProducts();
|
|
67
|
-
*/
|
|
68
|
-
export declare const invalidateProductsCache: () => void;
|
|
69
|
-
/**
|
|
70
|
-
* Utility function to preload products into cache
|
|
71
|
-
* Useful to call on app initialization or login
|
|
72
|
-
*
|
|
73
|
-
* @returns Promise<{count:number, items: ProductBE[]}> - Array of preloaded products
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* // On app initialization
|
|
77
|
-
* await preloadProducts();
|
|
78
|
-
*/
|
|
79
|
-
export declare const preloadProducts: () => Promise<{
|
|
80
|
-
count: number;
|
|
81
|
-
items: ProductBE[];
|
|
82
|
-
}>;
|
|
83
|
-
/**
|
|
84
|
-
* Utility function to check if products cache is stale
|
|
85
|
-
* Returns true if cache is older than 1 day or doesn't exist
|
|
86
|
-
*
|
|
87
|
-
* @returns boolean - True if cache is stale or doesn't exist
|
|
88
|
-
*
|
|
89
|
-
* @example
|
|
90
|
-
* if (isProductsCacheStale()) {
|
|
91
|
-
* await getCachedProducts(); // This will fetch fresh data
|
|
92
|
-
* }
|
|
93
|
-
*/
|
|
94
|
-
export declare const isProductsCacheStale: () => boolean;
|
|
@@ -1,281 +1,222 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
* Useful when products have been updated and you want to force a refresh
|
|
224
|
-
*
|
|
225
|
-
* @example
|
|
226
|
-
* invalidateProductsCache();
|
|
227
|
-
* const freshProducts = await getCachedProducts();
|
|
228
|
-
*/
|
|
229
|
-
var invalidateProductsCache = function () {
|
|
230
|
-
try {
|
|
231
|
-
localStorage.removeItem(type_1.LS_KEYS.PRODUCTS);
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
console.error('Error invalidating products cache:', error);
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
exports.invalidateProductsCache = invalidateProductsCache;
|
|
238
|
-
/**
|
|
239
|
-
* Utility function to preload products into cache
|
|
240
|
-
* Useful to call on app initialization or login
|
|
241
|
-
*
|
|
242
|
-
* @returns Promise<{count:number, items: ProductBE[]}> - Array of preloaded products
|
|
243
|
-
*
|
|
244
|
-
* @example
|
|
245
|
-
* // On app initialization
|
|
246
|
-
* await preloadProducts();
|
|
247
|
-
*/
|
|
248
|
-
var preloadProducts = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
249
|
-
return __generator(this, function (_a) {
|
|
250
|
-
return [2 /*return*/, (0, exports.getCachedProducts)()];
|
|
251
|
-
});
|
|
252
|
-
}); };
|
|
253
|
-
exports.preloadProducts = preloadProducts;
|
|
254
|
-
/**
|
|
255
|
-
* Utility function to check if products cache is stale
|
|
256
|
-
* Returns true if cache is older than 1 day or doesn't exist
|
|
257
|
-
*
|
|
258
|
-
* @returns boolean - True if cache is stale or doesn't exist
|
|
259
|
-
*
|
|
260
|
-
* @example
|
|
261
|
-
* if (isProductsCacheStale()) {
|
|
262
|
-
* await getCachedProducts(); // This will fetch fresh data
|
|
263
|
-
* }
|
|
264
|
-
*/
|
|
265
|
-
var isProductsCacheStale = function () {
|
|
266
|
-
try {
|
|
267
|
-
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.PRODUCTS);
|
|
268
|
-
if (!cachedData) {
|
|
269
|
-
return true;
|
|
270
|
-
}
|
|
271
|
-
var currentTime = new Date().getTime();
|
|
272
|
-
var cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
273
|
-
var ageInMs = currentTime - cachedTime;
|
|
274
|
-
return ageInMs >= constants_2.ONE_DAY_IN_MS;
|
|
275
|
-
}
|
|
276
|
-
catch (error) {
|
|
277
|
-
console.error('Error checking products cache staleness:', error);
|
|
278
|
-
return true;
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
|
-
exports.isProductsCacheStale = isProductsCacheStale;
|
|
1
|
+
// import { API_ROUTES } from '../constants';
|
|
2
|
+
// import { ProductBE, LS_KEYS } from '../type';
|
|
3
|
+
// import { API_METHODS } from '../../../constants/api-methods';
|
|
4
|
+
// import { fetchData } from '../../../general/fetch-data';
|
|
5
|
+
// import { getStorageValue } from '../../../local-storage/get-storage-value';
|
|
6
|
+
// import { setStorageValue } from '../../../local-storage/set-storage-value';
|
|
7
|
+
// import { ONE_DAY_IN_MS } from '../../../constants';
|
|
8
|
+
// interface CachedProducts {
|
|
9
|
+
// products: ProductBE[];
|
|
10
|
+
// cachedAt: string;
|
|
11
|
+
// }
|
|
12
|
+
// /**
|
|
13
|
+
// * Synchronous utility function to get products from cache only
|
|
14
|
+
// * Returns cached data immediately if available and fresh, otherwise returns empty array
|
|
15
|
+
// * Does not trigger any API calls
|
|
16
|
+
// *
|
|
17
|
+
// * @returns ProductBE[] - Array of cached products or empty array wrapper ({count, items})
|
|
18
|
+
// *
|
|
19
|
+
// * @example
|
|
20
|
+
// * const products = getCachedProductsSync();
|
|
21
|
+
// * if (products.items.length > 0) {
|
|
22
|
+
// * console.log(products.items[0].name);
|
|
23
|
+
// * }
|
|
24
|
+
// */
|
|
25
|
+
// export const getCachedProductsSync = (): {
|
|
26
|
+
// count: number;
|
|
27
|
+
// items: ProductBE[];
|
|
28
|
+
// } => {
|
|
29
|
+
// try {
|
|
30
|
+
// const cachedData = getStorageValue(
|
|
31
|
+
// LS_KEYS.PRODUCTS
|
|
32
|
+
// ) as CachedProducts | null;
|
|
33
|
+
// if (!cachedData) {
|
|
34
|
+
// return { count: 0, items: [] };
|
|
35
|
+
// }
|
|
36
|
+
// const currentTime = new Date().getTime();
|
|
37
|
+
// const cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
38
|
+
// const ageInMs = currentTime - cachedTime;
|
|
39
|
+
// // If cached data is less than 1 day old, return it
|
|
40
|
+
// if (ageInMs < ONE_DAY_IN_MS) {
|
|
41
|
+
// return {
|
|
42
|
+
// count: cachedData.products.length,
|
|
43
|
+
// items: cachedData.products,
|
|
44
|
+
// };
|
|
45
|
+
// }
|
|
46
|
+
// return { count: 0, items: [] };
|
|
47
|
+
// } catch (error) {
|
|
48
|
+
// console.error('Error getting cached products:', error);
|
|
49
|
+
// return { count: 0, items: [] };
|
|
50
|
+
// }
|
|
51
|
+
// };
|
|
52
|
+
// /**
|
|
53
|
+
// * Utility function to get products from cache or fetch from API
|
|
54
|
+
// *
|
|
55
|
+
// * This function manages a localStorage cache of products with the following logic:
|
|
56
|
+
// * - If products exist in cache and are less than 1 day old, return cached version
|
|
57
|
+
// * - If products exist but are older than 1 day, fetch fresh data and update cache
|
|
58
|
+
// * - If products don't exist in cache, fetch from API and cache them
|
|
59
|
+
// *
|
|
60
|
+
// * @param searchQuery - Optional search query to filter products
|
|
61
|
+
// * @param filters - Optional filters object to apply additional filtering (bypasses cache)
|
|
62
|
+
// * @param pageLimit - Number of products to fetch (default: 100)
|
|
63
|
+
// * @returns Promise<{count:number, items: ProductBE[]}> - Paged products
|
|
64
|
+
// *
|
|
65
|
+
// * @example
|
|
66
|
+
// * const products = await getCachedProducts();
|
|
67
|
+
// * console.log(products.items[0].name);
|
|
68
|
+
// *
|
|
69
|
+
// * // With search
|
|
70
|
+
// * const filtered = await getCachedProducts('Samsung');
|
|
71
|
+
// *
|
|
72
|
+
// * // With filters
|
|
73
|
+
// * const filteredByCategory = await getCachedProducts(undefined, { productCategoryId: 'cat-123' });
|
|
74
|
+
// */
|
|
75
|
+
// export const getCachedProducts = async (
|
|
76
|
+
// searchQuery?: string,
|
|
77
|
+
// filters?: Record<string, unknown>,
|
|
78
|
+
// pageLimit: number = 100
|
|
79
|
+
// ): Promise<{ count: number; items: ProductBE[] }> => {
|
|
80
|
+
// try {
|
|
81
|
+
// // If there's a search query or filters, always fetch fresh data (don't use cache)
|
|
82
|
+
// if (
|
|
83
|
+
// (searchQuery && searchQuery.trim()) ||
|
|
84
|
+
// (filters && Object.keys(filters).length > 0)
|
|
85
|
+
// ) {
|
|
86
|
+
// const response = await fetchData({
|
|
87
|
+
// url: API_ROUTES.PRODUCTS,
|
|
88
|
+
// body: JSON.stringify({
|
|
89
|
+
// searchQuery,
|
|
90
|
+
// ...filters,
|
|
91
|
+
// pageLimit,
|
|
92
|
+
// currentPage: 1,
|
|
93
|
+
// }),
|
|
94
|
+
// method: API_METHODS.POST,
|
|
95
|
+
// });
|
|
96
|
+
// return response?.data || { count: 0, items: [] };
|
|
97
|
+
// }
|
|
98
|
+
// // Get the cached data from localStorage
|
|
99
|
+
// const cachedData = getStorageValue(
|
|
100
|
+
// LS_KEYS.PRODUCTS
|
|
101
|
+
// ) as CachedProducts | null;
|
|
102
|
+
// const currentTime = new Date().getTime();
|
|
103
|
+
// // Check if cached data exists and is still fresh
|
|
104
|
+
// if (cachedData) {
|
|
105
|
+
// const cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
106
|
+
// const ageInMs = currentTime - cachedTime;
|
|
107
|
+
// // If cached data is less than 1 day old, return it
|
|
108
|
+
// if (ageInMs < ONE_DAY_IN_MS) {
|
|
109
|
+
// return {
|
|
110
|
+
// count: cachedData.products.length,
|
|
111
|
+
// items: cachedData.products,
|
|
112
|
+
// };
|
|
113
|
+
// }
|
|
114
|
+
// }
|
|
115
|
+
// // If no cached data or data is older than 1 day, fetch fresh data
|
|
116
|
+
// const response = await fetchData({
|
|
117
|
+
// url: API_ROUTES.PRODUCTS,
|
|
118
|
+
// body: JSON.stringify({
|
|
119
|
+
// pageLimit,
|
|
120
|
+
// currentPage: 1,
|
|
121
|
+
// }),
|
|
122
|
+
// method: API_METHODS.POST,
|
|
123
|
+
// });
|
|
124
|
+
// if (response?.data?.items) {
|
|
125
|
+
// // Update the cache with fresh data
|
|
126
|
+
// const updatedCache: CachedProducts = {
|
|
127
|
+
// products: response.data.items,
|
|
128
|
+
// cachedAt: new Date().toISOString(),
|
|
129
|
+
// };
|
|
130
|
+
// setStorageValue(LS_KEYS.PRODUCTS, updatedCache);
|
|
131
|
+
// return response.data;
|
|
132
|
+
// }
|
|
133
|
+
// return { count: 0, items: [] };
|
|
134
|
+
// } catch (error) {
|
|
135
|
+
// console.error('Error fetching products:', error);
|
|
136
|
+
// return { count: 0, items: [] };
|
|
137
|
+
// }
|
|
138
|
+
// };
|
|
139
|
+
// /**
|
|
140
|
+
// * Utility function to get a specific product by ID from cache
|
|
141
|
+
// * If not found in cache, returns null (does not trigger API call)
|
|
142
|
+
// *
|
|
143
|
+
// * @param productId - The ID of the product to retrieve
|
|
144
|
+
// * @returns ProductBE | null - The product or null if not found
|
|
145
|
+
// *
|
|
146
|
+
// * @example
|
|
147
|
+
// * const product = getCachedProductById('prod-123');
|
|
148
|
+
// * if (product) {
|
|
149
|
+
// * console.log(product.name);
|
|
150
|
+
// * }
|
|
151
|
+
// */
|
|
152
|
+
// export const getCachedProductById = (categoryId: string): ProductBE | null => {
|
|
153
|
+
// if (!categoryId) {
|
|
154
|
+
// return null;
|
|
155
|
+
// }
|
|
156
|
+
// try {
|
|
157
|
+
// const products = getCachedProductsSync().items;
|
|
158
|
+
// return products.find((cat) => cat.id === categoryId) || null;
|
|
159
|
+
// } catch (error) {
|
|
160
|
+
// console.error('Error getting cached product by ID:', error);
|
|
161
|
+
// return null;
|
|
162
|
+
// }
|
|
163
|
+
// };
|
|
164
|
+
// /**
|
|
165
|
+
// * Utility function to invalidate (remove) products from cache
|
|
166
|
+
// * Useful when products have been updated and you want to force a refresh
|
|
167
|
+
// *
|
|
168
|
+
// * @example
|
|
169
|
+
// * invalidateProductsCache();
|
|
170
|
+
// * const freshProducts = await getCachedProducts();
|
|
171
|
+
// */
|
|
172
|
+
// export const invalidateProductsCache = (): void => {
|
|
173
|
+
// try {
|
|
174
|
+
// localStorage.removeItem(LS_KEYS.PRODUCTS);
|
|
175
|
+
// } catch (error) {
|
|
176
|
+
// console.error('Error invalidating products cache:', error);
|
|
177
|
+
// }
|
|
178
|
+
// };
|
|
179
|
+
// /**
|
|
180
|
+
// * Utility function to preload products into cache
|
|
181
|
+
// * Useful to call on app initialization or login
|
|
182
|
+
// *
|
|
183
|
+
// * @returns Promise<{count:number, items: ProductBE[]}> - Array of preloaded products
|
|
184
|
+
// *
|
|
185
|
+
// * @example
|
|
186
|
+
// * // On app initialization
|
|
187
|
+
// * await preloadProducts();
|
|
188
|
+
// */
|
|
189
|
+
// export const preloadProducts = async (): Promise<{
|
|
190
|
+
// count: number;
|
|
191
|
+
// items: ProductBE[];
|
|
192
|
+
// }> => {
|
|
193
|
+
// return getCachedProducts();
|
|
194
|
+
// };
|
|
195
|
+
// /**
|
|
196
|
+
// * Utility function to check if products cache is stale
|
|
197
|
+
// * Returns true if cache is older than 1 day or doesn't exist
|
|
198
|
+
// *
|
|
199
|
+
// * @returns boolean - True if cache is stale or doesn't exist
|
|
200
|
+
// *
|
|
201
|
+
// * @example
|
|
202
|
+
// * if (isProductsCacheStale()) {
|
|
203
|
+
// * await getCachedProducts(); // This will fetch fresh data
|
|
204
|
+
// * }
|
|
205
|
+
// */
|
|
206
|
+
// export const isProductsCacheStale = (): boolean => {
|
|
207
|
+
// try {
|
|
208
|
+
// const cachedData = getStorageValue(
|
|
209
|
+
// LS_KEYS.PRODUCTS
|
|
210
|
+
// ) as CachedProducts | null;
|
|
211
|
+
// if (!cachedData) {
|
|
212
|
+
// return true;
|
|
213
|
+
// }
|
|
214
|
+
// const currentTime = new Date().getTime();
|
|
215
|
+
// const cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
216
|
+
// const ageInMs = currentTime - cachedTime;
|
|
217
|
+
// return ageInMs >= ONE_DAY_IN_MS;
|
|
218
|
+
// } catch (error) {
|
|
219
|
+
// console.error('Error checking products cache staleness:', error);
|
|
220
|
+
// return true;
|
|
221
|
+
// }
|
|
222
|
+
// };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export * from './cache';
|
|
2
1
|
import { ProductBE } from '../type';
|
|
3
2
|
type PrismaClient = any;
|
|
4
3
|
export interface ListProductArgs {
|
|
@@ -62,3 +61,4 @@ export declare const updateProduct: ({ buyPrice, currency, description, id, imag
|
|
|
62
61
|
* @returns {Promise<ProductBE>} Deleted product
|
|
63
62
|
*/
|
|
64
63
|
export declare const deleteProduct: ({ id, prisma, }: DeleteProductArgs) => Promise<ProductBE>;
|
|
64
|
+
export {};
|