@zeniai/client-epic-state 4.19.39 → 4.19.40-betaML1
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/esm/index.js +2 -2
- package/lib/esm/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js +1 -0
- package/lib/esm/view/commonVendorView/transactionVendorView/transactionVendorViewReducer.js +2 -1
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js +5 -3
- package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +27 -0
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +65 -2
- package/lib/esm/view/transactionDetail/epics/saveTransactionDetailEpic.js +2 -2
- package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +11 -2
- package/lib/esm/view/transactionDetail/transactionDetailReducer.js +2 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +30 -29
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js +1 -0
- package/lib/view/commonVendorView/transactionVendorView/transactionVendorViewReducer.d.ts +2 -1
- package/lib/view/commonVendorView/transactionVendorView/transactionVendorViewReducer.js +2 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.d.ts +2 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js +5 -3
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +10 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +30 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +7 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +65 -2
- package/lib/view/transactionDetail/epics/saveTransactionDetailEpic.js +2 -2
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.d.ts +3 -2
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +10 -1
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +3 -1
- package/lib/view/transactionDetail/transactionDetailReducer.js +2 -1
- package/package.json +1 -1
|
@@ -108,6 +108,7 @@ const saveTransactionVendorEpic = (actions$, state$, zeniAPI) => actions$.pipe((
|
|
|
108
108
|
transactionId: action.payload.transactionId,
|
|
109
109
|
isExpenseAutomationEnabled: action.payload.isExpenseAutomationEnabled,
|
|
110
110
|
cotTransactionTracking: [], // We don't need to pass COT tracking for vendor save
|
|
111
|
+
isUncategorizedExpenseCategoryEnabled: action.payload.isUncategorizedExpenseCategoryEnabled,
|
|
111
112
|
}));
|
|
112
113
|
}
|
|
113
114
|
return (0, rxjs_1.from)(actions);
|
|
@@ -6,11 +6,12 @@ export declare const initialVendorDetailLocalData: TransactionVendorLocalData;
|
|
|
6
6
|
export declare const initialState: TransactionVendorViewState;
|
|
7
7
|
export declare const updateVendorSaveStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
8
8
|
vendorId?: ID;
|
|
9
|
-
}, "transactionVendorView/updateVendorSaveStatus">, saveTransactionVendor: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId?: TransactionID | undefined, vendorId?: string | undefined, saveTransaction?: boolean | undefined, isExpenseAutomationEnabled?: any], {
|
|
9
|
+
}, "transactionVendorView/updateVendorSaveStatus">, saveTransactionVendor: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId?: TransactionID | undefined, vendorId?: string | undefined, saveTransaction?: boolean | undefined, isExpenseAutomationEnabled?: any, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
|
|
10
10
|
vendorId: string | undefined;
|
|
11
11
|
transactionId: TransactionID | undefined;
|
|
12
12
|
saveTransaction: boolean | undefined;
|
|
13
13
|
isExpenseAutomationEnabled: any;
|
|
14
|
+
isUncategorizedExpenseCategoryEnabled: boolean | undefined;
|
|
14
15
|
}, "transactionVendorView/saveTransactionVendor", never, never>, saveTransactionVendorSuccessOrFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[fetchState: FetchState, vendorId?: string | undefined, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
|
|
15
16
|
fetchState: FetchState;
|
|
16
17
|
vendorId: string | undefined;
|
|
@@ -48,13 +48,14 @@ const transactionVendorView = (0, toolkit_1.createSlice)({
|
|
|
48
48
|
draft.newVendorState.saveStatus.error = undefined;
|
|
49
49
|
}
|
|
50
50
|
},
|
|
51
|
-
prepare(transactionId, vendorId, saveTransaction, isExpenseAutomationEnabled = false) {
|
|
51
|
+
prepare(transactionId, vendorId, saveTransaction, isExpenseAutomationEnabled = false, isUncategorizedExpenseCategoryEnabled) {
|
|
52
52
|
return {
|
|
53
53
|
payload: {
|
|
54
54
|
vendorId,
|
|
55
55
|
transactionId,
|
|
56
56
|
saveTransaction,
|
|
57
57
|
isExpenseAutomationEnabled,
|
|
58
|
+
isUncategorizedExpenseCategoryEnabled,
|
|
58
59
|
},
|
|
59
60
|
};
|
|
60
61
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AccountType } from '../../../../entity/account/accountState';
|
|
1
2
|
import { UploadStatementDocumentAIPayload } from '../../payload/reconciliationPayload';
|
|
2
3
|
export interface AuthParams {
|
|
3
4
|
sessionId: string;
|
|
@@ -9,4 +10,4 @@ export interface AuthParamsPayload {
|
|
|
9
10
|
zeni_tenant_id: string;
|
|
10
11
|
zeni_user_id: string;
|
|
11
12
|
}
|
|
12
|
-
export default function uploadAccountStatementIntoDocumentAI(fileBlob: Blob, authParams: AuthParams): Promise<UploadStatementDocumentAIPayload | undefined>;
|
|
13
|
+
export default function uploadAccountStatementIntoDocumentAI(accountType: AccountType, fileBlob: Blob, authParams: AuthParams): Promise<UploadStatementDocumentAIPayload | undefined>;
|
package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js
CHANGED
|
@@ -6,13 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.default = uploadAccountStatementIntoDocumentAI;
|
|
7
7
|
const cross_fetch_1 = __importDefault(require("cross-fetch"));
|
|
8
8
|
const init_1 = require("../../../../init");
|
|
9
|
-
async function uploadAccountStatementIntoDocumentAI(fileBlob, authParams) {
|
|
9
|
+
async function uploadAccountStatementIntoDocumentAI(accountType, fileBlob, authParams) {
|
|
10
10
|
let statementUpload;
|
|
11
|
-
const urlEndPoint = `${init_1.zeniAPI.apiEndPoints.documentAIMicroServiceBaseUrl}/1.0/processors/
|
|
11
|
+
const urlEndPoint = `${init_1.zeniAPI.apiEndPoints.documentAIMicroServiceBaseUrl}/1.0/processors/statement`;
|
|
12
12
|
const data = new FormData();
|
|
13
13
|
data.append('attachment_file_0', fileBlob);
|
|
14
14
|
const attachment_json = JSON.stringify({
|
|
15
|
-
document_type: '
|
|
15
|
+
document_type: accountType === 'credit_card'
|
|
16
|
+
? 'reconciliation_card_statement_upload'
|
|
17
|
+
: 'reconciliation_bank_statement_upload',
|
|
16
18
|
purpose_id: 'reconciliation',
|
|
17
19
|
});
|
|
18
20
|
data.append('attachment_json_0', attachment_json);
|
package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts
CHANGED
|
@@ -8,6 +8,16 @@ import { SupportedTransactionPayload, SupportedTransactionWithCOT } from '../../
|
|
|
8
8
|
import { UncategorizedAccounts } from '../../accountList/accountListSelector';
|
|
9
9
|
import { TransactionReviewLocalDataSelectorView } from '../selectorTypes/transactionsViewSelectorTypes';
|
|
10
10
|
import { TabSpecificLineItems, TransactionCategorizationLineItemData, TransactionReviewLocalData, TransactionsTab, TransactionsTabViewState } from '../types/transactionsViewState';
|
|
11
|
+
/**
|
|
12
|
+
* Extracts line IDs with `pending_review` categorization status from a transaction,
|
|
13
|
+
* preserving the transaction's original line order.
|
|
14
|
+
*/
|
|
15
|
+
export declare const getPendingReviewLineIdsFromTransaction: (transaction: SupportedTransactionWithCOT) => string[];
|
|
16
|
+
/**
|
|
17
|
+
* Removes a transaction from a tab view's local data and membership lists.
|
|
18
|
+
* Intended for use within Immer reducer drafts (mutates in place).
|
|
19
|
+
*/
|
|
20
|
+
export declare const removeTransactionFromTabView: (tabView: TransactionsTabViewState, transactionId: ID) => void;
|
|
11
21
|
export declare const MAX_SELECTION_LIMIT = 5;
|
|
12
22
|
export declare const toTransactionDetailLocalData: (transaction: SupportedTransactionWithCOT, selectedTab: TransactionsTab, lineItemsByTransactionIds: string[], uncategorizedIncomeExpense: UncategorizedAccounts, isUncategorizedExpenseCategoryEnabled?: boolean) => TransactionReviewLocalData;
|
|
13
23
|
export declare const toSetAllLineItemsToCategoryClass: (draft: TransactionsTabViewState, transaction: SupportedTransactionWithCOT, transactionId: ID, transactionLineId: ID, transactionDetailLocalData: TransactionReviewLocalData, updatedItem: "category" | "class", uncategorizedAccounts: UncategorizedAccounts, selectedTab: TransactionsTab, vendorId?: ID, customerId?: ID, selectedAccount?: AccountBase, selectedClassBase?: ClassBase, isUncategorizedExpenseCategoryEnabled?: boolean) => {
|
|
@@ -1,11 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasTransactionLocalDataChanges = exports.isAnyItemWithUncategorizedExpenseAccount = exports.getSnackbarMessageForTransactionReview = exports.mergeTabSpecificLineItems = exports.getLineItemsByTransactionIdsFromLocalData = exports.getLineItemsByTransactionsIdsFromResponse = exports.checkIfAllLineItemsAreCategoryClassFilled = exports.setEntityRecommendationForLineIdInLocalData = exports.toSetAllLineItemsToCategoryClass = exports.toTransactionDetailLocalData = exports.MAX_SELECTION_LIMIT = void 0;
|
|
3
|
+
exports.hasTransactionLocalDataChanges = exports.isAnyItemWithUncategorizedExpenseAccount = exports.getSnackbarMessageForTransactionReview = exports.mergeTabSpecificLineItems = exports.getLineItemsByTransactionIdsFromLocalData = exports.getLineItemsByTransactionsIdsFromResponse = exports.checkIfAllLineItemsAreCategoryClassFilled = exports.setEntityRecommendationForLineIdInLocalData = exports.toSetAllLineItemsToCategoryClass = exports.toTransactionDetailLocalData = exports.MAX_SELECTION_LIMIT = exports.removeTransactionFromTabView = exports.getPendingReviewLineIdsFromTransaction = void 0;
|
|
4
4
|
const vendorTransaction_1 = require("../../../entity/transaction/stateTypes/vendorTransaction");
|
|
5
5
|
const transactionDetailLocalDataHelper_1 = require("../../transactionDetail/transactionDetailLocalDataHelper");
|
|
6
6
|
const transactionDetailLocalDataHelper_2 = require("../../transactionDetail/transactionDetailLocalDataHelper");
|
|
7
7
|
const transactionsViewState_1 = require("../types/transactionsViewState");
|
|
8
8
|
const helpers_1 = require("./helpers");
|
|
9
|
+
/**
|
|
10
|
+
* Extracts line IDs with `pending_review` categorization status from a transaction,
|
|
11
|
+
* preserving the transaction's original line order.
|
|
12
|
+
*/
|
|
13
|
+
const getPendingReviewLineIdsFromTransaction = (transaction) => {
|
|
14
|
+
if (transaction.lines == null) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
return transaction.lines
|
|
18
|
+
.filter((line) => line.categorizationStatus === 'pending_review')
|
|
19
|
+
.map((line) => line.id);
|
|
20
|
+
};
|
|
21
|
+
exports.getPendingReviewLineIdsFromTransaction = getPendingReviewLineIdsFromTransaction;
|
|
22
|
+
/**
|
|
23
|
+
* Removes a transaction from a tab view's local data and membership lists.
|
|
24
|
+
* Intended for use within Immer reducer drafts (mutates in place).
|
|
25
|
+
*/
|
|
26
|
+
const removeTransactionFromTabView = (tabView, transactionId) => {
|
|
27
|
+
delete tabView.transactionReviewLocalDataById[transactionId];
|
|
28
|
+
for (const periodId of Object.keys(tabView.transactionIdsBySelectedPeriod)) {
|
|
29
|
+
tabView.transactionIdsBySelectedPeriod[periodId] =
|
|
30
|
+
tabView.transactionIdsBySelectedPeriod[periodId].filter((id) => id !== transactionId);
|
|
31
|
+
}
|
|
32
|
+
tabView.selectedCheckBoxTransactionIds =
|
|
33
|
+
tabView.selectedCheckBoxTransactionIds.filter((id) => id !== transactionId);
|
|
34
|
+
tabView.transactionIdsWithUnsavedData =
|
|
35
|
+
tabView.transactionIdsWithUnsavedData.filter((id) => id !== transactionId);
|
|
36
|
+
};
|
|
37
|
+
exports.removeTransactionFromTabView = removeTransactionFromTabView;
|
|
9
38
|
exports.MAX_SELECTION_LIMIT = 5;
|
|
10
39
|
const toTransactionDetailLocalData = (transaction, selectedTab, lineItemsByTransactionIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) => {
|
|
11
40
|
const transactionLocal = {
|
|
@@ -149,6 +149,12 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
|
|
|
149
149
|
lineId: ID;
|
|
150
150
|
selectedTab: TransactionsTab;
|
|
151
151
|
transactionId: ID;
|
|
152
|
-
}, "expenseAutomationTransactionsView/updateSelectedTransactionId"
|
|
152
|
+
}, "expenseAutomationTransactionsView/updateSelectedTransactionId">, syncTransactionCategorizationFromDetailSave: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, updatedTransaction: SupportedTransactionWithCOT, pendingReviewLineIds: string[], uncategorizedIncomeExpense: UncategorizedAccounts, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
|
|
153
|
+
transactionId: TransactionID;
|
|
154
|
+
updatedTransaction: SupportedTransactionWithCOT;
|
|
155
|
+
pendingReviewLineIds: string[];
|
|
156
|
+
uncategorizedIncomeExpense: UncategorizedAccounts;
|
|
157
|
+
isUncategorizedExpenseCategoryEnabled: boolean | undefined;
|
|
158
|
+
}, "expenseAutomationTransactionsView/syncTransactionCategorizationFromDetailSave", never, never>;
|
|
153
159
|
declare const _default: import("redux").Reducer<TransactionsViewState>;
|
|
154
160
|
export default _default;
|
|
@@ -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.updateSelectedTransactionId = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
|
|
7
|
+
exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
10
10
|
const uniq_1 = __importDefault(require("lodash/uniq"));
|
|
@@ -706,7 +706,70 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
|
|
|
706
706
|
clearExpenseAutomationTransactionsView(draft) {
|
|
707
707
|
Object.assign(draft, exports.initialState);
|
|
708
708
|
},
|
|
709
|
+
syncTransactionCategorizationFromDetailSave: {
|
|
710
|
+
prepare(transactionId, updatedTransaction, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) {
|
|
711
|
+
return {
|
|
712
|
+
payload: {
|
|
713
|
+
transactionId,
|
|
714
|
+
updatedTransaction,
|
|
715
|
+
pendingReviewLineIds,
|
|
716
|
+
uncategorizedIncomeExpense,
|
|
717
|
+
isUncategorizedExpenseCategoryEnabled,
|
|
718
|
+
},
|
|
719
|
+
};
|
|
720
|
+
},
|
|
721
|
+
reducer(draft, action) {
|
|
722
|
+
const { transactionId, updatedTransaction, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
723
|
+
const txnId = transactionId.id;
|
|
724
|
+
const reviewTabView = draft.transactionCategorizationView.review;
|
|
725
|
+
const autoTabView = draft.transactionCategorizationView.autoCategorized;
|
|
726
|
+
const existsInReview = reviewTabView.transactionReviewLocalDataById[txnId] != null;
|
|
727
|
+
const existsInAuto = autoTabView.transactionReviewLocalDataById[txnId] != null;
|
|
728
|
+
if (!existsInReview && !existsInAuto) {
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
const allReviewed = pendingReviewLineIds.length === 0;
|
|
732
|
+
if (allReviewed) {
|
|
733
|
+
if (existsInReview) {
|
|
734
|
+
(0, transactionCategorizationLocalDataHelper_1.removeTransactionFromTabView)(reviewTabView, txnId);
|
|
735
|
+
}
|
|
736
|
+
if (existsInAuto) {
|
|
737
|
+
(0, transactionCategorizationLocalDataHelper_1.removeTransactionFromTabView)(autoTabView, txnId);
|
|
738
|
+
}
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
// Partially reviewed — auto-only: remove transaction from auto tab entirely
|
|
742
|
+
// since pending_review lines don't belong in auto tab and review_complete lines are done
|
|
743
|
+
const isAutoOnly = existsInAuto && !existsInReview;
|
|
744
|
+
if (isAutoOnly) {
|
|
745
|
+
(0, transactionCategorizationLocalDataHelper_1.removeTransactionFromTabView)(autoTabView, txnId);
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
// Review-only or both-tabs: rebuild review tab local data with pending review lines
|
|
749
|
+
if (existsInReview) {
|
|
750
|
+
const newLocalData = (0, transactionCategorizationLocalDataHelper_1.toTransactionDetailLocalData)(updatedTransaction, 'review', pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled);
|
|
751
|
+
reviewTabView.transactionReviewLocalDataById[txnId] = {
|
|
752
|
+
transactionId: txnId,
|
|
753
|
+
transactionReviewLocalData: {
|
|
754
|
+
...newLocalData,
|
|
755
|
+
sortedLineItems: updatedTransaction.lines?.map((l) => l.id) ?? [],
|
|
756
|
+
tabSpecificLineItems: {
|
|
757
|
+
review: pendingReviewLineIds,
|
|
758
|
+
},
|
|
759
|
+
},
|
|
760
|
+
};
|
|
761
|
+
reviewTabView.selectedCheckBoxTransactionIds =
|
|
762
|
+
reviewTabView.selectedCheckBoxTransactionIds.filter((id) => id !== txnId);
|
|
763
|
+
reviewTabView.transactionIdsWithUnsavedData =
|
|
764
|
+
reviewTabView.transactionIdsWithUnsavedData.filter((id) => id !== txnId);
|
|
765
|
+
}
|
|
766
|
+
// If both tabs, remove from auto tab entirely
|
|
767
|
+
if (existsInAuto) {
|
|
768
|
+
(0, transactionCategorizationLocalDataHelper_1.removeTransactionFromTabView)(autoTabView, txnId);
|
|
769
|
+
}
|
|
770
|
+
},
|
|
771
|
+
},
|
|
709
772
|
},
|
|
710
773
|
});
|
|
711
|
-
_a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId;
|
|
774
|
+
_a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId, exports.syncTransactionCategorizationFromDetailSave = _a.syncTransactionCategorizationFromDetailSave;
|
|
712
775
|
exports.default = expenseAutomationTransactionsView.reducer;
|
|
@@ -12,7 +12,7 @@ const transactionDetailReducer_1 = require("../transactionDetailReducer");
|
|
|
12
12
|
const transactionDetailState_1 = require("../transactionDetailState");
|
|
13
13
|
const saveTransactionHelper_1 = require("./saveTransactionHelper");
|
|
14
14
|
const saveTransactionDetailEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionDetailReducer_1.saveTransactionDetail.match), (0, operators_1.mergeMap)((action) => {
|
|
15
|
-
const { transactionId, cotTransactionTracking, isExpenseAutomationEnabled, } = action.payload;
|
|
15
|
+
const { transactionId, cotTransactionTracking, isExpenseAutomationEnabled, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
16
16
|
const fetchActions = [];
|
|
17
17
|
const transactionDetailState = state$.value.transactionDetailState;
|
|
18
18
|
const transactionState = state$.value.transactionState;
|
|
@@ -22,7 +22,7 @@ const saveTransactionDetailEpic = (actions$, state$) => actions$.pipe((0, operat
|
|
|
22
22
|
if (detail != null && transaction != null) {
|
|
23
23
|
const localData = detail.transactionDetailLocalData;
|
|
24
24
|
const transactionSaveUpdates = (0, saveTransactionHelper_1.toTransactionUpdatesFromTransactionDetailLocalData)(localData, transaction, isExpenseAutomationEnabled);
|
|
25
|
-
fetchActions.push((0, transactionDetailReducer_1.updateTransactionDetail)(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking));
|
|
25
|
+
fetchActions.push((0, transactionDetailReducer_1.updateTransactionDetail)(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking, isUncategorizedExpenseCategoryEnabled));
|
|
26
26
|
return (0, rxjs_1.from)(fetchActions);
|
|
27
27
|
}
|
|
28
28
|
return (0, rxjs_1.from)(fetchActions);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
2
|
import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
|
|
3
|
-
import { updateTransaction } from '../../../entity/transaction/transactionReducer';
|
|
3
|
+
import { updateTransaction, updateTransactions } from '../../../entity/transaction/transactionReducer';
|
|
4
4
|
import { updateVendors } from '../../../entity/vendor/vendorReducer';
|
|
5
5
|
import { RootState } from '../../../reducer';
|
|
6
6
|
import { ZeniAPI } from '../../../zeniAPI';
|
|
7
|
+
import { syncTransactionCategorizationFromDetailSave } from '../../expenseAutomationView/reducers/transactionsViewReducer';
|
|
7
8
|
import { initializeTransactionDetailLocalData, markTransactionAsNotMiscategorized, updateStatusConsolidatedSaveTransactionDetail, updateTransactionDetail, updateTransactionDetailSaveStatus, updateTransactionStateIfUpdateActionNotAllowed } from '../transactionDetailReducer';
|
|
8
|
-
export type ActionType = ReturnType<typeof updateTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionStateIfUpdateActionNotAllowed> | ReturnType<typeof openSnackbar> | ReturnType<typeof updateTransactionDetailSaveStatus> | ReturnType<typeof updateStatusConsolidatedSaveTransactionDetail> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof updateVendors> | ReturnType<typeof markTransactionAsNotMiscategorized>;
|
|
9
|
+
export type ActionType = ReturnType<typeof updateTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactions> | ReturnType<typeof updateTransactionStateIfUpdateActionNotAllowed> | ReturnType<typeof openSnackbar> | ReturnType<typeof updateTransactionDetailSaveStatus> | ReturnType<typeof updateStatusConsolidatedSaveTransactionDetail> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof updateVendors> | ReturnType<typeof markTransactionAsNotMiscategorized> | ReturnType<typeof syncTransactionCategorizationFromDetailSave>;
|
|
9
10
|
export declare const updateTransactionDetailEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<ActionType>;
|
|
@@ -19,18 +19,21 @@ const otherTransaction_1 = require("../../../entity/transaction/stateTypes/other
|
|
|
19
19
|
const transactionType_1 = require("../../../entity/transaction/stateTypes/transactionType");
|
|
20
20
|
const vendorTransaction_1 = require("../../../entity/transaction/stateTypes/vendorTransaction");
|
|
21
21
|
const toSupportedTransaction_1 = __importDefault(require("../../../entity/transaction/toSupportedTransaction"));
|
|
22
|
+
const transactionHelper_1 = require("../../../entity/transaction/transactionHelper");
|
|
22
23
|
const transactionReducer_1 = require("../../../entity/transaction/transactionReducer");
|
|
23
24
|
const transactionSelector_1 = require("../../../entity/transaction/transactionSelector");
|
|
24
25
|
const vendorReducer_1 = require("../../../entity/vendor/vendorReducer");
|
|
25
26
|
const vendorSelector_1 = require("../../../entity/vendor/vendorSelector");
|
|
26
27
|
const responsePayload_1 = require("../../../responsePayload");
|
|
27
28
|
const accountListSelector_1 = require("../../accountList/accountListSelector");
|
|
29
|
+
const transactionCategorizationLocalDataHelper_1 = require("../../expenseAutomationView/helpers/transactionCategorizationLocalDataHelper");
|
|
30
|
+
const transactionsViewReducer_1 = require("../../expenseAutomationView/reducers/transactionsViewReducer");
|
|
28
31
|
const transactionDetailReducer_1 = require("../transactionDetailReducer");
|
|
29
32
|
const transactionDetailState_1 = require("../transactionDetailState");
|
|
30
33
|
const saveTransactionHelper_1 = require("./saveTransactionHelper");
|
|
31
34
|
const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionDetailReducer_1.updateTransactionDetail.match), (0, operators_1.mergeMap)((action) => {
|
|
32
35
|
const { transactionState, vendorState, transactionDetailState } = state$.value;
|
|
33
|
-
const { cotTransactionTracking, transactionId, transactionSaveUpdates } = action.payload;
|
|
36
|
+
const { cotTransactionTracking, transactionId, transactionSaveUpdates, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
34
37
|
return zeniAPI
|
|
35
38
|
.putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/categorize`, preparePayload(transactionState, vendorState, transactionDetailState, transactionId, transactionSaveUpdates, cotTransactionTracking))
|
|
36
39
|
.pipe((0, operators_1.mergeMap)((response) => {
|
|
@@ -108,6 +111,12 @@ const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe
|
|
|
108
111
|
}));
|
|
109
112
|
}
|
|
110
113
|
}
|
|
114
|
+
// Sync transaction categorization list state from detail save
|
|
115
|
+
// Updates list-keyed canonical entity so the list selector reads fresh data
|
|
116
|
+
actions.push((0, transactionReducer_1.updateTransactions)([response.data.transaction], (value) => value.transaction_id, 'merge'));
|
|
117
|
+
const transactionWithCOT = (0, transactionHelper_1.getTransactionWithCOT)(transaction);
|
|
118
|
+
const pendingReviewLineIds = (0, transactionCategorizationLocalDataHelper_1.getPendingReviewLineIdsFromTransaction)(transactionWithCOT);
|
|
119
|
+
actions.push((0, transactionsViewReducer_1.syncTransactionCategorizationFromDetailSave)(transactionIdResp, transactionWithCOT, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled));
|
|
111
120
|
return (0, rxjs_1.from)(actions);
|
|
112
121
|
}
|
|
113
122
|
else if ((0, responsePayload_1.isActionNotAllowed)(response)) {
|
|
@@ -26,11 +26,12 @@ export declare const downloadAccountingProviderAttachment: import("@reduxjs/tool
|
|
|
26
26
|
payload: SupportedTransactionPayload;
|
|
27
27
|
}, "transactionDetail/uploadMissingAttachmentSuccess", never, {
|
|
28
28
|
updateType: UpdateType;
|
|
29
|
-
}>, updateTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, transactionSaveUpdates: TransactionSaveUpdates, isExpenseAutomationEnabled: boolean, cotTransactionTracking: COTTransactionTracking], {
|
|
29
|
+
}>, updateTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, transactionSaveUpdates: TransactionSaveUpdates, isExpenseAutomationEnabled: boolean, cotTransactionTracking: COTTransactionTracking, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
|
|
30
30
|
transactionId: TransactionID;
|
|
31
31
|
transactionSaveUpdates: TransactionSaveUpdates;
|
|
32
32
|
isExpenseAutomationEnabled: boolean;
|
|
33
33
|
cotTransactionTracking: COTTransactionTracking;
|
|
34
|
+
isUncategorizedExpenseCategoryEnabled: boolean | undefined;
|
|
34
35
|
}, "transactionDetail/updateTransactionDetail", never, never>, updateTransactionDetailSaveStatus: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, fetchState: FetchState, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
|
|
35
36
|
transactionId: TransactionID;
|
|
36
37
|
fetchState: FetchState;
|
|
@@ -64,6 +65,7 @@ export declare const downloadAccountingProviderAttachment: import("@reduxjs/tool
|
|
|
64
65
|
cotTransactionTracking: COTTransactionTracking;
|
|
65
66
|
isExpenseAutomationEnabled: boolean;
|
|
66
67
|
transactionId: TransactionID;
|
|
68
|
+
isUncategorizedExpenseCategoryEnabled?: boolean;
|
|
67
69
|
}, "transactionDetail/saveTransactionDetail">, initializeTransactionDetailLocalData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
68
70
|
transactionId: TransactionID;
|
|
69
71
|
customerId?: ID;
|
|
@@ -112,13 +112,14 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
},
|
|
115
|
-
prepare(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking) {
|
|
115
|
+
prepare(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking, isUncategorizedExpenseCategoryEnabled) {
|
|
116
116
|
return {
|
|
117
117
|
payload: {
|
|
118
118
|
transactionId,
|
|
119
119
|
transactionSaveUpdates,
|
|
120
120
|
isExpenseAutomationEnabled,
|
|
121
121
|
cotTransactionTracking,
|
|
122
|
+
isUncategorizedExpenseCategoryEnabled,
|
|
122
123
|
},
|
|
123
124
|
};
|
|
124
125
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeniai/client-epic-state",
|
|
3
|
-
"version": "4.19.
|
|
3
|
+
"version": "4.19.40-betaML1",
|
|
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",
|