@react-pakistan/util-functions 1.24.98 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/stellar-solutions/bank/cache.d.ts +99 -0
- package/api/stellar-solutions/bank/cache.js +256 -0
- package/api/stellar-solutions/bank/index.d.ts +1 -1
- package/api/stellar-solutions/bank/index.js +15 -0
- package/api/stellar-solutions/branch/cache.d.ts +97 -0
- package/api/stellar-solutions/branch/cache.js +256 -0
- package/api/stellar-solutions/branch/index.d.ts +1 -1
- package/api/stellar-solutions/branch/index.js +15 -0
- package/api/stellar-solutions/company/cache.d.ts +106 -0
- package/api/stellar-solutions/company/cache.js +307 -0
- package/api/stellar-solutions/company/index.d.ts +1 -1
- package/api/stellar-solutions/company/index.js +15 -0
- package/api/stellar-solutions/constants.d.ts +21 -0
- package/api/stellar-solutions/constants.js +24 -0
- package/api/stellar-solutions/contact/cache.d.ts +108 -0
- package/api/stellar-solutions/contact/cache.js +307 -0
- package/api/stellar-solutions/contact/index.d.ts +1 -1
- package/api/stellar-solutions/contact/index.js +15 -0
- package/api/stellar-solutions/currency/cache.d.ts +99 -0
- package/api/stellar-solutions/currency/cache.js +256 -0
- package/api/stellar-solutions/currency/index.d.ts +1 -1
- package/api/stellar-solutions/currency/index.js +15 -0
- package/api/stellar-solutions/customer/cache.d.ts +108 -0
- package/api/stellar-solutions/customer/cache.js +307 -0
- package/api/stellar-solutions/customer/index.d.ts +1 -1
- package/api/stellar-solutions/customer/index.js +15 -0
- package/api/stellar-solutions/expense/cache.d.ts +106 -0
- package/api/stellar-solutions/expense/cache.js +307 -0
- package/api/stellar-solutions/expense/index.d.ts +1 -1
- package/api/stellar-solutions/expense/index.js +15 -0
- package/api/stellar-solutions/expense-category/cache.d.ts +94 -0
- package/api/stellar-solutions/expense-category/cache.js +280 -0
- package/api/stellar-solutions/expense-category/index.d.ts +1 -1
- package/api/stellar-solutions/expense-category/index.js +15 -0
- package/api/stellar-solutions/payment-mode/cache.d.ts +97 -0
- package/api/stellar-solutions/payment-mode/cache.js +256 -0
- package/api/stellar-solutions/payment-mode/index.d.ts +1 -1
- package/api/stellar-solutions/payment-mode/index.js +15 -0
- package/api/stellar-solutions/preference/cache.d.ts +85 -0
- package/api/stellar-solutions/preference/cache.js +229 -0
- package/api/stellar-solutions/preference/index.d.ts +1 -1
- package/api/stellar-solutions/preference/index.js +15 -0
- package/api/stellar-solutions/product/cache.d.ts +94 -0
- package/api/stellar-solutions/product/cache.js +280 -0
- package/api/stellar-solutions/product/index.d.ts +4 -6
- package/api/stellar-solutions/product/index.js +24 -8
- package/api/stellar-solutions/product-category/cache.d.ts +94 -0
- package/api/stellar-solutions/product-category/cache.js +280 -0
- package/api/stellar-solutions/product-category/index.d.ts +1 -1
- package/api/stellar-solutions/product-category/index.js +15 -0
- package/api/stellar-solutions/tax/cache.d.ts +97 -0
- package/api/stellar-solutions/tax/cache.js +256 -0
- package/api/stellar-solutions/tax/index.d.ts +1 -1
- package/api/stellar-solutions/tax/index.js +15 -0
- package/api/stellar-solutions/type.d.ts +15 -0
- package/api/stellar-solutions/type.js +17 -1
- package/index.d.ts +6 -5
- package/index.js +6 -6
- package/package.json +1 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
50
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
51
|
+
if (ar || !(i in from)) {
|
|
52
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
53
|
+
ar[i] = from[i];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
57
|
+
};
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.isExpenseCategoriesCacheStale = exports.preloadExpenseCategories = exports.invalidateExpenseCategoriesCache = exports.getCachedExpenseCategoryById = exports.getCachedExpenseCategories = exports.getCachedExpenseCategoriesSync = void 0;
|
|
60
|
+
var constants_1 = require("../constants");
|
|
61
|
+
var type_1 = require("../type");
|
|
62
|
+
var api_methods_1 = require("../../../constants/api-methods");
|
|
63
|
+
var fetch_data_1 = require("../../../general/fetch-data");
|
|
64
|
+
var get_storage_value_1 = require("../../../local-storage/get-storage-value");
|
|
65
|
+
var set_storage_value_1 = require("../../../local-storage/set-storage-value");
|
|
66
|
+
/**
|
|
67
|
+
* Synchronous utility function to get expense categories from cache only
|
|
68
|
+
* Returns cached data immediately if available and fresh, otherwise returns empty array
|
|
69
|
+
* Does not trigger any API calls
|
|
70
|
+
*
|
|
71
|
+
* @returns ExpenseCategoryBE[] - Array of cached expense categories or empty array wrapper ({count, items})
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* const expenseCategories = getCachedExpenseCategoriesSync();
|
|
75
|
+
* if (expenseCategories.items.length > 0) {
|
|
76
|
+
* console.log(expenseCategories.items[0].name);
|
|
77
|
+
* }
|
|
78
|
+
*/
|
|
79
|
+
var getCachedExpenseCategoriesSync = function () {
|
|
80
|
+
try {
|
|
81
|
+
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.EXPENSE_CATEGORIES);
|
|
82
|
+
if (!cachedData) {
|
|
83
|
+
return { count: 0, items: [] };
|
|
84
|
+
}
|
|
85
|
+
var currentTime = new Date().getTime();
|
|
86
|
+
var cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
87
|
+
var ageInMs = currentTime - cachedTime;
|
|
88
|
+
// If cached data is less than 1 day old, return it
|
|
89
|
+
if (ageInMs < constants_1.ONE_DAY_IN_MS) {
|
|
90
|
+
return {
|
|
91
|
+
count: cachedData.expenseCategories.length,
|
|
92
|
+
items: cachedData.expenseCategories,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return { count: 0, items: [] };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error('Error getting cached expense categories:', error);
|
|
99
|
+
return { count: 0, items: [] };
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
exports.getCachedExpenseCategoriesSync = getCachedExpenseCategoriesSync;
|
|
103
|
+
/**
|
|
104
|
+
* Utility function to get expense categories from cache or fetch from API
|
|
105
|
+
*
|
|
106
|
+
* This function manages a localStorage cache of expense categories with the following logic:
|
|
107
|
+
* - If expense categories exist in cache and are less than 1 day old, return cached version
|
|
108
|
+
* - If expense categories exist but are older than 1 day, fetch fresh data and update cache
|
|
109
|
+
* - If expense categories don't exist in cache, fetch from API and cache them
|
|
110
|
+
*
|
|
111
|
+
* @param searchQuery - Optional search query to filter expense categories
|
|
112
|
+
* @param filters - Optional filters object to apply additional filtering (bypasses cache)
|
|
113
|
+
* @param pageLimit - Number of expense categories to fetch (default: 100)
|
|
114
|
+
* @returns Promise<{count:number, items: ExpenseCategoryBE[]}> - Paged expense categories
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* const expenseCategories = await getCachedExpenseCategories();
|
|
118
|
+
* console.log(expenseCategories.items[0].name);
|
|
119
|
+
*
|
|
120
|
+
* // With search
|
|
121
|
+
* const filtered = await getCachedExpenseCategories('Travel');
|
|
122
|
+
*
|
|
123
|
+
* // With filters
|
|
124
|
+
* const filteredByColor = await getCachedExpenseCategories(undefined, { color: '#FF0000' });
|
|
125
|
+
*/
|
|
126
|
+
var getCachedExpenseCategories = function (searchQuery_1, filters_1) {
|
|
127
|
+
var args_1 = [];
|
|
128
|
+
for (var _i = 2; _i < arguments.length; _i++) {
|
|
129
|
+
args_1[_i - 2] = arguments[_i];
|
|
130
|
+
}
|
|
131
|
+
return __awaiter(void 0, __spreadArray([searchQuery_1, filters_1], args_1, true), void 0, function (searchQuery, filters, pageLimit) {
|
|
132
|
+
var response_1, cachedData, currentTime, cachedTime, ageInMs, response, updatedCache, error_1;
|
|
133
|
+
var _a;
|
|
134
|
+
if (pageLimit === void 0) { pageLimit = 100; }
|
|
135
|
+
return __generator(this, function (_b) {
|
|
136
|
+
switch (_b.label) {
|
|
137
|
+
case 0:
|
|
138
|
+
_b.trys.push([0, 4, , 5]);
|
|
139
|
+
if (!((searchQuery && searchQuery.trim()) ||
|
|
140
|
+
(filters && Object.keys(filters).length > 0))) return [3 /*break*/, 2];
|
|
141
|
+
return [4 /*yield*/, (0, fetch_data_1.fetchData)({
|
|
142
|
+
url: constants_1.API_ROUTES.EXPENSE_CATEGORIES,
|
|
143
|
+
body: JSON.stringify(__assign(__assign({ searchQuery: searchQuery }, filters), { pageLimit: pageLimit, currentPage: 1 })),
|
|
144
|
+
method: api_methods_1.API_METHODS.POST,
|
|
145
|
+
})];
|
|
146
|
+
case 1:
|
|
147
|
+
response_1 = _b.sent();
|
|
148
|
+
return [2 /*return*/, (response_1 === null || response_1 === void 0 ? void 0 : response_1.data) || { count: 0, items: [] }];
|
|
149
|
+
case 2:
|
|
150
|
+
cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.EXPENSE_CATEGORIES);
|
|
151
|
+
currentTime = new Date().getTime();
|
|
152
|
+
// Check if cached data exists and is still fresh
|
|
153
|
+
if (cachedData) {
|
|
154
|
+
cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
155
|
+
ageInMs = currentTime - cachedTime;
|
|
156
|
+
// If cached data is less than 1 day old, return it
|
|
157
|
+
if (ageInMs < constants_1.ONE_DAY_IN_MS) {
|
|
158
|
+
return [2 /*return*/, {
|
|
159
|
+
count: cachedData.expenseCategories.length,
|
|
160
|
+
items: cachedData.expenseCategories,
|
|
161
|
+
}];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return [4 /*yield*/, (0, fetch_data_1.fetchData)({
|
|
165
|
+
url: constants_1.API_ROUTES.EXPENSE_CATEGORIES,
|
|
166
|
+
body: JSON.stringify({
|
|
167
|
+
pageLimit: pageLimit,
|
|
168
|
+
currentPage: 1,
|
|
169
|
+
}),
|
|
170
|
+
method: api_methods_1.API_METHODS.POST,
|
|
171
|
+
})];
|
|
172
|
+
case 3:
|
|
173
|
+
response = _b.sent();
|
|
174
|
+
if ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) {
|
|
175
|
+
updatedCache = {
|
|
176
|
+
expenseCategories: response.data.items,
|
|
177
|
+
cachedAt: new Date().toISOString(),
|
|
178
|
+
};
|
|
179
|
+
(0, set_storage_value_1.setStorageValue)(type_1.LS_KEYS.EXPENSE_CATEGORIES, updatedCache);
|
|
180
|
+
return [2 /*return*/, response.data];
|
|
181
|
+
}
|
|
182
|
+
return [2 /*return*/, { count: 0, items: [] }];
|
|
183
|
+
case 4:
|
|
184
|
+
error_1 = _b.sent();
|
|
185
|
+
console.error('Error fetching expense categories:', error_1);
|
|
186
|
+
return [2 /*return*/, { count: 0, items: [] }];
|
|
187
|
+
case 5: return [2 /*return*/];
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
exports.getCachedExpenseCategories = getCachedExpenseCategories;
|
|
193
|
+
/**
|
|
194
|
+
* Utility function to get a specific expense category by ID from cache
|
|
195
|
+
* If not found in cache, returns null (does not trigger API call)
|
|
196
|
+
*
|
|
197
|
+
* @param categoryId - The ID of the expense category to retrieve
|
|
198
|
+
* @returns ExpenseCategoryBE | null - The expense category or null if not found
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* const category = getCachedExpenseCategoryById('cat-123');
|
|
202
|
+
* if (category) {
|
|
203
|
+
* console.log(category.name);
|
|
204
|
+
* }
|
|
205
|
+
*/
|
|
206
|
+
var getCachedExpenseCategoryById = function (categoryId) {
|
|
207
|
+
if (!categoryId) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
var categories = (0, exports.getCachedExpenseCategoriesSync)().items;
|
|
212
|
+
return categories.find(function (cat) { return cat.id === categoryId; }) || null;
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
console.error('Error getting cached expense category by ID:', error);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
exports.getCachedExpenseCategoryById = getCachedExpenseCategoryById;
|
|
220
|
+
/**
|
|
221
|
+
* Utility function to invalidate (remove) expense categories from cache
|
|
222
|
+
* Useful when expense categories have been updated and you want to force a refresh
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* invalidateExpenseCategoriesCache();
|
|
226
|
+
* const freshCategories = await getCachedExpenseCategories();
|
|
227
|
+
*/
|
|
228
|
+
var invalidateExpenseCategoriesCache = function () {
|
|
229
|
+
try {
|
|
230
|
+
localStorage.removeItem(type_1.LS_KEYS.EXPENSE_CATEGORIES);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
console.error('Error invalidating expense categories cache:', error);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
exports.invalidateExpenseCategoriesCache = invalidateExpenseCategoriesCache;
|
|
237
|
+
/**
|
|
238
|
+
* Utility function to preload expense categories into cache
|
|
239
|
+
* Useful to call on app initialization or login
|
|
240
|
+
*
|
|
241
|
+
* @returns Promise<{count:number, items: ExpenseCategoryBE[]}> - Array of preloaded expense categories
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* // On app initialization
|
|
245
|
+
* await preloadExpenseCategories();
|
|
246
|
+
*/
|
|
247
|
+
var preloadExpenseCategories = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
248
|
+
return __generator(this, function (_a) {
|
|
249
|
+
return [2 /*return*/, (0, exports.getCachedExpenseCategories)()];
|
|
250
|
+
});
|
|
251
|
+
}); };
|
|
252
|
+
exports.preloadExpenseCategories = preloadExpenseCategories;
|
|
253
|
+
/**
|
|
254
|
+
* Utility function to check if expense categories cache is stale
|
|
255
|
+
* Returns true if cache is older than 1 day or doesn't exist
|
|
256
|
+
*
|
|
257
|
+
* @returns boolean - True if cache is stale or doesn't exist
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* if (isExpenseCategoriesCacheStale()) {
|
|
261
|
+
* await getCachedExpenseCategories(); // This will fetch fresh data
|
|
262
|
+
* }
|
|
263
|
+
*/
|
|
264
|
+
var isExpenseCategoriesCacheStale = function () {
|
|
265
|
+
try {
|
|
266
|
+
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.EXPENSE_CATEGORIES);
|
|
267
|
+
if (!cachedData) {
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
var currentTime = new Date().getTime();
|
|
271
|
+
var cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
272
|
+
var ageInMs = currentTime - cachedTime;
|
|
273
|
+
return ageInMs >= constants_1.ONE_DAY_IN_MS;
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
console.error('Error checking expense categories cache staleness:', error);
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
exports.isExpenseCategoriesCacheStale = isExpenseCategoriesCacheStale;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './cache';
|
|
1
2
|
import { ExpenseCategoryBE } from '../type';
|
|
2
3
|
type PrismaClient = any;
|
|
3
4
|
export interface ListExpenseCategoryArgs {
|
|
@@ -50,4 +51,3 @@ export declare const updateExpenseCategory: ({ color, description, id, name, pri
|
|
|
50
51
|
* @throws {Error} If expense category ID is not provided or expense category not found
|
|
51
52
|
*/
|
|
52
53
|
export declare const deleteExpenseCategory: ({ id, prisma, }: DeleteExpenseCategoryArgs) => Promise<ExpenseCategoryBE>;
|
|
53
|
-
export {};
|
|
@@ -10,6 +10,20 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
25
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
26
|
+
};
|
|
13
27
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
28
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
29
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -57,6 +71,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
57
71
|
};
|
|
58
72
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
73
|
exports.deleteExpenseCategory = exports.updateExpenseCategory = exports.unitExpenseCategoryById = exports.listExpenseCategory = void 0;
|
|
74
|
+
__exportStar(require("./cache"), exports);
|
|
60
75
|
var multi_part_search_1 = require("../../../general/multi-part-search");
|
|
61
76
|
/**
|
|
62
77
|
* Retrieves expense categories with pagination and filtering
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { PaymentModeBE } from '../type';
|
|
2
|
+
/**
|
|
3
|
+
* Synchronous utility function to get payment modes 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 PaymentModeBE[] - Array of cached payment modes or empty array wrapper ({count, items})
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const paymentModes = getCachedPaymentModesSync();
|
|
11
|
+
* if (paymentModes.items.length > 0) {
|
|
12
|
+
* console.log(paymentModes.items[0].label);
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export declare const getCachedPaymentModesSync: () => {
|
|
16
|
+
count: number;
|
|
17
|
+
items: PaymentModeBE[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Utility function to get payment modes from cache or fetch from API
|
|
21
|
+
*
|
|
22
|
+
* This function manages a localStorage cache of payment modes with the following logic:
|
|
23
|
+
* - If payment modes exist in cache and are less than 1 week old, return cached version
|
|
24
|
+
* - If payment modes exist but are older than 1 week, fetch fresh data and update cache
|
|
25
|
+
* - If payment modes don't exist in cache, fetch from API and cache them
|
|
26
|
+
*
|
|
27
|
+
* @returns Promise<{count:number, items: PaymentModeBE[]}> - Paged payment modes
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* const paymentModes = await getCachedPaymentModes();
|
|
31
|
+
* console.log(paymentModes.items[0].label);
|
|
32
|
+
*/
|
|
33
|
+
export declare const getCachedPaymentModes: () => Promise<{
|
|
34
|
+
count: number;
|
|
35
|
+
items: PaymentModeBE[];
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Utility function to get a specific payment mode by ID from cache
|
|
39
|
+
* If not found in cache, returns null (does not trigger API call)
|
|
40
|
+
*
|
|
41
|
+
* @param paymentModeId - The ID of the payment mode to retrieve
|
|
42
|
+
* @returns PaymentModeBE | null - The payment mode or null if not found
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const paymentMode = getCachedPaymentModeById('pm-123');
|
|
46
|
+
* if (paymentMode) {
|
|
47
|
+
* console.log(paymentMode.label);
|
|
48
|
+
* }
|
|
49
|
+
*/
|
|
50
|
+
export declare const getCachedPaymentModeById: (paymentModeId: string) => PaymentModeBE | null;
|
|
51
|
+
/**
|
|
52
|
+
* Utility function to get payment modes by label from cache
|
|
53
|
+
* If not found in cache, returns empty array (does not trigger API call)
|
|
54
|
+
*
|
|
55
|
+
* @param label - The label of the payment mode to search for
|
|
56
|
+
* @returns PaymentModeBE[] - Array of matching payment modes or empty array
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* const paymentModes = getCachedPaymentModesByLabel('Cash');
|
|
60
|
+
* console.log(paymentModes.length);
|
|
61
|
+
*/
|
|
62
|
+
export declare const getCachedPaymentModesByLabel: (label: string) => PaymentModeBE[];
|
|
63
|
+
/**
|
|
64
|
+
* Utility function to invalidate (remove) payment modes from cache
|
|
65
|
+
* Useful when payment modes have been updated and you want to force a refresh
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* invalidatePaymentModesCache();
|
|
69
|
+
* const freshPaymentModes = await getCachedPaymentModes();
|
|
70
|
+
*/
|
|
71
|
+
export declare const invalidatePaymentModesCache: () => void;
|
|
72
|
+
/**
|
|
73
|
+
* Utility function to preload payment modes into cache
|
|
74
|
+
* Useful to call on app initialization or login
|
|
75
|
+
*
|
|
76
|
+
* @returns Promise<{count:number, items: PaymentModeBE[]}> - Array of preloaded payment modes
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // On app initialization
|
|
80
|
+
* await preloadPaymentModes();
|
|
81
|
+
*/
|
|
82
|
+
export declare const preloadPaymentModes: () => Promise<{
|
|
83
|
+
count: number;
|
|
84
|
+
items: PaymentModeBE[];
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Utility function to check if payment modes cache is stale
|
|
88
|
+
* Returns true if cache is older than 1 week or doesn't exist
|
|
89
|
+
*
|
|
90
|
+
* @returns boolean - True if cache is stale or doesn't exist
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* if (isPaymentModesCacheStale()) {
|
|
94
|
+
* await getCachedPaymentModes(); // This will fetch fresh data
|
|
95
|
+
* }
|
|
96
|
+
*/
|
|
97
|
+
export declare const isPaymentModesCacheStale: () => boolean;
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.isPaymentModesCacheStale = exports.preloadPaymentModes = exports.invalidatePaymentModesCache = exports.getCachedPaymentModesByLabel = exports.getCachedPaymentModeById = exports.getCachedPaymentModes = exports.getCachedPaymentModesSync = void 0;
|
|
40
|
+
var constants_1 = require("../constants");
|
|
41
|
+
var type_1 = require("../type");
|
|
42
|
+
var api_methods_1 = require("../../../constants/api-methods");
|
|
43
|
+
var fetch_data_1 = require("../../../general/fetch-data");
|
|
44
|
+
var get_storage_value_1 = require("../../../local-storage/get-storage-value");
|
|
45
|
+
var set_storage_value_1 = require("../../../local-storage/set-storage-value");
|
|
46
|
+
/**
|
|
47
|
+
* Synchronous utility function to get payment modes from cache only
|
|
48
|
+
* Returns cached data immediately if available and fresh, otherwise returns empty array
|
|
49
|
+
* Does not trigger any API calls
|
|
50
|
+
*
|
|
51
|
+
* @returns PaymentModeBE[] - Array of cached payment modes or empty array wrapper ({count, items})
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const paymentModes = getCachedPaymentModesSync();
|
|
55
|
+
* if (paymentModes.items.length > 0) {
|
|
56
|
+
* console.log(paymentModes.items[0].label);
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
var getCachedPaymentModesSync = function () {
|
|
60
|
+
try {
|
|
61
|
+
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.PAYMENT_MODES);
|
|
62
|
+
if (!cachedData) {
|
|
63
|
+
return { count: 0, items: [] };
|
|
64
|
+
}
|
|
65
|
+
var currentTime = new Date().getTime();
|
|
66
|
+
var cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
67
|
+
var ageInMs = currentTime - cachedTime;
|
|
68
|
+
// If cached data is less than 1 week old, return it
|
|
69
|
+
if (ageInMs < constants_1.ONE_WEEK_IN_MS) {
|
|
70
|
+
return {
|
|
71
|
+
count: cachedData.paymentModes.length,
|
|
72
|
+
items: cachedData.paymentModes,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return { count: 0, items: [] };
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Error getting cached payment modes:', error);
|
|
79
|
+
return { count: 0, items: [] };
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.getCachedPaymentModesSync = getCachedPaymentModesSync;
|
|
83
|
+
/**
|
|
84
|
+
* Utility function to get payment modes from cache or fetch from API
|
|
85
|
+
*
|
|
86
|
+
* This function manages a localStorage cache of payment modes with the following logic:
|
|
87
|
+
* - If payment modes exist in cache and are less than 1 week old, return cached version
|
|
88
|
+
* - If payment modes exist but are older than 1 week, fetch fresh data and update cache
|
|
89
|
+
* - If payment modes don't exist in cache, fetch from API and cache them
|
|
90
|
+
*
|
|
91
|
+
* @returns Promise<{count:number, items: PaymentModeBE[]}> - Paged payment modes
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* const paymentModes = await getCachedPaymentModes();
|
|
95
|
+
* console.log(paymentModes.items[0].label);
|
|
96
|
+
*/
|
|
97
|
+
var getCachedPaymentModes = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
98
|
+
var cachedData, currentTime, cachedTime, ageInMs, response, updatedCache, error_1;
|
|
99
|
+
var _a;
|
|
100
|
+
return __generator(this, function (_b) {
|
|
101
|
+
switch (_b.label) {
|
|
102
|
+
case 0:
|
|
103
|
+
_b.trys.push([0, 2, , 3]);
|
|
104
|
+
cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.PAYMENT_MODES);
|
|
105
|
+
currentTime = new Date().getTime();
|
|
106
|
+
// Check if cached data exists and is still fresh
|
|
107
|
+
if (cachedData) {
|
|
108
|
+
cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
109
|
+
ageInMs = currentTime - cachedTime;
|
|
110
|
+
// If cached data is less than 1 week old, return it
|
|
111
|
+
if (ageInMs < constants_1.ONE_WEEK_IN_MS) {
|
|
112
|
+
return [2 /*return*/, {
|
|
113
|
+
count: cachedData.paymentModes.length,
|
|
114
|
+
items: cachedData.paymentModes,
|
|
115
|
+
}];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return [4 /*yield*/, (0, fetch_data_1.fetchData)({
|
|
119
|
+
url: constants_1.API_ROUTES.PAYMENT_MODES,
|
|
120
|
+
method: api_methods_1.API_METHODS.GET,
|
|
121
|
+
})];
|
|
122
|
+
case 1:
|
|
123
|
+
response = _b.sent();
|
|
124
|
+
if ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) {
|
|
125
|
+
updatedCache = {
|
|
126
|
+
paymentModes: response.data.items,
|
|
127
|
+
cachedAt: new Date().toISOString(),
|
|
128
|
+
};
|
|
129
|
+
(0, set_storage_value_1.setStorageValue)(type_1.LS_KEYS.PAYMENT_MODES, updatedCache);
|
|
130
|
+
return [2 /*return*/, response.data];
|
|
131
|
+
}
|
|
132
|
+
return [2 /*return*/, { count: 0, items: [] }];
|
|
133
|
+
case 2:
|
|
134
|
+
error_1 = _b.sent();
|
|
135
|
+
console.error('Error fetching payment modes:', error_1);
|
|
136
|
+
return [2 /*return*/, { count: 0, items: [] }];
|
|
137
|
+
case 3: return [2 /*return*/];
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}); };
|
|
141
|
+
exports.getCachedPaymentModes = getCachedPaymentModes;
|
|
142
|
+
/**
|
|
143
|
+
* Utility function to get a specific payment mode by ID from cache
|
|
144
|
+
* If not found in cache, returns null (does not trigger API call)
|
|
145
|
+
*
|
|
146
|
+
* @param paymentModeId - The ID of the payment mode to retrieve
|
|
147
|
+
* @returns PaymentModeBE | null - The payment mode or null if not found
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* const paymentMode = getCachedPaymentModeById('pm-123');
|
|
151
|
+
* if (paymentMode) {
|
|
152
|
+
* console.log(paymentMode.label);
|
|
153
|
+
* }
|
|
154
|
+
*/
|
|
155
|
+
var getCachedPaymentModeById = function (paymentModeId) {
|
|
156
|
+
if (!paymentModeId) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
var paymentModes = (0, exports.getCachedPaymentModesSync)().items;
|
|
161
|
+
return paymentModes.find(function (pm) { return pm.id === paymentModeId; }) || null;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('Error getting cached payment mode by ID:', error);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
exports.getCachedPaymentModeById = getCachedPaymentModeById;
|
|
169
|
+
/**
|
|
170
|
+
* Utility function to get payment modes by label from cache
|
|
171
|
+
* If not found in cache, returns empty array (does not trigger API call)
|
|
172
|
+
*
|
|
173
|
+
* @param label - The label of the payment mode to search for
|
|
174
|
+
* @returns PaymentModeBE[] - Array of matching payment modes or empty array
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* const paymentModes = getCachedPaymentModesByLabel('Cash');
|
|
178
|
+
* console.log(paymentModes.length);
|
|
179
|
+
*/
|
|
180
|
+
var getCachedPaymentModesByLabel = function (label) {
|
|
181
|
+
if (!label) {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
var paymentModes = (0, exports.getCachedPaymentModesSync)().items;
|
|
186
|
+
return paymentModes.filter(function (pm) {
|
|
187
|
+
return pm.label.toLowerCase().includes(label.toLowerCase());
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
console.error('Error getting cached payment modes by label:', error);
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
exports.getCachedPaymentModesByLabel = getCachedPaymentModesByLabel;
|
|
196
|
+
/**
|
|
197
|
+
* Utility function to invalidate (remove) payment modes from cache
|
|
198
|
+
* Useful when payment modes have been updated and you want to force a refresh
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* invalidatePaymentModesCache();
|
|
202
|
+
* const freshPaymentModes = await getCachedPaymentModes();
|
|
203
|
+
*/
|
|
204
|
+
var invalidatePaymentModesCache = function () {
|
|
205
|
+
try {
|
|
206
|
+
localStorage.removeItem(type_1.LS_KEYS.PAYMENT_MODES);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error('Error invalidating payment modes cache:', error);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
exports.invalidatePaymentModesCache = invalidatePaymentModesCache;
|
|
213
|
+
/**
|
|
214
|
+
* Utility function to preload payment modes into cache
|
|
215
|
+
* Useful to call on app initialization or login
|
|
216
|
+
*
|
|
217
|
+
* @returns Promise<{count:number, items: PaymentModeBE[]}> - Array of preloaded payment modes
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* // On app initialization
|
|
221
|
+
* await preloadPaymentModes();
|
|
222
|
+
*/
|
|
223
|
+
var preloadPaymentModes = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
224
|
+
return __generator(this, function (_a) {
|
|
225
|
+
return [2 /*return*/, (0, exports.getCachedPaymentModes)()];
|
|
226
|
+
});
|
|
227
|
+
}); };
|
|
228
|
+
exports.preloadPaymentModes = preloadPaymentModes;
|
|
229
|
+
/**
|
|
230
|
+
* Utility function to check if payment modes cache is stale
|
|
231
|
+
* Returns true if cache is older than 1 week or doesn't exist
|
|
232
|
+
*
|
|
233
|
+
* @returns boolean - True if cache is stale or doesn't exist
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* if (isPaymentModesCacheStale()) {
|
|
237
|
+
* await getCachedPaymentModes(); // This will fetch fresh data
|
|
238
|
+
* }
|
|
239
|
+
*/
|
|
240
|
+
var isPaymentModesCacheStale = function () {
|
|
241
|
+
try {
|
|
242
|
+
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.PAYMENT_MODES);
|
|
243
|
+
if (!cachedData) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
var currentTime = new Date().getTime();
|
|
247
|
+
var cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
248
|
+
var ageInMs = currentTime - cachedTime;
|
|
249
|
+
return ageInMs >= constants_1.ONE_WEEK_IN_MS;
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
console.error('Error checking payment modes cache staleness:', error);
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
exports.isPaymentModesCacheStale = isPaymentModesCacheStale;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './cache';
|
|
1
2
|
import { PaymentModeBE } from '../type';
|
|
2
3
|
type PrismaClient = any;
|
|
3
4
|
export interface ListPaymentModeArgs {
|
|
@@ -50,4 +51,3 @@ export declare const updatePaymentMode: ({ enabled, isDefault, id, prisma, }: Up
|
|
|
50
51
|
* @returns {Promise<PaymentModeBE>} Deleted payment mode
|
|
51
52
|
*/
|
|
52
53
|
export declare const deletePaymentMode: ({ id, prisma, }: DeletePaymentModeArgs) => Promise<PaymentModeBE>;
|
|
53
|
-
export {};
|