@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,307 @@
|
|
|
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.isExpensesCacheStale = exports.preloadExpenses = exports.invalidateExpensesCache = exports.getCachedExpensesByName = exports.getCachedExpenseById = exports.getCachedExpenses = exports.getCachedExpensesSync = 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 expenses 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 ExpenseBE[] - Array of cached expenses or empty array wrapper ({count, items})
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* const expenses = getCachedExpensesSync();
|
|
75
|
+
* if (expenses.items.length > 0) {
|
|
76
|
+
* console.log(expenses.items[0].name);
|
|
77
|
+
* }
|
|
78
|
+
*/
|
|
79
|
+
var getCachedExpensesSync = function () {
|
|
80
|
+
try {
|
|
81
|
+
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.EXPENSES);
|
|
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.expenses.length,
|
|
92
|
+
items: cachedData.expenses,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return { count: 0, items: [] };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error('Error getting cached expenses:', error);
|
|
99
|
+
return { count: 0, items: [] };
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
exports.getCachedExpensesSync = getCachedExpensesSync;
|
|
103
|
+
/**
|
|
104
|
+
* Utility function to get expenses from cache or fetch from API
|
|
105
|
+
*
|
|
106
|
+
* This function manages a localStorage cache of expenses with the following logic:
|
|
107
|
+
* - If expenses exist in cache and are less than 1 day old, return cached version
|
|
108
|
+
* - If expenses exist but are older than 1 day, fetch fresh data and update cache
|
|
109
|
+
* - If expenses don't exist in cache, fetch from API and cache them
|
|
110
|
+
*
|
|
111
|
+
* @param searchQuery - Optional search query to filter expenses
|
|
112
|
+
* @param filters - Optional filters object to apply additional filtering (bypasses cache)
|
|
113
|
+
* @param pageLimit - Number of expenses to fetch (default: 100)
|
|
114
|
+
* @returns Promise<{count:number, items: ExpenseBE[]}> - Paged expenses
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* const expenses = await getCachedExpenses();
|
|
118
|
+
* console.log(expenses.items[0].name);
|
|
119
|
+
*
|
|
120
|
+
* // With search
|
|
121
|
+
* const filtered = await getCachedExpenses('Office');
|
|
122
|
+
*
|
|
123
|
+
* // With filters
|
|
124
|
+
* const filteredByCategory = await getCachedExpenses(undefined, { expenseCategoryId: 'cat-123' });
|
|
125
|
+
*/
|
|
126
|
+
var getCachedExpenses = 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.EXPENSES,
|
|
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.EXPENSES);
|
|
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.expenses.length,
|
|
160
|
+
items: cachedData.expenses,
|
|
161
|
+
}];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return [4 /*yield*/, (0, fetch_data_1.fetchData)({
|
|
165
|
+
url: constants_1.API_ROUTES.EXPENSES,
|
|
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
|
+
expenses: response.data.items,
|
|
177
|
+
cachedAt: new Date().toISOString(),
|
|
178
|
+
};
|
|
179
|
+
(0, set_storage_value_1.setStorageValue)(type_1.LS_KEYS.EXPENSES, 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 expenses:', error_1);
|
|
186
|
+
return [2 /*return*/, { count: 0, items: [] }];
|
|
187
|
+
case 5: return [2 /*return*/];
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
exports.getCachedExpenses = getCachedExpenses;
|
|
193
|
+
/**
|
|
194
|
+
* Utility function to get a specific expense by ID from cache
|
|
195
|
+
* If not found in cache, returns null (does not trigger API call)
|
|
196
|
+
*
|
|
197
|
+
* @param expenseId - The ID of the expense to retrieve
|
|
198
|
+
* @returns ExpenseBE | null - The expense or null if not found
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* const expense = getCachedExpenseById('expense-123');
|
|
202
|
+
* if (expense) {
|
|
203
|
+
* console.log(expense.name);
|
|
204
|
+
* }
|
|
205
|
+
*/
|
|
206
|
+
var getCachedExpenseById = function (expenseId) {
|
|
207
|
+
if (!expenseId) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
var expenses = (0, exports.getCachedExpensesSync)().items;
|
|
212
|
+
return expenses.find(function (expense) { return expense.id === expenseId; }) || null;
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
console.error('Error getting cached expense by ID:', error);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
exports.getCachedExpenseById = getCachedExpenseById;
|
|
220
|
+
/**
|
|
221
|
+
* Utility function to get expenses by name from cache
|
|
222
|
+
* If not found in cache, returns empty array (does not trigger API call)
|
|
223
|
+
*
|
|
224
|
+
* @param name - The name of the expense to search for
|
|
225
|
+
* @returns ExpenseBE[] - Array of matching expenses or empty array
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* const expenses = getCachedExpensesByName('Office');
|
|
229
|
+
* console.log(expenses.length);
|
|
230
|
+
*/
|
|
231
|
+
var getCachedExpensesByName = function (name) {
|
|
232
|
+
if (!name) {
|
|
233
|
+
return [];
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
var expenses = (0, exports.getCachedExpensesSync)().items;
|
|
237
|
+
return expenses.filter(function (expense) {
|
|
238
|
+
return expense.name.toLowerCase().includes(name.toLowerCase());
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
console.error('Error getting cached expenses by name:', error);
|
|
243
|
+
return [];
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
exports.getCachedExpensesByName = getCachedExpensesByName;
|
|
247
|
+
/**
|
|
248
|
+
* Utility function to invalidate (remove) expenses from cache
|
|
249
|
+
* Useful when expenses have been updated and you want to force a refresh
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* invalidateExpensesCache();
|
|
253
|
+
* const freshExpenses = await getCachedExpenses();
|
|
254
|
+
*/
|
|
255
|
+
var invalidateExpensesCache = function () {
|
|
256
|
+
try {
|
|
257
|
+
localStorage.removeItem(type_1.LS_KEYS.EXPENSES);
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
console.error('Error invalidating expenses cache:', error);
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
exports.invalidateExpensesCache = invalidateExpensesCache;
|
|
264
|
+
/**
|
|
265
|
+
* Utility function to preload expenses into cache
|
|
266
|
+
* Useful to call on app initialization or login
|
|
267
|
+
*
|
|
268
|
+
* @returns Promise<{count:number, items: ExpenseBE[]}> - Array of preloaded expenses
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* // On app initialization
|
|
272
|
+
* await preloadExpenses();
|
|
273
|
+
*/
|
|
274
|
+
var preloadExpenses = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
275
|
+
return __generator(this, function (_a) {
|
|
276
|
+
return [2 /*return*/, (0, exports.getCachedExpenses)()];
|
|
277
|
+
});
|
|
278
|
+
}); };
|
|
279
|
+
exports.preloadExpenses = preloadExpenses;
|
|
280
|
+
/**
|
|
281
|
+
* Utility function to check if expenses cache is stale
|
|
282
|
+
* Returns true if cache is older than 1 day or doesn't exist
|
|
283
|
+
*
|
|
284
|
+
* @returns boolean - True if cache is stale or doesn't exist
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* if (isExpensesCacheStale()) {
|
|
288
|
+
* await getCachedExpenses(); // This will fetch fresh data
|
|
289
|
+
* }
|
|
290
|
+
*/
|
|
291
|
+
var isExpensesCacheStale = function () {
|
|
292
|
+
try {
|
|
293
|
+
var cachedData = (0, get_storage_value_1.getStorageValue)(type_1.LS_KEYS.EXPENSES);
|
|
294
|
+
if (!cachedData) {
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
var currentTime = new Date().getTime();
|
|
298
|
+
var cachedTime = new Date(cachedData.cachedAt).getTime();
|
|
299
|
+
var ageInMs = currentTime - cachedTime;
|
|
300
|
+
return ageInMs >= constants_1.ONE_DAY_IN_MS;
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
console.error('Error checking expenses cache staleness:', error);
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
exports.isExpensesCacheStale = isExpensesCacheStale;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './cache';
|
|
1
2
|
import { ExpenseBE } from '../type';
|
|
2
3
|
type PrismaClient = any;
|
|
3
4
|
export interface ListExpenseArgs {
|
|
@@ -55,4 +56,3 @@ export declare const updateExpense: ({ currency, description, expenseCategoryId,
|
|
|
55
56
|
* @throws {Error} If expense ID is not provided or expense not found
|
|
56
57
|
*/
|
|
57
58
|
export declare const deleteExpense: ({ id, includeExpenseCategory, prisma, }: DeleteExpenseArgs) => Promise<ExpenseBE>;
|
|
58
|
-
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.deleteExpense = exports.updateExpense = exports.unitExpenseById = exports.listExpense = void 0;
|
|
74
|
+
__exportStar(require("./cache"), exports);
|
|
60
75
|
var multi_part_search_1 = require("../../../general/multi-part-search");
|
|
61
76
|
/**
|
|
62
77
|
* Retrieves expenses with pagination and filtering
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ExpenseCategoryBE } from '../type';
|
|
2
|
+
/**
|
|
3
|
+
* Synchronous utility function to get expense categories 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 ExpenseCategoryBE[] - Array of cached expense categories or empty array wrapper ({count, items})
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const expenseCategories = getCachedExpenseCategoriesSync();
|
|
11
|
+
* if (expenseCategories.items.length > 0) {
|
|
12
|
+
* console.log(expenseCategories.items[0].name);
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export declare const getCachedExpenseCategoriesSync: () => {
|
|
16
|
+
count: number;
|
|
17
|
+
items: ExpenseCategoryBE[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Utility function to get expense categories from cache or fetch from API
|
|
21
|
+
*
|
|
22
|
+
* This function manages a localStorage cache of expense categories with the following logic:
|
|
23
|
+
* - If expense categories exist in cache and are less than 1 day old, return cached version
|
|
24
|
+
* - If expense categories exist but are older than 1 day, fetch fresh data and update cache
|
|
25
|
+
* - If expense categories don't exist in cache, fetch from API and cache them
|
|
26
|
+
*
|
|
27
|
+
* @param searchQuery - Optional search query to filter expense categories
|
|
28
|
+
* @param filters - Optional filters object to apply additional filtering (bypasses cache)
|
|
29
|
+
* @param pageLimit - Number of expense categories to fetch (default: 100)
|
|
30
|
+
* @returns Promise<{count:number, items: ExpenseCategoryBE[]}> - Paged expense categories
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const expenseCategories = await getCachedExpenseCategories();
|
|
34
|
+
* console.log(expenseCategories.items[0].name);
|
|
35
|
+
*
|
|
36
|
+
* // With search
|
|
37
|
+
* const filtered = await getCachedExpenseCategories('Travel');
|
|
38
|
+
*
|
|
39
|
+
* // With filters
|
|
40
|
+
* const filteredByColor = await getCachedExpenseCategories(undefined, { color: '#FF0000' });
|
|
41
|
+
*/
|
|
42
|
+
export declare const getCachedExpenseCategories: (searchQuery?: string, filters?: Record<string, unknown>, pageLimit?: number) => Promise<{
|
|
43
|
+
count: number;
|
|
44
|
+
items: ExpenseCategoryBE[];
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Utility function to get a specific expense category by ID from cache
|
|
48
|
+
* If not found in cache, returns null (does not trigger API call)
|
|
49
|
+
*
|
|
50
|
+
* @param categoryId - The ID of the expense category to retrieve
|
|
51
|
+
* @returns ExpenseCategoryBE | null - The expense category or null if not found
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const category = getCachedExpenseCategoryById('cat-123');
|
|
55
|
+
* if (category) {
|
|
56
|
+
* console.log(category.name);
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
export declare const getCachedExpenseCategoryById: (categoryId: string) => ExpenseCategoryBE | null;
|
|
60
|
+
/**
|
|
61
|
+
* Utility function to invalidate (remove) expense categories from cache
|
|
62
|
+
* Useful when expense categories have been updated and you want to force a refresh
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* invalidateExpenseCategoriesCache();
|
|
66
|
+
* const freshCategories = await getCachedExpenseCategories();
|
|
67
|
+
*/
|
|
68
|
+
export declare const invalidateExpenseCategoriesCache: () => void;
|
|
69
|
+
/**
|
|
70
|
+
* Utility function to preload expense categories into cache
|
|
71
|
+
* Useful to call on app initialization or login
|
|
72
|
+
*
|
|
73
|
+
* @returns Promise<{count:number, items: ExpenseCategoryBE[]}> - Array of preloaded expense categories
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* // On app initialization
|
|
77
|
+
* await preloadExpenseCategories();
|
|
78
|
+
*/
|
|
79
|
+
export declare const preloadExpenseCategories: () => Promise<{
|
|
80
|
+
count: number;
|
|
81
|
+
items: ExpenseCategoryBE[];
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Utility function to check if expense categories 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 (isExpenseCategoriesCacheStale()) {
|
|
91
|
+
* await getCachedExpenseCategories(); // This will fetch fresh data
|
|
92
|
+
* }
|
|
93
|
+
*/
|
|
94
|
+
export declare const isExpenseCategoriesCacheStale: () => boolean;
|