@zeniai/client-epic-state 5.0.69-betaML52 → 5.0.69-betaML6

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 (98) hide show
  1. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  2. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +0 -2
  3. package/lib/entity/account/accountSelector.d.ts +0 -9
  4. package/lib/entity/account/accountSelector.js +1 -14
  5. package/lib/entity/account/accountState.d.ts +1 -1
  6. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  7. package/lib/entity/class/classReducer.d.ts +4 -4
  8. package/lib/entity/class/classState.d.ts +1 -1
  9. package/lib/entity/forecast/forecastState.d.ts +1 -1
  10. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  11. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  12. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  13. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  14. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  15. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  16. package/lib/entity/snackbar/snackbarTypes.js +0 -1
  17. package/lib/entity/tenant/clearAllEpic.d.ts +1 -2
  18. package/lib/entity/tenant/clearAllEpic.js +0 -2
  19. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +0 -4
  20. package/lib/entity/transaction/payloadTypes/transactionPayload.js +10 -18
  21. package/lib/entity/transaction/stateTypes/transaction.d.ts +0 -3
  22. package/lib/epic.d.ts +2 -3
  23. package/lib/epic.js +2 -3
  24. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +0 -2
  25. package/lib/esm/entity/account/accountSelector.js +0 -11
  26. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -1
  27. package/lib/esm/entity/tenant/clearAllEpic.js +0 -2
  28. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +10 -18
  29. package/lib/esm/epic.js +2 -3
  30. package/lib/esm/index.js +8 -9
  31. package/lib/esm/reducer.js +0 -3
  32. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -8
  33. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +21 -1
  34. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +117 -26
  35. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +32 -9
  36. package/lib/esm/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +83 -0
  37. package/lib/esm/view/recommendation/recommendationHelper.js +29 -0
  38. package/lib/esm/view/recommendation/recommendationReducer.js +36 -1
  39. package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +2 -14
  40. package/lib/esm/view/transactionDetail/transactionDetailReducer.js +95 -3
  41. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +23 -6
  42. package/lib/index.d.ts +9 -9
  43. package/lib/index.js +36 -43
  44. package/lib/reducer.d.ts +0 -3
  45. package/lib/reducer.js +0 -3
  46. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  47. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  48. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  49. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  50. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  51. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  52. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  53. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +1 -2
  54. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -8
  55. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +2 -1
  56. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +23 -2
  57. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +15 -4
  58. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +117 -26
  59. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +3 -4
  60. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +3 -1
  61. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +33 -11
  62. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -0
  63. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  64. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  65. package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.d.ts +9 -0
  66. package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +87 -0
  67. package/lib/view/recommendation/recommendationHelper.d.ts +9 -0
  68. package/lib/view/recommendation/recommendationHelper.js +31 -1
  69. package/lib/view/recommendation/recommendationReducer.d.ts +18 -1
  70. package/lib/view/recommendation/recommendationReducer.js +37 -2
  71. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  72. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  73. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  74. package/lib/view/topEx/topExSelector.d.ts +1 -1
  75. package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +1 -2
  76. package/lib/view/transactionDetail/epics/transactionDetailEpic.js +2 -14
  77. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  78. package/lib/view/transactionDetail/transactionDetailReducer.d.ts +12 -3
  79. package/lib/view/transactionDetail/transactionDetailReducer.js +96 -4
  80. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +3 -6
  81. package/lib/view/transactionDetail/transactionDetailSelector.js +25 -7
  82. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +1 -0
  83. package/package.json +1 -1
  84. package/lib/esm/view/createTransferEntry/createTransferEntryReducer.js +0 -72
  85. package/lib/esm/view/createTransferEntry/createTransferEntrySelector.js +0 -64
  86. package/lib/esm/view/createTransferEntry/createTransferEntryState.js +0 -17
  87. package/lib/esm/view/createTransferEntry/epics/createTransferEntryEpic.js +0 -130
  88. package/lib/esm/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +0 -36
  89. package/lib/view/createTransferEntry/createTransferEntryReducer.d.ts +0 -32
  90. package/lib/view/createTransferEntry/createTransferEntryReducer.js +0 -76
  91. package/lib/view/createTransferEntry/createTransferEntrySelector.d.ts +0 -39
  92. package/lib/view/createTransferEntry/createTransferEntrySelector.js +0 -69
  93. package/lib/view/createTransferEntry/createTransferEntryState.d.ts +0 -30
  94. package/lib/view/createTransferEntry/createTransferEntryState.js +0 -20
  95. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.d.ts +0 -11
  96. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.js +0 -134
  97. package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.d.ts +0 -14
  98. package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +0 -40
@@ -1,12 +1,12 @@
1
1
  import { DashboardState } from './dashboardState';
2
2
  export declare const initialState: DashboardState;
3
- export declare const fetchDashboard: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[userId: string, companyId: string, tenantId: string, fetchFullReport?: any, cacheOverride?: any, excludeResources?: ("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")[] | undefined], {
3
+ export declare const fetchDashboard: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[userId: string, companyId: string, tenantId: string, fetchFullReport?: any, cacheOverride?: any, excludeResources?: ("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")[] | undefined], {
4
4
  userId: string;
5
5
  companyId: string;
6
6
  tenantId: string;
7
7
  fetchFullReport: any;
8
8
  cacheOverride: any;
9
- excludeResources: ("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")[];
9
+ excludeResources: ("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")[];
10
10
  }, "dashboard/fetchDashboard", never, never>, updateTreasuryVideoClosed: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"dashboard/updateTreasuryVideoClosed">, clearDashboard: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"dashboard/clearDashboard">;
11
11
  declare const _default: import("redux").Reducer<DashboardState>;
12
12
  export default _default;
@@ -3,9 +3,8 @@ import { Observable } from 'rxjs';
3
3
  import { RootState } from '../../../../reducer';
4
4
  import { fetchAccountList } from '../../../accountList/accountListReducer';
5
5
  import { fetchClassList } from '../../../classList/classListReducer';
6
- import { fetchAccountsForTransferFlow } from '../../../createTransferEntry/createTransferEntryReducer';
7
6
  import { fetchOwnerList } from '../../../ownerList/ownerListReducer';
8
7
  import { fetchProjectList } from '../../../projectList/projectListReducer';
9
8
  import { fetchTransactionCategorization, fetchTransactionCategorizationView } from '../../reducers/transactionsViewReducer';
10
- export type ActionType = ReturnType<typeof fetchTransactionCategorizationView> | ReturnType<typeof fetchTransactionCategorization> | ReturnType<typeof fetchAccountList> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchOwnerList> | ReturnType<typeof fetchAccountsForTransferFlow> | ReturnType<typeof fetchProjectList>;
9
+ export type ActionType = ReturnType<typeof fetchTransactionCategorizationView> | ReturnType<typeof fetchTransactionCategorization> | ReturnType<typeof fetchAccountList> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchOwnerList> | ReturnType<typeof fetchProjectList>;
11
10
  export declare const fetchTransactionCategorizationViewEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -7,7 +7,6 @@ const timePeriod_1 = require("../../../../commonStateTypes/timePeriod");
7
7
  const tenantSelector_1 = require("../../../../entity/tenant/tenantSelector");
8
8
  const accountListReducer_1 = require("../../../accountList/accountListReducer");
9
9
  const classListReducer_1 = require("../../../classList/classListReducer");
10
- const createTransferEntryReducer_1 = require("../../../createTransferEntry/createTransferEntryReducer");
11
10
  const ownerListReducer_1 = require("../../../ownerList/ownerListReducer");
12
11
  const projectListReducer_1 = require("../../../projectList/projectListReducer");
13
12
  const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
@@ -27,13 +26,6 @@ const fetchTransactionCategorizationViewEpic = (actions$, state$) => actions$.pi
27
26
  accountList.fetchState === 'Not-Started') {
28
27
  updateActions.push((0, accountListReducer_1.fetchAccountList)('accountList', true));
29
28
  }
