@zeniai/client-epic-state 5.0.76 → 5.0.77-betaAK1

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 (223) hide show
  1. package/lib/commonStateTypes/amount.d.ts +1 -0
  2. package/lib/commonStateTypes/amount.js +3 -1
  3. package/lib/commonStateTypes/cacheOverrideFetchReducer.d.ts +17 -0
  4. package/lib/commonStateTypes/cacheOverrideFetchReducer.js +20 -0
  5. package/lib/commonStateTypes/filterPrimitives.d.ts +23 -0
  6. package/lib/commonStateTypes/filterPrimitives.js +21 -0
  7. package/lib/commonStateTypes/pusherActions.d.ts +11 -0
  8. package/lib/commonStateTypes/pusherActions.js +6 -0
  9. package/lib/coreEpics.js +1 -1
  10. package/lib/entity/account/accountSelector.d.ts +27 -1
  11. package/lib/entity/account/accountSelector.js +47 -1
  12. package/lib/entity/account/accountState.d.ts +6 -1
  13. package/lib/entity/account/accountState.js +11 -4
  14. package/lib/entity/account/subAccountSelector.d.ts +1 -1
  15. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +1 -3
  16. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +1 -2
  17. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerSelector.d.ts +1 -1
  18. package/lib/entity/chargeCard/chargeCardReducer.d.ts +19 -2
  19. package/lib/entity/chargeCard/chargeCardReducer.js +35 -2
  20. package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.d.ts +14 -1
  21. package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.js +36 -2
  22. package/lib/entity/class/classSelector.d.ts +35 -0
  23. package/lib/entity/class/classSelector.js +50 -0
  24. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +1 -1
  25. package/lib/entity/sectionProjectView/sectionProjectViewSelector.js +1 -1
  26. package/lib/entity/tenant/SessionManager.js +6 -3
  27. package/lib/entity/tenant/clearAllEpic.d.ts +2 -2
  28. package/lib/entity/tenant/clearAllEpic.js +2 -2
  29. package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.js +6 -2
  30. package/lib/entity/tenant/epic/saveOAuthConnectionEpic.js +6 -2
  31. package/lib/entity/tenant/tenantReducer.js +6 -1
  32. package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +3 -1
  33. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventPayload.d.ts +11 -0
  34. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventPayload.js +23 -0
  35. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventReducer.d.ts +6 -0
  36. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventReducer.js +31 -0
  37. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventSelector.d.ts +4 -0
  38. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventSelector.js +16 -0
  39. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventState.d.ts +13 -0
  40. package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventState.js +2 -0
  41. package/lib/epic.d.ts +16 -10
  42. package/lib/epic.js +17 -11
  43. package/lib/esm/commonStateTypes/amount.js +1 -0
  44. package/lib/esm/commonStateTypes/cacheOverrideFetchReducer.js +16 -0
  45. package/lib/esm/commonStateTypes/filterPrimitives.js +20 -0
  46. package/lib/esm/commonStateTypes/pusherActions.js +3 -0
  47. package/lib/esm/coreEpics.js +1 -1
  48. package/lib/esm/entity/account/accountSelector.js +46 -1
  49. package/lib/esm/entity/account/accountState.js +7 -1
  50. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +1 -3
  51. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +1 -2
  52. package/lib/esm/entity/chargeCard/chargeCardReducer.js +34 -1
  53. package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionReducer.js +35 -1
  54. package/lib/esm/entity/class/classSelector.js +48 -0
  55. package/lib/esm/entity/sectionProjectView/sectionProjectViewSelector.js +1 -1
  56. package/lib/esm/entity/tenant/SessionManager.js +4 -1
  57. package/lib/esm/entity/tenant/clearAllEpic.js +2 -2
  58. package/lib/esm/entity/tenant/epic/saveAPIKeyConnectionEpic.js +6 -2
  59. package/lib/esm/entity/tenant/epic/saveOAuthConnectionEpic.js +6 -2
  60. package/lib/esm/entity/tenant/tenantReducer.js +6 -1
  61. package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +3 -1
  62. package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventPayload.js +19 -0
  63. package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventReducer.js +27 -0
  64. package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventSelector.js +11 -0
  65. package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventState.js +1 -0
  66. package/lib/esm/epic.js +17 -11
  67. package/lib/esm/index.js +34 -22
  68. package/lib/esm/reducer.js +8 -2
  69. package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +2 -5
  70. package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +2 -5
  71. package/lib/esm/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +4 -1
  72. package/lib/esm/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
  73. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +1 -1
  74. package/lib/esm/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +1 -1
  75. package/lib/esm/view/companyView/helpers/cockpitHelpers.js +1 -1
  76. package/lib/esm/view/companyView/selector/companyManagementViewSelector.js +1 -1
  77. package/lib/esm/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
  78. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +2 -2
  79. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +2 -1
  80. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +21 -5
  81. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/refreshBatchDetailsForBatchIdEpic.js +52 -0
  82. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +8 -6
  83. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +7 -1
  84. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/syncTabsAfterAutomatchEpic.js +56 -0
  85. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +13 -9
  86. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +11 -1
  87. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +21 -1
  88. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +81 -2
  89. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +253 -14
  90. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +2 -0
  91. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +147 -13
  92. package/lib/esm/view/expenseAutomationView/transactionFilterHelpers.js +258 -0
  93. package/lib/esm/view/expenseAutomationView/types/completedSubTab.js +17 -0
  94. package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +0 -2
  95. package/lib/esm/view/financeStatement/financeStatementSelector.js +1 -1
  96. package/lib/esm/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +87 -0
  97. package/lib/esm/view/recommendation/recommendationHelper.js +29 -0
  98. package/lib/esm/view/recommendation/recommendationReducer.js +26 -1
  99. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +1 -0
  100. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +82 -0
  101. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +93 -0
  102. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +14 -0
  103. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +6 -0
  104. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +42 -0
  105. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchUpcomingPaymentEventsEpic.js +22 -0
  106. package/lib/esm/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +3 -2
  107. package/lib/esm/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +3 -2
  108. package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +55 -18
  109. package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +16 -2
  110. package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +5 -4
  111. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +26 -9
  112. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +9 -6
  113. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +3 -2
  114. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
  115. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +7 -3
  116. package/lib/esm/view/spendManagement/spendManagementFilterHelpers.js +4 -2
  117. package/lib/esm/view/subscriptionView/subscriptionViewSelector.js +1 -1
  118. package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +1 -1
  119. package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +1 -1
  120. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +1 -1
  121. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +1 -1
  122. package/lib/esm/view/transactionDetail/transactionDetailReducer.js +121 -6
  123. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +29 -1
  124. package/lib/index.d.ts +34 -24
  125. package/lib/index.js +92 -58
  126. package/lib/reducer.d.ts +8 -2
  127. package/lib/reducer.js +8 -2
  128. package/lib/view/aiAccountantView/aiAccountantViewPayload.d.ts +2 -2
  129. package/lib/view/aiAccountantView/aiAccountantViewReducer.d.ts +1 -1
  130. package/lib/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +2 -5
  131. package/lib/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +2 -5
  132. package/lib/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +4 -1
  133. package/lib/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
  134. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +1 -1
  135. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +1 -1
  136. package/lib/view/companyView/helpers/cockpitHelpers.js +1 -1
  137. package/lib/view/companyView/selector/companyManagementViewSelector.js +1 -1
  138. package/lib/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
  139. package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
  140. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +2 -2
  141. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +2 -1
  142. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +21 -5
  143. package/lib/view/expenseAutomationView/epics/missingReceipts/refreshBatchDetailsForBatchIdEpic.d.ts +18 -0
  144. package/lib/view/expenseAutomationView/epics/missingReceipts/refreshBatchDetailsForBatchIdEpic.js +56 -0
  145. package/lib/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +8 -6
  146. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +7 -1
  147. package/lib/view/expenseAutomationView/epics/missingReceipts/syncTabsAfterAutomatchEpic.d.ts +28 -0
  148. package/lib/view/expenseAutomationView/epics/missingReceipts/syncTabsAfterAutomatchEpic.js +60 -0
  149. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +11 -5
  150. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +12 -8
  151. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.d.ts +2 -2
  152. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +10 -0
  153. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +2 -1
  154. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +23 -2
  155. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +21 -0
  156. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +15 -2
  157. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +83 -3
  158. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +28 -5
  159. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +253 -14
  160. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +14 -1
  161. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +16 -0
  162. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +2 -0
  163. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +7 -1
  164. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +150 -13
  165. package/lib/view/expenseAutomationView/transactionFilterHelpers.d.ts +66 -0
  166. package/lib/view/expenseAutomationView/transactionFilterHelpers.js +262 -0
  167. package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +10 -0
  168. package/lib/view/expenseAutomationView/types/completedSubTab.js +21 -0
  169. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +20 -2
  170. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +1 -4
  171. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +44 -2
  172. package/lib/view/financeStatement/financeStatementSelector.js +1 -1
  173. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelectorTypes.d.ts +1 -1
  174. package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.d.ts +9 -0
  175. package/lib/view/recommendation/fetchEntityRecommendationsForLineUpdateEpic.js +91 -0
  176. package/lib/view/recommendation/recommendationHelper.d.ts +9 -0
  177. package/lib/view/recommendation/recommendationHelper.js +31 -1
  178. package/lib/view/recommendation/recommendationReducer.d.ts +20 -1
  179. package/lib/view/recommendation/recommendationReducer.js +27 -2
  180. package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
  181. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +10 -0
  182. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +2 -0
  183. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +20 -0
  184. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +86 -0
  185. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +20 -0
  186. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +98 -0
  187. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +21 -0
  188. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +17 -0
  189. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +5 -0
  190. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +10 -0
  191. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
  192. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +46 -0
  193. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchUpcomingPaymentEventsEpic.d.ts +8 -0
  194. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchUpcomingPaymentEventsEpic.js +26 -0
  195. package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.d.ts +3 -1
  196. package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +3 -2
  197. package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.d.ts +3 -1
  198. package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +3 -2
  199. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +55 -18
  200. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +16 -2
  201. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +5 -4
  202. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.d.ts +18 -3
  203. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +27 -10
  204. package/lib/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +9 -6
  205. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistory.d.ts +1 -1
  206. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.d.ts +3 -1
  207. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +3 -2
  208. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
  209. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.d.ts +3 -1
  210. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +7 -3
  211. package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +1 -1
  212. package/lib/view/spendManagement/spendManagementFilterHelpers.d.ts +12 -3
  213. package/lib/view/spendManagement/spendManagementFilterHelpers.js +4 -2
  214. package/lib/view/subscriptionView/subscriptionViewSelector.js +1 -1
  215. package/lib/view/taskManager/taskListView/taskList.d.ts +1 -1
  216. package/lib/view/taskManager/taskListView/taskListReducer.js +1 -1
  217. package/lib/view/transactionDetail/transactionDetailReducer.d.ts +11 -1
  218. package/lib/view/transactionDetail/transactionDetailReducer.js +122 -7
  219. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +2 -0
  220. package/lib/view/transactionDetail/transactionDetailSelector.js +31 -2
  221. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +1 -0
  222. package/lib/view/zeniOAuthView/zeniOAuthSelector.d.ts +1 -1
  223. package/package.json +9 -4
