@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.
Files changed (32) hide show
  1. package/lib/epic.js +1 -1
  2. package/lib/esm/epic.js +2 -2
  3. package/lib/esm/index.js +3 -7
  4. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +5 -10
  5. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +1 -1
  6. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +1 -1
  7. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +4 -14
  8. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +3 -43
  9. package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +10 -52
  10. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +22 -54
  11. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +35 -57
  12. package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +0 -39
  13. package/lib/index.d.ts +3 -4
  14. package/lib/index.js +33 -48
  15. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +0 -3
  16. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +3 -8
  17. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +1 -1
  18. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +1 -1
  19. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +3 -13
  20. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +2 -14
  21. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +3 -44
  22. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +1 -12
  23. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +10 -53
  24. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +5 -11
  25. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +22 -54
  26. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +35 -57
  27. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +9 -27
  28. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +1 -49
  29. package/package.json +1 -1
  30. package/lib/esm/view/expenseAutomationView/bulkUploadTiming.js +0 -10
  31. package/lib/view/expenseAutomationView/bulkUploadTiming.d.ts +0 -10
  32. 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 possible_matches/no_match work when any completed batch has such work.
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
- * During upload/matching, prefer `currentBatchId` only when its batch details are loaded,
75
- * completed, and still have unmatched-tab work. Otherwise keep `primaryBatchIdFromDetailsOrder`.
76
- *
77
- * If we pinned to `currentBatchId` as soon as it was absent from the batch list (in-flight
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((batchListItem) => bulkUpload.batchDetailsById[batchListItem.batchId] == null &&
105
- !failedIds.has(batchListItem.batchId));
82
+ const hasMoreBatchDetails = completedBatchesInApiOrder.some((b) => bulkUpload.batchDetailsById[b.batchId] == null &&
83
+ !failedIds.has(b.batchId));
106
84
  const getSortValue = (file) => {
107
- const matchedTransaction = file.matchedTransaction;
108
- if (matchedTransaction == null) {
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 (matchedTransaction.vendorName ?? matchedTransaction.description)?.toLowerCase() ?? null;
91
+ return (t.vendorName ?? t.description)?.toLowerCase() ?? null;
114
92
  case 'category': {
115
- const line = matchedTransaction.lines?.[0];
93
+ const line = t.lines?.[0];
116
94
  return line?.account?.accountName?.toLowerCase() ?? null;
117
95
  }
118
96
  case 'class': {
119
- const line = matchedTransaction.lines?.[0];
97
+ const line = t.lines?.[0];
120
98
  return line?.class?.className?.toLowerCase() ?? null;
121
99
  }
122
100
  case 'date':
123
- return matchedTransaction.date.valueOf();
101
+ return t.date.valueOf();
124
102
  case 'amount':
125
- return matchedTransaction.amount.amount;
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((resolvedFile) => resolvedFile.status === 'exact_match') ?? [], getSortValue, bulkUploadSortDirection);
132
- const unmatchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((resolvedFile) => (0, missingReceiptsViewState_1.isUnmatchedTabFileStatus)(resolvedFile.status)) ?? [], getSortValue, bulkUploadSortDirection);
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((batchListItem) => batchListItem.batchId !== unmatchedSectionBatchId)
127
+ ? batchList.filter((b) => b.batchId !== unmatchedSectionBatchId)
150
128
  : batchList;
151
- const pastUnmatchedFiles = pastBatches.flatMap((pastBatch) => {
152
- const details = bulkUpload.batchDetailsById[pastBatch.batchId];
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((batchFile) => (0, missingReceiptsViewState_1.isUnmatchedTabFileStatus)(batchFile.status))
158
- .map((batchFile) => resolveBatchFile(batchFile, pastBatch.batchId, transactionState));
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((result) => {
178
- const transaction = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, result.transactionId);
155
+ const manualSearchResults = bulkUpload.manualSearch.results.map((r) => {
156
+ const t = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, r.transactionId);
179
157
  return {
180
- ...result,
181
- vendorLogo: result.vendorLogo ?? transaction?.logo?.href,
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((file) => (0, missingReceiptsViewState_1.isUnmatchedTabFileStatus)(file.status));
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((batch) => {
249
- if (failedIds.has(batch.batchId)) {
226
+ const anyCompletedBatchHasUnmatchedWork = batchListInPlatformOrder.some((b) => {
227
+ if (failedIds.has(b.batchId)) {
250
228
  return false;
251
229
  }
252
- const details = batchDetailsById[batch.batchId];
253
- if (details != null &&
254
- details.status === 'completed' &&
255
- batchDetailsHasUnmatchedWork(details)) {
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 details == null && batchListItemHasUnmatchedWork(batch);
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((candidate) => candidate != null);
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
- * Minimum trimmed query length before manual-match search calls the expense-automation API.
17
- * Kept in sync with `ManualSearchInput` in web-components (fires search only when length ≥ this).
18
- */
19
- export declare const MIN_MANUAL_TRANSACTION_SEARCH_LENGTH = 2;
20
- export declare const toBatchStatusValue: (v: string) => "pending" | "processing" | "completed";
21
- export type BatchStatusValue = ReturnType<typeof toBatchStatusValue>;
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
- /** Same union as {@link CompletedSubTab} — used for completed-transactions API `match_type`. */
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.toBulkUploadSortKey = exports.toMatchSource = exports.toCompletedSubTab = exports.toMissingReceiptsTab = exports.toBulkUploadResultsTab = exports.toBulkUploadPhase = exports.toBatchFileStatus = exports.BATCH_FILE_STATUSES = exports.toBatchStatusValue = exports.MIN_MANUAL_TRANSACTION_SEARCH_LENGTH = exports.toMissingReceiptsSortKey = void 0;
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-betaVR16",
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;