@zeniai/client-epic-state 5.0.74 → 5.0.75
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.d.ts +2 -1
- package/lib/epic.js +2 -1
- package/lib/esm/epic.js +2 -1
- package/lib/esm/index.js +6 -6
- package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +21 -1
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +117 -14
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +58 -0
- package/lib/esm/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +87 -0
- package/lib/esm/view/recommendation/recommendationHelper.js +29 -0
- package/lib/esm/view/recommendation/recommendationReducer.js +26 -1
- package/lib/esm/view/transactionDetail/transactionDetailReducer.js +121 -6
- package/lib/esm/view/transactionDetail/transactionDetailSelector.js +22 -0
- package/lib/index.d.ts +7 -6
- package/lib/index.js +35 -32
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +23 -2
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +14 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +117 -14
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +2 -0
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +3 -0
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +60 -1
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -0
- package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.d.ts +9 -0
- package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +91 -0
- package/lib/view/recommendation/recommendationHelper.d.ts +9 -0
- package/lib/view/recommendation/recommendationHelper.js +31 -1
- package/lib/view/recommendation/recommendationReducer.d.ts +20 -1
- package/lib/view/recommendation/recommendationReducer.js +27 -2
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +11 -1
- package/lib/view/transactionDetail/transactionDetailReducer.js +122 -7
- package/lib/view/transactionDetail/transactionDetailSelector.d.ts +2 -0
- package/lib/view/transactionDetail/transactionDetailSelector.js +24 -1
- package/lib/view/transactionDetail/transactionDetailTypes.d.ts +1 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
var _a;
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.setIsVendorUpdateAllChecked = exports.updateVendorBulkRecommendationsFetchStatus = exports.updateLatestSelectedEntity = exports.resetAllLineItemsToVendor = exports.updateVendorToAllLineItems = exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = exports.resetSelectedCustomer = exports.resetVendor = exports.updateSelectedCustomer = exports.updateSelectedVendor = exports.removeEntityRecommendationForLineIdForTransactionDetail = exports.setEntityRecommendationForLineIdsForTransactionDetail = exports.setAllLineItemsLocalDataIsUpdateAllChecked = exports.setAllLineItemsToCategoryClassInLocalData = exports.resetLineItemsCategoryClassInLocalData = exports.clearTransactionDetailLocalData = exports.saveTransactionDetailLocalData = exports.initializeTransactionDetailLocalData = exports.saveTransactionDetail = exports.updateTransactionStateIfUpdateActionNotAllowed = exports.updateStatusConsolidatedSaveTransactionDetail = exports.updateStatusForTransactionNotMiscategorizedUpdate = exports.deleteTransactionAttachmentSuccess = exports.deleteTransactionAttachmentFailure = exports.deleteTransactionAttachment = exports.markTransactionAsNotMiscategorized = exports.clearTransactionDetailSaveStatus = exports.updateTransactionDetailSaveStatus = exports.updateTransactionDetail = exports.uploadMissingAttachmentSuccess = exports.clearTransactionDetail = exports.removeTransactionDetail = exports.updateTransactionDetailFetchState = exports.fetchTransactionDetail = exports.downloadAccountingProviderAttachmentFailure = exports.downloadAccountingProviderAttachmentSuccess = exports.downloadAccountingProviderAttachment = exports.initialState = void 0;
|
|
7
|
+
exports.setIsVendorUpdateAllChecked = exports.updateVendorBulkRecommendationsFetchStatus = exports.updateLatestSelectedEntity = exports.resetAllLineItemsToVendor = exports.updateVendorToAllLineItems = exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = exports.resetSelectedCustomer = exports.resetVendor = exports.updateSelectedCustomer = exports.updateSelectedVendor = exports.removeEntityRecommendationForLineIdForTransactionDetail = exports.markCategoryClassRecommendationsFailureForTransactionDetail = exports.markCategoryClassRecommendationsCompletedForTransactionDetail = exports.markCategoryClassRecommendationsInProgressForTransactionDetail = exports.setEntityRecommendationForLineIdsForTransactionDetail = exports.setAllLineItemsLocalDataIsUpdateAllChecked = exports.setAllLineItemsToCategoryClassInLocalData = exports.resetLineItemsCategoryClassInLocalData = exports.clearTransactionDetailLocalData = exports.saveTransactionDetailLocalData = exports.initializeTransactionDetailLocalData = exports.saveTransactionDetail = exports.updateTransactionStateIfUpdateActionNotAllowed = exports.updateStatusConsolidatedSaveTransactionDetail = exports.updateStatusForTransactionNotMiscategorizedUpdate = exports.deleteTransactionAttachmentSuccess = exports.deleteTransactionAttachmentFailure = exports.deleteTransactionAttachment = exports.markTransactionAsNotMiscategorized = exports.clearTransactionDetailSaveStatus = exports.updateTransactionDetailSaveStatus = exports.updateTransactionDetail = exports.uploadMissingAttachmentSuccess = exports.clearTransactionDetail = exports.removeTransactionDetail = exports.updateTransactionDetailFetchState = exports.fetchTransactionDetail = exports.downloadAccountingProviderAttachmentFailure = exports.downloadAccountingProviderAttachmentSuccess = exports.downloadAccountingProviderAttachment = exports.initialState = void 0;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
10
10
|
const entity_1 = require("../../entity/genericEntity/entity");
|
|
@@ -245,12 +245,34 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
245
245
|
saveTransactionDetailLocalData(draft, action) {
|
|
246
246
|
const key = (0, transactionDetailState_1.getTransactionDetailKey)(action.payload.transactionId);
|
|
247
247
|
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
248
|
-
if (detail
|
|
249
|
-
|
|
250
|
-
...detail,
|
|
251
|
-
transactionDetailLocalData: action.payload.transactionLocalData,
|
|
252
|
-
};
|
|
248
|
+
if (detail == null) {
|
|
249
|
+
return;
|
|
253
250
|
}
|
|
251
|
+
const incoming = action.payload.transactionLocalData;
|
|
252
|
+
const prevById = detail.transactionDetailLocalData.lineItemById;
|
|
253
|
+
// Per-line `categoryClassRecommendationsFetchState` is owned by the
|
|
254
|
+
// recommendation epic/reducers (markInProgress / markCompleted /
|
|
255
|
+
// markFailure / setEntityRecommendationForLineIdsForTransactionDetail).
|
|
256
|
+
// Callers that rebuild `transactionLocalData` from a UI snapshot will
|
|
257
|
+
// typically have an out-of-date copy of this field (e.g. payee-change
|
|
258
|
+
// captures the snapshot before the epic's start arm runs and would
|
|
259
|
+
// otherwise clobber In-Progress back to undefined). Treat the field as
|
|
260
|
+
// sticky: only let the caller override it when they explicitly set it.
|
|
261
|
+
const mergedLineItemById = {};
|
|
262
|
+
Object.entries(incoming.lineItemById ?? {}).forEach(([lineId, line]) => {
|
|
263
|
+
mergedLineItemById[lineId] = {
|
|
264
|
+
...line,
|
|
265
|
+
categoryClassRecommendationsFetchState: line.categoryClassRecommendationsFetchState ??
|
|
266
|
+
prevById?.[lineId]?.categoryClassRecommendationsFetchState,
|
|
267
|
+
};
|
|
268
|
+
});
|
|
269
|
+
draft.transactionDetailById[key] = {
|
|
270
|
+
...detail,
|
|
271
|
+
transactionDetailLocalData: {
|
|
272
|
+
...incoming,
|
|
273
|
+
lineItemById: mergedLineItemById,
|
|
274
|
+
},
|
|
275
|
+
};
|
|
254
276
|
},
|
|
255
277
|
saveTransactionDetail(draft, action) {
|
|
256
278
|
const key = (0, transactionDetailState_1.getTransactionDetailKey)(action.payload.transactionId);
|
|
@@ -372,6 +394,21 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
372
394
|
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
373
395
|
if (detail != null) {
|
|
374
396
|
const newLocalData = (0, transactionDetailLocalDataHelper_1.setEntityRecommendationForLineIdInLocalData)(transaction, detail.transactionDetailLocalData, action.payload.entity, lineIds, uncategorizedIncomeExpense, recommendationWithCOTByLineId);
|
|
397
|
+
// Release the per-line fetch flag for every line this fetch
|
|
398
|
+
// covered so the inline skeleton resolves and the page-level
|
|
399
|
+
// Save button can re-enable.
|
|
400
|
+
lineIds.forEach((lineId) => {
|
|
401
|
+
const lineItem = newLocalData.lineItemById[lineId];
|
|
402
|
+
if (lineItem != null) {
|
|
403
|
+
newLocalData.lineItemById[lineId] = {
|
|
404
|
+
...lineItem,
|
|
405
|
+
categoryClassRecommendationsFetchState: {
|
|
406
|
+
fetchState: 'Completed',
|
|
407
|
+
error: undefined,
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
});
|
|
375
412
|
draft.transactionDetailById[key] = {
|
|
376
413
|
...detail,
|
|
377
414
|
transactionDetailLocalData: newLocalData,
|
|
@@ -392,6 +429,84 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
392
429
|
};
|
|
393
430
|
},
|
|
394
431
|
},
|
|
432
|
+
// Start arm of the line-update recommendations fetch for the detail
|
|
433
|
+
// page. Flips covered lines to In-Progress; detail page has no
|
|
434
|
+
// checkbox, so no auto-uncheck side effect.
|
|
435
|
+
markCategoryClassRecommendationsInProgressForTransactionDetail: {
|
|
436
|
+
reducer(draft, action) {
|
|
437
|
+
const { transactionId, lineIds } = action.payload;
|
|
438
|
+
const key = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
439
|
+
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
440
|
+
if (detail != null) {
|
|
441
|
+
lineIds.forEach((lineId) => {
|
|
442
|
+
const lineItem = detail.transactionDetailLocalData.lineItemById[lineId];
|
|
443
|
+
if (lineItem != null) {
|
|
444
|
+
detail.transactionDetailLocalData.lineItemById[lineId] = {
|
|
445
|
+
...lineItem,
|
|
446
|
+
categoryClassRecommendationsFetchState: {
|
|
447
|
+
fetchState: 'In-Progress',
|
|
448
|
+
error: undefined,
|
|
449
|
+
},
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
prepare(transactionId, lineIds) {
|
|
456
|
+
return { payload: { transactionId, lineIds } };
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
// Completed arm. Used when the HTTP call succeeded but the server
|
|
460
|
+
// returned no per-line recommendations — still need to release the
|
|
461
|
+
// In-Progress flag.
|
|
462
|
+
markCategoryClassRecommendationsCompletedForTransactionDetail: {
|
|
463
|
+
reducer(draft, action) {
|
|
464
|
+
const { transactionId, lineIds } = action.payload;
|
|
465
|
+
const key = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
466
|
+
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
467
|
+
if (detail != null) {
|
|
468
|
+
lineIds.forEach((lineId) => {
|
|
469
|
+
const lineItem = detail.transactionDetailLocalData.lineItemById[lineId];
|
|
470
|
+
if (lineItem != null) {
|
|
471
|
+
detail.transactionDetailLocalData.lineItemById[lineId] = {
|
|
472
|
+
...lineItem,
|
|
473
|
+
categoryClassRecommendationsFetchState: {
|
|
474
|
+
fetchState: 'Completed',
|
|
475
|
+
error: undefined,
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
},
|
|
482
|
+
prepare(transactionId, lineIds) {
|
|
483
|
+
return { payload: { transactionId, lineIds } };
|
|
484
|
+
},
|
|
485
|
+
},
|
|
486
|
+
markCategoryClassRecommendationsFailureForTransactionDetail: {
|
|
487
|
+
reducer(draft, action) {
|
|
488
|
+
const { transactionId, lineIds, error } = action.payload;
|
|
489
|
+
const key = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
490
|
+
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
491
|
+
if (detail != null) {
|
|
492
|
+
lineIds.forEach((lineId) => {
|
|
493
|
+
const lineItem = detail.transactionDetailLocalData.lineItemById[lineId];
|
|
494
|
+
if (lineItem != null) {
|
|
495
|
+
detail.transactionDetailLocalData.lineItemById[lineId] = {
|
|
496
|
+
...lineItem,
|
|
497
|
+
categoryClassRecommendationsFetchState: {
|
|
498
|
+
fetchState: 'Error',
|
|
499
|
+
error,
|
|
500
|
+
},
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
prepare(transactionId, lineIds, error) {
|
|
507
|
+
return { payload: { transactionId, lineIds, error } };
|
|
508
|
+
},
|
|
509
|
+
},
|
|
395
510
|
removeEntityRecommendationForLineIdForTransactionDetail: {
|
|
396
511
|
reducer(draft, action) {
|
|
397
512
|
const { transaction, lineId } = action.payload;
|
|
@@ -663,7 +778,7 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
663
778
|
},
|
|
664
779
|
},
|
|
665
780
|
});
|
|
666
|
-
_a = transactionDetail.actions, exports.downloadAccountingProviderAttachment = _a.downloadAccountingProviderAttachment, exports.downloadAccountingProviderAttachmentSuccess = _a.downloadAccountingProviderAttachmentSuccess, exports.downloadAccountingProviderAttachmentFailure = _a.downloadAccountingProviderAttachmentFailure, exports.fetchTransactionDetail = _a.fetchTransactionDetail, exports.updateTransactionDetailFetchState = _a.updateTransactionDetailFetchState, exports.removeTransactionDetail = _a.removeTransactionDetail, exports.clearTransactionDetail = _a.clearTransactionDetail, exports.uploadMissingAttachmentSuccess = _a.uploadMissingAttachmentSuccess, exports.updateTransactionDetail = _a.updateTransactionDetail, exports.updateTransactionDetailSaveStatus = _a.updateTransactionDetailSaveStatus, exports.clearTransactionDetailSaveStatus = _a.clearTransactionDetailSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.deleteTransactionAttachment = _a.deleteTransactionAttachment, exports.deleteTransactionAttachmentFailure = _a.deleteTransactionAttachmentFailure, exports.deleteTransactionAttachmentSuccess = _a.deleteTransactionAttachmentSuccess, exports.updateStatusForTransactionNotMiscategorizedUpdate = _a.updateStatusForTransactionNotMiscategorizedUpdate, exports.updateStatusConsolidatedSaveTransactionDetail = _a.updateStatusConsolidatedSaveTransactionDetail, exports.updateTransactionStateIfUpdateActionNotAllowed = _a.updateTransactionStateIfUpdateActionNotAllowed, exports.saveTransactionDetail = _a.saveTransactionDetail, exports.initializeTransactionDetailLocalData = _a.initializeTransactionDetailLocalData, exports.saveTransactionDetailLocalData = _a.saveTransactionDetailLocalData, exports.clearTransactionDetailLocalData = _a.clearTransactionDetailLocalData, exports.resetLineItemsCategoryClassInLocalData = _a.resetLineItemsCategoryClassInLocalData, exports.setAllLineItemsToCategoryClassInLocalData = _a.setAllLineItemsToCategoryClassInLocalData, exports.setAllLineItemsLocalDataIsUpdateAllChecked = _a.setAllLineItemsLocalDataIsUpdateAllChecked, exports.setEntityRecommendationForLineIdsForTransactionDetail = _a.setEntityRecommendationForLineIdsForTransactionDetail, exports.removeEntityRecommendationForLineIdForTransactionDetail = _a.removeEntityRecommendationForLineIdForTransactionDetail, exports.updateSelectedVendor = _a.updateSelectedVendor, exports.updateSelectedCustomer = _a.updateSelectedCustomer, exports.resetVendor = _a.resetVendor, exports.resetSelectedCustomer = _a.resetSelectedCustomer, exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = _a.updateLocalDataWithTransactionsUpdateWithVendorCheckbox, exports.updateVendorToAllLineItems = _a.updateVendorToAllLineItems, exports.resetAllLineItemsToVendor = _a.resetAllLineItemsToVendor, exports.updateLatestSelectedEntity = _a.updateLatestSelectedEntity, exports.updateVendorBulkRecommendationsFetchStatus = _a.updateVendorBulkRecommendationsFetchStatus, exports.setIsVendorUpdateAllChecked = _a.setIsVendorUpdateAllChecked;
|
|
781
|
+
_a = transactionDetail.actions, exports.downloadAccountingProviderAttachment = _a.downloadAccountingProviderAttachment, exports.downloadAccountingProviderAttachmentSuccess = _a.downloadAccountingProviderAttachmentSuccess, exports.downloadAccountingProviderAttachmentFailure = _a.downloadAccountingProviderAttachmentFailure, exports.fetchTransactionDetail = _a.fetchTransactionDetail, exports.updateTransactionDetailFetchState = _a.updateTransactionDetailFetchState, exports.removeTransactionDetail = _a.removeTransactionDetail, exports.clearTransactionDetail = _a.clearTransactionDetail, exports.uploadMissingAttachmentSuccess = _a.uploadMissingAttachmentSuccess, exports.updateTransactionDetail = _a.updateTransactionDetail, exports.updateTransactionDetailSaveStatus = _a.updateTransactionDetailSaveStatus, exports.clearTransactionDetailSaveStatus = _a.clearTransactionDetailSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.deleteTransactionAttachment = _a.deleteTransactionAttachment, exports.deleteTransactionAttachmentFailure = _a.deleteTransactionAttachmentFailure, exports.deleteTransactionAttachmentSuccess = _a.deleteTransactionAttachmentSuccess, exports.updateStatusForTransactionNotMiscategorizedUpdate = _a.updateStatusForTransactionNotMiscategorizedUpdate, exports.updateStatusConsolidatedSaveTransactionDetail = _a.updateStatusConsolidatedSaveTransactionDetail, exports.updateTransactionStateIfUpdateActionNotAllowed = _a.updateTransactionStateIfUpdateActionNotAllowed, exports.saveTransactionDetail = _a.saveTransactionDetail, exports.initializeTransactionDetailLocalData = _a.initializeTransactionDetailLocalData, exports.saveTransactionDetailLocalData = _a.saveTransactionDetailLocalData, exports.clearTransactionDetailLocalData = _a.clearTransactionDetailLocalData, exports.resetLineItemsCategoryClassInLocalData = _a.resetLineItemsCategoryClassInLocalData, exports.setAllLineItemsToCategoryClassInLocalData = _a.setAllLineItemsToCategoryClassInLocalData, exports.setAllLineItemsLocalDataIsUpdateAllChecked = _a.setAllLineItemsLocalDataIsUpdateAllChecked, exports.setEntityRecommendationForLineIdsForTransactionDetail = _a.setEntityRecommendationForLineIdsForTransactionDetail, exports.markCategoryClassRecommendationsInProgressForTransactionDetail = _a.markCategoryClassRecommendationsInProgressForTransactionDetail, exports.markCategoryClassRecommendationsCompletedForTransactionDetail = _a.markCategoryClassRecommendationsCompletedForTransactionDetail, exports.markCategoryClassRecommendationsFailureForTransactionDetail = _a.markCategoryClassRecommendationsFailureForTransactionDetail, exports.removeEntityRecommendationForLineIdForTransactionDetail = _a.removeEntityRecommendationForLineIdForTransactionDetail, exports.updateSelectedVendor = _a.updateSelectedVendor, exports.updateSelectedCustomer = _a.updateSelectedCustomer, exports.resetVendor = _a.resetVendor, exports.resetSelectedCustomer = _a.resetSelectedCustomer, exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = _a.updateLocalDataWithTransactionsUpdateWithVendorCheckbox, exports.updateVendorToAllLineItems = _a.updateVendorToAllLineItems, exports.resetAllLineItemsToVendor = _a.resetAllLineItemsToVendor, exports.updateLatestSelectedEntity = _a.updateLatestSelectedEntity, exports.updateVendorBulkRecommendationsFetchStatus = _a.updateVendorBulkRecommendationsFetchStatus, exports.setIsVendorUpdateAllChecked = _a.setIsVendorUpdateAllChecked;
|
|
667
782
|
exports.default = transactionDetail.reducer;
|
|
668
783
|
function getUpdatedEntityLocalData(detail, updates, entity, resetRecommendations, type) {
|
|
669
784
|
const key = type === 'customer' ? 'customerUpdates' : 'vendorUpdates';
|
|
@@ -18,6 +18,7 @@ export interface TransactionDetailReport extends SelectorView {
|
|
|
18
18
|
classHierarchyList: NestedClassHierarchyForReport[];
|
|
19
19
|
classList: ClassListSelectorView;
|
|
20
20
|
deleteStatusByAttachmentName: Record<string, FetchStateAndError>;
|
|
21
|
+
hasInFlightCategoryClassRecommendations: boolean;
|
|
21
22
|
isAccountingClassesEnabled: boolean;
|
|
22
23
|
isAccountingProjectsEnabled: boolean;
|
|
23
24
|
linkedTransactions: SupportedTransactionWithCOT[];
|
|
@@ -30,6 +31,7 @@ export interface TransactionDetailReport extends SelectorView {
|
|
|
30
31
|
export interface VendorDetailsView extends SelectorView {
|
|
31
32
|
vendors: Vendor[];
|
|
32
33
|
}
|
|
34
|
+
export declare const getDetailInFlightRecommendations: (state: RootState, transactionId: TransactionID) => boolean;
|
|
33
35
|
export declare const getTransactionDetail: (state: RootState, transactionId: TransactionID, fetchLinkedTransactions?: boolean) => TransactionDetailReport;
|
|
34
36
|
export declare function getTransactionDetailForTransaction(rootState: RootState, transactionId: TransactionID): TransactionDetailReport | undefined;
|
|
35
37
|
export declare const getInitialUpdatablePeriodsForTransactionRecommendations: (companyIncorporationDate?: ZeniDate, bookCloseDate?: ZeniDate) => {
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getInitialUpdatablePeriodsForTransactionRecommendations = exports.getTransactionDetail = void 0;
|
|
6
|
+
exports.getInitialUpdatablePeriodsForTransactionRecommendations = exports.getTransactionDetail = exports.getDetailInFlightRecommendations = void 0;
|
|
7
7
|
exports.getTransactionDetailForTransaction = getTransactionDetailForTransaction;
|
|
8
8
|
const get_1 = __importDefault(require("lodash/get"));
|
|
9
9
|
const reduceFetchState_1 = require("../../commonStateTypes/reduceFetchState");
|
|
@@ -17,6 +17,27 @@ const accountListSelector_1 = require("../accountList/accountListSelector");
|
|
|
17
17
|
const classListSelector_1 = require("../classList/classListSelector");
|
|
18
18
|
const projectListSelector_1 = require("../projectList/projectListSelector");
|
|
19
19
|
const transactionDetailState_1 = require("./transactionDetailState");
|
|
20
|
+
// "Any line on this transaction is fetching category/class recommendations?"
|
|
21
|
+
// Inlined as a plain function because the upstream selector
|
|
22
|
+
// `getTransactionDetail` is also un-memoized and the iteration is O(lines)
|
|
23
|
+
// — typically <10. Exported standalone so consumers that only need the
|
|
24
|
+
// flag (e.g. footer save-disable) can avoid materializing the whole
|
|
25
|
+
// detail report.
|
|
26
|
+
const getDetailInFlightRecommendations = (state, transactionId) => {
|
|
27
|
+
const detailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
28
|
+
const detail = (0, get_1.default)(state.transactionDetailState.transactionDetailById, detailKey, undefined);
|
|
29
|
+
if (detail == null) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
for (const lineItem of Object.values(detail.transactionDetailLocalData.lineItemById)) {
|
|
33
|
+
if (lineItem.categoryClassRecommendationsFetchState?.fetchState ===
|
|
34
|
+
'In-Progress') {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
};
|
|
40
|
+
exports.getDetailInFlightRecommendations = getDetailInFlightRecommendations;
|
|
20
41
|
const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
|
|
21
42
|
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, projectState, projectListState, } = state;
|
|
22
43
|
const detailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
@@ -85,6 +106,7 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
|
|
|
85
106
|
: [];
|
|
86
107
|
const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
|
|
87
108
|
const vendors = (0, vendorSelector_1.getVendorsByVendorIds)(vendorState, vendorListState.vendorIds);
|
|
109
|
+
const hasInFlightCategoryClassRecommendations = (0, exports.getDetailInFlightRecommendations)(state, transactionId);
|
|
88
110
|
return {
|
|
89
111
|
reportId: 'transaction_detail',
|
|
90
112
|
reportTitle: 'Transaction Detail',
|
|
@@ -100,6 +122,7 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
|
|
|
100
122
|
classHierarchyList,
|
|
101
123
|
accountsHierarchyList,
|
|
102
124
|
classList: classList,
|
|
125
|
+
hasInFlightCategoryClassRecommendations,
|
|
103
126
|
isAccountingClassesEnabled,
|
|
104
127
|
isAccountingProjectsEnabled,
|
|
105
128
|
projectList,
|
|
@@ -14,6 +14,7 @@ export interface TransactionDetailLineItemData extends TransactionLineBase {
|
|
|
14
14
|
isClassMiscategorized: boolean;
|
|
15
15
|
account?: AccountBase;
|
|
16
16
|
billable?: BillableStatus;
|
|
17
|
+
categoryClassRecommendationsFetchState?: FetchStateAndError;
|
|
17
18
|
class?: ClassBase;
|
|
18
19
|
customer?: CustomerBase;
|
|
19
20
|
isCategoryUpdateSelected?: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeniai/client-epic-state",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.75",
|
|
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",
|