@@ -4,13 +4,19 @@ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
4
4
  import { updateTransactions } from '../../../../entity/transaction/transactionReducer';
5
5
  import { RootState } from '../../../../reducer';
6
6
  import { ZeniAPI } from '../../../../zeniAPI';
7
- import { bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, clearBulkUpload, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatches, pusherBatchStatusUpdate, restoreBulkUploadMatchingState } from '../../reducers/missingReceiptsViewReducer';
8
- export type ActionType = ReturnType<typeof bulkUploadReceiptsSuccess> | ReturnType<typeof restoreBulkUploadMatchingState> | ReturnType<typeof pusherBatchStatusUpdate> | ReturnType<typeof fetchBulkUploadBatchDetails> | ReturnType<typeof fetchBulkUploadBatchDetailsSuccess> | ReturnType<typeof fetchBulkUploadBatches> | ReturnType<typeof updateTransactions> | ReturnType<typeof clearBulkUpload> | ReturnType<typeof openSnackbar> | ReturnType<typeof bulkUploadAutomatchingTimedOut>;
7
+ import { bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, clearBulkUpload, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatches, pusherBatchStatusUpdate, refreshBatchDetailsForBatchId, restoreBulkUploadMatchingState } from '../../reducers/missingReceiptsViewReducer';
8
+ export type ActionType = ReturnType<typeof bulkUploadReceiptsSuccess> | ReturnType<typeof restoreBulkUploadMatchingState> | ReturnType<typeof pusherBatchStatusUpdate> | ReturnType<typeof fetchBulkUploadBatchDetails> | ReturnType<typeof fetchBulkUploadBatchDetailsSuccess> | ReturnType<typeof fetchBulkUploadBatches> | ReturnType<typeof refreshBatchDetailsForBatchId> | ReturnType<typeof updateTransactions> | ReturnType<typeof clearBulkUpload> | ReturnType<typeof openSnackbar> | ReturnType<typeof bulkUploadAutomatchingTimedOut>;
9
9
  /**
10
- * On Pusher batch completion: refresh batch list (then fetchMultipleBatchDetailsEpic runs).
11
- * Debounced to reduce duplicate refreshes. The post-match tab decision
12
- * (Unmatched vs Completed) is made client-side in `ExpenseAutomationPage` once fresh
10
+ * On Pusher batch completion: refresh the batch list (so summary counts update) and dispatch a
11
+ * targeted single-batch details refresh for the batch that just completed. Stale-while-revalidate:
12
+ * we no longer pass `invalidateBatchDetailsCache: true` existing `batchDetailsById` entries stay
13
+ * on screen and the just-completed row replaces in place via `storeBatchDetails`. The post-match
14
+ * tab decision (Unmatched vs Completed) is made client-side in `ExpenseAutomationPage` once fresh
13
15
  * batch details land -- do not dispatch `requestMissingReceiptsTabNavigation` here.
16
+ *
17
+ * Pusher resend storms (same batch completing twice within the dedupe window) are throttled in
18
+ * `refreshBatchDetailsForBatchIdEpic` via `lastBatchDetailRefreshAtById`, so this epic stays
19
+ * stateless and just forwards the event.
14
20
  */
