@zeniai/client-epic-state 5.0.69-betaML1 → 5.0.69-betaML11
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/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
- package/lib/commonStateTypes/viewAndReport/viewAndReport.js +2 -0
- package/lib/entity/account/accountSelector.d.ts +9 -0
- package/lib/entity/account/accountSelector.js +14 -1
- package/lib/entity/account/accountState.d.ts +1 -1
- package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
- package/lib/entity/class/classReducer.d.ts +4 -4
- package/lib/entity/class/classState.d.ts +1 -1
- package/lib/entity/forecast/forecastState.d.ts +1 -1
- package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
- package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
- package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
- package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
- package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +4 -0
- package/lib/entity/transaction/payloadTypes/transactionPayload.js +20 -58
- package/lib/entity/transaction/stateTypes/transaction.d.ts +3 -0
- package/lib/epic.d.ts +3 -2
- package/lib/epic.js +3 -2
- package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +2 -0
- package/lib/esm/entity/account/accountSelector.js +11 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +20 -58
- package/lib/esm/epic.js +3 -2
- package/lib/esm/index.js +9 -8
- package/lib/esm/reducer.js +3 -0
- package/lib/esm/view/createTransferEntry/createTransferEntryReducer.js +56 -0
- package/lib/esm/view/createTransferEntry/createTransferEntrySelector.js +64 -0
- package/lib/esm/view/createTransferEntry/createTransferEntryState.js +17 -0
- package/lib/esm/view/createTransferEntry/epics/createTransferEntryEpic.js +112 -0
- package/lib/esm/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +36 -0
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +8 -0
- package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +1 -21
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +26 -117
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +9 -29
- package/lib/esm/view/recommendation/recommendationHelper.js +0 -29
- package/lib/esm/view/recommendation/recommendationReducer.js +1 -36
- package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +14 -2
- package/lib/esm/view/transactionDetail/transactionDetailReducer.js +3 -110
- package/lib/esm/view/transactionDetail/transactionDetailSelector.js +6 -23
- package/lib/index.d.ts +9 -9
- package/lib/index.js +43 -36
- package/lib/reducer.d.ts +3 -0
- package/lib/reducer.js +3 -0
- package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
- package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
- package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
- package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
- package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
- package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
- package/lib/view/createTransferEntry/createTransferEntryReducer.d.ts +32 -0
- package/lib/view/createTransferEntry/createTransferEntryReducer.js +60 -0
- package/lib/view/createTransferEntry/createTransferEntrySelector.d.ts +39 -0
- package/lib/view/createTransferEntry/createTransferEntrySelector.js +69 -0
- package/lib/view/createTransferEntry/createTransferEntryState.d.ts +30 -0
- package/lib/view/createTransferEntry/createTransferEntryState.js +20 -0
- package/lib/view/createTransferEntry/epics/createTransferEntryEpic.d.ts +11 -0
- package/lib/view/createTransferEntry/epics/createTransferEntryEpic.js +116 -0
- package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.d.ts +14 -0
- package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +40 -0
- package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -1
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +8 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -2
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -23
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +4 -15
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +26 -117
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +4 -3
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +1 -3
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +11 -30
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +0 -1
- package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
- package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
- package/lib/view/recommendation/recommendationHelper.d.ts +0 -9
- package/lib/view/recommendation/recommendationHelper.js +1 -31
- package/lib/view/recommendation/recommendationReducer.d.ts +1 -18
- package/lib/view/recommendation/recommendationReducer.js +2 -37
- package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
- package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
- package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
- package/lib/view/topEx/topExSelector.d.ts +1 -1
- package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +2 -1
- package/lib/view/transactionDetail/epics/transactionDetailEpic.js +14 -2
- package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +3 -12
- package/lib/view/transactionDetail/transactionDetailReducer.js +4 -111
- package/lib/view/transactionDetail/transactionDetailSelector.d.ts +6 -3
- package/lib/view/transactionDetail/transactionDetailSelector.js +7 -25
- package/lib/view/transactionDetail/transactionDetailTypes.d.ts +0 -1
- package/package.json +1 -1
- package/lib/esm/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +0 -87
- package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.d.ts +0 -9
- package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +0 -91
|
@@ -2,8 +2,8 @@ import { ReportID } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
|
2
2
|
import { ZeniAPIStatus } from '../../responsePayload';
|
|
3
3
|
import { ReportsResyncState } from './reportsResyncState';
|
|
4
4
|
export declare const initialReportsResyncState: ReportsResyncState;
|
|
5
|
-
export declare const initiateReportsResync: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation"], {
|
|
6
|
-
reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
|
|
5
|
+
export declare const initiateReportsResync: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation" | "transfer_accounts" | "credit_card_transfer_accounts"], {
|
|
6
|
+
reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation" | "transfer_accounts" | "credit_card_transfer_accounts";
|
|
7
7
|
}, "initiateReportsResync/initiateReportsResync", never, never>, initiateReportsClassViewRefetching: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
8
8
|
reportIdToResync: ReportID;
|
|
9
9
|
}, "initiateReportsResync/initiateReportsClassViewRefetching">, reportsResyncSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RootState } from '../../reducer';
|
|
2
2
|
export declare const getTasksCardReport: (state: RootState) => {
|
|
3
|
-
reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
|
|
3
|
+
reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation" | "transfer_accounts" | "credit_card_transfer_accounts";
|
|
4
4
|
reportTitle: string;
|
|
5
5
|
version: string | number | undefined;
|
|
6
6
|
status: import("../..").Status | undefined;
|
|
@@ -4,7 +4,7 @@ import { RootState } from '../../reducer';
|
|
|
4
4
|
import { TopExReport, TopExTimePeriodWithMetaData } from './topExSelectorTypes';
|
|
5
5
|
import { TopExState } from './topExState';
|
|
6
6
|
export declare const getTopExpenses: (accountState: AccountState, topExState: TopExState, numberOfExpenses?: number) => {
|
|
7
|
-
reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
|
|
7
|
+
reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation" | "transfer_accounts" | "credit_card_transfer_accounts";
|
|
8
8
|
reportTitle: string;
|
|
9
9
|
version: string | number | undefined;
|
|
10
10
|
status: import("../..").Status | undefined;
|
|
@@ -7,9 +7,10 @@ import { ZeniAPI } from '../../../zeniAPI';
|
|
|
7
7
|
import { fetchAccountList } from '../../accountList/accountListReducer';
|
|
8
8
|
import { fetchClassList } from '../../classList/classListReducer';
|
|
9
9
|
import { updateTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorViewReducer';
|
|
10
|
+
import { fetchAccountsForTransferFlow } from '../../createTransferEntry/createTransferEntryReducer';
|
|
10
11
|
import { fetchOwnerList } from '../../ownerList/ownerListReducer';
|
|
11
12
|
import { fetchProjectList } from '../../projectList/projectListReducer';
|
|
12
13
|
import { updateSortUiState } from '../../vendorList/vendorListReducer';
|
|
13
14
|
import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState } from '../transactionDetailReducer';
|
|
14
|
-
export type ActionType = ReturnType<typeof fetchTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionDetailFetchState> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof removeTransaction> | ReturnType<typeof removeTransactionDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchProjectList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof updateSortUiState> | ReturnType<typeof updateVendors> | ReturnType<typeof updateTransactionVendorLocalData> | ReturnType<typeof fetchOwnerList>;
|
|
15
|
+
export type ActionType = ReturnType<typeof fetchTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionDetailFetchState> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof removeTransaction> | ReturnType<typeof removeTransactionDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchProjectList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof updateSortUiState> | ReturnType<typeof updateVendors> | ReturnType<typeof updateTransactionVendorLocalData> | ReturnType<typeof fetchOwnerList> | ReturnType<typeof fetchAccountsForTransferFlow>;
|
|
15
16
|
export declare const fetchTransactionDetailEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|
|
@@ -19,12 +19,13 @@ const accountListReducer_1 = require("../../accountList/accountListReducer");
|
|
|
19
19
|
const classListReducer_1 = require("../../classList/classListReducer");
|
|
20
20
|
const transactionVendorLocalDataHelper_1 = require("../../commonVendorView/transactionVendorView/transactionVendorLocalDataHelper");
|
|
21
21
|
const transactionVendorViewReducer_1 = require("../../commonVendorView/transactionVendorView/transactionVendorViewReducer");
|
|
22
|
+
const createTransferEntryReducer_1 = require("../../createTransferEntry/createTransferEntryReducer");
|
|
22
23
|
const ownerListReducer_1 = require("../../ownerList/ownerListReducer");
|
|
23
24
|
const projectListReducer_1 = require("../../projectList/projectListReducer");
|
|
24
25
|
const transactionDetailReducer_1 = require("../transactionDetailReducer");
|
|
25
26
|
const transactionDetailState_1 = require("../transactionDetailState");
|
|
26
27
|
const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionDetailReducer_1.fetchTransactionDetail.match), (0, operators_1.mergeMap)((action) => {
|
|
27
|
-
const { transactionId, cacheOverride } = action.payload;
|
|
28
|
+
const { transactionId, cacheOverride, isCreateTransferEntryFromExpenseEnabled, } = action.payload;
|
|
28
29
|
const detailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
29
30
|
const transactionActions = [];
|
|
30
31
|
if (cacheOverride === true) {
|
|
@@ -41,6 +42,17 @@ const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(
|
|
|
41
42
|
accountList.fetchState !== 'In-Progress') {
|
|
42
43
|
transactionActions.push((0, accountListReducer_1.fetchAccountList)('accountList'));
|
|
43
44
|
}
|
|
45
|
+
if (isCreateTransferEntryFromExpenseEnabled === true) {
|
|
46
|
+
const { transferEntryEligible, creditCardOnlyEligible } = state$.value.createTransferEntryState.transferAccountsByType;
|
|
47
|
+
if (transferEntryEligible.fetchState !== 'In-Progress' &&
|
|
48
|
+
transferEntryEligible.fetchState !== 'Completed') {
|
|
49
|
+
transactionActions.push((0, createTransferEntryReducer_1.fetchAccountsForTransferFlow)({ kind: 'transferEntryEligible' }));
|
|
50
|
+
}
|
|
51
|
+
if (creditCardOnlyEligible.fetchState !== 'In-Progress' &&
|
|
52
|
+
creditCardOnlyEligible.fetchState !== 'Completed') {
|
|
53
|
+
transactionActions.push((0, createTransferEntryReducer_1.fetchAccountsForTransferFlow)({ kind: 'creditCardOnlyEligible' }));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
44
56
|
const classList = state$.value.classListState;
|
|
45
57
|
if (classList.hasValidState() === false &&
|
|
46
58
|
classList.fetchState !== 'In-Progress') {
|
|
@@ -54,7 +66,7 @@ const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(
|
|
|
54
66
|
transactionActions.push((0, transactionDetailReducer_1.updateTransactionDetailFetchState)(transactionId, 'In-Progress'));
|
|
55
67
|
const query = { transaction_type: transactionId.type };
|
|
56
68
|
const getTransactionDetail$ = zeniAPI
|
|
57
|
-
.getJSON(
|
|
69
|
+
.getJSON(`https://dev.api.zeni.ai/version/accounting/mohanrajoria/1.0/transactions/${transactionId.id}?query=${encodeURIComponent(JSON.stringify(query))}`)
|
|
58
70
|
.pipe((0, operators_1.mergeMap)((response) => {
|
|
59
71
|
if ((0, responsePayload_1.isSuccessResponse)(response) &&
|
|
60
72
|
response.data?.transaction?.transaction_id != null) {
|
|
@@ -3,7 +3,7 @@ import { TransactionPayload } from '../../entity/transaction/payloadTypes/transa
|
|
|
3
3
|
import { SupportedTransactionPayload } from '../../entity/transaction/transactionState';
|
|
4
4
|
import { VendorPayload } from '../../entity/vendor/vendorPayload';
|
|
5
5
|
import { ZeniAPIResponse } from '../../responsePayload';
|
|
6
|
-
interface TransactionDetailPayload {
|
|
6
|
+
export interface TransactionDetailPayload {
|
|
7
7
|
query: {
|
|
8
8
|
transaction_id: string;
|
|
9
9
|
transaction_type: string;
|
|
@@ -15,9 +15,10 @@ export declare const downloadAccountingProviderAttachment: import("@reduxjs/tool
|
|
|
15
15
|
}, "transactionDetail/downloadAccountingProviderAttachment", never, never>, downloadAccountingProviderAttachmentSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
16
16
|
attachmentId: ID;
|
|
17
17
|
data: ArrayBuffer;
|
|
18
|
-
}, "transactionDetail/downloadAccountingProviderAttachmentSuccess">, downloadAccountingProviderAttachmentFailure: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"transactionDetail/downloadAccountingProviderAttachmentFailure">, fetchTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, cacheOverride?: any], {
|
|
18
|
+
}, "transactionDetail/downloadAccountingProviderAttachmentSuccess">, downloadAccountingProviderAttachmentFailure: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"transactionDetail/downloadAccountingProviderAttachmentFailure">, fetchTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, cacheOverride?: any, isCreateTransferEntryFromExpenseEnabled?: any], {
|
|
19
19
|
transactionId: TransactionID;
|
|
20
20
|
cacheOverride: any;
|
|
21
|
+
isCreateTransferEntryFromExpenseEnabled: any;
|
|
21
22
|
}, "transactionDetail/fetchTransactionDetail", never, never>, updateTransactionDetailFetchState: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, fetchState: FetchState, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
|
|
22
23
|
transactionId: TransactionID;
|
|
23
24
|
fetchState: FetchState;
|
|
@@ -115,17 +116,7 @@ export declare const downloadAccountingProviderAttachment: import("@reduxjs/tool
|
|
|
115
116
|
amount: number;
|
|
116
117
|
recommendationWithCOTByLineId: RecommendationWithCOTByLineId;
|
|
117
118
|
uncategorizedIncomeExpense: UncategorizedAccounts;
|
|
118
|
-
}, "transactionDetail/setEntityRecommendationForLineIdsForTransactionDetail", never, never>,
|
|
119
|
-
transactionId: TransactionID;
|
|
120
|
-
lineIds: string[];
|
|
121
|
-
}, "transactionDetail/markCategoryClassRecommendationsInProgressForTransactionDetail", never, never>, markCategoryClassRecommendationsCompletedForTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, lineIds: string[]], {
|
|
122
|
-
transactionId: TransactionID;
|
|
123
|
-
lineIds: string[];
|
|
124
|
-
}, "transactionDetail/markCategoryClassRecommendationsCompletedForTransactionDetail", never, never>, markCategoryClassRecommendationsFailureForTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, lineIds: string[], error: ZeniAPIStatus<Record<string, unknown>>], {
|
|
125
|
-
transactionId: TransactionID;
|
|
126
|
-
lineIds: string[];
|
|
127
|
-
error: ZeniAPIStatus<Record<string, unknown>>;
|
|
128
|
-
}, "transactionDetail/markCategoryClassRecommendationsFailureForTransactionDetail", never, never>, removeEntityRecommendationForLineIdForTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, transaction: SupportedTransaction, lineId: string], {
|
|
119
|
+
}, "transactionDetail/setEntityRecommendationForLineIdsForTransactionDetail", never, never>, removeEntityRecommendationForLineIdForTransactionDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, transaction: SupportedTransaction, lineId: string], {
|
|
129
120
|
transactionId: TransactionID;
|
|
130
121
|
transaction: SupportedTransaction;
|
|
131
122
|
lineId: string;
|
|
@@ -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.
|
|
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;
|
|
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");
|
|
@@ -57,11 +57,12 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
},
|
|
60
|
-
prepare(transactionId, cacheOverride = false) {
|
|
60
|
+
prepare(transactionId, cacheOverride = false, isCreateTransferEntryFromExpenseEnabled = false) {
|
|
61
61
|
return {
|
|
62
62
|
payload: {
|
|
63
63
|
transactionId,
|
|
64
64
|
cacheOverride,
|
|
65
|
+
isCreateTransferEntryFromExpenseEnabled,
|
|
65
66
|
},
|
|
66
67
|
};
|
|
67
68
|
},
|
|
@@ -372,21 +373,6 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
372
373
|
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
373
374
|
if (detail != null) {
|
|
374
375
|
const newLocalData = (0, transactionDetailLocalDataHelper_1.setEntityRecommendationForLineIdInLocalData)(transaction, detail.transactionDetailLocalData, action.payload.entity, lineIds, uncategorizedIncomeExpense, recommendationWithCOTByLineId);
|
|
375
|
-
// Release the per-line fetch flag for every line this fetch
|
|
376
|
-
// covered so the inline skeleton resolves and the page-level
|
|
377
|
-
// Save button can re-enable.
|
|
378
|
-
lineIds.forEach((lineId) => {
|
|
379
|
-
const lineItem = newLocalData.lineItemById[lineId];
|
|
380
|
-
if (lineItem != null) {
|
|
381
|
-
newLocalData.lineItemById[lineId] = {
|
|
382
|
-
...lineItem,
|
|
383
|
-
categoryClassRecommendationsFetchState: {
|
|
384
|
-
fetchState: 'Completed',
|
|
385
|
-
error: undefined,
|
|
386
|
-
},
|
|
387
|
-
};
|
|
388
|
-
}
|
|
389
|
-
});
|
|
390
376
|
draft.transactionDetailById[key] = {
|
|
391
377
|
...detail,
|
|
392
378
|
transactionDetailLocalData: newLocalData,
|
|
@@ -407,99 +393,6 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
407
393
|
};
|
|
408
394
|
},
|
|
409
395
|
},
|
|
410
|
-
// Start arm of the line-update recommendations fetch for the detail
|
|
411
|
-
// page. Flips covered lines to In-Progress; detail page has no
|
|
412
|
-
// checkbox, so no auto-uncheck side effect.
|
|
413
|
-
markCategoryClassRecommendationsInProgressForTransactionDetail: {
|
|
414
|
-
reducer(draft, action) {
|
|
415
|
-
const { transactionId, lineIds } = action.payload;
|
|
416
|
-
const key = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
417
|
-
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
418
|
-
// TEMP-LOG[JE-skeleton]: reducer entry — confirms the action reached
|
|
419
|
-
// the slice and shows whether incoming lineIds match the redux keys.
|
|
420
|
-
console.log('[JE-skeleton][reducer] markInProgress detail', {
|
|
421
|
-
transactionId,
|
|
422
|
-
incomingLineIds: lineIds,
|
|
423
|
-
existingLineItemKeys: detail != null
|
|
424
|
-
? Object.keys(detail.transactionDetailLocalData.lineItemById)
|
|
425
|
-
: null,
|
|
426
|
-
matched: detail != null
|
|
427
|
-
? lineIds.filter((id) => detail.transactionDetailLocalData.lineItemById[id] != null)
|
|
428
|
-
: [],
|
|
429
|
-
missed: detail != null
|
|
430
|
-
? lineIds.filter((id) => detail.transactionDetailLocalData.lineItemById[id] == null)
|
|
431
|
-
: lineIds,
|
|
432
|
-
});
|
|
433
|
-
if (detail != null) {
|
|
434
|
-
lineIds.forEach((lineId) => {
|
|
435
|
-
const lineItem = detail.transactionDetailLocalData.lineItemById[lineId];
|
|
436
|
-
if (lineItem != null) {
|
|
437
|
-
detail.transactionDetailLocalData.lineItemById[lineId] = {
|
|
438
|
-
...lineItem,
|
|
439
|
-
categoryClassRecommendationsFetchState: {
|
|
440
|
-
fetchState: 'In-Progress',
|
|
441
|
-
error: undefined,
|
|
442
|
-
},
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
},
|
|
448
|
-
prepare(transactionId, lineIds) {
|
|
449
|
-
return { payload: { transactionId, lineIds } };
|
|
450
|
-
},
|
|
451
|
-
},
|
|
452
|
-
// Completed arm. Used when the HTTP call succeeded but the server
|
|
453
|
-
// returned no per-line recommendations — still need to release the
|
|
454
|
-
// In-Progress flag.
|
|
455
|
-
markCategoryClassRecommendationsCompletedForTransactionDetail: {
|
|
456
|
-
reducer(draft, action) {
|
|
457
|
-
const { transactionId, lineIds } = action.payload;
|
|
458
|
-
const key = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
459
|
-
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
460
|
-
if (detail != null) {
|
|
461
|
-
lineIds.forEach((lineId) => {
|
|
462
|
-
const lineItem = detail.transactionDetailLocalData.lineItemById[lineId];
|
|
463
|
-
if (lineItem != null) {
|
|
464
|
-
detail.transactionDetailLocalData.lineItemById[lineId] = {
|
|
465
|
-
...lineItem,
|
|
466
|
-
categoryClassRecommendationsFetchState: {
|
|
467
|
-
fetchState: 'Completed',
|
|
468
|
-
error: undefined,
|
|
469
|
-
},
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
},
|
|
475
|
-
prepare(transactionId, lineIds) {
|
|
476
|
-
return { payload: { transactionId, lineIds } };
|
|
477
|
-
},
|
|
478
|
-
},
|
|
479
|
-
markCategoryClassRecommendationsFailureForTransactionDetail: {
|
|
480
|
-
reducer(draft, action) {
|
|
481
|
-
const { transactionId, lineIds, error } = action.payload;
|
|
482
|
-
const key = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
483
|
-
const detail = (0, get_1.default)(draft.transactionDetailById, key, undefined);
|
|
484
|
-
if (detail != null) {
|
|
485
|
-
lineIds.forEach((lineId) => {
|
|
486
|
-
const lineItem = detail.transactionDetailLocalData.lineItemById[lineId];
|
|
487
|
-
if (lineItem != null) {
|
|
488
|
-
detail.transactionDetailLocalData.lineItemById[lineId] = {
|
|
489
|
-
...lineItem,
|
|
490
|
-
categoryClassRecommendationsFetchState: {
|
|
491
|
-
fetchState: 'Error',
|
|
492
|
-
error,
|
|
493
|
-
},
|
|
494
|
-
};
|
|
495
|
-
}
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
},
|
|
499
|
-
prepare(transactionId, lineIds, error) {
|
|
500
|
-
return { payload: { transactionId, lineIds, error } };
|
|
501
|
-
},
|
|
502
|
-
},
|
|
503
396
|
removeEntityRecommendationForLineIdForTransactionDetail: {
|
|
504
397
|
reducer(draft, action) {
|
|
505
398
|
const { transaction, lineId } = action.payload;
|
|
@@ -771,7 +664,7 @@ const transactionDetail = (0, toolkit_1.createSlice)({
|
|
|
771
664
|
},
|
|
772
665
|
},
|
|
773
666
|
});
|
|
774
|
-
_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.
|
|
667
|
+
_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;
|
|
775
668
|
exports.default = transactionDetail.reducer;
|
|
776
669
|
function getUpdatedEntityLocalData(detail, updates, entity, resetRecommendations, type) {
|
|
777
670
|
const key = type === 'customer' ? 'customerUpdates' : 'vendorUpdates';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { NestedAccountHierarchyForReport } from '../../commonStateTypes/accountView/nestedAccountID';
|
|
2
2
|
import { NestedClassHierarchyForReport } from '../../commonStateTypes/classesView/nestedClassID';
|
|
3
|
-
import { FetchStateAndError } from '../../commonStateTypes/common';
|
|
3
|
+
import { FetchState, FetchStateAndError } from '../../commonStateTypes/common';
|
|
4
4
|
import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
5
|
+
import { AccountBase } from '../../entity/account/accountState';
|
|
5
6
|
import { TransactionID } from '../../entity/transaction/stateTypes/transaction';
|
|
6
7
|
import { SupportedTransactionWithCOT } from '../../entity/transaction/transactionState';
|
|
7
8
|
import { Vendor } from '../../entity/vendor/vendorState';
|
|
@@ -17,21 +18,23 @@ export interface TransactionDetailReport extends SelectorView {
|
|
|
17
18
|
allVendors: Vendor[];
|
|
18
19
|
classHierarchyList: NestedClassHierarchyForReport[];
|
|
19
20
|
classList: ClassListSelectorView;
|
|
21
|
+
createTransferEntryStatus: FetchState;
|
|
22
|
+
/** Resolved credit-card pool for credit_card_payment transfer drawer. */
|
|
23
|
+
creditCardTransferAccountsList: AccountBase[];
|
|
20
24
|
deleteStatusByAttachmentName: Record<string, FetchStateAndError>;
|
|
21
|
-
hasInFlightCategoryClassRecommendations: boolean;
|
|
22
25
|
isAccountingClassesEnabled: boolean;
|
|
23
26
|
isAccountingProjectsEnabled: boolean;
|
|
24
27
|
linkedTransactions: SupportedTransactionWithCOT[];
|
|
25
28
|
projectList: ProjectListSelectorView;
|
|
26
29
|
transactionDetailLocalData: TransactionDetailLocalData;
|
|
27
30
|
transactionDetailUpdateStatus: FetchStateAndError;
|
|
31
|
+
transferAccounts: AccountBase[];
|
|
28
32
|
isUpdateNotAllowed?: boolean;
|
|
29
33
|
transaction?: SupportedTransactionWithCOT;
|
|
30
34
|
}
|
|
31
35
|
export interface VendorDetailsView extends SelectorView {
|
|
32
36
|
vendors: Vendor[];
|
|
33
37
|
}
|
|
34
|
-
export declare const getDetailInFlightRecommendations: (state: RootState, transactionId: TransactionID) => boolean;
|
|
35
38
|
export declare const getTransactionDetail: (state: RootState, transactionId: TransactionID, fetchLinkedTransactions?: boolean) => TransactionDetailReport;
|
|
36
39
|
export declare function getTransactionDetailForTransaction(rootState: RootState, transactionId: TransactionID): TransactionDetailReport | undefined;
|
|
37
40
|
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 =
|
|
6
|
+
exports.getInitialUpdatablePeriodsForTransactionRecommendations = exports.getTransactionDetail = void 0;
|
|
7
7
|
exports.getTransactionDetailForTransaction = getTransactionDetailForTransaction;
|
|
8
8
|
const get_1 = __importDefault(require("lodash/get"));
|
|
9
9
|
const reduceFetchState_1 = require("../../commonStateTypes/reduceFetchState");
|
|
@@ -15,31 +15,11 @@ const vendorSelector_1 = require("../../entity/vendor/vendorSelector");
|
|
|
15
15
|
const zeniDayJS_1 = require("../../zeniDayJS");
|
|
16
16
|
const accountListSelector_1 = require("../accountList/accountListSelector");
|
|
17
17
|
const classListSelector_1 = require("../classList/classListSelector");
|
|
18
|
+
const createTransferEntrySelector_1 = require("../createTransferEntry/createTransferEntrySelector");
|
|
18
19
|
const projectListSelector_1 = require("../projectList/projectListSelector");
|
|
19
20
|
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;
|
|
41
21
|
const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
|
|
42
|
-
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, projectState, projectListState, } = state;
|
|
22
|
+
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, createTransferEntryState, projectState, projectListState, } = state;
|
|
43
23
|
const detailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
44
24
|
const transactionDetail = (0, get_1.default)(transactionDetailState.transactionDetailById, detailKey);
|
|
45
25
|
let fetchState = {
|
|
@@ -106,7 +86,7 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
|
|
|
106
86
|
: [];
|
|
107
87
|
const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
|
|
108
88
|
const vendors = (0, vendorSelector_1.getVendorsByVendorIds)(vendorState, vendorListState.vendorIds);
|
|
109
|
-
const
|
|
89
|
+
const { transferAccountsList, creditCardTransferAccountsList } = (0, createTransferEntrySelector_1.getResolvedTransferAccounts)(state);
|
|
110
90
|
return {
|
|
111
91
|
reportId: 'transaction_detail',
|
|
112
92
|
reportTitle: 'Transaction Detail',
|
|
@@ -122,8 +102,10 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
|
|
|
122
102
|
classHierarchyList,
|
|
123
103
|
accountsHierarchyList,
|
|
124
104
|
classList: classList,
|
|
125
|
-
hasInFlightCategoryClassRecommendations,
|
|
126
105
|
isAccountingClassesEnabled,
|
|
106
|
+
createTransferEntryStatus: createTransferEntryState.createTransferEntryStatus,
|
|
107
|
+
creditCardTransferAccountsList,
|
|
108
|
+
transferAccounts: transferAccountsList,
|
|
127
109
|
isAccountingProjectsEnabled,
|
|
128
110
|
projectList,
|
|
129
111
|
isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
|
|
@@ -14,7 +14,6 @@ export interface TransactionDetailLineItemData extends TransactionLineBase {
|
|
|
14
14
|
isClassMiscategorized: boolean;
|
|
15
15
|
account?: AccountBase;
|
|
16
16
|
billable?: BillableStatus;
|
|
17
|
-
categoryClassRecommendationsFetchState?: FetchStateAndError;
|
|
18
17
|
class?: ClassBase;
|
|
19
18
|
customer?: CustomerBase;
|
|
20
19
|
isCategoryUpdateSelected?: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeniai/client-epic-state",
|
|
3
|
-
"version": "5.0.69-
|
|
3
|
+
"version": "5.0.69-betaML11",
|
|
4
4
|
"description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { concat, of, timer } from 'rxjs';
|
|
2
|
-
import { catchError, debounce, filter, groupBy, mergeMap, switchMap, } from 'rxjs/operators';
|
|
3
|
-
import { getIsAccountingClassesEnabled } from '../../entity/tenant/tenantSelector';
|
|
4
|
-
import { getTransactionWithCOT, getTransactionWithCOTFromRecommendations, } from '../../entity/transaction/transactionHelper';
|
|
5
|
-
import { createZeniAPIStatus, isSuccessResponse } from '../../responsePayload';
|
|
6
|
-
import { getUncategorizedAccounts } from '../accountList/accountListSelector';
|
|
7
|
-
import { markCategoryClassRecommendationsCompletedForCategorization, markCategoryClassRecommendationsFailureForCategorization, markCategoryClassRecommendationsInProgressForCategorization, setEntityRecommendationForLineIdsForCategorization, } from '../expenseAutomationView/reducers/transactionsViewReducer';
|
|
8
|
-
import { markCategoryClassRecommendationsCompletedForTransactionDetail, markCategoryClassRecommendationsFailureForTransactionDetail, markCategoryClassRecommendationsInProgressForTransactionDetail, setEntityRecommendationForLineIdsForTransactionDetail, } from '../transactionDetail/transactionDetailReducer';
|
|
9
|
-
import { buildRecommendationUrl, getRecommendationByLineIdWithCOTFromRecommendationPayloadWithCOT, } from './recommendationHelper';
|
|
10
|
-
import { fetchEntityRecommendationsForLineUpdate } from './recommendationReducer';
|
|
11
|
-
// Close the per-target groupBy bucket after this much idle time so inactive
|
|
12
|
-
// groups don't accumulate forever (each group holds a Subject + a chain of
|
|
13
|
-
// active subscribers; without a duration selector groupBy retains them for
|
|
14
|
-
// the lifetime of the source observable, which is the lifetime of the app).
|
|
15
|
-
// Picked at 60s to leave a generous window for re-fetches on the same
|
|
16
|
-
// payee/transaction/line target while still bounding memory.
|
|
17
|
-
const GROUP_INACTIVITY_TIMEOUT_MS = 60000;
|
|
18
|
-
// Build the groupBy key. Same flow + same transaction + same line set
|
|
19
|
-
// share a target so switchMap can cancel an in-flight prior fetch. Use
|
|
20
|
-
// NUL (\u0000) as separator because it can never appear in transaction
|
|
21
|
-
// or line ids (vs the `|` used in an earlier WIP which collides with
|
|
22
|
-
// pipe-delimited synthetic ids).
|
|
23
|
-
const SEPARATOR = '\u0000';
|
|
24
|
-
const toGroupKey = (flowType, transactionId, lineIds) => `${flowType}${SEPARATOR}${transactionId}${SEPARATOR}${[...lineIds]
|
|
25
|
-
.sort((a, b) => a.localeCompare(b))
|
|
26
|
-
.join(SEPARATOR)}`;
|
|
27
|
-
// Targeted recommendations fetch that drives the per-line skeleton, the
|
|
28
|
-
// list-page row-checkbox uncheck/recheck, and the page-level Save
|
|
29
|
-
// disable.
|
|
30
|
-
//
|
|
31
|
-
// Concurrency model:
|
|
32
|
-
// - groupBy by (flowType, transactionId, sorted lineIds) so distinct
|
|
33
|
-
// targets run in parallel.
|
|
34
|
-
// - inside each group, switchMap so a re-fetch on the SAME target
|
|
35
|
-
// cancels any prior in-flight request for that target.
|
|
36
|
-
// - groupBy duration selector closes idle groups to bound memory.
|
|
37
|
-
export const fetchEntityRecommendationsForLineUpdateEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchEntityRecommendationsForLineUpdate.match), groupBy((action) => toGroupKey(action.payload.flowType, action.payload.transactionDetails.transactionId.id, action.payload.transactionDetails.lineIds), undefined, (group$) => group$.pipe(debounce(() => timer(GROUP_INACTIVITY_TIMEOUT_MS)))), mergeMap((group$) => group$.pipe(switchMap((action) => {
|
|
38
|
-
const { entity, amount, transactionDetails, flowType, selectedTab, isFetchCOT, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
39
|
-
const { transactionId, transaction, lineIds } = transactionDetails;
|
|
40
|
-
// Synchronously emit the start arm so the per-line skeleton +
|
|
41
|
-
// row uncheck happen before the HTTP request begins.
|
|
42
|
-
const startAction = flowType === 'categorization' && selectedTab != null
|
|
43
|
-
? markCategoryClassRecommendationsInProgressForCategorization(selectedTab, transactionId, lineIds)
|
|
44
|
-
: markCategoryClassRecommendationsInProgressForTransactionDetail(transactionId, lineIds);
|
|
45
|
-
// TEMP-LOG[JE-skeleton]: epic dispatch payload — confirms the
|
|
46
|
-
// targeted-fetch fired with the expected flowType / txnId / lineIds.
|
|
47
|
-
console.log('[JE-skeleton][epic] dispatch start arm', {
|
|
48
|
-
flowType,
|
|
49
|
-
selectedTab,
|
|
50
|
-
transactionId,
|
|
51
|
-
lineIds,
|
|
52
|
-
transactionType: transaction?.type,
|
|
53
|
-
});
|
|
54
|
-
const url = buildRecommendationUrl(zeniAPI.apiEndPoints.accountMicroServiceBaseUrl, entity, amount, transactionDetails, isFetchCOT === true);
|
|
55
|
-
const httpStream$ = zeniAPI
|
|
56
|
-
.getJSON(url)
|
|
57
|
-
.pipe(mergeMap((response) => {
|
|
58
|
-
if (!isSuccessResponse(response) || response.data == null) {
|
|
59
|
-
return of(flowType === 'categorization' && selectedTab != null
|
|
60
|
-
? markCategoryClassRecommendationsFailureForCategorization(selectedTab, transactionId, lineIds, response.status)
|
|
61
|
-
: markCategoryClassRecommendationsFailureForTransactionDetail(transactionId, lineIds, response.status));
|
|
62
|
-
}
|
|
63
|
-
const recommendationWithCOTByLineId = getRecommendationByLineIdWithCOTFromRecommendationPayloadWithCOT(response.data.recommendations, lineIds);
|
|
64
|
-
// HTTP 200 with no per-line recommendations: NOT an error.
|
|
65
|
-
// Flip lines to Completed so the skeleton resolves and
|
|
66
|
-
// downstream UI can treat this as "we tried, nothing to
|
|
67
|
-
// apply".
|
|
68
|
-
if (recommendationWithCOTByLineId == null) {
|
|
69
|
-
return of(flowType === 'categorization' && selectedTab != null
|
|
70
|
-
? markCategoryClassRecommendationsCompletedForCategorization(selectedTab, transactionId, lineIds)
|
|
71
|
-
: markCategoryClassRecommendationsCompletedForTransactionDetail(transactionId, lineIds));
|
|
72
|
-
}
|
|
73
|
-
const transactionWithCOT = isFetchCOT === true
|
|
74
|
-
? getTransactionWithCOTFromRecommendations(transaction, recommendationWithCOTByLineId)
|
|
75
|
-
: getTransactionWithCOT(transaction);
|
|
76
|
-
const uncategorizedIncomeExpense = getUncategorizedAccounts(state$.value.accountState, state$.value.accountListState, 'accountList');
|
|
77
|
-
if (flowType === 'categorization' && selectedTab != null) {
|
|
78
|
-
return of(setEntityRecommendationForLineIdsForCategorization(selectedTab, transactionId, transactionWithCOT, lineIds, entity, amount, recommendationWithCOTByLineId, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled, getIsAccountingClassesEnabled(state$.value)));
|
|
79
|
-
}
|
|
80
|
-
return of(setEntityRecommendationForLineIdsForTransactionDetail(transactionId, transactionWithCOT, lineIds, entity, amount, recommendationWithCOTByLineId, uncategorizedIncomeExpense));
|
|
81
|
-
}), catchError((error) => of(flowType === 'categorization' && selectedTab != null
|
|
82
|
-
? markCategoryClassRecommendationsFailureForCategorization(selectedTab, transactionId, lineIds, createZeniAPIStatus('Unexpected Error', 'fetchEntityRecommendationsForLineUpdate failed: ' +
|
|
83
|
-
JSON.stringify(error)))
|
|
84
|
-
: markCategoryClassRecommendationsFailureForTransactionDetail(transactionId, lineIds, createZeniAPIStatus('Unexpected Error', 'fetchEntityRecommendationsForLineUpdate failed: ' +
|
|
85
|
-
JSON.stringify(error))))));
|
|
86
|
-
return concat(of(startAction), httpStream$);
|
|
87
|
-
}))));
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { RootState } from '../../reducer';
|
|
4
|
-
import { ZeniAPI } from '../../zeniAPI';
|
|
5
|
-
import { markCategoryClassRecommendationsCompletedForCategorization, markCategoryClassRecommendationsFailureForCategorization, markCategoryClassRecommendationsInProgressForCategorization, setEntityRecommendationForLineIdsForCategorization } from '../expenseAutomationView/reducers/transactionsViewReducer';
|
|
6
|
-
import { markCategoryClassRecommendationsCompletedForTransactionDetail, markCategoryClassRecommendationsFailureForTransactionDetail, markCategoryClassRecommendationsInProgressForTransactionDetail, setEntityRecommendationForLineIdsForTransactionDetail } from '../transactionDetail/transactionDetailReducer';
|
|
7
|
-
import { fetchEntityRecommendationsForLineUpdate } from './recommendationReducer';
|
|
8
|
-
export type ActionType = ReturnType<typeof fetchEntityRecommendationsForLineUpdate> | ReturnType<typeof markCategoryClassRecommendationsInProgressForCategorization> | ReturnType<typeof markCategoryClassRecommendationsCompletedForCategorization> | ReturnType<typeof markCategoryClassRecommendationsFailureForCategorization> | ReturnType<typeof markCategoryClassRecommendationsInProgressForTransactionDetail> | ReturnType<typeof markCategoryClassRecommendationsCompletedForTransactionDetail> | ReturnType<typeof markCategoryClassRecommendationsFailureForTransactionDetail> | ReturnType<typeof setEntityRecommendationForLineIdsForCategorization> | ReturnType<typeof setEntityRecommendationForLineIdsForTransactionDetail>;
|
|
9
|
-
export declare const fetchEntityRecommendationsForLineUpdateEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|