@zeniai/client-epic-state 4.19.84-betaVR16 → 4.19.84-betaVR2
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/lib/epic.js +1 -1
- package/lib/esm/epic.js +2 -2
- package/lib/esm/index.js +3 -7
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +5 -10
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +1 -1
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +1 -1
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +4 -14
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +3 -43
- package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +10 -52
- package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +22 -54
- package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +35 -57
- package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +0 -39
- package/lib/index.d.ts +3 -4
- package/lib/index.js +33 -48
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +0 -3
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +3 -8
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +1 -1
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +1 -1
- package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +3 -13
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +2 -14
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +3 -44
- package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +1 -12
- package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +10 -53
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +5 -11
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +22 -54
- package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +35 -57
- package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +9 -27
- package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +1 -49
- package/package.json +1 -1
- package/lib/esm/view/expenseAutomationView/bulkUploadTiming.js +0 -10
- package/lib/view/expenseAutomationView/bulkUploadTiming.d.ts +0 -10
- package/lib/view/expenseAutomationView/bulkUploadTiming.js +0 -13
|
@@ -11,7 +11,6 @@ const transactionSelector_1 = require("../../../entity/transaction/transactionSe
|
|
|
11
11
|
const expenseAutomationViewSelectorTypes_1 = require("../selectorTypes/expenseAutomationViewSelectorTypes");
|
|
12
12
|
const missingReceiptsPayload_1 = require("../payload/missingReceiptsPayload");
|
|
13
13
|
const missingReceiptsViewReducer_1 = require("../reducers/missingReceiptsViewReducer");
|
|
14
|
-
const missingReceiptsViewState_1 = require("../types/missingReceiptsViewState");
|
|
15
14
|
function getExpenseAutomationMissingReceiptsView(state) {
|
|
16
15
|
const { expenseAutomationMissingReceiptsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, } = state;
|
|
17
16
|
const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state);
|
|
@@ -65,71 +64,50 @@ function getExpenseAutomationMissingReceiptsView(state) {
|
|
|
65
64
|
: [];
|
|
66
65
|
/**
|
|
67
66
|
* Primary "Unmatched" batch = first completed batch in platform list order, preferring the
|
|
68
|
-
* first batch that still has
|
|
67
|
+
* first batch that still has un_matched/no_match work when any completed batch has such work.
|
|
69
68
|
* Batches without details yet: wait if the list row still reports unmatched work; otherwise skip
|
|
70
69
|
* so we do not block the whole tab while other rows are not fetched yet.
|
|
71
70
|
*/
|
|
72
71
|
const primaryBatchIdFromDetailsOrder = getPrimaryBatchIdFromBatchListOrder(batchList, bulkUpload.batchDetailsById, bulkUpload.failedBatchDetailIds);
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
* upload), details are often not loaded yet — `unmatchedFiles` would empty while older batches
|
|
79
|
-
* moved to "past", so the primary "Unmatched Receipts" section vanished during auto-matching.
|
|
80
|
-
*/
|
|
81
|
-
const unmatchedSectionBatchId = (() => {
|
|
82
|
-
const phase = bulkUpload.phase;
|
|
83
|
-
if (phase !== 'matching' && phase !== 'uploading') {
|
|
84
|
-
return primaryBatchIdFromDetailsOrder;
|
|
85
|
-
}
|
|
86
|
-
const currentId = bulkUpload.currentBatchId;
|
|
87
|
-
if (currentId == null) {
|
|
88
|
-
return primaryBatchIdFromDetailsOrder;
|
|
89
|
-
}
|
|
90
|
-
const currentDetails = bulkUpload.batchDetailsById[currentId];
|
|
91
|
-
if (currentDetails != null &&
|
|
92
|
-
currentDetails.status === 'completed' &&
|
|
93
|
-
batchDetailsHasUnmatchedWork(currentDetails)) {
|
|
94
|
-
return currentId;
|
|
95
|
-
}
|
|
96
|
-
return primaryBatchIdFromDetailsOrder;
|
|
97
|
-
})();
|
|
98
|
-
const completedBatchesInApiOrder = batchList.filter((batchListItem) => (0, missingReceiptsPayload_1.isBatchListStatusCompleted)(batchListItem.status));
|
|
72
|
+
/** During upload/matching, the in-flight batch may not appear in batchList yet — prefer currentBatchId. */
|
|
73
|
+
const unmatchedSectionBatchId = bulkUpload.phase === 'matching' || bulkUpload.phase === 'uploading'
|
|
74
|
+
? bulkUpload.currentBatchId ?? primaryBatchIdFromDetailsOrder
|
|
75
|
+
: primaryBatchIdFromDetailsOrder;
|
|
76
|
+
const completedBatchesInApiOrder = batchList.filter((b) => (0, missingReceiptsPayload_1.isBatchListStatusCompleted)(b.status));
|
|
99
77
|
const currentBatchDetails = unmatchedSectionBatchId != null
|
|
100
78
|
? bulkUpload.batchDetailsById[unmatchedSectionBatchId]
|
|
101
79
|
: undefined;
|
|
102
80
|
const resolvedFiles = currentBatchDetails?.files.map((file) => resolveBatchFile(file, currentBatchDetails.batchId, transactionState));
|
|
103
81
|
const failedIds = new Set(bulkUpload.failedBatchDetailIds);
|
|
104
|
-
const hasMoreBatchDetails = completedBatchesInApiOrder.some((
|
|
105
|
-
!failedIds.has(
|
|
82
|
+
const hasMoreBatchDetails = completedBatchesInApiOrder.some((b) => bulkUpload.batchDetailsById[b.batchId] == null &&
|
|
83
|
+
!failedIds.has(b.batchId));
|
|
106
84
|
const getSortValue = (file) => {
|
|
107
|
-
const
|
|
108
|
-
if (
|
|
85
|
+
const t = file.matchedTransaction;
|
|
86
|
+
if (t == null) {
|
|
109
87
|
return null;
|
|
110
88
|
}
|
|
111
89
|
switch (bulkUpload.sortKey) {
|
|
112
90
|
case 'vendor':
|
|
113
|
-
return (
|
|
91
|
+
return (t.vendorName ?? t.description)?.toLowerCase() ?? null;
|
|
114
92
|
case 'category': {
|
|
115
|
-
const line =
|
|
93
|
+
const line = t.lines?.[0];
|
|
116
94
|
return line?.account?.accountName?.toLowerCase() ?? null;
|
|
117
95
|
}
|
|
118
96
|
case 'class': {
|
|
119
|
-
const line =
|
|
97
|
+
const line = t.lines?.[0];
|
|
120
98
|
return line?.class?.className?.toLowerCase() ?? null;
|
|
121
99
|
}
|
|
122
100
|
case 'date':
|
|
123
|
-
return
|
|
101
|
+
return t.date.valueOf();
|
|
124
102
|
case 'amount':
|
|
125
|
-
return
|
|
103
|
+
return t.amount.amount;
|
|
126
104
|
default:
|
|
127
105
|
return null;
|
|
128
106
|
}
|
|
129
107
|
};
|
|
130
108
|
const bulkUploadSortDirection = bulkUpload.sortOrder === 'ascending' ? 'asc' : 'desc';
|
|
131
|
-
const matchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((
|
|
132
|
-
const unmatchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((
|
|
109
|
+
const matchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((f) => f.status === 'matched') ?? [], getSortValue, bulkUploadSortDirection);
|
|
110
|
+
const unmatchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((f) => f.status === 'un_matched' || f.status === 'no_match') ?? [], getSortValue, bulkUploadSortDirection);
|
|
133
111
|
const progress = currentBatchStatus != null
|
|
134
112
|
? {
|
|
135
113
|
...currentBatchStatus.progress,
|
|
@@ -146,16 +124,16 @@ function getExpenseAutomationMissingReceiptsView(state) {
|
|
|
146
124
|
* that has details loaded (otherwise past is empty and receipts vanish from the UI).
|
|
147
125
|
*/
|
|
148
126
|
const pastBatches = unmatchedSectionBatchId != null
|
|
149
|
-
? batchList.filter((
|
|
127
|
+
? batchList.filter((b) => b.batchId !== unmatchedSectionBatchId)
|
|
150
128
|
: batchList;
|
|
151
|
-
const pastUnmatchedFiles = pastBatches.flatMap((
|
|
152
|
-
const details = bulkUpload.batchDetailsById[
|
|
129
|
+
const pastUnmatchedFiles = pastBatches.flatMap((b) => {
|
|
130
|
+
const details = bulkUpload.batchDetailsById[b.batchId];
|
|
153
131
|
if (details == null) {
|
|
154
132
|
return [];
|
|
155
133
|
}
|
|
156
134
|
return details.files
|
|
157
|
-
.filter((
|
|
158
|
-
.map((
|
|
135
|
+
.filter((f) => f.status === 'un_matched' || f.status === 'no_match')
|
|
136
|
+
.map((f) => resolveBatchFile(f, b.batchId, transactionState));
|
|
159
137
|
});
|
|
160
138
|
const completedTransactionsCacheKey = monthYearPeriodId != null
|
|
161
139
|
? (0, missingReceiptsViewReducer_1.getCompletedTransactionsCacheKey)(monthYearPeriodId, bulkUpload.sortKey, bulkUpload.sortOrder, bulkUpload.completedSubTab)
|
|
@@ -174,11 +152,11 @@ function getExpenseAutomationMissingReceiptsView(state) {
|
|
|
174
152
|
summary: currentBatchDetails.summary,
|
|
175
153
|
}
|
|
176
154
|
: undefined;
|
|
177
|
-
const manualSearchResults = bulkUpload.manualSearch.results.map((
|
|
178
|
-
const
|
|
155
|
+
const manualSearchResults = bulkUpload.manualSearch.results.map((r) => {
|
|
156
|
+
const t = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, r.transactionId);
|
|
179
157
|
return {
|
|
180
|
-
...
|
|
181
|
-
vendorLogo:
|
|
158
|
+
...r,
|
|
159
|
+
vendorLogo: r.vendorLogo ?? t?.logo?.href,
|
|
182
160
|
};
|
|
183
161
|
});
|
|
184
162
|
return {
|
|
@@ -228,7 +206,7 @@ function getExpenseAutomationMissingReceiptsView(state) {
|
|
|
228
206
|
};
|
|
229
207
|
}
|
|
230
208
|
function batchDetailsHasUnmatchedWork(details) {
|
|
231
|
-
return details.files.some((
|
|
209
|
+
return details.files.some((f) => f.status === 'un_matched' || f.status === 'no_match');
|
|
232
210
|
}
|
|
233
211
|
/** List row summary before batch details load — aligns with unmatched / possible-match work. */
|
|
234
212
|
function batchListItemHasUnmatchedWork(batch) {
|
|
@@ -245,17 +223,17 @@ function batchListItemHasUnmatchedWork(batch) {
|
|
|
245
223
|
*/
|
|
246
224
|
function getPrimaryBatchIdFromBatchListOrder(batchListInPlatformOrder, batchDetailsById, failedBatchDetailIds) {
|
|
247
225
|
const failedIds = new Set(failedBatchDetailIds);
|
|
248
|
-
const anyCompletedBatchHasUnmatchedWork = batchListInPlatformOrder.some((
|
|
249
|
-
if (failedIds.has(
|
|
226
|
+
const anyCompletedBatchHasUnmatchedWork = batchListInPlatformOrder.some((b) => {
|
|
227
|
+
if (failedIds.has(b.batchId)) {
|
|
250
228
|
return false;
|
|
251
229
|
}
|
|
252
|
-
const
|
|
253
|
-
if (
|
|
254
|
-
|
|
255
|
-
batchDetailsHasUnmatchedWork(
|
|
230
|
+
const d = batchDetailsById[b.batchId];
|
|
231
|
+
if (d != null &&
|
|
232
|
+
d.status === 'completed' &&
|
|
233
|
+
batchDetailsHasUnmatchedWork(d)) {
|
|
256
234
|
return true;
|
|
257
235
|
}
|
|
258
|
-
return
|
|
236
|
+
return d == null && batchListItemHasUnmatchedWork(b);
|
|
259
237
|
});
|
|
260
238
|
for (const batch of batchListInPlatformOrder) {
|
|
261
239
|
if (failedIds.has(batch.batchId)) {
|
|
@@ -292,7 +270,7 @@ function resolveBatchFile(file, batchId, transactionState) {
|
|
|
292
270
|
? { transaction, matchScore: ref.matchScore }
|
|
293
271
|
: undefined;
|
|
294
272
|
})
|
|
295
|
-
.filter((
|
|
273
|
+
.filter((c) => c != null);
|
|
296
274
|
return {
|
|
297
275
|
attachmentId: file.attachmentId,
|
|
298
276
|
batchId,
|
|
@@ -3,6 +3,7 @@ import { SortOrder } from '../../../commonStateTypes/selectorTypes/sortOrderType
|
|
|
3
3
|
import { MonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
|
|
4
4
|
export declare const toMissingReceiptsSortKey: (v: string) => "date" | "amount" | "vendor" | "category" | "class";
|
|
5
5
|
export type MissingReceiptsSortKey = ReturnType<typeof toMissingReceiptsSortKey>;
|
|
6
|
+
export type BulkUploadSortKey = 'amount' | 'category' | 'class' | 'date' | 'vendor';
|
|
6
7
|
export interface MissingReceiptsViewUIState {
|
|
7
8
|
scrollPosition: {
|
|
8
9
|
scrollTop: number;
|
|
@@ -12,31 +13,13 @@ export interface MissingReceiptsViewUIState {
|
|
|
12
13
|
sortKey: MissingReceiptsSortKey;
|
|
13
14
|
sortOrder: SortOrder;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export
|
|
20
|
-
export
|
|
21
|
-
export type
|
|
22
|
-
/** Canonical batch file statuses (API ingress may use aliases; see `parseBatchFileStatus`). */
|
|
23
|
-
export declare const BATCH_FILE_STATUSES: readonly ["exact_match", "possible_matches", "no_match", "failed"];
|
|
24
|
-
export declare const toBatchFileStatus: (v: string) => "failed" | "exact_match" | "possible_matches" | "no_match";
|
|
25
|
-
export type BatchFileStatus = ReturnType<typeof toBatchFileStatus>;
|
|
26
|
-
/** True for files that belong in the Unmatched tab (possible matches or no match). */
|
|
27
|
-
export declare function isUnmatchedTabFileStatus(status: BatchFileStatus): boolean;
|
|
28
|
-
export declare const toBulkUploadPhase: (v: string) => "completed" | "idle" | "uploading" | "matching";
|
|
29
|
-
export type BulkUploadPhase = ReturnType<typeof toBulkUploadPhase>;
|
|
30
|
-
export declare const toBulkUploadResultsTab: (v: string) => "completed" | "unmatched";
|
|
31
|
-
export type BulkUploadResultsTab = ReturnType<typeof toBulkUploadResultsTab>;
|
|
32
|
-
export declare const toMissingReceiptsTab: (v: string) => "completed" | "unmatched" | "missing";
|
|
33
|
-
export type MissingReceiptsTab = ReturnType<typeof toMissingReceiptsTab>;
|
|
34
|
-
export declare const toCompletedSubTab: (v: string) => "all" | "manual" | "ai_accountant";
|
|
35
|
-
export type CompletedSubTab = ReturnType<typeof toCompletedSubTab>;
|
|
36
|
-
export declare const toMatchSource: (v: string) => "manual" | "ai";
|
|
37
|
-
export type MatchSource = ReturnType<typeof toMatchSource>;
|
|
38
|
-
export declare const toBulkUploadSortKey: (v: string) => "date" | "amount" | "vendor" | "category" | "class";
|
|
39
|
-
export type BulkUploadSortKey = ReturnType<typeof toBulkUploadSortKey>;
|
|
16
|
+
export type BatchStatusValue = 'pending' | 'processing' | 'completed';
|
|
17
|
+
export type BatchFileStatus = 'matched' | 'un_matched' | 'no_match' | 'failed';
|
|
18
|
+
export type BulkUploadPhase = 'idle' | 'uploading' | 'matching' | 'completed';
|
|
19
|
+
export type BulkUploadResultsTab = 'completed' | 'unmatched';
|
|
20
|
+
export type MissingReceiptsTab = 'missing' | BulkUploadResultsTab;
|
|
21
|
+
export type CompletedSubTab = 'all' | 'ai_accountant' | 'manual';
|
|
22
|
+
export type MatchSource = 'ai' | 'manual';
|
|
40
23
|
export interface CandidateRef {
|
|
41
24
|
matchScore: number;
|
|
42
25
|
transactionId: ID;
|
|
@@ -116,8 +99,7 @@ export interface ManualSearchState {
|
|
|
116
99
|
searchQuery: string;
|
|
117
100
|
totalCount: number;
|
|
118
101
|
}
|
|
119
|
-
|
|
120
|
-
export type CompletedTransactionsMatchType = CompletedSubTab;
|
|
102
|
+
export type CompletedTransactionsMatchType = 'all' | 'ai_accountant' | 'manual';
|
|
121
103
|
export interface CompletedTransactionsState {
|
|
122
104
|
fetchState: FetchStateAndError;
|
|
123
105
|
nextPageToken: string | null;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.isUnmatchedTabFileStatus = isUnmatchedTabFileStatus;
|
|
3
|
+
exports.toMissingReceiptsSortKey = void 0;
|
|
5
4
|
const stringToUnion_1 = require("../../../commonStateTypes/stringToUnion");
|
|
6
5
|
const MISSING_RECEIPTS_SORT_KEYS = [
|
|
7
6
|
'vendor',
|
|
@@ -12,50 +11,3 @@ const MISSING_RECEIPTS_SORT_KEYS = [
|
|
|
12
11
|
];
|
|
13
12
|
const toMissingReceiptsSortKey = (v) => (0, stringToUnion_1.stringToUnion)(v, MISSING_RECEIPTS_SORT_KEYS);
|
|
14
13
|
exports.toMissingReceiptsSortKey = toMissingReceiptsSortKey;
|
|
15
|
-
// -- Bulk Receipt Upload Types --
|
|
16
|
-
/**
|
|
17
|
-
* Minimum trimmed query length before manual-match search calls the expense-automation API.
|
|
18
|
-
* Kept in sync with `ManualSearchInput` in web-components (fires search only when length ≥ this).
|
|
19
|
-
*/
|
|
20
|
-
exports.MIN_MANUAL_TRANSACTION_SEARCH_LENGTH = 2;
|
|
21
|
-
const BATCH_STATUS_VALUES = ['pending', 'processing', 'completed'];
|
|
22
|
-
const toBatchStatusValue = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), BATCH_STATUS_VALUES);
|
|
23
|
-
exports.toBatchStatusValue = toBatchStatusValue;
|
|
24
|
-
/** Canonical batch file statuses (API ingress may use aliases; see `parseBatchFileStatus`). */
|
|
25
|
-
exports.BATCH_FILE_STATUSES = [
|
|
26
|
-
'exact_match',
|
|
27
|
-
'possible_matches',
|
|
28
|
-
'no_match',
|
|
29
|
-
'failed',
|
|
30
|
-
];
|
|
31
|
-
const toBatchFileStatus = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase().replace(/-/g, '_'), exports.BATCH_FILE_STATUSES);
|
|
32
|
-
exports.toBatchFileStatus = toBatchFileStatus;
|
|
33
|
-
const UNMATCHED_TAB_FILE_STATUSES = ['possible_matches', 'no_match'];
|
|
34
|
-
/** True for files that belong in the Unmatched tab (possible matches or no match). */
|
|
35
|
-
function isUnmatchedTabFileStatus(status) {
|
|
36
|
-
return UNMATCHED_TAB_FILE_STATUSES.includes(status);
|
|
37
|
-
}
|
|
38
|
-
const BULK_UPLOAD_PHASES = ['idle', 'uploading', 'matching', 'completed'];
|
|
39
|
-
const toBulkUploadPhase = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), BULK_UPLOAD_PHASES);
|
|
40
|
-
exports.toBulkUploadPhase = toBulkUploadPhase;
|
|
41
|
-
const BULK_UPLOAD_RESULTS_TABS = ['completed', 'unmatched'];
|
|
42
|
-
const toBulkUploadResultsTab = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), BULK_UPLOAD_RESULTS_TABS);
|
|
43
|
-
exports.toBulkUploadResultsTab = toBulkUploadResultsTab;
|
|
44
|
-
const MISSING_RECEIPTS_TABS = ['missing', 'completed', 'unmatched'];
|
|
45
|
-
const toMissingReceiptsTab = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), MISSING_RECEIPTS_TABS);
|
|
46
|
-
exports.toMissingReceiptsTab = toMissingReceiptsTab;
|
|
47
|
-
const COMPLETED_SUB_TABS = ['all', 'ai_accountant', 'manual'];
|
|
48
|
-
const toCompletedSubTab = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), COMPLETED_SUB_TABS);
|
|
49
|
-
exports.toCompletedSubTab = toCompletedSubTab;
|
|
50
|
-
const MATCH_SOURCES = ['ai', 'manual'];
|
|
51
|
-
const toMatchSource = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), MATCH_SOURCES);
|
|
52
|
-
exports.toMatchSource = toMatchSource;
|
|
53
|
-
const BULK_UPLOAD_SORT_KEYS = [
|
|
54
|
-
'amount',
|
|
55
|
-
'category',
|
|
56
|
-
'class',
|
|
57
|
-
'date',
|
|
58
|
-
'vendor',
|
|
59
|
-
];
|
|
60
|
-
const toBulkUploadSortKey = (v) => (0, stringToUnion_1.stringToUnion)(v.trim().toLowerCase(), BULK_UPLOAD_SORT_KEYS);
|
|
61
|
-
exports.toBulkUploadSortKey = toBulkUploadSortKey;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeniai/client-epic-state",
|
|
3
|
-
"version": "4.19.84-
|
|
3
|
+
"version": "4.19.84-betaVR2",
|
|
4
4
|
"description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* After upload API success, hold the bar at 100% this long before transitioning to matching,
|
|
3
|
-
* so the fill animation can complete without an abrupt swap to the auto-matching banner.
|
|
4
|
-
*/
|
|
5
|
-
export const BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = 400;
|
|
6
|
-
/**
|
|
7
|
-
* Max wall-clock wait for Pusher + batch-details resolution after upload. If exceeded, we stop
|
|
8
|
-
* fallback polling, clear the automatching banner (`phase` → completed), and refresh batch list.
|
|
9
|
-
*/
|
|
10
|
-
export const BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = 300000;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* After upload API success, hold the bar at 100% this long before transitioning to matching,
|
|
3
|
-
* so the fill animation can complete without an abrupt swap to the auto-matching banner.
|
|
4
|
-
*/
|
|
5
|
-
export declare const BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = 400;
|
|
6
|
-
/**
|
|
7
|
-
* Max wall-clock wait for Pusher + batch-details resolution after upload. If exceeded, we stop
|
|
8
|
-
* fallback polling, clear the automatching banner (`phase` → completed), and refresh batch list.
|
|
9
|
-
*/
|
|
10
|
-
export declare const BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = 300000;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* After upload API success, hold the bar at 100% this long before transitioning to matching,
|
|
6
|
-
* so the fill animation can complete without an abrupt swap to the auto-matching banner.
|
|
7
|
-
*/
|
|
8
|
-
exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = 400;
|
|
9
|
-
/**
|
|
10
|
-
* Max wall-clock wait for Pusher + batch-details resolution after upload. If exceeded, we stop
|
|
11
|
-
* fallback polling, clear the automatching banner (`phase` → completed), and refresh batch list.
|
|
12
|
-
*/
|
|
13
|
-
exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = 300000;
|