15
21
  export declare const pusherBatchStatusCompletionEpic: (actions$: ActionsObservable<ActionType>) => Observable<ActionType>;
16
22
  /**
@@ -15,16 +15,20 @@ const FALLBACK_FIRST_DELAY_MS = 30000;
15
15
  const RESTORE_FIRST_DELAY_MS = 5000;
16
16
  const FALLBACK_POLL_INTERVAL_MS = 10000;
17
17
  /**
18
- * On Pusher batch completion: refresh batch list (then fetchMultipleBatchDetailsEpic runs).
19
- * Debounced to reduce duplicate refreshes. The post-match tab decision
20
- * (Unmatched vs Completed) is made client-side in `ExpenseAutomationPage` once fresh
18
+ * On Pusher batch completion: refresh the batch list (so summary counts update) and dispatch a
19
+ * targeted single-batch details refresh for the batch that just completed. Stale-while-revalidate:
20
+ * we no longer pass `invalidateBatchDetailsCache: true` existing `batchDetailsById` entries stay
21
+ * on screen and the just-completed row replaces in place via `storeBatchDetails`. The post-match
22
+ * tab decision (Unmatched vs Completed) is made client-side in `ExpenseAutomationPage` once fresh
21
23
  * batch details land -- do not dispatch `requestMissingReceiptsTabNavigation` here.
24
+ *
25
+ * Pusher resend storms (same batch completing twice within the dedupe window) are throttled in
26
+ * `refreshBatchDetailsForBatchIdEpic` via `lastBatchDetailRefreshAtById`, so this epic stays
27
+ * stateless and just forwards the event.
22
28
  */