30
- const { transferEntryEligible, creditCardOnlyEligible } = state$.value.createTransferEntryState.transferAccountsByType;
31
- if (transferEntryEligible.fetchState === 'Not-Started') {
32
- updateActions.push((0, createTransferEntryReducer_1.fetchAccountsForTransferFlow)({ kind: 'transferEntryEligible' }));
33
- }
34
- if (creditCardOnlyEligible.fetchState === 'Not-Started') {
35
- updateActions.push((0, createTransferEntryReducer_1.fetchAccountsForTransferFlow)({ kind: 'creditCardOnlyEligible' }));
36
- }
37
29
  const classList = state$.value.classListState;
38
30
  if (classList.hasValidState() === false &&
39
31
  classList.fetchState === 'Not-Started') {
@@ -27,6 +27,7 @@ export declare const removeTransactionFromTabView: (tabView: TransactionsTabView
27
27
  */
28
28
  export declare const filterAutoTabLineItems: (tabView: TransactionsTabViewState, transactionId: ID, updatedTransaction: SupportedTransactionWithCOT) => void;
29
29
  export declare const MAX_SELECTION_LIMIT = 5;
30
+ export declare const shouldAutoSelectAndAdd: (transaction: SupportedTransactionWithCOT, localData: TransactionReviewLocalData, selectedCheckBoxTransactionIds: ID[], uncategorizedAccounts: UncategorizedAccounts, isUncategorizedExpenseCategoryEnabled?: boolean, isAccountingClassesEnabled?: boolean) => boolean;
30
31
  export declare const toTransactionDetailLocalData: (transaction: SupportedTransactionWithCOT, selectedTab: TransactionsTab, lineItemsByTransactionIds: string[], uncategorizedIncomeExpense: UncategorizedAccounts, isUncategorizedExpenseCategoryEnabled?: boolean) => TransactionReviewLocalData;
31
32
  export declare const toSetAllLineItemsToCategoryClass: (draft: TransactionsTabViewState, transaction: SupportedTransactionWithCOT, transactionId: ID, transactionLineId: ID, transactionDetailLocalData: TransactionReviewLocalData, updatedItem: "category" | "class" | "project", uncategorizedAccounts: UncategorizedAccounts, selectedTab: TransactionsTab, vendorId?: ID, customerId?: ID, selectedAccount?: AccountBase, selectedClassBase?: ClassBase, selectedProjectBase?: ProjectBase, isUncategorizedExpenseCategoryEnabled?: boolean, isAccountingClassesEnabled?: boolean) => {
32
33
  localData: TransactionReviewLocalData;
@@ -38,7 +39,7 @@ export declare const getLineItemsByTransactionsIdsFromResponse: (transactions: S
38
39
  export declare const getLineItemsByTransactionIdsFromLocalData: (transactionLocalData: TransactionReviewLocalDataSelectorView[], selectedTab: TransactionsTab) => Record<ID, string[]>;
39
40
  export declare const mergeTabSpecificLineItems: (currentTabSpecificLineItems: TabSpecificLineItems, selectedTab: TransactionsTab, newLineItems: TabSpecificLineItems) => TabSpecificLineItems;
40
41
  export declare const getSnackbarMessageForTransactionReview: (updatedCount: number, failedCount: number, categorizedCount: number) => {
41
- messageSection: "common" | "transactionDetails_updatingPastTransactions" | "transactionDetails_transactionUpdated" | "cockpit_month_end_email_sent" | "cockpit_month_end_email_save" | "cockpit_month_end_email_attachment_upload" | "je_bill_link" | "je_posted" | "audit_score_updated" | "people_invite_people" | "people_invite_multiple_people" | "people_delete_person" | "people_update_person" | "reimbursement_updated" | "reimbursement_deleted" | "reimbursement_cancelled_deleted" | "reimbursement_cancelled" | "reimbursement_approved" | "reimbursement_rejected" | "reimbursement_sent_for_approval" | "account_added" | "business_verification_save" | "business_verification_submit" | "business_verification_from_bills_submit" | "plaid_connection" | "unlink_deposit_account" | "reimbursement_setup" | "reimbursement_approval_create" | "reimbursement_duplicate_approval_create" | "reimbursement_approval_update" | "reimbursement_duplicate_approval_update" | "reimbursement_approval_delete" | "reimbursement_create_mileage" | "reimbursement_update_mileage" | "reimbursement_accept_term" | "reimbursement_accept_employee_term" | "reimbursement_bulk_submit" | "reimbursement_bulk_processed" | "bill_pay_setup" | "zeni_accounts_setup" | "bill_pay_approval_create" | "bill_pay_duplicate_approval_create" | "bill_pay_approval_update" | "bill_pay_duplicate_approval_update" | "bill_pay_approval_delete" | "bill_pay_updated" | "bill_pay_deleted" | "bill_pay_cancelled_deleted" | "bill_pay_cancelled" | "bill_pay_approved" | "real_time_approver_added" | "bill_pay_rejected" | "bill_pay_sent_for_approval" | "bill_pay_accept_term" | "bill_pay_bulk_submit" | "bill_pay_bulk_processed" | "bill_pay_refund" | "bill_pay_retry" | "bill_pay_marked_as_paid" | "zeni_account_accept_term" | "update_vendor" | "data_refresh_update" | "delete_bank_account" | "create_bank_account" | "create_bank_account_ach" | "create_bank_account_wire" | "create_bank_account_international" | "transfer_money" | "update_zeni_account_nickname" | "create_checking_account" | "deposit_check" | "create_vendor" | "onboarding_customer_view" | "onboarding_customer_view_complete" | "onboarding_customer_identity_verification_save" | "onboarding_customer_identity_verification_submit" | "onboarding_customer_business_verification_save" | "onboarding_customer_business_verification_submit" | "retry_bank_account_connection" | "dashboard_invite_sent" | "onboarding_info_saved" | "approve_original_merchant" | "approve_global_merchant" | "reject_global_merchant" | "create_global_merchant" | "fetch_global_merchant_no_recommendation" | "save_vendor_renamed" | "save_vendor_sent_for_review" | "save_vendor_marked_as_employee" | "save_vendor_marked_as_local_contractor" | "charge_card_setup" | "charge_card_accept_term" | "charge_card_receipt_upload" | "charge_card_resend_invite" | "charge_card_revoke_invite" | "charge_card_update_limit" | "charge_cards_update_limit" | "close_charge_card" | "lock_charge_card" | "lock_charge_card_card_user" | "lock_charge_cards" | "unlock_charge_card" | "unlock_charge_card_card_user" | "unlock_charge_cards" | "close_charge_cards" | "revoke_invite_charge_cards" | "charge_card_express_interest" | "create_schedule" | "save_schedule" | "delete_schedule" | "ignore_schedule" | "save_task_detail" | "fetch_task_detail" | "delete_task" | "archive_task" | "snooze_task" | "unsnooze_task" | "create_tag" | "delete_tag" | "update_charge_card" | "update_charge_card_name" | "update_charge_card_name_card_user" | "issue_charge_card" | "issue_charge_cards" | "notification_settings_saved" | "referral_invite_sent" | "notification_mark_as_read" | "mark_as_complete_schedule" | "cancel_journal_entry" | "settings_accounting_accounts_updated" | "create_card_setup" | "confirm_card_setup" | "add_card_payment_source" | "fetch_payment_sources" | "task_assigned_toast_notification" | "task_due_tomorrow_toast_notification" | "task_deleted_toast_notification" | "task_archived_toast_notification" | "task_overdue_toast_notification" | "task_overdue_toast_notification_creator" | "task_notification_count" | "task_activities_toast_notification" | "task_created_toast_notification" | "task_group_creation_success" | "task_group_deletion_success" | "task_group_update_success" | "primary_funding_account_updated" | "task_time_spent_validation" | "missing_receipts_attachment" | "flux_analysis_unreviewed" | "flux_analysis_reviewed" | "receipt_match" | "receipts_upload" | "receipts_bulk_match" | "billing_address_view" | "express_pay_submit" | "exclude_transaction" | "reconcile" | "save_reconcile_for_later" | "recon_transaction_categorize" | "recon_transaction_match" | "update_debit_card_pin_attempt" | "set_debit_card_pin" | "ai_cfo_create_session_and_submit" | "ai_cfo_chat_session_deleted" | "charge_card_auto_pay_enable" | "charge_card_auto_pay_disable" | "treasury_setup" | "treasury_accept_term" | "treasury_transfer_money" | "treasury_transfer_money_failed" | "auto_transfer_rule_create" | "auto_transfer_rule_update" | "auto_transfer_rule_delete" | "auto_transfer_rule_pause" | "auto_transfer_rule_resume" | "treasury_update_portfolio_allocation" | "send_email_magic_link_to_user" | "complete_profile_done" | "create_transfer_entry" | "reports_resync" | "invalid_phone_number" | "transactions_categorized_updated_failed" | "transaction_categorized_updated_failed" | "transactionsCategorized_transactionsUpdated" | "transactionsCategorized_transactionUpdated" | "transactionCategorized_transactionsUpdated" | "transactionCategorized_transactionUpdated" | "transactionsCategorized_transactionsFailed" | "transactionsCategorized_transactionFailed" | "transactionCategorized_transactionsFailed" | "transactionCategorized_transactionFailed" | "transactionsUpdated_transactionsFailed" | "transactionsUpdated_transactionFailed" | "transactionUpdated_transactionsFailed" | "transactionUpdated_transactionFailed" | "transactionsCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionsUpdated_transactionFailed" | "transactionsCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionUpdated_transactionFailed" | "transactionCategorized_transactionsUpdated_transactionFailed" | "transactionCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionUpdated_transactionFailed" | "accounting_classes_enabled_update" | "account_excluded_from_reconciliation" | "account_included_in_reconciliation" | "ai_accountant_trigger_job" | "oauth_consent_approve" | "oauth_consent_invalid_request" | "credit_agent_update_profile" | "credit_agent_save_macro" | "credit_agent_schedule_cron";
42
+ messageSection: "common" | "transactionDetails_updatingPastTransactions" | "transactionDetails_transactionUpdated" | "cockpit_month_end_email_sent" | "cockpit_month_end_email_save" | "cockpit_month_end_email_attachment_upload" | "je_bill_link" | "je_posted" | "audit_score_updated" | "people_invite_people" | "people_invite_multiple_people" | "people_delete_person" | "people_update_person" | "reimbursement_updated" | "reimbursement_deleted" | "reimbursement_cancelled_deleted" | "reimbursement_cancelled" | "reimbursement_approved" | "reimbursement_rejected" | "reimbursement_sent_for_approval" | "account_added" | "business_verification_save" | "business_verification_submit" | "business_verification_from_bills_submit" | "plaid_connection" | "unlink_deposit_account" | "reimbursement_setup" | "reimbursement_approval_create" | "reimbursement_duplicate_approval_create" | "reimbursement_approval_update" | "reimbursement_duplicate_approval_update" | "reimbursement_approval_delete" | "reimbursement_create_mileage" | "reimbursement_update_mileage" | "reimbursement_accept_term" | "reimbursement_accept_employee_term" | "reimbursement_bulk_submit" | "reimbursement_bulk_processed" | "bill_pay_setup" | "zeni_accounts_setup" | "bill_pay_approval_create" | "bill_pay_duplicate_approval_create" | "bill_pay_approval_update" | "bill_pay_duplicate_approval_update" | "bill_pay_approval_delete" | "bill_pay_updated" | "bill_pay_deleted" | "bill_pay_cancelled_deleted" | "bill_pay_cancelled" | "bill_pay_approved" | "real_time_approver_added" | "bill_pay_rejected" | "bill_pay_sent_for_approval" | "bill_pay_accept_term" | "bill_pay_bulk_submit" | "bill_pay_bulk_processed" | "bill_pay_refund" | "bill_pay_retry" | "bill_pay_marked_as_paid" | "zeni_account_accept_term" | "update_vendor" | "data_refresh_update" | "delete_bank_account" | "create_bank_account" | "create_bank_account_ach" | "create_bank_account_wire" | "create_bank_account_international" | "transfer_money" | "update_zeni_account_nickname" | "create_checking_account" | "deposit_check" | "create_vendor" | "onboarding_customer_view" | "onboarding_customer_view_complete" | "onboarding_customer_identity_verification_save" | "onboarding_customer_identity_verification_submit" | "onboarding_customer_business_verification_save" | "onboarding_customer_business_verification_submit" | "retry_bank_account_connection" | "dashboard_invite_sent" | "onboarding_info_saved" | "approve_original_merchant" | "approve_global_merchant" | "reject_global_merchant" | "create_global_merchant" | "fetch_global_merchant_no_recommendation" | "save_vendor_renamed" | "save_vendor_sent_for_review" | "save_vendor_marked_as_employee" | "save_vendor_marked_as_local_contractor" | "charge_card_setup" | "charge_card_accept_term" | "charge_card_receipt_upload" | "charge_card_resend_invite" | "charge_card_revoke_invite" | "charge_card_update_limit" | "charge_cards_update_limit" | "close_charge_card" | "lock_charge_card" | "lock_charge_card_card_user" | "lock_charge_cards" | "unlock_charge_card" | "unlock_charge_card_card_user" | "unlock_charge_cards" | "close_charge_cards" | "revoke_invite_charge_cards" | "charge_card_express_interest" | "create_schedule" | "save_schedule" | "delete_schedule" | "ignore_schedule" | "save_task_detail" | "fetch_task_detail" | "delete_task" | "archive_task" | "snooze_task" | "unsnooze_task" | "create_tag" | "delete_tag" | "update_charge_card" | "update_charge_card_name" | "update_charge_card_name_card_user" | "issue_charge_card" | "issue_charge_cards" | "notification_settings_saved" | "referral_invite_sent" | "notification_mark_as_read" | "mark_as_complete_schedule" | "cancel_journal_entry" | "settings_accounting_accounts_updated" | "create_card_setup" | "confirm_card_setup" | "add_card_payment_source" | "fetch_payment_sources" | "task_assigned_toast_notification" | "task_due_tomorrow_toast_notification" | "task_deleted_toast_notification" | "task_archived_toast_notification" | "task_overdue_toast_notification" | "task_overdue_toast_notification_creator" | "task_notification_count" | "task_activities_toast_notification" | "task_created_toast_notification" | "task_group_creation_success" | "task_group_deletion_success" | "task_group_update_success" | "primary_funding_account_updated" | "task_time_spent_validation" | "missing_receipts_attachment" | "flux_analysis_unreviewed" | "flux_analysis_reviewed" | "receipt_match" | "receipts_upload" | "receipts_bulk_match" | "billing_address_view" | "express_pay_submit" | "exclude_transaction" | "reconcile" | "save_reconcile_for_later" | "recon_transaction_categorize" | "recon_transaction_match" | "update_debit_card_pin_attempt" | "set_debit_card_pin" | "ai_cfo_create_session_and_submit" | "ai_cfo_chat_session_deleted" | "charge_card_auto_pay_enable" | "charge_card_auto_pay_disable" | "treasury_setup" | "treasury_accept_term" | "treasury_transfer_money" | "treasury_transfer_money_failed" | "auto_transfer_rule_create" | "auto_transfer_rule_update" | "auto_transfer_rule_delete" | "auto_transfer_rule_pause" | "auto_transfer_rule_resume" | "treasury_update_portfolio_allocation" | "send_email_magic_link_to_user" | "complete_profile_done" | "reports_resync" | "invalid_phone_number" | "transactions_categorized_updated_failed" | "transaction_categorized_updated_failed" | "transactionsCategorized_transactionsUpdated" | "transactionsCategorized_transactionUpdated" | "transactionCategorized_transactionsUpdated" | "transactionCategorized_transactionUpdated" | "transactionsCategorized_transactionsFailed" | "transactionsCategorized_transactionFailed" | "transactionCategorized_transactionsFailed" | "transactionCategorized_transactionFailed" | "transactionsUpdated_transactionsFailed" | "transactionsUpdated_transactionFailed" | "transactionUpdated_transactionsFailed" | "transactionUpdated_transactionFailed" | "transactionsCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionsUpdated_transactionFailed" | "transactionsCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionUpdated_transactionFailed" | "transactionCategorized_transactionsUpdated_transactionFailed" | "transactionCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionUpdated_transactionFailed" | "accounting_classes_enabled_update" | "account_excluded_from_reconciliation" | "account_included_in_reconciliation" | "ai_accountant_trigger_job" | "oauth_consent_approve" | "oauth_consent_invalid_request" | "credit_agent_update_profile" | "credit_agent_save_macro" | "credit_agent_schedule_cron";
42
43
  messageText: "notification" | "failed" | "success";
43
44
  type: "error" | "success" | "info";
44
45
  variables: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasTransactionLocalDataChanges = exports.isAnyItemWithUncategorizedExpenseAccount = exports.getSnackbarMessageForTransactionReview = exports.mergeTabSpecificLineItems = exports.getLineItemsByTransactionIdsFromLocalData = exports.getLineItemsByTransactionsIdsFromResponse = exports.checkIfAllLineItemsAreCategoryClassFilled = exports.setEntityRecommendationForLineIdInLocalData = exports.toSetAllLineItemsToCategoryClass = exports.toTransactionDetailLocalData = exports.MAX_SELECTION_LIMIT = exports.filterAutoTabLineItems = exports.removeTransactionFromTabView = exports.getPendingReviewLineIdsFromTransaction = void 0;
3
+ exports.hasTransactionLocalDataChanges = exports.isAnyItemWithUncategorizedExpenseAccount = exports.getSnackbarMessageForTransactionReview = exports.mergeTabSpecificLineItems = exports.getLineItemsByTransactionIdsFromLocalData = exports.getLineItemsByTransactionsIdsFromResponse = exports.checkIfAllLineItemsAreCategoryClassFilled = exports.setEntityRecommendationForLineIdInLocalData = exports.toSetAllLineItemsToCategoryClass = exports.toTransactionDetailLocalData = exports.shouldAutoSelectAndAdd = exports.MAX_SELECTION_LIMIT = exports.filterAutoTabLineItems = exports.removeTransactionFromTabView = exports.getPendingReviewLineIdsFromTransaction = void 0;
4
4
  const vendorTransaction_1 = require("../../../entity/transaction/stateTypes/vendorTransaction");
5
5
  const transactionDetailLocalDataHelper_1 = require("../../transactionDetail/transactionDetailLocalDataHelper");
6
6
  const transactionDetailLocalDataHelper_2 = require("../../transactionDetail/transactionDetailLocalDataHelper");
@@ -65,6 +65,23 @@ const filterAutoTabLineItems = (tabView, transactionId, updatedTransaction) => {
65
65
  };
66
66
  exports.filterAutoTabLineItems = filterAutoTabLineItems;
67
67
  exports.MAX_SELECTION_LIMIT = 5;
68
+ // Returns true when the transaction should be auto-added to the
69
+ // selectedCheckBoxTransactionIds list after a categorization-related
70
+ // state mutation: all line items are filled, the selection limit has
71
+ // not been hit, and the id isn't already in the list. Consolidates the
72
+ // triplet that was inlined at four sites (updateSelectedCustomer/Vendor,
73
+ // setAllItemsToCategoryClassInLocalDataForCategorization, and
74
+ // setEntityRecommendationForLineIdInLocalData below).
75
+ const shouldAutoSelectAndAdd = (transaction, localData, selectedCheckBoxTransactionIds, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) => {
76
+ if (selectedCheckBoxTransactionIds.includes(transaction.id)) {
77
+ return false;
78
+ }
79
+ if (selectedCheckBoxTransactionIds.length >= exports.MAX_SELECTION_LIMIT) {
80
+ return false;
81
+ }
82
+ return (0, exports.checkIfAllLineItemsAreCategoryClassFilled)(transaction, localData, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled);
83
+ };
84
+ exports.shouldAutoSelectAndAdd = shouldAutoSelectAndAdd;
68
85
  const toTransactionDetailLocalData = (transaction, selectedTab, lineItemsByTransactionIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) => {
69
86
  const transactionLocal = {
70
87
  ...transactionsViewState_1.initialSupportedTransactionCategorization.transactionReviewLocalData,
@@ -552,10 +569,14 @@ const setEntityRecommendationForLineIdInLocalData = (draft, transaction, transac
552
569
  selectedEntity: transactionDetailLocalData.selectedEntity,
553
570
  tabSpecificLineItems: transactionDetailLocalData.tabSpecificLineItems,
554
571
  };
572
+ // Auto-uncheck if not all line items are filled (the row's
573
+ // category/class became stale after the entity update). Otherwise
574
+ // route through shouldAutoSelectAndAdd so the MAX_SELECTION_LIMIT
575
+ // gate is consistently applied across all auto-add sites.
555
576
  if (!(0, exports.checkIfAllLineItemsAreCategoryClassFilled)(transaction, newLocalData, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled)) {
556
577
  selectedCheckBoxTransactionIds = selectedCheckBoxTransactionIds.filter((id) => id !== transaction.id);
557
578
  }
558
- else if (selectedCheckBoxTransactionIds.includes(transaction.id) === false) {
579
+ else if ((0, exports.shouldAutoSelectAndAdd)(transaction, newLocalData, selectedCheckBoxTransactionIds, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled)) {
559
580
  selectedCheckBoxTransactionIds.push(transaction.id);
560
581
  }
561
582
  draft.selectedCheckBoxTransactionIds = selectedCheckBoxTransactionIds;
@@ -157,7 +157,20 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
157
157
  uncategorizedAccounts: UncategorizedAccounts;
158
158
  isAccountingClassesEnabled: boolean | undefined;
159
159
  isUncategorizedExpenseCategoryEnabled: boolean | undefined;
160
- }, "expenseAutomationTransactionsView/setEntityRecommendationForLineIdsForCategorization", never, never>, updateSelectedTransactionId: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
160
+ }, "expenseAutomationTransactionsView/setEntityRecommendationForLineIdsForCategorization", never, never>, markCategoryClassRecommendationsInProgressForCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: TransactionID, lineIds: string[]], {
161
+ selectedTab: "review" | "autoCategorized";
162
+ transactionId: TransactionID;
163
+ lineIds: string[];
164
+ }, "expenseAutomationTransactionsView/markCategoryClassRecommendationsInProgressForCategorization", never, never>, markCategoryClassRecommendationsCompletedForCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: TransactionID, lineIds: string[]], {
165
+ selectedTab: "review" | "autoCategorized";
166
+ transactionId: TransactionID;
167
+ lineIds: string[];
168
+ }, "expenseAutomationTransactionsView/markCategoryClassRecommendationsCompletedForCategorization", never, never>, markCategoryClassRecommendationsFailureForCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: TransactionID, lineIds: string[], error: ZeniAPIStatus<Record<string, unknown>>], {
169
+ selectedTab: "review" | "autoCategorized";
170
+ transactionId: TransactionID;
171
+ lineIds: string[];
172
+ error: ZeniAPIStatus<Record<string, unknown>>;
173
+ }, "expenseAutomationTransactionsView/markCategoryClassRecommendationsFailureForCategorization", never, never>, updateSelectedTransactionId: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
161
174
  lineId: ID;
162
175
  selectedTab: TransactionsTab;
163
176
  transactionId: ID;
@@ -170,9 +183,7 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
170
183
  }, "expenseAutomationTransactionsView/syncTransactionCategorizationFromDetailSave", never, never>, backgroundRefetchReviewTab: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[period: TimePeriod, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
171
184
  period: TimePeriod;
172
185
  isUncategorizedExpenseCategoryEnabled: boolean | undefined;
173
- }, "expenseAutomationTransactionsView/backgroundRefetchReviewTab", never, never>, removeTransactionFromAllTabs: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: string], {
174
- transactionId: string;
175
- }, "expenseAutomationTransactionsView/removeTransactionFromAllTabs", never, never>, updateTransactionCategorizationUploadReceiptState: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: string, fetchStatus: FetchStateAndError], {
186
+ }, "expenseAutomationTransactionsView/backgroundRefetchReviewTab", never, never>, updateTransactionCategorizationUploadReceiptState: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: string, fetchStatus: FetchStateAndError], {
176
187
  selectedTab: "review" | "autoCategorized";
177
188
  transactionId: string;
178
189
  fetchStatus: FetchStateAndError;
@@ -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.uploadTransactionCategorizationReceiptSuccess = exports.updateTransactionCategorizationUploadReceiptState = exports.removeTransactionFromAllTabs = exports.backgroundRefetchReviewTab = exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateParentTotalCountForTab = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateTransactionCategorizationCompletedSubTab = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
7
+ exports.uploadTransactionCategorizationReceiptSuccess = exports.updateTransactionCategorizationUploadReceiptState = exports.backgroundRefetchReviewTab = exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.markCategoryClassRecommendationsFailureForCategorization = exports.markCategoryClassRecommendationsCompletedForCategorization = exports.markCategoryClassRecommendationsInProgressForCategorization = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateParentTotalCountForTab = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateTransactionCategorizationCompletedSubTab = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
8
8
  const toolkit_1 = require("@reduxjs/toolkit");
9
9
  const get_1 = __importDefault(require("lodash/get"));
10
10
  const uniq_1 = __importDefault(require("lodash/uniq"));
@@ -12,7 +12,6 @@ const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
12
12
  const vendorTransaction_1 = require("../../../entity/transaction/stateTypes/vendorTransaction");
13
13
  const transactionCategorizationLocalDataHelper_1 = require("../helpers/transactionCategorizationLocalDataHelper");
14
14
  const completedSubTab_1 = require("../types/completedSubTab");
15
- const transactionsViewState_1 = require("../types/transactionsViewState");
16
15
  exports.initialTransactionTabViewState = {
17
16
  saveStatus: {
18
17
  fetchState: 'Not-Started',
@@ -428,12 +427,9 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
428
427
  const selectedCheckBoxTransactionIds = draft.transactionCategorizationView[selectedTab]
429
428
  .selectedCheckBoxTransactionIds;
430
429
  if (selectedTransaction != null &&
431
- (0, transactionCategorizationLocalDataHelper_1.checkIfAllLineItemsAreCategoryClassFilled)(selectedTransaction, newTransactionLocalData, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) === true && // check if all line items are filled
432
- selectedCheckBoxTransactionIds.length < transactionCategorizationLocalDataHelper_1.MAX_SELECTION_LIMIT &&
433
- selectedCheckBoxTransactionIds.includes(transactionId) === false) {
430
+ (0, transactionCategorizationLocalDataHelper_1.shouldAutoSelectAndAdd)(selectedTransaction, newTransactionLocalData, selectedCheckBoxTransactionIds, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled)) {
434
431
  draft.transactionCategorizationView[selectedTab].selectedCheckBoxTransactionIds = [
435
- ...draft.transactionCategorizationView[selectedTab]
436
- .selectedCheckBoxTransactionIds,
432
+ ...selectedCheckBoxTransactionIds,
437
433
  transactionId,
438
434
  ];
439
435
  }
@@ -516,9 +512,26 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
516
512
  const transactionLocalData = (0, get_1.default)(draft.transactionCategorizationView[selectedTab]
517
513
  .transactionReviewLocalDataById, transactionId.id, undefined);
518
514
  if (transactionLocalData != null) {
515
+ const newLocalData = (0, transactionCategorizationLocalDataHelper_1.setEntityRecommendationForLineIdInLocalData)(draft.transactionCategorizationView[selectedTab], transaction, transactionLocalData.transactionReviewLocalData, entity, lineIds, uncategorizedAccounts, action.payload.recommendationWithCOTByLineId, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled);
516
+ // Release the per-line fetch flag for every line this fetch
517
+ // covered. Done in-place on the freshly returned local data
518
+ // (the helper produces a new mutable object), before we write
519
+ // it back to the draft.
520
+ lineIds.forEach((lineId) => {
521
+ const lineItem = newLocalData.lineItemById[lineId];
522
+ if (lineItem != null) {
523
+ newLocalData.lineItemById[lineId] = {
524
+ ...lineItem,
525
+ categoryClassRecommendationsFetchState: {
526
+ fetchState: 'Completed',
527
+ error: undefined,
528
+ },
529
+ };
530
+ }
531
+ });
519
532
  draft.transactionCategorizationView[selectedTab].transactionReviewLocalDataById[transaction.id] = {
520
533
  transactionId: transaction.id,
521
- transactionReviewLocalData: (0, transactionCategorizationLocalDataHelper_1.setEntityRecommendationForLineIdInLocalData)(draft.transactionCategorizationView[selectedTab], transaction, transactionLocalData.transactionReviewLocalData, entity, lineIds, uncategorizedAccounts, action.payload.recommendationWithCOTByLineId, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled),
534
+ transactionReviewLocalData: newLocalData,
522
535
  };
523
536
  // Mark transaction as dirty (autofill happened)
524
537
  if (!draft.transactionCategorizationView[selectedTab].transactionIdsWithUnsavedData.includes(transaction.id)) {
@@ -531,6 +544,99 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
531
544
  }
532
545
  },
533
546
  },
547
+ // Start arm of the line-update recommendations fetch. Flips covered
548
+ // lines to In-Progress AND removes the transaction from
549
+ // selectedCheckBoxTransactionIds — the row is unchecked + disabled
550
+ // until either the success arm (recheck if limit allows) or the
551
+ // failure arm releases the per-line flag.
552
+ markCategoryClassRecommendationsInProgressForCategorization: {
553
+ reducer(draft, action) {
554
+ const { selectedTab, transactionId, lineIds } = action.payload;
555
+ const tab = draft.transactionCategorizationView[selectedTab];
556
+ const transactionLocalData = (0, get_1.default)(tab.transactionReviewLocalDataById, transactionId.id, undefined);
557
+ if (transactionLocalData != null) {
558
+ lineIds.forEach((lineId) => {
559
+ const lineItem = transactionLocalData.transactionReviewLocalData.lineItemById[lineId];
560
+ if (lineItem != null) {
561
+ transactionLocalData.transactionReviewLocalData.lineItemById[lineId] = {
562
+ ...lineItem,
563
+ categoryClassRecommendationsFetchState: {
564
+ fetchState: 'In-Progress',
565
+ error: undefined,
566
+ },
567
+ };
568
+ }
569
+ });
570
+ }
571
+ // Uncheck on fetch start: the row's existing category/class are
572
+ // stale after a payee change, so we drop the auto-selection until
573
+ // fresh recommendations land.
574
+ if (tab.selectedCheckBoxTransactionIds.includes(transactionId.id)) {
575
+ tab.selectedCheckBoxTransactionIds =
576
+ tab.selectedCheckBoxTransactionIds.filter((id) => id !== transactionId.id);
577
+ }
578
+ },
579
+ prepare(selectedTab, transactionId, lineIds) {
580
+ return { payload: { selectedTab, transactionId, lineIds } };
581
+ },
582
+ },
583
+ // Completed arm. Used by the epic when the HTTP call succeeds but the
584
+ // server returned no per-line recommendations — we still need to
585
+ // release the In-Progress flag so the skeleton resolves. Successful
586
+ // responses with recommendations go through
587
+ // setEntityRecommendationForLineIdsForCategorization instead (which
588
+ // also flips the lines to Completed).
589
+ markCategoryClassRecommendationsCompletedForCategorization: {
590
+ reducer(draft, action) {
591
+ const { selectedTab, transactionId, lineIds } = action.payload;
592
+ const transactionLocalData = (0, get_1.default)(draft.transactionCategorizationView[selectedTab]
593
+ .transactionReviewLocalDataById, transactionId.id, undefined);
594
+ if (transactionLocalData != null) {
595
+ lineIds.forEach((lineId) => {
596
+ const lineItem = transactionLocalData.transactionReviewLocalData.lineItemById[lineId];
597
+ if (lineItem != null) {
598
+ transactionLocalData.transactionReviewLocalData.lineItemById[lineId] = {
599
+ ...lineItem,
600
+ categoryClassRecommendationsFetchState: {
601
+ fetchState: 'Completed',
602
+ error: undefined,
603
+ },
604
+ };
605
+ }
606
+ });
607
+ }
608
+ },
609
+ prepare(selectedTab, transactionId, lineIds) {
610
+ return { payload: { selectedTab, transactionId, lineIds } };
611
+ },
612
+ },
613
+ // Failure arm. Flips covered lines to Error so the skeleton resolves
614
+ // and downstream UI can react to the failure. The transaction stays
615
+ // unchecked from the start-arm action.
616
+ markCategoryClassRecommendationsFailureForCategorization: {
617
+ reducer(draft, action) {
618
+ const { selectedTab, transactionId, lineIds, error } = action.payload;
619
+ const transactionLocalData = (0, get_1.default)(draft.transactionCategorizationView[selectedTab]
620
+ .transactionReviewLocalDataById, transactionId.id, undefined);
621
+ if (transactionLocalData != null) {
622
+ lineIds.forEach((lineId) => {
623
+ const lineItem = transactionLocalData.transactionReviewLocalData.lineItemById[lineId];
624
+ if (lineItem != null) {
625
+ transactionLocalData.transactionReviewLocalData.lineItemById[lineId] = {
626
+ ...lineItem,
627
+ categoryClassRecommendationsFetchState: {
628
+ fetchState: 'Error',
629
+ error,
630
+ },
631
+ };
632
+ }
633
+ });
634
+ }
635
+ },
636
+ prepare(selectedTab, transactionId, lineIds, error) {
637
+ return { payload: { selectedTab, transactionId, lineIds, error } };
638
+ },
639
+ },
534
640
  fetchTransactionCategorizationSuccess(draft, action) {
535
641
  const { selectedTab, refreshViewInBackground } = action.payload;
536
642
  if (draft.transactionCategorizationView[selectedTab].fetchState ===
@@ -626,9 +732,7 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
626
732
  .selectedCheckBoxTransactionIds;
627
733
  if (newTransactionLocalData.customer != null &&
628
734
  newTransactionLocalData.customer.id != null &&
629
- (0, transactionCategorizationLocalDataHelper_1.checkIfAllLineItemsAreCategoryClassFilled)(selectedTransaction, newTransactionLocalData, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) === true && // check if all line items are filled
630
- selectedCheckBoxTransactionIds.length < transactionCategorizationLocalDataHelper_1.MAX_SELECTION_LIMIT &&
631
- selectedCheckBoxTransactionIds.includes(transactionId) === false) {
735
+ (0, transactionCategorizationLocalDataHelper_1.shouldAutoSelectAndAdd)(selectedTransaction, newTransactionLocalData, selectedCheckBoxTransactionIds, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled)) {
632
736
  draft.transactionCategorizationView[selectedTab].selectedCheckBoxTransactionIds = [
633
737
  ...selectedCheckBoxTransactionIds,
634
738
  transactionId,
@@ -702,9 +806,7 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
702
806
  .selectedCheckBoxTransactionIds;
703
807
  if (newTransactionLocalData.vendor != null &&
704
808
  newTransactionLocalData.vendor.id != null &&
705
- (0, transactionCategorizationLocalDataHelper_1.checkIfAllLineItemsAreCategoryClassFilled)(selectedTransaction, newTransactionLocalData, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) === true && // check if all line items are filled
706
- selectedCheckBoxTransactionIds.length < transactionCategorizationLocalDataHelper_1.MAX_SELECTION_LIMIT &&
707
- selectedCheckBoxTransactionIds.includes(transactionId) === false) {
809
+ (0, transactionCategorizationLocalDataHelper_1.shouldAutoSelectAndAdd)(selectedTransaction, newTransactionLocalData, selectedCheckBoxTransactionIds, uncategorizedAccounts, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled)) {
708
810
  draft.transactionCategorizationView[selectedTab].selectedCheckBoxTransactionIds = [
709
811
  ...selectedCheckBoxTransactionIds,
710
812
  transactionId,
@@ -935,18 +1037,7 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
935
1037
  };
936
1038
  },
937
1039
  },
938
- removeTransactionFromAllTabs: {
939
- prepare(transactionId) {
940
- return { payload: { transactionId } };
941
- },
942
- reducer(draft, action) {
943
- const { transactionId } = action.payload;
944
- for (const tab of transactionsViewState_1.TRANSACTIONS_TABS) {
945
- (0, transactionCategorizationLocalDataHelper_1.removeTransactionFromTabView)(draft.transactionCategorizationView[tab], transactionId);
946
- }
947
- },
948
- },
949
1040
  },
950
1041
  });
951
- _a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationCompletedSubTab = _a.updateTransactionCategorizationCompletedSubTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.updateParentTotalCountForTab = _a.updateParentTotalCountForTab, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId, exports.syncTransactionCategorizationFromDetailSave = _a.syncTransactionCategorizationFromDetailSave, exports.backgroundRefetchReviewTab = _a.backgroundRefetchReviewTab, exports.removeTransactionFromAllTabs = _a.removeTransactionFromAllTabs, exports.updateTransactionCategorizationUploadReceiptState = _a.updateTransactionCategorizationUploadReceiptState, exports.uploadTransactionCategorizationReceiptSuccess = _a.uploadTransactionCategorizationReceiptSuccess;
1042
+ _a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationCompletedSubTab = _a.updateTransactionCategorizationCompletedSubTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.updateParentTotalCountForTab = _a.updateParentTotalCountForTab, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.markCategoryClassRecommendationsInProgressForCategorization = _a.markCategoryClassRecommendationsInProgressForCategorization, exports.markCategoryClassRecommendationsCompletedForCategorization = _a.markCategoryClassRecommendationsCompletedForCategorization, exports.markCategoryClassRecommendationsFailureForCategorization = _a.markCategoryClassRecommendationsFailureForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId, exports.syncTransactionCategorizationFromDetailSave = _a.syncTransactionCategorizationFromDetailSave, exports.backgroundRefetchReviewTab = _a.backgroundRefetchReviewTab, exports.updateTransactionCategorizationUploadReceiptState = _a.updateTransactionCategorizationUploadReceiptState, exports.uploadTransactionCategorizationReceiptSuccess = _a.uploadTransactionCategorizationReceiptSuccess;
952
1043
  exports.default = expenseAutomationTransactionsView.reducer;
@@ -1,6 +1,6 @@
1
1
  import { NestedAccountHierarchyForReport } from '../../../commonStateTypes/accountView/nestedAccountID';
2
2
  import { NestedClassHierarchyForReport } from '../../../commonStateTypes/classesView/nestedClassID';
3
- import { CompletionStatusType, FetchState, FetchStateAndError, ID } from '../../../commonStateTypes/common';
3
+ import { CompletionStatusType, FetchStateAndError, ID } from '../../../commonStateTypes/common';
4
4
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
5
5
  import { AccountBase } from '../../../entity/account/accountState';
6
6
  import { ClassBase } from '../../../entity/class/classState';
@@ -19,9 +19,9 @@ export interface ExpenseAutomationTransactionViewSelector extends SelectorView {
19
19
  classHierarchyList: NestedClassHierarchyForReport[];
20
20
  classList: ClassBase[];
21
21
  completionStatus: CompletionStatusType;
22
- createTransferEntryStatus: FetchState;
23
- creditCardTransferAccountsList: AccountBase[];
24
22
  fetchStateByTransactionTabs: Record<TransactionsTab, FetchStateAndError>;
23
+ hasInFlightCategoryClassRecommendations: boolean;
24
+ inFlightCategoryClassRecommendationsByTransactionId: Record<ID, boolean>;
25
25
  isAccountingProjectsEnabled: boolean;
26
26
  markAsNotMiscategorizedStatus: FetchStateAndError;
27
27
  /**
@@ -45,7 +45,6 @@ export interface ExpenseAutomationTransactionViewSelector extends SelectorView {
45
45
  transactionIdsWithUnsavedData: ID[];
46
46
  transactionLocalData: TransactionReviewLocalDataSelectorView[];
47
47
  transactions: SupportedTransactionWithCOT[];
48
- transferAccounts: AccountBase[];
49
48
  uiState: TransactionsViewUIState;
50
49
  uncategorizedAccounts: UncategorizedAccounts;
51
50
  uploadReceiptStatusById: Record<ID, FetchStateAndError>;
@@ -1,4 +1,6 @@
1
+ import { ID } from '../../../commonStateTypes/common';
1
2
  import { RootState } from '../../../reducer';
2
3
  import { ExpenseAutomationTransactionViewSelector } from '../selectorTypes/transactionsViewSelectorTypes';
3
- export { getLastTransferEntryReplacement } from '../../createTransferEntry/createTransferEntrySelector';
4
+ export declare const getCategorizationInFlightRecommendationsByTransactionId: (state: RootState) => Record<ID, boolean>;
5
+ export declare const getCategorizationHasInFlightRecommendations: (state: RootState) => boolean;
4
6
  export declare function getExpenseAutomationTransactionView(state: RootState): ExpenseAutomationTransactionViewSelector;
@@ -3,8 +3,9 @@ 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.getLastTransferEntryReplacement = void 0;
6
+ exports.getCategorizationHasInFlightRecommendations = exports.getCategorizationInFlightRecommendationsByTransactionId = void 0;
7
7
  exports.getExpenseAutomationTransactionView = getExpenseAutomationTransactionView;
8
+ const toolkit_1 = require("@reduxjs/toolkit");
8
9
  const omit_1 = __importDefault(require("lodash/omit"));
9
10
  const reduceFetchState_1 = require("../../../commonStateTypes/reduceFetchState");
10
11
  const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
@@ -13,15 +14,36 @@ const transactionHelper_1 = require("../../../entity/transaction/transactionHelp
13
14
  const transactionSelector_1 = require("../../../entity/transaction/transactionSelector");
14
15
  const accountListSelector_1 = require("../../accountList/accountListSelector");
15
16
  const classListSelector_1 = require("../../classList/classListSelector");
16
- const createTransferEntrySelector_1 = require("../../createTransferEntry/createTransferEntrySelector");
17
17
  const projectListSelector_1 = require("../../projectList/projectListSelector");
18
18
  const expenseAutomationViewSelectorTypes_1 = require("../selectorTypes/expenseAutomationViewSelectorTypes");
19
- // Re-exported here for back-compat. New code should import from
20
- // `view/createTransferEntry/createTransferEntrySelector`.
21
- var createTransferEntrySelector_2 = require("../../createTransferEntry/createTransferEntrySelector");
22
- Object.defineProperty(exports, "getLastTransferEntryReplacement", { enumerable: true, get: function () { return createTransferEntrySelector_2.getLastTransferEntryReplacement; } });
19
+ // Per-transaction "any line is fetching category/class recommendations?"
20
+ // map for the active categorization tab. Memoized on the active tab's
21
+ // transactionReviewLocalDataById reference, so steady state (no fetches
22
+ // in flight) recomputes only when local data changes and the row-table
23
+ // can read a single map lookup per row instead of re-iterating the
24
+ // row's lineItemById in the render path.
25
+ exports.getCategorizationInFlightRecommendationsByTransactionId = (0, toolkit_1.createSelector)((state) => {
26
+ const view = state.expenseAutomationTransactionsViewState;
27
+ return view.transactionCategorizationView[view.selectedTransactionCategorizationTab]?.transactionReviewLocalDataById;
28
+ }, (transactionReviewLocalDataById) => {
29
+ const result = {};
30
+ if (transactionReviewLocalDataById == null) {
31
+ return result;
32
+ }
33
+ for (const [transactionId, data] of Object.entries(transactionReviewLocalDataById)) {
34
+ const lineItems = Object.values(data.transactionReviewLocalData.lineItemById);
35
+ if (lineItems.some((lineItem) => lineItem.categoryClassRecommendationsFetchState?.fetchState ===
36
+ 'In-Progress')) {
37
+ result[transactionId] = true;
38
+ }
39
+ }
40
+ return result;
41
+ });
42
+ // Page-level "any line on the active tab is in flight?" flag. Drives the
43
+ // list-page Save disable.
44
+ exports.getCategorizationHasInFlightRecommendations = (0, toolkit_1.createSelector)(exports.getCategorizationInFlightRecommendationsByTransactionId, (inFlightByTransactionId) => Object.keys(inFlightByTransactionId).length > 0);
23
45
  function getExpenseAutomationTransactionView(state) {
24
- const { accountState, classState, classListState, accountListState, createTransferEntryState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
46
+ const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
25
47
  const { selectedTransactionCategorizationCompletedSubTab, selectedTransactionCategorizationTab, } = expenseAutomationTransactionsViewState;
26
48
  const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
27
49
  const uncategorizedIncomeExpense = (0, accountListSelector_1.getUncategorizedAccounts)(accountState, accountListState, 'accountList');
@@ -115,7 +137,8 @@ function getExpenseAutomationTransactionView(state) {
115
137
  : [];
116
138
  const transactionCompletionStatus = allSteps.find((step) => step.step === 'transaction_categorization')?.completionStatus;
117
139
  const completionStatus = transactionCompletionStatus ?? 'incomplete';
118
- const { transferAccountsList, creditCardTransferAccountsList } = (0, createTransferEntrySelector_1.getResolvedTransferAccounts)(state);
140
+ const inFlightCategoryClassRecommendationsByTransactionId = (0, exports.getCategorizationInFlightRecommendationsByTransactionId)(state);
141
+ const hasInFlightCategoryClassRecommendations = (0, exports.getCategorizationHasInFlightRecommendations)(state);
119
142
  return {
120
143
  version: 0,
121
144
  fetchState: fetchStatus.fetchState,
@@ -129,6 +152,8 @@ function getExpenseAutomationTransactionView(state) {
129
152
  classList: allClasses,
130
153
  accountsHierarchyList,
131
154
  classHierarchyList,
155
+ hasInFlightCategoryClassRecommendations,
156
+ inFlightCategoryClassRecommendationsByTransactionId,
132
157
  isAccountingProjectsEnabled,
133
158
  projectList,
134
159
  transactionLocalData,
@@ -136,7 +161,6 @@ function getExpenseAutomationTransactionView(state) {
136
161
  refreshStatus,
137
162
  saveStatus,
138
163
  markAsNotMiscategorizedStatus,
139
- createTransferEntryStatus: createTransferEntryState.createTransferEntryStatus,
140
164
  completionStatus,
141
165
  totalCountByTab,
142
166
  parentTabTotalCountByTab,
@@ -144,8 +168,6 @@ function getExpenseAutomationTransactionView(state) {
144
168
  uploadReceiptStatusById,
145
169
  selectedTransactionId,
146
170
  selectedTransactionLineId,
147
- creditCardTransferAccountsList,
148
- transferAccounts: transferAccountsList,
149
171
  selectedTransactionCategorizationCompletedSubTab,
150
172
  };
151
173
  }
@@ -48,6 +48,7 @@ export interface TransactionCategorizationLineItemData extends TransactionLineBa
48
48
  transactionId: ID;
49
49
  account?: AccountBase;
50
50
  categorizationStatus?: CategorizationStatusType;
51
+ categoryClassRecommendationsFetchState?: FetchStateAndError;
51
52
  class?: ClassBase;
52
53
  customer?: CustomerBase;
53
54
  item?: ProductOrService;
@@ -17,7 +17,7 @@ export declare const fetchFinanceStatement: import("@reduxjs/toolkit").ActionCre
17
17
  firstMonthOfFY: Month;
18
18
  maxNumOfPeriodsToHighlight: number;
19
19
  thisPeriod: TimeframeTick;
20
- }, "financeStatement/updateFinanceStatementThisPeriod">, updateCOABalancesRange: import("@reduxjs/toolkit").ActionCreatorWithPayload<COABalancesRange, "financeStatement/updateCOABalancesRange">, updateSelectedReportId: import("@reduxjs/toolkit").ActionCreatorWithPayload<"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", "financeStatement/updateSelectedReportId">, updateFinanceStatementAdditionalBalancesSelection: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
20
+ }, "financeStatement/updateFinanceStatementThisPeriod">, updateCOABalancesRange: import("@reduxjs/toolkit").ActionCreatorWithPayload<COABalancesRange, "financeStatement/updateCOABalancesRange">, updateSelectedReportId: import("@reduxjs/toolkit").ActionCreatorWithPayload<"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", "financeStatement/updateSelectedReportId">, updateFinanceStatementAdditionalBalancesSelection: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
21
21
  additionalBalances: COABalanceType[];
22
22
  coaBalances: COABalance[];
23
23
  firstMonthOfFY: Month;