@zeniai/client-epic-state 4.13.17 → 4.13.19

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 (73) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +1 -0
  3. package/lib/entity/toastNotification/epic/pushToastNotificationEpic.d.ts +1 -1
  4. package/lib/entity/transaction/payloadTypes/transactionLinePayload.d.ts +3 -1
  5. package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +6 -0
  6. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +2 -0
  7. package/lib/entity/transaction/payloadTypes/transactionPayload.js +3 -2
  8. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +5 -0
  9. package/lib/entity/transaction/stateTypes/transactionLine.js +9 -1
  10. package/lib/entity/transaction/stateTypes/transactionType.d.ts +1 -1
  11. package/lib/entity/transaction/stateTypes/transactionType.js +2 -1
  12. package/lib/entity/transaction/transactionReducer.d.ts +3 -1
  13. package/lib/entity/transaction/transactionReducer.js +8 -2
  14. package/lib/epic.d.ts +7 -1
  15. package/lib/epic.js +7 -1
  16. package/lib/index.d.ts +7 -2
  17. package/lib/index.js +47 -25
  18. package/lib/view/accountList/fetchAccountListEpic.js +1 -1
  19. package/lib/view/cardPayment/epic/addCardPaymentSourceEpic.d.ts +1 -1
  20. package/lib/view/cardPayment/epic/confirmCardSetupIntentEpic.d.ts +1 -1
  21. package/lib/view/cardPayment/epic/createCardSetupIntentEpic.d.ts +1 -1
  22. package/lib/view/cardPayment/epic/fetchPaymentSourcesEpic.d.ts +1 -1
  23. package/lib/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.d.ts +2 -1
  24. package/lib/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +8 -2
  25. package/lib/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.d.ts +2 -1
  26. package/lib/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.js +5 -3
  27. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.d.ts +8 -0
  28. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +67 -0
  29. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +8 -0
  30. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +38 -0
  31. package/lib/view/expenseAutomationView/epics/transactionCategorization/initializeTransactionCategorizationLocalDataEpic.d.ts +5 -0
  32. package/lib/view/expenseAutomationView/epics/transactionCategorization/initializeTransactionCategorizationLocalDataEpic.js +31 -0
  33. package/lib/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscatgorizedEpic.d.ts +8 -0
  34. package/lib/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscatgorizedEpic.js +56 -0
  35. package/lib/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.d.ts +5 -0
  36. package/lib/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.js +32 -0
  37. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.d.ts +6 -0
  38. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +164 -0
  39. package/lib/view/expenseAutomationView/expenseAutomationViewReducer.d.ts +3 -1
  40. package/lib/view/expenseAutomationView/expenseAutomationViewReducer.js +12 -2
  41. package/lib/view/expenseAutomationView/expenseAutomationViewSelector.js +14 -7
  42. package/lib/view/expenseAutomationView/expenseAutomationViewState.d.ts +2 -0
  43. package/lib/view/expenseAutomationView/helpers/saveTransactionHelper.d.ts +8 -0
  44. package/lib/view/expenseAutomationView/helpers/saveTransactionHelper.js +165 -0
  45. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +8 -0
  46. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +175 -0
  47. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +48 -0
  48. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.js +2 -0
  49. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +100 -2
  50. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +368 -10
  51. package/lib/view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes.d.ts +4 -0
  52. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +29 -0
  53. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.js +2 -0
  54. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +4 -0
  55. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +85 -0
  56. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +97 -6
  57. package/lib/view/expenseAutomationView/types/transactionsViewState.js +15 -2
  58. package/lib/view/people/changeZeniPersonRolesEpic.d.ts +1 -1
  59. package/lib/view/people/deletePersonEpic.d.ts +1 -1
  60. package/lib/view/people/invitePeopleEpic.d.ts +1 -1
  61. package/lib/view/people/inviteZeniPeopleEpic.d.ts +1 -1
  62. package/lib/view/people/resendInviteEpic.d.ts +1 -1
  63. package/lib/view/reviewCompanyView/reviewCompanyViewState.d.ts +1 -1
  64. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  65. package/lib/view/settingsView/epic/saveNotificationSettingsEpic.d.ts +1 -1
  66. package/lib/view/tagView/epics/createTagEpic.d.ts +1 -1
  67. package/lib/view/tagView/epics/deleteTagEpic.d.ts +1 -1
  68. package/lib/view/transactionDetail/epics/saveTransactionHelper.d.ts +8 -0
  69. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +11 -6
  70. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +2 -2
  71. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.d.ts +10 -0
  72. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +8 -7
  73. package/package.json +1 -1
@@ -10,11 +10,12 @@ const timePeriod_1 = require("../../../../commonStateTypes/timePeriod");
10
10
  const companyMonthEndReportViewReducer_1 = require("../../../companyMonthEndReportView/companyMonthEndReportViewReducer");
11
11
  const tenantSelector_1 = require("../../../../entity/tenant/tenantSelector");
12
12
  const jeSchedulesViewReducer_1 = require("../../reducers/jeSchedulesViewReducer");
13
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
13
14
  const refreshExpenseAutomationCurrentTabEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(expenseAutomationViewReducer_1.refreshExpenseAutomationCurrentTab.match), (0, operators_1.switchMap)(() => {
14
15
  const state = state$.value;
15
16
  const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state);
16
17
  const companyId = currentTenant.companyId;
17
- const { selectedPeriodByTenantId, currentSelectedView } = state.expenseAutomationViewState;
18
+ const { selectedPeriodByTenantId, currentSelectedView, selectedTransactionCategorizationTab, } = state.expenseAutomationViewState;
18
19
  const selectedPeriod = selectedPeriodByTenantId[currentTenant.tenantId];
19
20
  const period = (0, timePeriod_1.convertToPeriod)(selectedPeriod);
20
21
  const timePeriodStart = (0, timePeriod_1.toAbsoluteDay)(period.start);
@@ -48,8 +49,9 @@ const refreshExpenseAutomationCurrentTabEpic = (actions$, state$) => actions$.pi
48
49
  ]);