23
- const pusherBatchStatusCompletionEpic = (actions$) => actions$.pipe((0, operators_1.filter)(missingReceiptsViewReducer_1.pusherBatchStatusUpdate.match), (0, operators_1.filter)((action) => action.payload.status === 'completed'), (0, operators_1.debounceTime)(300), (0, operators_1.mergeMap)(() => (0, rxjs_1.from)([
24
- (0, missingReceiptsViewReducer_1.fetchBulkUploadBatches)({
25
- cacheOverride: true,
26
- invalidateBatchDetailsCache: true,
27
- }),
29
+ const pusherBatchStatusCompletionEpic = (actions$) => actions$.pipe((0, operators_1.filter)(missingReceiptsViewReducer_1.pusherBatchStatusUpdate.match), (0, operators_1.filter)((action) => action.payload.status === 'completed'), (0, operators_1.debounceTime)(300), (0, operators_1.mergeMap)((action) => (0, rxjs_1.from)([
30
+ (0, missingReceiptsViewReducer_1.fetchBulkUploadBatches)({ cacheOverride: true }),
31
+ (0, missingReceiptsViewReducer_1.refreshBatchDetailsForBatchId)({ batchId: action.payload.batchId }),
28
32
  ])));
29
33
  exports.pusherBatchStatusCompletionEpic = pusherBatchStatusCompletionEpic;
30
34
  /**
@@ -3,6 +3,6 @@ import { Observable } from 'rxjs';
3
3
  import { updateTransactions } from '../../../../entity/transaction/transactionReducer';
4
4
  import { RootState } from '../../../../reducer';
5
5
  import { ZeniAPI } from '../../../../zeniAPI';
6
- import { fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationSuccess, initializeTransactionCategorizationViewLocalData, resetOtherTabsFetchState, updateTotalCountForTransactionCategorization, updateTransactionCategorizationUIState } from '../../reducers/transactionsViewReducer';
7
- export type ActionType = ReturnType<typeof fetchTransactionCategorization> | ReturnType<typeof updateTransactions> | ReturnType<typeof initializeTransactionCategorizationViewLocalData> | ReturnType<typeof fetchTransactionCategorizationFailure> | ReturnType<typeof updateTransactionCategorizationUIState> | ReturnType<typeof updateTotalCountForTransactionCategorization> | ReturnType<typeof fetchTransactionCategorizationSuccess> | ReturnType<typeof resetOtherTabsFetchState>;
6
+ import { fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationSuccess, initializeTransactionCategorizationViewLocalData, resetOtherTabsFetchState, updateParentTotalCountForTab, updateTotalCountForTransactionCategorization, updateTransactionCategorizationUIState } from '../../reducers/transactionsViewReducer';
7
+ export type ActionType = ReturnType<typeof fetchTransactionCategorization> | ReturnType<typeof updateTransactions> | ReturnType<typeof initializeTransactionCategorizationViewLocalData> | ReturnType<typeof fetchTransactionCategorizationFailure> | ReturnType<typeof updateTransactionCategorizationUIState> | ReturnType<typeof updateTotalCountForTransactionCategorization> | ReturnType<typeof updateParentTotalCountForTab> | ReturnType<typeof fetchTransactionCategorizationSuccess> | ReturnType<typeof resetOtherTabsFetchState>;
8
8
  export declare const fetchTransactionCategorizationEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -9,6 +9,7 @@ const transactionReducer_1 = require("../../../../entity/transaction/transaction
9
9
  const responsePayload_1 = require("../../../../responsePayload");
10
10
  const transactionCategorizationLocalDataHelper_1 = require("../../helpers/transactionCategorizationLocalDataHelper");
11
11
  const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
12
+ const completedSubTab_1 = require("../../types/completedSubTab");
12
13
  const transactionsViewState_1 = require("../../types/transactionsViewState");
13
14
  const fetchTransactionCategorizationEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.fetchTransactionCategorization.match), (0, operators_1.switchMap)((action) => {
14
15
  const { expenseAutomationViewState: { selectedPeriodByTenantId }, expenseAutomationTransactionsViewState, } = state$.value;
@@ -26,6 +27,9 @@ const fetchTransactionCategorizationEpic = (actions$, state$, zeniAPI) => action
26
27
  page_token: pageToken,
27
28
  page_size: 25,
28
29
  search_text: uiState.searchString,
30
+ sub_tab: selectedTab === 'autoCategorized'
31
+ ? expenseAutomationTransactionsViewState.selectedTransactionCategorizationCompletedSubTab
32
+ : completedSubTab_1.DEFAULT_COMPLETED_SUB_TAB,
29
33
  };
30
34
  return zeniAPI
31
35
  .getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`)
@@ -48,6 +52,12 @@ const fetchTransactionCategorizationEpic = (actions$, state$, zeniAPI) => action
48
52
  selectedTab,
49
53
  totalCount: response.data.total_count,
50
54
  }));
55
+ updateActions.push((0, transactionsViewReducer_1.updateParentTotalCountForTab)({
56
+ selectedPeriod,
57
+ selectedTab,
58
+ parentTotalCount: response.data.parent_tab_total_count ??
59
+ response.data.total_count,
60
+ }));
51
61
  updateActions.push((0, transactionsViewReducer_1.resetOtherTabsFetchState)({
52
62
  refreshViewInBackground,
53
63
  tabs: transactionsViewState_1.TRANSACTIONS_TABS.filter((tab) => selectedTab !== tab),
@@ -2,8 +2,8 @@ import { ID } from '../../../commonStateTypes/common';
2
2
  import { AccountBase } from '../../../entity/account/accountState';
3
3
  import { UncategorizedAccountTypes } from '../../../entity/account/accountState';
4
4
  import { ClassBase } from '../../../entity/class/classState';
5
- import { ProjectBase } from '../../../entity/project/projectState';
6
5
  import { Entity } from '../../../entity/genericEntity/entity';
6
+ import { ProjectBase } from '../../../entity/project/projectState';
7
7
  import { RecommendationWithCOTByLineId } from '../../../entity/transaction/stateTypes/transaction';
8
8
  import { SupportedTransactionPayload, SupportedTransactionWithCOT } from '../../../entity/transaction/transactionState';
9
9
  import { UncategorizedAccounts } from '../../accountList/accountListSelector';
@@ -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;
@@ -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;
@@ -2,6 +2,7 @@ import { EntityRecommendationPayload } from '../../../commonPayloadTypes/recomme
2
2
  import { TransactionPayload } from '../../../entity/transaction/payloadTypes/transactionPayload';
3
3
  import { SupportedTransactionPayload } from '../../../entity/transaction/transactionState';
4
4
  import { ZeniAPIResponse } from '../../../responsePayload';
5
+ import { CompletedSubTab } from '../types/completedSubTab';
5
6
  export interface TransactionCategorizationQueryPayload {
6
7
  auto_categorized: boolean;
7
8
  end_date: string | null;
@@ -11,12 +12,32 @@ export interface TransactionCategorizationQueryPayload {
11
12
  sort_by: string;
12
13
  sort_order: string;
13
14
  start_date: string | null;
15
+ /**
16
+ * Required. For the Completed (`auto_categorized=true`) listing, scopes the
17
+ * returned page + `total_count` to one of the Completed sub-tabs. For the
18
+ * Review listing it is forced to `'all'` to preserve parent-tab semantics
19
+ * on the backend.
20
+ */
21
+ sub_tab: CompletedSubTab;
14
22
  }
15
23
  export interface TransactionCategorizationPayload {
16
24
  next_page_token: string | null;
17
25
  query: TransactionCategorizationQueryPayload;
18
26
  total_count: number;
19
27
  transactions: SupportedTransactionPayload[];
28
+ /**
29
+ * Count of transactions for the entire parent tab (Review or Completed),
30
+ * regardless of which sub-tab the listing was scoped to. Used solely to
31
+ * drive the parent tab badge counts on the UI; pagination, list-level
32
+ * counts, and sub-tab chips continue to consume {@link total_count}.
33
+ *
34
+ * Optional at the wire boundary so that any version-skew scenario
35
+ * (delayed BE rollout, cached SW response, hotfix without the BE change)
36
+ * deserializes cleanly. Consumers are expected to fall back to
37
+ * {@link total_count} when this is absent — see
38
+ * `fetchTransactionCategorizationEpic` for the canonical fallback.
39
+ */
40
+ parent_tab_total_count?: number;
20
41
  }
21
42
  export type TransactionCategorizationResponse = ZeniAPIResponse<TransactionCategorizationPayload>;
22
43
  export interface EntityRelatedUpdatesPayload {
@@ -6,7 +6,8 @@ import type { MonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
6
6
  import { TransactionPayload } from '../../../entity/transaction/payloadTypes/transactionPayload';
7
7
  import { SupportedTransactionPayload } from '../../../entity/transaction/transactionState';
8
8
  import { ZeniAPIStatus } from '../../../responsePayload';
9
- import { type BatchDetails, type BatchListItem, type BatchStatus, type BulkUploadResultsTab, type BulkUploadSortKey, type BulkUploadState, type CompletedSubTab, type ManualSearchResult, type MissingReceiptsViewState, type MissingReceiptsViewUIState } from '../types/missingReceiptsViewState';
9
+ import { type CompletedSubTab } from '../types/completedSubTab';
10
+ import { type BatchDetails, type BatchListItem, type BatchStatus, type BulkUploadResultsTab, type BulkUploadSortKey, type BulkUploadState, type ManualSearchResult, type MissingReceiptsViewState, type MissingReceiptsViewUIState } from '../types/missingReceiptsViewState';
10
11
  export declare const getCompletedTransactionsCacheKey: (periodId: MonthYearPeriodId, sortKey: BulkUploadSortKey | undefined, sortOrder: SortOrder | undefined, subTab: CompletedSubTab) => string;
11
12
  export declare const initialBulkUploadState: BulkUploadState;
12
13
  export declare const initialState: MissingReceiptsViewState;
@@ -18,6 +19,15 @@ export declare const fetchBulkUploadBatchDetails: import("@reduxjs/toolkit").Act
18
19
  * after a hard refresh. The epic owns the list + details API calls end-to-end.
19
20
  */
20
21
  export declare const restoreBulkUploadAutomatchingOnMount: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationMissingReceiptsView/restoreBulkUploadAutomatchingOnMount">;
22
+ /**
23
+ * Epic trigger only. Targeted stale-while-revalidate refresh for a single batch's details — used
24
+ * by `pusherBatchStatusCompletionEpic` so a Pusher 'completed' event re-fetches only that one
25
+ * batch instead of wiping the entire `batchDetailsById` cache. The epic dedupes via
26
+ * `lastBatchDetailRefreshAtById` so resend storms don't trigger waves of API calls.
27
+ */
28
+ export declare const refreshBatchDetailsForBatchId: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
29
+ batchId: ID;
30
+ }, string>;
21
31
  export declare const fetchMissingReceipts: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[period: TimePeriod, minimumTransactionAmount: Amount, cacheOverride?: any, refreshViewInBackground?: any], {
22
32
  period: TimePeriod;
23
33
  minimumTransactionAmount: Amount;
@@ -72,7 +82,10 @@ export declare const fetchMissingReceipts: import("@reduxjs/toolkit").ActionCrea
72
82
  }, "expenseAutomationMissingReceiptsView/fetchBulkUploadBatchesSuccess">, fetchBulkUploadBatchesFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
73
83
  error: ZeniAPIStatus;
74
84
  selectedPeriod: MonthYearPeriod;
75
- }, "expenseAutomationMissingReceiptsView/fetchBulkUploadBatchesFailure">, confirmBulkUploadMatch: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[batchId: string, attachmentId: string, transactionId: string, transactionType: string, fileName: string], {
85
+ }, "expenseAutomationMissingReceiptsView/fetchBulkUploadBatchesFailure">, clearBulkUploadBatchDetailsForScopeChange: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationMissingReceiptsView/clearBulkUploadBatchDetailsForScopeChange">, markBatchDetailRefreshAttempted: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
86
+ batchId: ID;
87
+ timestamp: number;
88
+ }, "expenseAutomationMissingReceiptsView/markBatchDetailRefreshAttempted">, confirmBulkUploadMatch: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[batchId: string, attachmentId: string, transactionId: string, transactionType: string, fileName: string], {
76
89
  batchId: string;
77
90
  attachmentId: string;
78
91
  transactionId: string;
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.fetchCompletedTransactionsFailure = exports.fetchCompletedTransactionsSuccess = exports.fetchCompletedTransactions = exports.acknowledgeBulkUploadConfirmMatchComplete = exports.clearManualSearchResults = exports.searchTransactionsForManualMatchFailure = exports.searchTransactionsForManualMatchSuccess = exports.searchTransactionsForManualMatch = exports.clearBulkUpload = exports.setBulkUploadSortConfig = exports.setBulkUploadCompletedSubTab = exports.setBulkUploadResultsTab = exports.confirmBulkUploadMatchFailure = exports.confirmBulkUploadMatchSuccess = exports.confirmBulkUploadMatch = exports.fetchBulkUploadBatchesFailure = exports.fetchBulkUploadBatchesSuccess = exports.fetchBulkUploadBatches = exports.fetchMoreBatchDetailsFailure = exports.fetchMoreBatchDetailsComplete = exports.fetchMoreBatchDetails = exports.setInitialBatchDetailsLoading = exports.batchDetailFetchFailed = exports.storeBatchDetails = exports.fetchBulkUploadBatchDetailsFailure = exports.fetchBulkUploadBatchDetailsSuccess = exports.clearMissingReceiptsTabNavigation = exports.requestMissingReceiptsTabNavigation = exports.pusherBatchStatusUpdate = exports.bulkUploadAutomatchingTimedOut = exports.restoreBulkUploadMatchingState = exports.bulkUploadReceiptsFailure = exports.bulkUploadReceiptsSuccess = exports.setBulkUploadUploadedFileCount = exports.updateBulkUploadProgress = exports.bulkUploadReceipts = exports.clearExpenseAutomationMissingReceiptsView = exports.markMissingReceiptAsDone = exports.updateMissingReceiptsUIState = exports.updateMissingReceiptUploadState = exports.uploadMissingReceiptSuccess = exports.fetchMissingReceiptsFailure = exports.fetchMissingReceiptsSuccess = exports.fetchMissingReceipts = exports.restoreBulkUploadAutomatchingOnMount = exports.fetchBulkUploadBatchDetails = exports.initialState = exports.initialBulkUploadState = exports.getCompletedTransactionsCacheKey = void 0;
4
+ exports.fetchCompletedTransactions = exports.acknowledgeBulkUploadConfirmMatchComplete = exports.clearManualSearchResults = exports.searchTransactionsForManualMatchFailure = exports.searchTransactionsForManualMatchSuccess = exports.searchTransactionsForManualMatch = exports.clearBulkUpload = exports.setBulkUploadSortConfig = exports.setBulkUploadCompletedSubTab = exports.setBulkUploadResultsTab = exports.confirmBulkUploadMatchFailure = exports.confirmBulkUploadMatchSuccess = exports.confirmBulkUploadMatch = exports.markBatchDetailRefreshAttempted = exports.clearBulkUploadBatchDetailsForScopeChange = exports.fetchBulkUploadBatchesFailure = exports.fetchBulkUploadBatchesSuccess = exports.fetchBulkUploadBatches = exports.fetchMoreBatchDetailsFailure = exports.fetchMoreBatchDetailsComplete = exports.fetchMoreBatchDetails = exports.setInitialBatchDetailsLoading = exports.batchDetailFetchFailed = exports.storeBatchDetails = exports.fetchBulkUploadBatchDetailsFailure = exports.fetchBulkUploadBatchDetailsSuccess = exports.clearMissingReceiptsTabNavigation = exports.requestMissingReceiptsTabNavigation = exports.pusherBatchStatusUpdate = exports.bulkUploadAutomatchingTimedOut = exports.restoreBulkUploadMatchingState = exports.bulkUploadReceiptsFailure = exports.bulkUploadReceiptsSuccess = exports.setBulkUploadUploadedFileCount = exports.updateBulkUploadProgress = exports.bulkUploadReceipts = exports.clearExpenseAutomationMissingReceiptsView = exports.markMissingReceiptAsDone = exports.updateMissingReceiptsUIState = exports.updateMissingReceiptUploadState = exports.uploadMissingReceiptSuccess = exports.fetchMissingReceiptsFailure = exports.fetchMissingReceiptsSuccess = exports.fetchMissingReceipts = exports.refreshBatchDetailsForBatchId = exports.restoreBulkUploadAutomatchingOnMount = exports.fetchBulkUploadBatchDetails = exports.initialState = exports.initialBulkUploadState = exports.getCompletedTransactionsCacheKey = void 0;
5
+ exports.fetchCompletedTransactionsFailure = exports.fetchCompletedTransactionsSuccess = void 0;
5
6
  const toolkit_1 = require("@reduxjs/toolkit");
6
7
  const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
8
+ const completedSubTab_1 = require("../types/completedSubTab");
7
9
  const missingReceiptsViewState_1 = require("../types/missingReceiptsViewState");
8
10
  const getCompletedTransactionsCacheKey = (periodId, sortKey, sortOrder, subTab) => {
9
11
  const sortKeyPart = sortKey ?? 'none';
@@ -14,15 +16,18 @@ exports.getCompletedTransactionsCacheKey = getCompletedTransactionsCacheKey;
14
16
  exports.initialBulkUploadState = {
15
17
  batchDetailsById: {},
16
18
  batchDetailsPaginationState: { fetchState: 'Not-Started', error: undefined },
19
+ batchDetailsRevalidating: false,
17
20
  batchListByPeriod: {},
18
21
  batchListFetchState: { fetchState: 'Not-Started', error: undefined },
19
22
  batchStatusById: {},
20
- completedSubTab: 'all',
23
+ completedSubTab: completedSubTab_1.DEFAULT_COMPLETED_SUB_TAB,
21
24
  completedTransactionsByPeriod: {},
22
25
  confirmMatchStatus: { fetchState: 'Not-Started', error: undefined },
23
26
  currentBatchId: undefined,
24
27
  currentResultsTab: 'unmatched',
25
28
  failedBatchDetailIds: [],
29
+ initialBatchDetailsLoaded: false,
30
+ lastBatchDetailRefreshAtById: {},
26
31
  manualSearchUiResetKey: 0,
27
32
  manualSearch: {
28
33
  fetchState: { fetchState: 'Not-Started', error: undefined },
@@ -69,6 +74,13 @@ exports.fetchBulkUploadBatchDetails = (0, toolkit_1.createAction)('expenseAutoma
69
74
  * after a hard refresh. The epic owns the list + details API calls end-to-end.
70
75
  */
71
76
  exports.restoreBulkUploadAutomatchingOnMount = (0, toolkit_1.createAction)('expenseAutomationMissingReceiptsView/restoreBulkUploadAutomatchingOnMount');
77
+ /**
78
+ * Epic trigger only. Targeted stale-while-revalidate refresh for a single batch's details — used
79
+ * by `pusherBatchStatusCompletionEpic` so a Pusher 'completed' event re-fetches only that one
80
+ * batch instead of wiping the entire `batchDetailsById` cache. The epic dedupes via
81
+ * `lastBatchDetailRefreshAtById` so resend storms don't trigger waves of API calls.
82
+ */
83
+ exports.refreshBatchDetailsForBatchId = (0, toolkit_1.createAction)('expenseAutomationMissingReceiptsView/refreshBatchDetailsForBatchId');
72
84
  const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
73
85
  name: 'expenseAutomationMissingReceiptsView',
74
86
  initialState: exports.initialState,
@@ -255,6 +267,16 @@ const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
255
267
  const details = action.payload;
256
268
  draft.bulkUpload.batchDetailsById[details.batchId] = details;
257
269
  draft.bulkUpload.phase = 'completed';
270
+ draft.bulkUpload.initialBatchDetailsLoaded = true;
271
+ /**
272
+ * A successful detail load supersedes any previous failure for this batch — without this,
273
+ * `getPrimaryBatchIdFromBatchListOrder` (and pagination) would keep skipping the batch
274
+ * across the recovery, hiding now-valid Unmatched-tab work.
275
+ */
276
+ const failedIndex = draft.bulkUpload.failedBatchDetailIds.indexOf(details.batchId);
277
+ if (failedIndex >= 0) {
278
+ draft.bulkUpload.failedBatchDetailIds.splice(failedIndex, 1);
279
+ }
258
280
  },
259
281
  fetchBulkUploadBatchDetailsFailure: {
260
282
  reducer(draft) {
@@ -276,6 +298,19 @@ const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
276
298
  draft.bulkUpload.currentBatchId === details.batchId) {
277
299
  draft.bulkUpload.phase = 'completed';
278
300
  }
301
+ /** Stale-while-revalidate: any successful detail load means we have rendered data. */
302
+ draft.bulkUpload.initialBatchDetailsLoaded = true;
303
+ /**
304
+ * Stale-while-revalidate recovery: if this batch had previously failed, a successful
305
+ * targeted refresh (Pusher `completed` → `refreshBatchDetailsForBatchIdEpic`) or
306
+ * multi-batch revalidation (manual refresh) supersedes the failure. Selectors that gate
307
+ * on `failedBatchDetailIds` (primary-batch resolution, `hasMoreBatchDetails`) must see the
308
+ * batch as recovered so it can show fresh Unmatched work.
309
+ */
310
+ const failedIndex = draft.bulkUpload.failedBatchDetailIds.indexOf(details.batchId);
311
+ if (failedIndex >= 0) {
312
+ draft.bulkUpload.failedBatchDetailIds.splice(failedIndex, 1);
313
+ }
279
314
  },
280
315
  batchDetailFetchFailed(draft, action) {
281
316
  const { batchId } = action.payload;
@@ -304,6 +339,14 @@ const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
304
339
  fetchState: 'Completed',
305
340
  error: undefined,
306
341
  };
342
+ /**
343
+ * Stale-while-revalidate: a completed pagination round means the initial page (or a
344
+ * subsequent revalidation) has fully resolved. Once `initialBatchDetailsLoaded` flips to
345
+ * `true` it stays `true` for the session — only `clearBulkUpload` /
346
+ * `clearBulkUploadBatchDetailsForScopeChange` can reset it.
347
+ */
348
+ draft.bulkUpload.initialBatchDetailsLoaded = true;
349
+ draft.bulkUpload.batchDetailsRevalidating = false;
307
350
  const currentId = draft.bulkUpload.currentBatchId;
308
351
  const currentDetails = currentId != null
309
352
  ? draft.bulkUpload.batchDetailsById[currentId]
@@ -319,12 +362,24 @@ const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
319
362
  fetchState: 'Error',
320
363
  error: action.payload.error,
321
364
  };
365
+ draft.bulkUpload.batchDetailsRevalidating = false;
322
366
  },
323
367
  fetchBulkUploadBatches: {
324
368
  reducer(draft, action) {
369
+ /**
370
+ * Manual refresh button (and any other caller passing `invalidateBatchDetailsCache: true`):
371
+ * wipe the details cache, failed-id list, and pagination state so the Unmatched tab drops
372
+ * its existing rows and re-renders the initial-load skeleton while the next list +
373
+ * details fetches resolve. The post-success epic (`fetchMultipleBatchDetailsEpic`) then
374
+ * re-runs the details chain from a clean slate.
375
+ */
325
376
  if (action.payload.invalidateBatchDetailsCache === true) {
326
377
  draft.bulkUpload.batchDetailsById = {};
327
378
  draft.bulkUpload.failedBatchDetailIds = [];
379
+ draft.bulkUpload.batchDetailsPaginationState = {
380
+ fetchState: 'Not-Started',
381
+ error: undefined,
382
+ };
328
383
  }
329
384
  draft.bulkUpload.batchListFetchState = {
330
385
  fetchState: 'In-Progress',
@@ -341,6 +396,31 @@ const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
341
396
  };
342
397
  },
343
398
  },
399
+ /**
400
+ * Tenant/period scope change — the new scope's data is genuinely unknown so the existing
401
+ * details cache and `initialBatchDetailsLoaded` flag must be reset (the Unmatched skeleton
402
+ * is acceptable on scope change). Distinct from a stale-while-revalidate refresh.
403
+ */
404
+ clearBulkUploadBatchDetailsForScopeChange(draft) {
405
+ draft.bulkUpload.batchDetailsById = {};
406
+ draft.bulkUpload.failedBatchDetailIds = [];
407
+ draft.bulkUpload.batchDetailsPaginationState = {
408
+ fetchState: 'Not-Started',
409
+ error: undefined,
410
+ };
411
+ draft.bulkUpload.batchDetailsRevalidating = false;
412
+ draft.bulkUpload.initialBatchDetailsLoaded = false;
413
+ draft.bulkUpload.lastBatchDetailRefreshAtById = {};
414
+ },
415
+ /**
416
+ * Records the last time we issued a targeted refresh for `batchId`. Set by
417
+ * `refreshBatchDetailsForBatchIdEpic` before each API call so subsequent Pusher resends in the
418
+ * dedupe window are skipped.
419
+ */
420
+ markBatchDetailRefreshAttempted(draft, action) {
421
+ draft.bulkUpload.lastBatchDetailRefreshAtById[action.payload.batchId] =
422
+ action.payload.timestamp;
423
+ },
344
424
  fetchBulkUploadBatchesSuccess(draft, action) {
345
425
  const periodId = (0, timePeriod_1.toMonthYearPeriodId)(action.payload.selectedPeriod);
346
426
  draft.bulkUpload.batchListByPeriod[periodId] = action.payload.batchList;
@@ -583,7 +663,7 @@ const expenseAutomationMissingReceiptsView = (0, toolkit_1.createSlice)({
583
663
  });
584
664
  _a = expenseAutomationMissingReceiptsView.actions, exports.fetchMissingReceipts = _a.fetchMissingReceipts, exports.fetchMissingReceiptsSuccess = _a.fetchMissingReceiptsSuccess, exports.fetchMissingReceiptsFailure = _a.fetchMissingReceiptsFailure, exports.uploadMissingReceiptSuccess = _a.uploadMissingReceiptSuccess, exports.updateMissingReceiptUploadState = _a.updateMissingReceiptUploadState, exports.updateMissingReceiptsUIState = _a.updateMissingReceiptsUIState, exports.markMissingReceiptAsDone = _a.markMissingReceiptAsDone, exports.clearExpenseAutomationMissingReceiptsView = _a.clearExpenseAutomationMissingReceiptsView,
585
665
  // Bulk Upload
586
- exports.bulkUploadReceipts = _a.bulkUploadReceipts, exports.updateBulkUploadProgress = _a.updateBulkUploadProgress, exports.setBulkUploadUploadedFileCount = _a.setBulkUploadUploadedFileCount, exports.bulkUploadReceiptsSuccess = _a.bulkUploadReceiptsSuccess, exports.bulkUploadReceiptsFailure = _a.bulkUploadReceiptsFailure, exports.restoreBulkUploadMatchingState = _a.restoreBulkUploadMatchingState, exports.bulkUploadAutomatchingTimedOut = _a.bulkUploadAutomatchingTimedOut, exports.pusherBatchStatusUpdate = _a.pusherBatchStatusUpdate, exports.requestMissingReceiptsTabNavigation = _a.requestMissingReceiptsTabNavigation, exports.clearMissingReceiptsTabNavigation = _a.clearMissingReceiptsTabNavigation, exports.fetchBulkUploadBatchDetailsSuccess = _a.fetchBulkUploadBatchDetailsSuccess, exports.fetchBulkUploadBatchDetailsFailure = _a.fetchBulkUploadBatchDetailsFailure, exports.storeBatchDetails = _a.storeBatchDetails, exports.batchDetailFetchFailed = _a.batchDetailFetchFailed, exports.setInitialBatchDetailsLoading = _a.setInitialBatchDetailsLoading, exports.fetchMoreBatchDetails = _a.fetchMoreBatchDetails, exports.fetchMoreBatchDetailsComplete = _a.fetchMoreBatchDetailsComplete, exports.fetchMoreBatchDetailsFailure = _a.fetchMoreBatchDetailsFailure, exports.fetchBulkUploadBatches = _a.fetchBulkUploadBatches, exports.fetchBulkUploadBatchesSuccess = _a.fetchBulkUploadBatchesSuccess, exports.fetchBulkUploadBatchesFailure = _a.fetchBulkUploadBatchesFailure, exports.confirmBulkUploadMatch = _a.confirmBulkUploadMatch, exports.confirmBulkUploadMatchSuccess = _a.confirmBulkUploadMatchSuccess, exports.confirmBulkUploadMatchFailure = _a.confirmBulkUploadMatchFailure, exports.setBulkUploadResultsTab = _a.setBulkUploadResultsTab, exports.setBulkUploadCompletedSubTab = _a.setBulkUploadCompletedSubTab, exports.setBulkUploadSortConfig = _a.setBulkUploadSortConfig, exports.clearBulkUpload = _a.clearBulkUpload, exports.searchTransactionsForManualMatch = _a.searchTransactionsForManualMatch, exports.searchTransactionsForManualMatchSuccess = _a.searchTransactionsForManualMatchSuccess, exports.searchTransactionsForManualMatchFailure = _a.searchTransactionsForManualMatchFailure, exports.clearManualSearchResults = _a.clearManualSearchResults, exports.acknowledgeBulkUploadConfirmMatchComplete = _a.acknowledgeBulkUploadConfirmMatchComplete,
666
+ exports.bulkUploadReceipts = _a.bulkUploadReceipts, exports.updateBulkUploadProgress = _a.updateBulkUploadProgress, exports.setBulkUploadUploadedFileCount = _a.setBulkUploadUploadedFileCount, exports.bulkUploadReceiptsSuccess = _a.bulkUploadReceiptsSuccess, exports.bulkUploadReceiptsFailure = _a.bulkUploadReceiptsFailure, exports.restoreBulkUploadMatchingState = _a.restoreBulkUploadMatchingState, exports.bulkUploadAutomatchingTimedOut = _a.bulkUploadAutomatchingTimedOut, exports.pusherBatchStatusUpdate = _a.pusherBatchStatusUpdate, exports.requestMissingReceiptsTabNavigation = _a.requestMissingReceiptsTabNavigation, exports.clearMissingReceiptsTabNavigation = _a.clearMissingReceiptsTabNavigation, exports.fetchBulkUploadBatchDetailsSuccess = _a.fetchBulkUploadBatchDetailsSuccess, exports.fetchBulkUploadBatchDetailsFailure = _a.fetchBulkUploadBatchDetailsFailure, exports.storeBatchDetails = _a.storeBatchDetails, exports.batchDetailFetchFailed = _a.batchDetailFetchFailed, exports.setInitialBatchDetailsLoading = _a.setInitialBatchDetailsLoading, exports.fetchMoreBatchDetails = _a.fetchMoreBatchDetails, exports.fetchMoreBatchDetailsComplete = _a.fetchMoreBatchDetailsComplete, exports.fetchMoreBatchDetailsFailure = _a.fetchMoreBatchDetailsFailure, exports.fetchBulkUploadBatches = _a.fetchBulkUploadBatches, exports.fetchBulkUploadBatchesSuccess = _a.fetchBulkUploadBatchesSuccess, exports.fetchBulkUploadBatchesFailure = _a.fetchBulkUploadBatchesFailure, exports.clearBulkUploadBatchDetailsForScopeChange = _a.clearBulkUploadBatchDetailsForScopeChange, exports.markBatchDetailRefreshAttempted = _a.markBatchDetailRefreshAttempted, exports.confirmBulkUploadMatch = _a.confirmBulkUploadMatch, exports.confirmBulkUploadMatchSuccess = _a.confirmBulkUploadMatchSuccess, exports.confirmBulkUploadMatchFailure = _a.confirmBulkUploadMatchFailure, exports.setBulkUploadResultsTab = _a.setBulkUploadResultsTab, exports.setBulkUploadCompletedSubTab = _a.setBulkUploadCompletedSubTab, exports.setBulkUploadSortConfig = _a.setBulkUploadSortConfig, exports.clearBulkUpload = _a.clearBulkUpload, exports.searchTransactionsForManualMatch = _a.searchTransactionsForManualMatch, exports.searchTransactionsForManualMatchSuccess = _a.searchTransactionsForManualMatchSuccess, exports.searchTransactionsForManualMatchFailure = _a.searchTransactionsForManualMatchFailure, exports.clearManualSearchResults = _a.clearManualSearchResults, exports.acknowledgeBulkUploadConfirmMatchComplete = _a.acknowledgeBulkUploadConfirmMatchComplete,
587
667
  // Completed Transactions
588
668
  exports.fetchCompletedTransactions = _a.fetchCompletedTransactions, exports.fetchCompletedTransactionsSuccess = _a.fetchCompletedTransactionsSuccess, exports.fetchCompletedTransactionsFailure = _a.fetchCompletedTransactionsFailure;
589
669
  exports.default = expenseAutomationMissingReceiptsView.reducer;
@@ -4,9 +4,9 @@ import { MonthYearPeriod, TimePeriod } from '../../../commonStateTypes/timePerio
4
4
  import { PageToken } from '../../../commonStateTypes/viewAndReport/viewAndReport';
5
5
  import { AccountBase } from '../../../entity/account/accountState';
6
6
  import { ClassBase } from '../../../entity/class/classState';
7
- import { ProjectBase } from '../../../entity/project/projectState';
8
7
  import { CustomerBase } from '../../../entity/customer/customerState';
9
8
  import { Entity } from '../../../entity/genericEntity/entity';
9
+ import { ProjectBase } from '../../../entity/project/projectState';
10
10
  import { RecommendationWithCOTByLineId, TransactionID } from '../../../entity/transaction/stateTypes/transaction';
11
11
  import { SupportedTransaction, SupportedTransactionPayload, SupportedTransactionWithCOT } from '../../../entity/transaction/transactionState';
12
12
  import { VendorBase } from '../../../entity/vendor/vendorState';
@@ -14,6 +14,7 @@ import { ZeniAPIStatus } from '../../../responsePayload';
14
14
  import { UncategorizedAccounts } from '../../accountList/accountListSelector';
15
15
  import { UpdateTransactionCategorizationResponsePayload } from '../payload/transactionCategorizationPayload';
16
16
  import { SupportedTransactionCategorization, TransactionSaveUpdates, TransactionsTab, TransactionsTabViewState, TransactionsViewState, TransactionsViewUIState } from '../types/transactionsViewState';
17
+ import { TransactionFilters } from '../transactionFilterHelpers';
17
18
  export declare const initialTransactionTabViewState: TransactionsTabViewState;
18
19
  export declare const initialState: TransactionsViewState;
19
20
  export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", period: TimePeriod, cacheOverride?: any, keepExistingListItems?: any, searchString?: string | undefined, pageToken?: PageToken | undefined, refreshViewInBackground?: any, resetListItems?: boolean | undefined, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
@@ -29,7 +30,10 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
29
30
  }, "expenseAutomationTransactionsView/fetchTransactionCategorization", never, never>, updateTransactionCategorizationUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
30
31
  selectedTab: TransactionsTab;
31
32
  uiState: Partial<TransactionsViewUIState>;
32
- }, "expenseAutomationTransactionsView/updateTransactionCategorizationUIState">, initializeTransactionCategorizationViewLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionIds: string[], selectedPeriod: MonthYearPeriod, keepExistingListItems: any, pageToken: PageToken, totalCount: number, lineItemsByTransactionIds: Record<string, string[]>, refreshViewInBackground?: any, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
33
+ }, "expenseAutomationTransactionsView/updateTransactionCategorizationUIState">, updateTransactionFilters: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
34
+ filters: TransactionFilters;
35
+ selectedTab: TransactionsTab;
36
+ }, "expenseAutomationTransactionsView/updateTransactionFilters">, initializeTransactionCategorizationViewLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionIds: string[], selectedPeriod: MonthYearPeriod, keepExistingListItems: any, pageToken: PageToken, totalCount: number, lineItemsByTransactionIds: Record<string, string[]>, refreshViewInBackground?: any, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
33
37
  selectedTab: "review" | "autoCategorized";
34
38
  transactionIds: string[];
35
39
  selectedPeriod: MonthYearPeriod;
@@ -65,7 +69,9 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
65
69
  isUncategorizedExpenseCategoryEnabled: boolean | undefined;
66
70
  }, "expenseAutomationTransactionsView/updateTransactionCategorization", never, never>, updateCurrentSelectedTransactionCategorizationTab: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[newSelectedTab: "review" | "autoCategorized"], {
67
71
  newSelectedTab: "review" | "autoCategorized";
68
- }, "expenseAutomationTransactionsView/updateCurrentSelectedTransactionCategorizationTab", never, never>, updateTransactionCategorizationSaveStatus: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", fetchState: FetchState, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
72
+ }, "expenseAutomationTransactionsView/updateCurrentSelectedTransactionCategorizationTab", never, never>, updateTransactionCategorizationCompletedSubTab: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[newSubTab: "all" | "manual" | "ai_accountant"], {
73
+ newSubTab: "all" | "manual" | "ai_accountant";
74
+ }, "expenseAutomationTransactionsView/updateTransactionCategorizationCompletedSubTab", never, never>, updateTransactionCategorizationSaveStatus: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", fetchState: FetchState, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
69
75
  selectedTab: "review" | "autoCategorized";
70
76
  fetchState: FetchState;
71
77
  error: ZeniAPIStatus<Record<string, unknown>> | undefined;
@@ -120,7 +126,11 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
120
126
  selectedPeriod: MonthYearPeriod;
121
127
  selectedTab: TransactionsTab;
122
128
  totalCount: number;
123
- }, "expenseAutomationTransactionsView/updateTotalCountForTransactionCategorization">, fetchTransactionCategorizationSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
129
+ }, "expenseAutomationTransactionsView/updateTotalCountForTransactionCategorization">, updateParentTotalCountForTab: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
130
+ parentTotalCount: number;
131
+ selectedPeriod: MonthYearPeriod;
132
+ selectedTab: TransactionsTab;
133
+ }, "expenseAutomationTransactionsView/updateParentTotalCountForTab">, fetchTransactionCategorizationSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
124
134
  selectedTab: TransactionsTab;
125
135
  status: ZeniAPIStatus;
126
136
  refreshViewInBackground?: boolean;
@@ -151,7 +161,20 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
151
161
  uncategorizedAccounts: UncategorizedAccounts;
152
162
  isAccountingClassesEnabled: boolean | undefined;
153
163
  isUncategorizedExpenseCategoryEnabled: boolean | undefined;
154
- }, "expenseAutomationTransactionsView/setEntityRecommendationForLineIdsForCategorization", never, never>, updateSelectedTransactionId: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
164
+ }, "expenseAutomationTransactionsView/setEntityRecommendationForLineIdsForCategorization", never, never>, markCategoryClassRecommendationsInProgressForCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: TransactionID, lineIds: string[]], {
165
+ selectedTab: "review" | "autoCategorized";
166
+ transactionId: TransactionID;
167
+ lineIds: string[];
168
+ }, "expenseAutomationTransactionsView/markCategoryClassRecommendationsInProgressForCategorization", never, never>, markCategoryClassRecommendationsCompletedForCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: TransactionID, lineIds: string[]], {
169
+ selectedTab: "review" | "autoCategorized";
170
+ transactionId: TransactionID;
171
+ lineIds: string[];
172
+ }, "expenseAutomationTransactionsView/markCategoryClassRecommendationsCompletedForCategorization", never, never>, markCategoryClassRecommendationsFailureForCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionId: TransactionID, lineIds: string[], error: ZeniAPIStatus<Record<string, unknown>>], {
173
+ selectedTab: "review" | "autoCategorized";
174
+ transactionId: TransactionID;
175
+ lineIds: string[];
176
+ error: ZeniAPIStatus<Record<string, unknown>>;
177
+ }, "expenseAutomationTransactionsView/markCategoryClassRecommendationsFailureForCategorization", never, never>, updateSelectedTransactionId: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
155
178
  lineId: ID;
156
179
  selectedTab: TransactionsTab;
157
180
  transactionId: ID;