49
50
  case 'transaction_categorization':
50
51
  default:
51
- // TODO - Vivek - Add fetch state
52
- return (0, rxjs_1.from)([]);
52
+ return (0, rxjs_1.from)([
53
+ (0, transactionsViewReducer_1.fetchTransactionCategorizationView)(selectedTransactionCategorizationTab, { start: timePeriodStart, end: timePeriodEnd }, true, false, undefined, undefined, true),
54
+ ]);
53
55
  }
54
56
  }));
55
57
  exports.refreshExpenseAutomationCurrentTabEpic = refreshExpenseAutomationCurrentTabEpic;
@@ -0,0 +1,8 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateTransactions } from '../../../../entity/transaction/transactionReducer';
4
+ import { ZeniAPI } from '../../../../zeniAPI';
5
+ import { RootState } from '../../../../reducer';
6
+ import { fetchTransactionCategorization, initializeTransactionCategorizationViewLocalData, fetchTransactionCategorizationFailure, updateTransactionCategorizationUIState, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess } from '../../reducers/transactionsViewReducer';
7
+ export declare type ActionType = ReturnType<typeof fetchTransactionCategorization> | ReturnType<typeof updateTransactions> | ReturnType<typeof initializeTransactionCategorizationViewLocalData> | ReturnType<typeof fetchTransactionCategorizationFailure> | ReturnType<typeof updateTransactionCategorizationUIState> | ReturnType<typeof updateTotalCountForTransactionCategorization> | ReturnType<typeof fetchTransactionCategorizationSuccess>;
8
+ export declare const fetchTransactionCategorizationEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchTransactionCategorizationEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const transactionReducer_1 = require("../../../../entity/transaction/transactionReducer");
7
+ const responsePayload_1 = require("../../../../responsePayload");
8
+ const timePeriod_1 = require("../../../../commonStateTypes/timePeriod");
9
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
10
+ const transactionsViewState_1 = require("../../types/transactionsViewState");
11
+ const tenantSelector_1 = require("../../../../entity/tenant/tenantSelector");
12
+ const fetchTransactionCategorizationEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.fetchTransactionCategorization.match), (0, operators_1.switchMap)((action) => {
13
+ const { expenseAutomationViewState: { selectedPeriodByTenantId }, expenseAutomationTransactionsViewState, } = state$.value;
14
+ const { period, keepExistingListItems, selectedTab, refreshViewInBackground, } = action.payload;
15
+ const uiState = expenseAutomationTransactionsViewState[selectedTab].uiState;
16
+ const { pageToken, sortOrder, sortKey } = uiState;
17
+ const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state$.value);
18
+ const selectedPeriod = selectedPeriodByTenantId[currentTenant.tenantId];
19
+ const queryParam = {
20
+ start_date: (0, timePeriod_1.toString)(period.start),
21
+ end_date: (0, timePeriod_1.toString)(period.end),
22
+ auto_categorized: selectedTab === 'autoCategorized',
23
+ sort_by: (0, transactionsViewState_1.toTransactionsSortKey)(sortKey),
24
+ sort_order: sortOrder === 'ascending' ? 'asc' : 'desc',
25
+ page_token: pageToken,
26
+ page_size: 10,
27
+ search_text: uiState.searchString,
28
+ };
29
+ return zeniAPI
30
+ .getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`)
31
+ .pipe((0, operators_1.mergeMap)((response) => {
32
+ var _a, _b;
33
+ if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
34
+ const updateActions = [];
35
+ updateActions.push((0, transactionReducer_1.updateTransactions)(response.data.transactions, (value) => value.transaction_id, keepExistingListItems === true ? 'merge' : 'replace'));
36
+ const transactionIds = response.data.transactions.map((transaction) => transaction.transaction_id);
37
+ updateActions.push((0, transactionsViewReducer_1.updateTransactionCategorizationUIState)({
38
+ selectedTab,
39
+ uiState: Object.assign(Object.assign({}, uiState), { pageToken: (_a = response.data.next_page_token) !== null && _a !== void 0 ? _a : null }),
40
+ }));
41
+ updateActions.push((0, transactionsViewReducer_1.initializeTransactionCategorizationViewLocalData)(selectedTab, transactionIds, selectedPeriod, keepExistingListItems, (_b = response.data.next_page_token) !== null && _b !== void 0 ? _b : null, response.data.total_count, refreshViewInBackground));
42
+ updateActions.push((0, transactionsViewReducer_1.updateTotalCountForTransactionCategorization)({
43
+ selectedTab,
44
+ totalCount: response.data.total_count,
45
+ }));
46
+ updateActions.push((0, transactionsViewReducer_1.fetchTransactionCategorizationSuccess)({
47
+ refreshViewInBackground,
48
+ selectedTab,
49
+ status: response.status,
50
+ }));
51
+ return (0, rxjs_1.from)(updateActions);
52
+ }
53
+ else {
54
+ return (0, rxjs_1.of)((0, transactionsViewReducer_1.fetchTransactionCategorizationFailure)({
55
+ selectedPeriod,
56
+ selectedTab,
57
+ status: response.status,
58
+ }));
59
+ }
60
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, transactionsViewReducer_1.fetchTransactionCategorizationFailure)({
61
+ selectedPeriod,
62
+ selectedTab,
63
+ status: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'fetch Transaction Categorization REST API call errored out' +
64
+ JSON.stringify(error)),
65
+ }))));
66
+ }));
67
+ exports.fetchTransactionCategorizationEpic = fetchTransactionCategorizationEpic;
@@ -0,0 +1,8 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { RootState } from '../../../../reducer';
4
+ import { fetchTransactionCategorizationView, fetchTransactionCategorization } from '../../reducers/transactionsViewReducer';
5
+ import { fetchAccountList } from '../../../accountList/accountListReducer';
6
+ import { fetchClassList } from '../../../classList/classListReducer';
7
+ export declare type ActionType = ReturnType<typeof fetchTransactionCategorizationView> | ReturnType<typeof fetchTransactionCategorization> | ReturnType<typeof fetchAccountList> | ReturnType<typeof fetchClassList>;
8
+ export declare const fetchTransactionCategorizationViewEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchTransactionCategorizationViewEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
7
+ const accountListReducer_1 = require("../../../accountList/accountListReducer");
8
+ const classListReducer_1 = require("../../../classList/classListReducer");
9
+ const timePeriod_1 = require("../../../../commonStateTypes/timePeriod");
10
+ const fetchTransactionCategorizationViewEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.fetchTransactionCategorizationView.match), (0, operators_1.mergeMap)((action) => {
11
+ var _a;
12
+ const { selectedTab, cacheOverride, keepExistingListItems, pageToken, period, refreshViewInBackground, searchString, } = action.payload;
13
+ const updateActions = [];
14
+ const { expenseAutomationTransactionsViewState } = state$.value;
15
+ const { fetchState, transactionIdsBySelectedPeriod } = expenseAutomationTransactionsViewState[selectedTab];
16
+ const monthYearPeriod = {
17
+ month: period.start.month,
18
+ year: period.start.year,
19
+ };
20
+ const transactionIds = (_a = transactionIdsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(monthYearPeriod)]) !== null && _a !== void 0 ? _a : [];
21
+ const accountList = state$.value.accountListState.byReportId['accountList'];
22
+ if (accountList.hasValidState() === false &&
23
+ accountList.fetchState === 'Not-Started') {
24
+ updateActions.push((0, accountListReducer_1.fetchAccountList)('accountList', true));
25
+ }
26
+ const classList = state$.value.classListState;
27
+ if (classList.hasValidState() === false &&
28
+ classList.fetchState === 'Not-Started') {
29
+ updateActions.push((0, classListReducer_1.fetchClassList)());
30
+ }
31
+ if (cacheOverride === true ||
32
+ fetchState === 'Not-Started' ||
33
+ transactionIds.length === 0) {
34
+ updateActions.push((0, transactionsViewReducer_1.fetchTransactionCategorization)(selectedTab, period, cacheOverride, keepExistingListItems, searchString, pageToken, refreshViewInBackground));
35
+ }
36
+ return (0, rxjs_1.from)(updateActions);
37
+ }));
38
+ exports.fetchTransactionCategorizationViewEpic = fetchTransactionCategorizationViewEpic;
@@ -0,0 +1,5 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { RootState } from '../../../../reducer';
3
+ import { initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData } from '../../reducers/transactionsViewReducer';
4
+ export declare type ActionType = ReturnType<typeof initializeTransactionCategorizationViewLocalData> | ReturnType<typeof saveTransactionCategorizationLocalData>;
5
+ export declare const initializeTransactionCategorizationViewLocalDataEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => import("rxjs").Observable<ActionType>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initializeTransactionCategorizationViewLocalDataEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const transactionSelector_1 = require("../../../../entity/transaction/transactionSelector");
7
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
8
+ const transactionsViewState_1 = require("../../types/transactionsViewState");
9
+ const transactionCategorizationLocalDataHelper_1 = require("../../helpers/transactionCategorizationLocalDataHelper");
10
+ const initializeTransactionCategorizationViewLocalDataEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.initializeTransactionCategorizationViewLocalData.match), (0, operators_1.mergeMap)((action) => {
11
+ const { transactionIds, selectedPeriod, keepExistingListItems, selectedTab, pageToken, totalCount, refreshViewInBackground, } = action.payload;
12
+ const fetchActions = [];
13
+ const { transactionState } = state$.value;
14
+ const transactionLocalData = {};
15
+ const transactions = (0, transactionSelector_1.getSupportedTransactionsByIds)(transactionState, transactionIds);
16
+ transactions.forEach((transaction) => {
17
+ transactionLocalData[transaction.id] = Object.assign(Object.assign({}, transactionsViewState_1.initialSupportedTransactionCategorization), { transactionId: transaction.id, transactionReviewLocalData: Object.assign({}, (0, transactionCategorizationLocalDataHelper_1.toTransactionDetailLocalData)(transaction)) });
18
+ });
19
+ fetchActions.push((0, transactionsViewReducer_1.saveTransactionCategorizationLocalData)({
20
+ selectedTab,
21
+ transactionIds,
22
+ selectedPeriod,
23
+ keepExistingListItems,
24
+ transactionLocalData,
25
+ pageToken,
26
+ totalCount,
27
+ refreshViewInBackground,
28
+ }));
29
+ return (0, rxjs_1.from)(fetchActions);
30
+ }));
31
+ exports.initializeTransactionCategorizationViewLocalDataEpic = initializeTransactionCategorizationViewLocalDataEpic;
@@ -0,0 +1,8 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { RootState } from '../../../../reducer';
3
+ import { ZeniAPI } from '../../../../zeniAPI';
4
+ import { updateStatusForTransactionNotMiscategorizedUpdate, markTransactionAsNotMiscategorized } from '../../reducers/transactionsViewReducer';
5
+ import { removeTransactionCategorization } from '../../../../entity/transaction/transactionReducer';
6
+ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
7
+ export declare type ActionType = ReturnType<typeof removeTransactionCategorization> | ReturnType<typeof openSnackbar> | ReturnType<typeof markTransactionAsNotMiscategorized> | ReturnType<typeof updateStatusForTransactionNotMiscategorizedUpdate>;
8
+ export declare const markTransactionAsNotMiscategorizedEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<ActionType>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markTransactionAsNotMiscategorizedEpic = void 0;
4
+ const operators_1 = require("rxjs/operators");
5
+ const rxjs_1 = require("rxjs");
6
+ const operators_2 = require("rxjs/operators");
7
+ const responsePayload_1 = require("../../../../responsePayload");
8
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
9
+ const transactionReducer_1 = require("../../../../entity/transaction/transactionReducer");
10
+ const snackbarReducer_1 = require("../../../../entity/snackbar/snackbarReducer");
11
+ const tenantSelector_1 = require("../../../../entity/tenant/tenantSelector");
12
+ const TRANSACTION_COUNT_VARIABLE_NAME = '_transactions_count_';
13
+ const markTransactionAsNotMiscategorizedEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.markTransactionAsNotMiscategorized.match), (0, operators_2.mergeMap)((action) => {
14
+ const transactionsInReview = action.payload.transactionsInReview;
15
+ const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state$.value);
16
+ const selectedPeriod = state$.value.expenseAutomationViewState.selectedPeriodByTenantId[currentTenant.tenantId];
17
+ if (transactionsInReview.length > 0) {
18
+ return zeniAPI
19
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/mark-as-reviewed`, { transactions_reviewed: transactionsInReview })
20
+ .pipe((0, operators_2.mergeMap)((response) => {
21
+ if ((0, responsePayload_1.isSuccessStatus)(response)) {
22
+ const transactionIds = transactionsInReview.map((transaction) => transaction.transaction_id);
23
+ const actions = [];
24
+ actions.push((0, transactionsViewReducer_1.updateStatusForTransactionNotMiscategorizedUpdate)(action.payload.selectedTab, transactionIds, selectedPeriod, 'Completed'));
25
+ actions.push((0, transactionReducer_1.removeTransactionCategorization)({
26
+ transactionIds: transactionIds,
27
+ }));
28
+ actions.push((0, snackbarReducer_1.openSnackbar)({
29
+ messageSection: 'transactions_reviewed',
30
+ messageText: 'success',
31
+ type: 'success',
32
+ variables: [
33
+ {
34
+ variableName: TRANSACTION_COUNT_VARIABLE_NAME,
35
+ variableValue: transactionIds.length.toString(),
36
+ },
37
+ {
38
+ variableName: '_transaction_',
39
+ variableValue: transactionIds.length === 1
40
+ ? 'Transaction'
41
+ : 'Transactions',
42
+ },
43
+ ],
44
+ }));
45
+ return (0, rxjs_1.from)(actions);
46
+ }
47
+ else {
48
+ return (0, rxjs_1.of)((0, transactionsViewReducer_1.updateStatusForTransactionNotMiscategorizedUpdate)(action.payload.selectedTab, [], selectedPeriod, 'Error', response.status));
49
+ }
50
+ }), (0, operators_2.catchError)((error) => (0, rxjs_1.of)((0, transactionsViewReducer_1.updateStatusForTransactionNotMiscategorizedUpdate)(action.payload.selectedTab, [], selectedPeriod, 'Error', (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', `Transaction mark miscategorized as correct REST API call errored out ${JSON.stringify(error)}`)))));
51
+ }
52
+ else {
53
+ return (0, rxjs_1.from)([]);
54
+ }
55
+ }));
56
+ exports.markTransactionAsNotMiscategorizedEpic = markTransactionAsNotMiscategorizedEpic;
@@ -0,0 +1,5 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { RootState } from '../../../../reducer';
3
+ import { saveTransactionCategorization, updateTransactionCategorization } from '../../reducers/transactionsViewReducer';
4
+ export declare type ActionType = ReturnType<typeof saveTransactionCategorization> | ReturnType<typeof updateTransactionCategorization>;
5
+ export declare const saveTransactionCategorizationEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => import("rxjs").Observable<ActionType>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.saveTransactionCategorizationEpic = void 0;
7
+ const rxjs_1 = require("rxjs");
8
+ const get_1 = __importDefault(require("lodash/get"));
9
+ const operators_1 = require("rxjs/operators");
10
+ const transactionSelector_1 = require("../../../../entity/transaction/transactionSelector");
11
+ const accountListSelector_1 = require("../../../accountList/accountListSelector");
12
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
13
+ const saveTransactionHelper_1 = require("../../helpers/saveTransactionHelper");
14
+ const saveTransactionCategorizationEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.saveTransactionCategorization.match), (0, operators_1.mergeMap)((action) => {
15
+ const { transactionIds, selectedTab } = action.payload;
16
+ const fetchActions = [];
17
+ const { transactionState, expenseAutomationTransactionsViewState } = state$.value;
18
+ const transactionSaveUpdates = [];
19
+ const transactions = (0, transactionSelector_1.getSupportedTransactionsByIds)(transactionState, transactionIds);
20
+ transactions.forEach((transaction) => {
21
+ const detail = (0, get_1.default)(expenseAutomationTransactionsViewState[selectedTab]
22
+ .transactionReviewLocalDataById, transaction.id, undefined);
23
+ const uncategorizedIncomeExpense = (0, accountListSelector_1.getUncategorizedAccounts)(state$.value.accountState, state$.value.accountListState, 'accountList');
24
+ const localData = detail === null || detail === void 0 ? void 0 : detail.transactionReviewLocalData;
25
+ if (localData != null) {
26
+ transactionSaveUpdates.push((0, saveTransactionHelper_1.toTransactionUpdatesFromTransactionCategorizationLocalData)(localData, transaction, uncategorizedIncomeExpense));
27
+ }
28
+ });
29
+ fetchActions.push((0, transactionsViewReducer_1.updateTransactionCategorization)(selectedTab, transactionIds, transactionSaveUpdates));
30
+ return (0, rxjs_1.from)(fetchActions);
31
+ }));
32
+ exports.saveTransactionCategorizationEpic = saveTransactionCategorizationEpic;
@@ -0,0 +1,6 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { RootState } from '../../../../reducer';
3
+ import { ZeniAPI } from '../../../../zeniAPI';
4
+ import { updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized } from '../../reducers/transactionsViewReducer';
5
+ export declare type ActionType = ReturnType<typeof updateTransactionCategorization> | ReturnType<typeof updateTransactionCategorizationSaveStatus> | ReturnType<typeof markTransactionAsNotMiscategorized>;
6
+ export declare const updateTransactionCategorizationEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<ActionType>;
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.updateTransactionCategorizationEpic = void 0;
7
+ const rxjs_1 = require("rxjs");
8
+ const operators_1 = require("rxjs/operators");
9
+ const get_1 = __importDefault(require("lodash/get"));
10
+ const recommendationPayload_1 = require("../../../../commonPayloadTypes/recommendationPayload");
11
+ const customerTransactionPayload_1 = require("../../../../entity/transaction/payloadTypes/customerTransactionPayload");
12
+ const otherTransactionPayload_1 = require("../../../../entity/transaction/payloadTypes/otherTransactionPayload");
13
+ const transactionPayload_1 = require("../../../../entity/transaction/payloadTypes/transactionPayload");
14
+ const vendorTransactionPayload_1 = require("../../../../entity/transaction/payloadTypes/vendorTransactionPayload");
15
+ const customerTransaction_1 = require("../../../../entity/transaction/stateTypes/customerTransaction");
16
+ const otherTransaction_1 = require("../../../../entity/transaction/stateTypes/otherTransaction");
17
+ const transactionType_1 = require("../../../../entity/transaction/stateTypes/transactionType");
18
+ const vendorTransaction_1 = require("../../../../entity/transaction/stateTypes/vendorTransaction");
19
+ const transactionSelector_1 = require("../../../../entity/transaction/transactionSelector");
20
+ const vendorSelector_1 = require("../../../../entity/vendor/vendorSelector");
21
+ const responsePayload_1 = require("../../../../responsePayload");
22
+ const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
23
+ const updateTransactionCategorizationEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.updateTransactionCategorization.match), (0, operators_1.mergeMap)((action) => {
24
+ const { selectedTab } = action.payload;
25
+ const { transactionState, vendorState, expenseAutomationTransactionsViewState, } = state$.value;
26
+ const payloadArray = preparePayload(selectedTab, transactionState, vendorState, expenseAutomationTransactionsViewState, action.payload.transactionIds, action.payload.transactionSaveUpdates).filter((payload) => payload != null);
27
+ return zeniAPI
28
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/transactions/categorize`, { transactions: payloadArray })
29
+ .pipe((0, operators_1.mergeMap)((response) => {
30
+ if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
31
+ const transactionsInReview = response.data.transactions_update_success;
32
+ const actions = [];
33
+ actions.push((0, transactionsViewReducer_1.markTransactionAsNotMiscategorized)(selectedTab, transactionsInReview));
34
+ actions.push((0, transactionsViewReducer_1.updateTransactionCategorizationSaveStatus)(selectedTab, 'Completed', (0, responsePayload_1.createZeniAPIStatus)('Completed', 'Transaction categorization updated successfully')));
35
+ return (0, rxjs_1.from)(actions);
36
+ }
37
+ else {
38
+ return (0, rxjs_1.of)((0, transactionsViewReducer_1.updateTransactionCategorizationSaveStatus)(selectedTab, 'Error', response.status));
39
+ }
40
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, transactionsViewReducer_1.updateTransactionCategorizationSaveStatus)(selectedTab, 'Error', (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', `REST API call errored out ${JSON.stringify(error)}`)))));
41
+ }));
42
+ exports.updateTransactionCategorizationEpic = updateTransactionCategorizationEpic;
43
+ function prepareTransactionPayload(selectedTab, transactionState, vendorState, transactionsViewState, transactionId, saveUpdates) {
44
+ var _a;
45
+ const detail = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, transactionId);
46
+ const tranDetail = (0, get_1.default)(transactionsViewState[selectedTab].transactionReviewLocalDataById, transactionId, undefined);
47
+ const tranVendorUpdates = (_a = tranDetail === null || tranDetail === void 0 ? void 0 : tranDetail.transactionReviewLocalData) === null || _a === void 0 ? void 0 : _a.vendorUpdates;
48
+ let vendorUpdates = undefined;
49
+ if ((tranVendorUpdates === null || tranVendorUpdates === void 0 ? void 0 : tranVendorUpdates.qboId) != null) {
50
+ const vendor = (0, vendorSelector_1.getVendorByVendorId)(vendorState, tranVendorUpdates.qboId);
51
+ if (vendor != null) {
52
+ vendorUpdates = {
53
+ id: vendor.qboId,
54
+ name: vendor.name,
55
+ };
56
+ }
57
+ else {
58
+ vendorUpdates = {
59
+ id: tranVendorUpdates.qboId,
60
+ name: tranVendorUpdates.name,
61
+ };
62
+ }
63
+ }
64
+ if (detail != null) {
65
+ const transUpdates = toTransactionUpdatePayload(saveUpdates.updates, detail, vendorUpdates);
66
+ const entityUpdates = toEntityUpdatePayload(saveUpdates.entityRelatedUpdates);
67
+ return {
68
+ entity_related_updates: entityUpdates,
69
+ transaction_id: transactionId,
70
+ transaction: transUpdates,
71
+ transaction_type: (0, transactionType_1.toTransactionType)(detail.type),
72
+ };
73
+ }
74
+ return undefined;
75
+ }
76
+ function preparePayload(selectedTab, transactionState, vendorState, transactionsViewState, transactionIds, saveUpdates) {
77
+ const payload = [];
78
+ transactionIds.forEach((transactionId) => {
79
+ const saveUpdate = saveUpdates.find((update) => update.transactionId === transactionId);
80
+ if (saveUpdate != null) {
81
+ const transactionPayload = prepareTransactionPayload(selectedTab, transactionState, vendorState, transactionsViewState, transactionId, saveUpdate);
82
+ if (transactionPayload != null) {
83
+ payload.push(transactionPayload);
84
+ }
85
+ }
86
+ });
87
+ if (payload == null) {
88
+ return [];
89
+ }
90
+ else {
91
+ return payload;
92
+ }
93
+ }
94
+ const toTransactionUpdatePayload = (updates, detail, vendorUpdates) => {
95
+ var _a, _b;
96
+ const transaction = Object.assign({}, detail);
97
+ transaction.memo = (_a = updates.memo) !== null && _a !== void 0 ? _a : '';
98
+ transaction.vendorId = vendorUpdates === null || vendorUpdates === void 0 ? void 0 : vendorUpdates.id;
99
+ transaction.vendorName = vendorUpdates === null || vendorUpdates === void 0 ? void 0 : vendorUpdates.name;
100
+ const recommendationUpdates = {};
101
+ for (const key in updates.updatesByLineId) {
102
+ const lineUpdates = updates.updatesByLineId[key];
103
+ const newLineMap = (_b = transaction.lines) === null || _b === void 0 ? void 0 : _b.map((line) => {
104
+ var _a;
105
+ if (line.id === key) {
106
+ const lineToBeUpdated = Object.assign({}, line);
107
+ lineToBeUpdated.lineDescription = (_a = lineUpdates.lineDescription) !== null && _a !== void 0 ? _a : '';
108
+ if (lineUpdates.class != null) {
109
+ lineToBeUpdated.class = lineUpdates.class;
110
+ }
111
+ if (lineUpdates.account != null) {
112
+ lineToBeUpdated.account = lineUpdates.account;
113
+ }
114
+ if (lineUpdates.customer != null) {
115
+ lineToBeUpdated.customer = lineUpdates.customer;
116
+ }
117
+ else {
118
+ lineToBeUpdated.customer = undefined;
119
+ }
120
+ if (lineUpdates.vendor != null) {
121
+ lineToBeUpdated.vendor = lineUpdates.vendor;
122
+ }
123
+ else {
124
+ lineToBeUpdated.vendor = undefined;
125
+ }
126
+ if (lineUpdates.recommendation != null) {
127
+ recommendationUpdates[line.id] = lineUpdates.recommendation;
128
+ }
129
+ return lineToBeUpdated;
130
+ }
131
+ return line;
132
+ });
133
+ transaction.lines = newLineMap;
134
+ }
135
+ transaction.recommendations = recommendationUpdates;
136
+ if ((0, customerTransaction_1.isCustomerTransaction)(transaction)) {
137
+ return (0, customerTransactionPayload_1.toCustomerTransactionPayload)(transaction);
138
+ }
139
+ else if ((0, vendorTransaction_1.isVendorTransaction)(transaction)) {
140
+ return (0, vendorTransactionPayload_1.toVendorTransactionPayload)(transaction, vendorUpdates);
141
+ }
142
+ else if ((0, otherTransaction_1.isTransferTransaction)(transaction)) {
143
+ return (0, otherTransactionPayload_1.toTransferTransactionPayload)(transaction);
144
+ }
145
+ else {
146
+ return (0, transactionPayload_1.toTransactionPayload)(transaction);
147
+ }
148
+ };
149
+ const toEntityUpdatePayload = (entityUpdates) => {
150
+ const entityUpdatesPayload = [];
151
+ let entityKey;
152
+ for (entityKey in entityUpdates) {
153
+ const entityUpdate = entityUpdates[entityKey];
154
+ const entityUpdatePayload = {
155
+ recommendations: (0, recommendationPayload_1.toRecommendationPayload)(entityUpdate.recommendations),
156
+ entity_id: entityUpdate.entityId,
157
+ entity_type: entityUpdate.entityType,
158
+ is_bulk_update: entityUpdate.isBulkUpdate,
159
+ updated_entity_id: entityUpdate.updatedEntityId,
160
+ };
161
+ entityUpdatesPayload.push(entityUpdatePayload);
162
+ }
163
+ return entityUpdatesPayload;
164
+ };
@@ -12,6 +12,8 @@ export declare const fetchAllExpenseAutomationTabs: import("@reduxjs/toolkit").A
12
12
  newSelectedView: "transaction_categorization" | "je_schedules" | "account_recon" | "missing_receipts" | "flux_analysis" | "month_end_insights";
13
13
  }, string, never, never>, clearExpenseAutomationView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, initializeSelectedPeriodForTenants: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
14
14
  selectedPeriodByTenantId: Record<ID, MonthYearPeriod>;
15
- }, string>, refreshExpenseAutomationCurrentTab: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
15
+ }, string>, refreshExpenseAutomationCurrentTab: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>, updateCurrentSelectedTransactionCategorizationTab: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[newSelectedTab: "review" | "autoCategorized"], {
16
+ newSelectedTab: "review" | "autoCategorized";
17
+ }, string, never, never>;
16
18
  declare const _default: import("@reduxjs/toolkit").Reducer<ExpenseAutomationViewState, import("@reduxjs/toolkit").AnyAction>;
17
19
  export default _default;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.refreshExpenseAutomationCurrentTab = exports.initializeSelectedPeriodForTenants = exports.clearExpenseAutomationView = exports.updateCurrentSelectedView = exports.updateCurrentSelectedPeriod = exports.fetchAllExpenseAutomationTabs = exports.initialState = void 0;
4
+ exports.updateCurrentSelectedTransactionCategorizationTab = exports.refreshExpenseAutomationCurrentTab = exports.initializeSelectedPeriodForTenants = exports.clearExpenseAutomationView = exports.updateCurrentSelectedView = exports.updateCurrentSelectedPeriod = exports.fetchAllExpenseAutomationTabs = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  exports.initialState = {
7
7
  saveStatus: { fetchState: 'Not-Started', error: undefined },
@@ -13,6 +13,7 @@ exports.initialState = {
13
13
  hasValidState() {
14
14
  return this.fetchState == 'Completed';
15
15
  },
16
+ selectedTransactionCategorizationTab: 'review',
16
17
  };
17
18
  const expenseAutomationView = (0, toolkit_1.createSlice)({
18
19
  name: 'expenseAutomationView',
@@ -57,10 +58,19 @@ const expenseAutomationView = (0, toolkit_1.createSlice)({
57
58
  return { payload: { newSelectedPeriod, tenantId } };
58
59
  },
59
60
  },
61
+ updateCurrentSelectedTransactionCategorizationTab: {
62
+ reducer(draft, action) {
63
+ draft.selectedTransactionCategorizationTab =
64
+ action.payload.newSelectedTab;
65
+ },
66
+ prepare(newSelectedTab) {
67
+ return { payload: { newSelectedTab } };
68
+ },
69
+ },
60
70
  clearExpenseAutomationView(draft) {
61
71
  Object.assign(draft, exports.initialState);
62
72
  },
63
73
  },
64
74
  });
65
- _a = expenseAutomationView.actions, exports.fetchAllExpenseAutomationTabs = _a.fetchAllExpenseAutomationTabs, exports.updateCurrentSelectedPeriod = _a.updateCurrentSelectedPeriod, exports.updateCurrentSelectedView = _a.updateCurrentSelectedView, exports.clearExpenseAutomationView = _a.clearExpenseAutomationView, exports.initializeSelectedPeriodForTenants = _a.initializeSelectedPeriodForTenants, exports.refreshExpenseAutomationCurrentTab = _a.refreshExpenseAutomationCurrentTab;
75
+ _a = expenseAutomationView.actions, exports.fetchAllExpenseAutomationTabs = _a.fetchAllExpenseAutomationTabs, exports.updateCurrentSelectedPeriod = _a.updateCurrentSelectedPeriod, exports.updateCurrentSelectedView = _a.updateCurrentSelectedView, exports.clearExpenseAutomationView = _a.clearExpenseAutomationView, exports.initializeSelectedPeriodForTenants = _a.initializeSelectedPeriodForTenants, exports.refreshExpenseAutomationCurrentTab = _a.refreshExpenseAutomationCurrentTab, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab;
66
76
  exports.default = expenseAutomationView.reducer;
@@ -11,6 +11,7 @@ const companyMonthEndReportViewSelector_1 = require("../companyMonthEndReportVie
11
11
  const tenantSelector_1 = require("../../entity/tenant/tenantSelector");
12
12
  const timePeriod_1 = require("../../commonStateTypes/timePeriod");
13
13
  const monthEndCloseChecksViewSelector_1 = require("../monthEndCloseChecksView/monthEndCloseChecksViewSelector");
14
+ const transactionCategorizationSelector_1 = require("./selectors/transactionCategorizationSelector");
14
15
  const isPreviousStepDisabled = (allSteps, stepIndex, auditSummary) => {
15
16
  if (stepIndex === 0) {
16
17
  // TODO - Jitesh update condition
@@ -23,20 +24,22 @@ const isPreviousStepDisabled = (allSteps, stepIndex, auditSummary) => {
23
24
  };
24
25
  function getExpenseAutomationView(state) {
25
26
  var _a;
26
- const { expenseAutomationViewState, tenantState, expenseAutomationMissingReceiptsViewState, expenseAutomationTransactionsViewState, expenseAutomationJESchedulesViewState, monthEndCloseChecksState, } = state;
27
+ const { expenseAutomationViewState, tenantState, expenseAutomationMissingReceiptsViewState, expenseAutomationJESchedulesViewState, monthEndCloseChecksState, } = state;
27
28
  const { loggedInUser, currentTenantId } = tenantState;
28
29
  const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state);
29
- const { currentSelectedView, selectedPeriodByTenantId } = expenseAutomationViewState;
30
+ const { currentSelectedView, selectedPeriodByTenantId, selectedTransactionCategorizationTab, } = expenseAutomationViewState;
30
31
  const selectedPeriod = selectedPeriodByTenantId[currentTenant.tenantId];
31
32
  const monthEndCloseChecksView = (0, monthEndCloseChecksViewSelector_1.getMonthEndCloseChecksViewByTenantId)(state, currentTenant.tenantId);
32
33
  const missingReceipts = (0, missingReceiptsSelector_1.getExpenseAutomationMissingReceiptsView)(state);
33
34
  const fluxAnalysis = (0, fluxAnalysisViewSelector_1.getExpenseAutomationFluxAnalysisView)(state);
34
35
  const monthEndInsights = (0, companyMonthEndReportViewSelector_1.getCompanyMonthEndReportSelectorView)(state, currentTenant.companyId, loggedInUser);
36
+ const expenseAutomationTransactionsViewState = (0, transactionCategorizationSelector_1.getExpenseAutomationTransactionView)(state, selectedTransactionCategorizationTab);
35
37
  const jeSchedules = (0, jeSchedulesViewSelector_1.getExpenseAutomationJESchedulesView)(state);
36
38
  const fetchStateVariables = [
37
39
  expenseAutomationMissingReceiptsViewState,
38
40
  expenseAutomationJESchedulesViewState,
39
41
  monthEndCloseChecksView,
42
+ expenseAutomationTransactionsViewState,
40
43
  ];
41
44
  let allSteps = [];
42
45
  let auditSummary = undefined;
@@ -48,6 +51,9 @@ function getExpenseAutomationView(state) {
48
51
  allSteps = (0, expenseAutomationViewSelectorTypes_1.getAllSteps)(monthEndCloseChecksState, monthYearPeriodId, currentTenant.tenantId, auditSummary);
49
52
  allSteps.forEach((stepDetail, index, allStepsOriginal) => {
50
53
  switch (stepDetail.step) {
54
+ case 'transaction_categorization':
55
+ allStepsOriginal[index] = Object.assign(Object.assign({}, stepDetail), { completionStatus: expenseAutomationTransactionsViewState.completionStatus });
56
+ return;
51
57
  case 'je_schedules':
52
58
  allStepsOriginal[index] = Object.assign(Object.assign({}, stepDetail), { completionStatus: jeSchedules.completionStatus });
53
59
  return;
@@ -60,10 +66,8 @@ function getExpenseAutomationView(state) {
60
66
  : true });
61
67
  return;
62
68
  case 'flux_analysis':
63
- allStepsOriginal[index] = Object.assign(Object.assign({}, stepDetail), { completionStatus: fluxAnalysis.completionStatus });
64
- return;
65
69
  default:
66
- // TODO - Vivek add other steps
70
+ allStepsOriginal[index] = Object.assign(Object.assign({}, stepDetail), { completionStatus: fluxAnalysis.completionStatus });
67
71
  return;
68
72
  }
69
73
  });
@@ -75,18 +79,21 @@ function getExpenseAutomationView(state) {
75
79
  }
76
80
  const reducedFetchStatus = (0, reduceFetchState_1.reduceAnyFetchState)(fetchStateVariables); // Add more states
77
81
  const reducedSaveStatus = (0, reduceFetchState_1.reduceAllFetchState)([
78
- expenseAutomationTransactionsViewState.saveStatus, // TODO - Anjali add more states
82
+ expenseAutomationTransactionsViewState.saveStatus,
83
+ expenseAutomationTransactionsViewState.markAsNotMiscategorizedStatus,
79
84
  ]);
80
85
  const reducedUpdateStatus = (0, reduceFetchState_1.reduceAllFetchState)([
81
- expenseAutomationTransactionsViewState.updateStatus, // TODO - Anjali add more states
86
+ expenseAutomationTransactionsViewState.saveStatus, // TODO - Anjali add more states
82
87
  ]);
83
88
  return {
84
89
  jeSchedules,
90
+ transactionView: expenseAutomationTransactionsViewState,
85
91
  missingReceipts,
86
92
  fluxAnalysis,
87
93
  fetchState: reducedFetchStatus.fetchState,
88
94
  error: undefined,
89
95
  currentSelectedView,
96
+ selectedTransactionCategorizationTab,
90
97
  saveStatus: reducedSaveStatus,
91
98
  updateStatus: reducedUpdateStatus,
92
99
  allSteps,
@@ -1,5 +1,6 @@
1
1
  import { FetchedState, FetchStateAndError, ID } from '../../commonStateTypes/common';
2
2
  import { MonthYearPeriod } from '../../commonStateTypes/timePeriod';
3
+ import { TransactionsTab } from './types/transactionsViewState';
3
4
  export declare const EXPENSE_AUTOMATION_VIEW_TYPES: readonly ["transaction_categorization", "je_schedules", "account_recon", "missing_receipts", "flux_analysis", "month_end_insights"];
4
5
  export declare const toExpenseAutomationViewType: (v: string) => "transaction_categorization" | "je_schedules" | "account_recon" | "missing_receipts" | "flux_analysis" | "month_end_insights";
5
6
  export declare type ExpenseAutomationViewType = ReturnType<typeof toExpenseAutomationViewType>;
@@ -8,4 +9,5 @@ export interface ExpenseAutomationViewState extends FetchedState {
8
9
  updateStatus: FetchStateAndError;
9
10
  currentSelectedView: ExpenseAutomationViewType;
10
11
  selectedPeriodByTenantId: Record<ID, MonthYearPeriod>;
12
+ selectedTransactionCategorizationTab: TransactionsTab;
11
13
  }