@zeniai/client-epic-state 5.0.74 → 5.0.76

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 (158) hide show
  1. package/lib/coreEpics.js +1 -1
  2. package/lib/entity/account/accountSelector.d.ts +1 -27
  3. package/lib/entity/account/accountSelector.js +1 -47
  4. package/lib/entity/account/accountState.d.ts +1 -6
  5. package/lib/entity/account/accountState.js +4 -11
  6. package/lib/entity/account/subAccountSelector.d.ts +1 -1
  7. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +3 -1
  8. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +2 -1
  9. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerSelector.d.ts +1 -1
  10. package/lib/entity/chargeCard/chargeCardReducer.d.ts +2 -19
  11. package/lib/entity/chargeCard/chargeCardReducer.js +2 -35
  12. package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.d.ts +1 -14
  13. package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.js +2 -36
  14. package/lib/entity/class/classSelector.d.ts +0 -35
  15. package/lib/entity/class/classSelector.js +0 -50
  16. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +1 -1
  17. package/lib/entity/sectionProjectView/sectionProjectViewSelector.js +1 -1
  18. package/lib/entity/tenant/SessionManager.js +3 -6
  19. package/lib/entity/tenant/clearAllEpic.d.ts +2 -2
  20. package/lib/entity/tenant/clearAllEpic.js +2 -2
  21. package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.js +2 -6
  22. package/lib/entity/tenant/epic/saveOAuthConnectionEpic.js +2 -6
  23. package/lib/entity/tenant/tenantReducer.js +1 -6
  24. package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +1 -3
  25. package/lib/epic.d.ts +9 -9
  26. package/lib/epic.js +10 -10
  27. package/lib/esm/coreEpics.js +1 -1
  28. package/lib/esm/entity/account/accountSelector.js +1 -46
  29. package/lib/esm/entity/account/accountState.js +1 -7
  30. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +3 -1
  31. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +2 -1
  32. package/lib/esm/entity/chargeCard/chargeCardReducer.js +1 -34
  33. package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionReducer.js +1 -35
  34. package/lib/esm/entity/class/classSelector.js +0 -48
  35. package/lib/esm/entity/sectionProjectView/sectionProjectViewSelector.js +1 -1
  36. package/lib/esm/entity/tenant/SessionManager.js +1 -4
  37. package/lib/esm/entity/tenant/clearAllEpic.js +2 -2
  38. package/lib/esm/entity/tenant/epic/saveAPIKeyConnectionEpic.js +2 -6
  39. package/lib/esm/entity/tenant/epic/saveOAuthConnectionEpic.js +2 -6
  40. package/lib/esm/entity/tenant/tenantReducer.js +1 -6
  41. package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +1 -3
  42. package/lib/esm/epic.js +10 -10
  43. package/lib/esm/index.js +16 -26
  44. package/lib/esm/reducer.js +2 -2
  45. package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +5 -2
  46. package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +5 -2
  47. package/lib/esm/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +1 -4
  48. package/lib/esm/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
  49. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +1 -1
  50. package/lib/esm/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +1 -1
  51. package/lib/esm/view/companyView/helpers/cockpitHelpers.js +1 -1
  52. package/lib/esm/view/companyView/selector/companyManagementViewSelector.js +1 -1
  53. package/lib/esm/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
  54. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +2 -2
  55. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +1 -2
  56. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +6 -8
  57. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +1 -7
  58. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +1 -11
  59. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +1 -2
  60. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +1 -137
  61. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -89
  62. package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +2 -0
  63. package/lib/esm/view/financeStatement/financeStatementSelector.js +1 -1
  64. package/lib/esm/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +2 -3
  65. package/lib/esm/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +2 -3
  66. package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +18 -55
  67. package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +2 -16
  68. package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +4 -5
  69. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +9 -26
  70. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +6 -9
  71. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +2 -3
  72. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
  73. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +3 -7
  74. package/lib/esm/view/spendManagement/spendManagementFilterHelpers.js +2 -4
  75. package/lib/esm/view/subscriptionView/subscriptionViewSelector.js +1 -1
  76. package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +1 -1
  77. package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +1 -1
  78. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +1 -1
  79. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +1 -1
  80. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +1 -7
  81. package/lib/index.d.ts +19 -25
  82. package/lib/index.js +58 -81
  83. package/lib/reducer.d.ts +2 -2
  84. package/lib/reducer.js +2 -2
  85. package/lib/view/aiAccountantView/aiAccountantViewPayload.d.ts +2 -2
  86. package/lib/view/aiAccountantView/aiAccountantViewReducer.d.ts +1 -1
  87. package/lib/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +5 -2
  88. package/lib/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +5 -2
  89. package/lib/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +1 -4
  90. package/lib/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
  91. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +1 -1
  92. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +1 -1
  93. package/lib/view/companyView/helpers/cockpitHelpers.js +1 -1
  94. package/lib/view/companyView/selector/companyManagementViewSelector.js +1 -1
  95. package/lib/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
  96. package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
  97. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +2 -2
  98. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +1 -2
  99. package/lib/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +6 -8
  100. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +1 -7
  101. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.d.ts +2 -2
  102. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +0 -10
  103. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  104. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +0 -21
  105. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +1 -2
  106. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +1 -2
  107. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +4 -14
  108. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -138
  109. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +1 -2
  110. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +0 -14
  111. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +1 -4
  112. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -91
  113. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +2 -1
  114. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +4 -1
  115. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +2 -43
  116. package/lib/view/financeStatement/financeStatementSelector.js +1 -1
  117. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelectorTypes.d.ts +1 -1
  118. package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
  119. package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.d.ts +1 -3
  120. package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +2 -3
  121. package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.d.ts +1 -3
  122. package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +2 -3
  123. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +18 -55
  124. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +2 -16
  125. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +4 -5
  126. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.d.ts +3 -18
  127. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +10 -27
  128. package/lib/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +6 -9
  129. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistory.d.ts +1 -1
  130. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.d.ts +1 -3
  131. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +2 -3
  132. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
  133. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.d.ts +1 -3
  134. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +3 -7
  135. package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +1 -1
  136. package/lib/view/spendManagement/spendManagementFilterHelpers.d.ts +3 -12
  137. package/lib/view/spendManagement/spendManagementFilterHelpers.js +2 -4
  138. package/lib/view/subscriptionView/subscriptionViewSelector.js +1 -1
  139. package/lib/view/taskManager/taskListView/taskList.d.ts +1 -1
  140. package/lib/view/taskManager/taskListView/taskListReducer.js +1 -1
  141. package/lib/view/transactionDetail/transactionDetailSelector.js +1 -7
  142. package/lib/view/zeniOAuthView/zeniOAuthSelector.d.ts +1 -1
  143. package/package.json +4 -9
  144. package/lib/commonStateTypes/cacheOverrideFetchReducer.d.ts +0 -17
  145. package/lib/commonStateTypes/cacheOverrideFetchReducer.js +0 -20
  146. package/lib/commonStateTypes/filterPrimitives.d.ts +0 -23
  147. package/lib/commonStateTypes/filterPrimitives.js +0 -21
  148. package/lib/commonStateTypes/pusherActions.d.ts +0 -11
  149. package/lib/commonStateTypes/pusherActions.js +0 -6
  150. package/lib/esm/commonStateTypes/cacheOverrideFetchReducer.js +0 -16
  151. package/lib/esm/commonStateTypes/filterPrimitives.js +0 -20
  152. package/lib/esm/commonStateTypes/pusherActions.js +0 -3
  153. package/lib/esm/view/expenseAutomationView/transactionFilterHelpers.js +0 -258
  154. package/lib/esm/view/expenseAutomationView/types/completedSubTab.js +0 -17
  155. package/lib/view/expenseAutomationView/transactionFilterHelpers.d.ts +0 -66
  156. package/lib/view/expenseAutomationView/transactionFilterHelpers.js +0 -262
  157. package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +0 -10
  158. package/lib/view/expenseAutomationView/types/completedSubTab.js +0 -21
@@ -21,13 +21,9 @@ const saveAPIKeyConnectionEpic = (actions$, _, zeniAPI) => actions$.pipe((0, ope
21
21
  }
22
22
  const status = response.status ??
23
23
  (0, responsePayload_1.createZeniAPIStatus)('Failed to save connection. Please try again.');
24
- return (0, rxjs_1.from)([
25
- (0, tenantReducer_1.saveAPIKeyConnectionFailure)(action.payload.tenantId, status),
26
- ]);
24
+ return (0, rxjs_1.from)([(0, tenantReducer_1.saveAPIKeyConnectionFailure)(action.payload.tenantId, status)]);
27
25
  }), (0, operators_1.catchError)((error) => {
28
- const message = error instanceof Error
29
- ? error.message
30
- : 'Unexpected error saving connection.';
26
+ const message = error instanceof Error ? error.message : 'Unexpected error saving connection.';
31
27
  return (0, rxjs_1.from)([
32
28
  (0, tenantReducer_1.saveAPIKeyConnectionFailure)(action.payload.tenantId, (0, responsePayload_1.createZeniAPIStatus)(message)),
33
29
  ]);
@@ -23,13 +23,9 @@ const saveOAuthConnectionEpic = (actions$, _, zeniAPI) => actions$.pipe((0, oper
23
23
  }
24
24
  const status = response.status ??
25
25
  (0, responsePayload_1.createZeniAPIStatus)('Failed to save connection. Please try again.');
26
- return (0, rxjs_1.from)([
27
- (0, tenantReducer_1.saveOAuthConnectionFailure)(action.payload.tenantId, status),
28
- ]);
26
+ return (0, rxjs_1.from)([(0, tenantReducer_1.saveOAuthConnectionFailure)(action.payload.tenantId, status)]);
29
27
  }), (0, operators_1.catchError)((error) => {
30
- const message = error instanceof Error
31
- ? error.message
32
- : 'Unexpected error saving connection.';
28
+ const message = error instanceof Error ? error.message : 'Unexpected error saving connection.';
33
29
  return (0, rxjs_1.from)([
34
30
  (0, tenantReducer_1.saveOAuthConnectionFailure)(action.payload.tenantId, (0, responsePayload_1.createZeniAPIStatus)(message)),
35
31
  ]);
@@ -574,12 +574,7 @@ const tenant = (0, toolkit_1.createSlice)({
574
574
  saveConnectorCredentialsSuccess: {
575
575
  prepare(tenantId, connectionType, connectionName, connectionPayload) {
576
576
  return {
577
- payload: {
578
- tenantId,
579
- connectionType,
580
- connectionName,
581
- connectionPayload,
582
- },
577
+ payload: { tenantId, connectionType, connectionName, connectionPayload },
583
578
  };
584
579
  },
585
580
  reducer(draft, action) {
@@ -27,9 +27,7 @@ const toTransactionLineBase = (payload, lineType, currency) => ({
27
27
  });
28
28
  const toLinkedTransactionLine = (payload, currency) => ({
29
29
  ...toTransactionLineBase(payload, 'linked_transaction_line', currency),
30
- linkedTransactions: payload.linked_transactions != null
31
- ? payload.linked_transactions.map((transactionIDPayload) => (0, transactionIDPayload_1.toTransactionID)(transactionIDPayload))
32
- : [],
30
+ linkedTransactions: payload.linked_transactions != null ? payload.linked_transactions.map((transactionIDPayload) => (0, transactionIDPayload_1.toTransactionID)(transactionIDPayload)) : [],
33
31
  });
34
32
  /**
35
33
  * Transaction with account and class line payload with COT tracking
package/lib/epic.d.ts CHANGED
@@ -182,8 +182,6 @@ import { ActionType as FetchExpenseAutomationSaveTransactionCategorizationAction
182
182
  import { ActionType as TriggerReviewTabRefetchActionType } from './view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic';
183
183
  import { ActionType as FetchExpenseAutomationUpdateTransactionCategorizationEpicActionType } from './view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic';
184
184
  import { ActionType as UploadTransactionReceiptSuccessEpicActionType } from './view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic';
185
- import { ActionType as FetchRegisteredInterestsActionType } from './view/featureNotificationView/epics/fetchRegisteredInterestsEpic';
186
- import { ActionType as NotifyMeForFeatureActionType } from './view/featureNotificationView/epics/notifyMeForFeatureEpic';
187
185
  import { ActionType as DeleteFileActionType } from './view/fileView/epic/deleteFileEpic';
188
186
  import { ActionType as DeleteFileListActionType } from './view/fileView/epic/deleteFileListEpic';
189
187
  import { ActionType as FetchFileActionType } from './view/fileView/epic/fetchFileEpic';
@@ -209,6 +207,8 @@ import { ActionType as FetchNotificationUnreadCountActionType } from './view/not
209
207
  import { ActionType as FetchNotificationViewActionType } from './view/notificationView/epics/fetchNotificationViewEpic';
210
208
  import { ActionType as UpdateNotificationViewAllNotificationsStatusActionType } from './view/notificationView/epics/updateNotificationViewAllNotificationsStatusEpic';
211
209
  import { ActionType as UpdateNotificationViewNotificationStatusActionType } from './view/notificationView/epics/updateNotificationViewNotificationStatusEpic';
210
+ import { ActionType as FetchRegisteredInterestsActionType } from './view/featureNotificationView/epics/fetchRegisteredInterestsEpic';
211
+ import { ActionType as NotifyMeForFeatureActionType } from './view/featureNotificationView/epics/notifyMeForFeatureEpic';
212
212
  import { ActionType as FetchCompanyOnboardingViewActionType } from './view/onboardingView/cockpitView/epic/fetchCompanyOnboardingViewEpic';
213
213
  import { ActionType as FetchOnboardingCompletedCompaniesActionType } from './view/onboardingView/cockpitView/epic/fetchOnboardingCompletedCompaniesEpic';
214
214
  import { ActionType as FetchQBOConnectionPoolActionType } from './view/onboardingView/cockpitView/epic/fetchQBOConnectionPoolEpic';
@@ -495,18 +495,15 @@ import { ActionType as SaveSubscriptionUpdatesActionType } from './view/subscrip
495
495
  import { ActionType as CreateTagActionType } from './view/tagView/epics/createTagEpic';
496
496
  import { ActionType as DeleteTagActionType } from './view/tagView/epics/deleteTagEpic';
497
497
  import { ActionType as FetchAllTagsActionType } from './view/tagView/epics/fetchAllTagsEpic';
498
- import { ActionType as DeleteCannedResponseActionType } from './view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic';
499
- import { ActionType as FetchCannedResponsesActionType } from './view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic';
500
- import { ActionType as SaveCannedResponseActionType } from './view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic';
501
498
  import { ActionType as ArchiveTaskActionType } from './view/taskManager/taskDetailView/epics/archiveTaskEpic';
502
499
  import { ActionType as DeleteTaskActionType } from './view/taskManager/taskDetailView/epics/deleteTaskEpic';
500
+ import { ActionType as SnoozeTaskActionType } from './view/taskManager/taskDetailView/epics/snoozeTaskEpic';
501
+ import { ActionType as UnsnoozeTaskActionType } from './view/taskManager/taskDetailView/epics/unsnoozeTaskEpic';
503
502
  import { ActionType as FetchTaskDetailActionType } from './view/taskManager/taskDetailView/epics/fetchTaskDetailEpic';
504
503
  import { ActionType as FetchTaskDetailPageActionType } from './view/taskManager/taskDetailView/epics/fetchTaskDetailPageEpic';
505
504
  import { ActionType as FetchTaskHistoryActionType } from './view/taskManager/taskDetailView/epics/fetchTaskHistoryEpic';
506
505
  import { ActionType as InitializeTaskToLocalStoreActionType } from './view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic';
507
506
  import { ActionType as SaveTaskDetailActionType } from './view/taskManager/taskDetailView/epics/saveTaskDetailEpic';
508
- import { ActionType as SnoozeTaskActionType } from './view/taskManager/taskDetailView/epics/snoozeTaskEpic';
509
- import { ActionType as UnsnoozeTaskActionType } from './view/taskManager/taskDetailView/epics/unsnoozeTaskEpic';
510
507
  import { ActionType as CreateTaskFromTaskGroupTemplateActionType } from './view/taskManager/taskGroupTemplateView/epics/createTaskFromTaskGroupTemplateEpic';
511
508
  import { ActionType as FetchTaskGroupTemplatesActionType } from './view/taskManager/taskGroupTemplateView/epics/fetchTaskGroupTemplatesEpic';
512
509
  import { ActionType as CreateNewTaskGroupActionType } from './view/taskManager/taskGroupView/epics/createNewTaskGroupEpic';
@@ -518,6 +515,9 @@ import { ActionType as DragNDropTasksActionType } from './view/taskManager/taskL
518
515
  import { ActionType as FetchTaskListActionType } from './view/taskManager/taskListView/epics/fetchTaskListEpic';
519
516
  import { ActionType as FetchTaskListPageActionType } from './view/taskManager/taskListView/epics/fetchTaskListPageEpic';
520
517
  import { ActionType as UpdateTaskFromListViewActionType } from './view/taskManager/taskListView/epics/updateTaskFromListViewEpic';
518
+ import { ActionType as FetchCannedResponsesActionType } from './view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic';
519
+ import { ActionType as SaveCannedResponseActionType } from './view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic';
520
+ import { ActionType as DeleteCannedResponseActionType } from './view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic';
521
521
  import { ActionType as FetchTasksCardActionType } from './view/tasksCard/fetchTasksCardEpic';
522
522
  import { ActionType as TopExActionType } from './view/topEx/topExEpic';
523
523
  import { ActionType as FetchTransactionActivityLogActionType } from './view/transactionActivityLogView/fetchTransactionActivityLogEpic';
@@ -531,13 +531,13 @@ import { ActionType as UpdateTransactionDetailActionType } from './view/transact
531
531
  import { ActionType as UpdateTransactionOnUploadSuccessActionType } from './view/transactionDetail/epics/uploadMissingAttachmentSuccessEpic';
532
532
  import { ActionType as FetchTransactionListByAccountActionType } from './view/transactionList/fetchTransactionListByAccountEpic';
533
533
  import { ActionType as FetchTransactionListByClassActionType } from './view/transactionList/fetchTransactionListByClassEpic';
534
- import { ActionType as FetchTransactionListByEntityActionType } from './view/transactionList/fetchTransactionListByEntityEpic';
535
534
  import { ActionType as FetchTransactionListByProjectActionType } from './view/transactionList/fetchTransactionListByProjectEpic';
535
+ import { ActionType as FetchTransactionListByEntityActionType } from './view/transactionList/fetchTransactionListByEntityEpic';
536
536
  import { ActionType as FetchTransactionsListByCategoryTypeActionType } from './view/transactionList/fetchTransactionsListByCategoryTypeEpic';
537
537
  import { ActionType as ParallelFetchAccountTransactionListActionType } from './view/transactionList/parallelFetchAccountTransactionListEpic';
538
538
  import { ActionType as ParallelFetchClassTransactionListActionType } from './view/transactionList/parallelFetchClassTransactionListEpic';
539
- import { ActionType as ParallelFetchEntityTransactionListActionType } from './view/transactionList/parallelFetchEntityTransactionListEpic';
540
539
  import { ActionType as ParallelFetchProjectTransactionListActionType } from './view/transactionList/parallelFetchProjectTransactionListEpic';
540
+ import { ActionType as ParallelFetchEntityTransactionListActionType } from './view/transactionList/parallelFetchEntityTransactionListEpic';
541
541
  import { ActionType as ParallelFetchTransactionListByCategoryTypeActionType } from './view/transactionList/parallelFetchTransactionListByCategoryTypeEpic';
542
542
  import { ActionType as FetchExpenseTrendActionType } from './view/trend/fetchExpenseTrendEpic';
543
543
  import { ActionType as FetchIncomeTrendActionType } from './view/trend/fetchIncomeTrendEpic';
package/lib/epic.js CHANGED
@@ -9,7 +9,6 @@ const sectionAccountsViewEpic_1 = require("./entity/sectionAccountsView/sectionA
9
9
  const sectionClassesViewEpic_1 = require("./entity/sectionClassesViewV2/sectionClassesViewEpic");
10
10
  const sectionProjectViewEpic_1 = require("./entity/sectionProjectView/sectionProjectViewEpic");
11
11
  const clearAllEpic_1 = require("./entity/tenant/clearAllEpic");
12
- const deleteConnectionEpic_1 = require("./entity/tenant/epic/deleteConnectionEpic");
13
12
  const doMagicLinkSignInEpic_1 = require("./entity/tenant/epic/doMagicLinkSignInEpic");
14
13
  const fetchActiveTenantEpic_1 = require("./entity/tenant/epic/fetchActiveTenantEpic");
15
14
  const fetchAllTenantsEpic_1 = require("./entity/tenant/epic/fetchAllTenantsEpic");
@@ -17,6 +16,7 @@ const fetchExcludedResourcesEpic_1 = require("./entity/tenant/epic/fetchExcluded
17
16
  const fetchExternalConnectionsEpic_1 = require("./entity/tenant/epic/fetchExternalConnectionsEpic");
18
17
  const fetchSubscriptionSummaryForTenantEpic_1 = require("./entity/tenant/epic/fetchSubscriptionSummaryForTenantEpic");
19
18
  const resendVerifyDeviceOTPEpic_1 = require("./entity/tenant/epic/resendVerifyDeviceOTPEpic");
19
+ const deleteConnectionEpic_1 = require("./entity/tenant/epic/deleteConnectionEpic");
20
20
  const saveAPIKeyConnectionEpic_1 = require("./entity/tenant/epic/saveAPIKeyConnectionEpic");
21
21
  const saveConnectorCredentialsEpic_1 = require("./entity/tenant/epic/saveConnectorCredentialsEpic");
22
22
  const saveExternalConnectionEpic_1 = require("./entity/tenant/epic/saveExternalConnectionEpic");
@@ -190,8 +190,6 @@ const saveTransactionCategorizationEpic_1 = require("./view/expenseAutomationVie
190
190
  const triggerReviewTabRefetchEpic_1 = require("./view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic");
191
191
  const updateTransactionCategorizationEpic_1 = require("./view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic");
192
192
  const uploadTransactionReceiptSuccessEpic_1 = require("./view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic");
193
- const fetchRegisteredInterestsEpic_1 = require("./view/featureNotificationView/epics/fetchRegisteredInterestsEpic");
194
- const notifyMeForFeatureEpic_1 = require("./view/featureNotificationView/epics/notifyMeForFeatureEpic");
195
193
  const deleteFileEpic_1 = require("./view/fileView/epic/deleteFileEpic");
196
194
  const deleteFileListEpic_1 = require("./view/fileView/epic/deleteFileListEpic");
197
195
  const fetchFileEpic_1 = require("./view/fileView/epic/fetchFileEpic");
@@ -217,6 +215,8 @@ const fetchNotificationUnreadCountEpic_1 = require("./view/notificationView/epic
217
215
  const fetchNotificationViewEpic_1 = require("./view/notificationView/epics/fetchNotificationViewEpic");
218
216
  const updateNotificationViewAllNotificationsStatusEpic_1 = require("./view/notificationView/epics/updateNotificationViewAllNotificationsStatusEpic");
219
217
  const updateNotificationViewNotificationStatusEpic_1 = require("./view/notificationView/epics/updateNotificationViewNotificationStatusEpic");
218
+ const fetchRegisteredInterestsEpic_1 = require("./view/featureNotificationView/epics/fetchRegisteredInterestsEpic");
219
+ const notifyMeForFeatureEpic_1 = require("./view/featureNotificationView/epics/notifyMeForFeatureEpic");
220
220
  const fetchCompanyOnboardingViewEpic_1 = require("./view/onboardingView/cockpitView/epic/fetchCompanyOnboardingViewEpic");
221
221
  const fetchOnboardingCompletedCompaniesEpic_1 = require("./view/onboardingView/cockpitView/epic/fetchOnboardingCompletedCompaniesEpic");
222
222
  const fetchQBOConnectionPoolEpic_1 = require("./view/onboardingView/cockpitView/epic/fetchQBOConnectionPoolEpic");
@@ -506,18 +506,15 @@ const saveSubscriptionUpdatesEpic_1 = require("./view/subscriptionView/epic/save
506
506
  const createTagEpic_1 = require("./view/tagView/epics/createTagEpic");
507
507
  const deleteTagEpic_1 = require("./view/tagView/epics/deleteTagEpic");
508
508
  const fetchAllTagsEpic_1 = require("./view/tagView/epics/fetchAllTagsEpic");
509
- const deleteCannedResponseEpic_1 = require("./view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic");
510
- const fetchCannedResponsesEpic_1 = require("./view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic");
511
- const saveCannedResponseEpic_1 = require("./view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic");
512
509
  const archiveTaskEpic_1 = require("./view/taskManager/taskDetailView/epics/archiveTaskEpic");
513
510
  const deleteTaskEpic_1 = require("./view/taskManager/taskDetailView/epics/deleteTaskEpic");
511
+ const snoozeTaskEpic_1 = require("./view/taskManager/taskDetailView/epics/snoozeTaskEpic");
512
+ const unsnoozeTaskEpic_1 = require("./view/taskManager/taskDetailView/epics/unsnoozeTaskEpic");
514
513
  const fetchTaskDetailEpic_1 = require("./view/taskManager/taskDetailView/epics/fetchTaskDetailEpic");
515
514
  const fetchTaskDetailPageEpic_1 = require("./view/taskManager/taskDetailView/epics/fetchTaskDetailPageEpic");
516
515
  const fetchTaskHistoryEpic_1 = require("./view/taskManager/taskDetailView/epics/fetchTaskHistoryEpic");
517
516
  const initializeTaskToLocalStoreEpic_1 = require("./view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic");
518
517
  const saveTaskDetailEpic_1 = require("./view/taskManager/taskDetailView/epics/saveTaskDetailEpic");
519
- const snoozeTaskEpic_1 = require("./view/taskManager/taskDetailView/epics/snoozeTaskEpic");
520
- const unsnoozeTaskEpic_1 = require("./view/taskManager/taskDetailView/epics/unsnoozeTaskEpic");
521
518
  const createTaskFromTaskGroupTemplateEpic_1 = require("./view/taskManager/taskGroupTemplateView/epics/createTaskFromTaskGroupTemplateEpic");
522
519
  const fetchTaskGroupTemplatesEpic_1 = require("./view/taskManager/taskGroupTemplateView/epics/fetchTaskGroupTemplatesEpic");
523
520
  const createNewTaskGroupEpic_1 = require("./view/taskManager/taskGroupView/epics/createNewTaskGroupEpic");
@@ -529,6 +526,9 @@ const dragNDropTasksEpic_1 = require("./view/taskManager/taskListView/epics/drag
529
526
  const fetchTaskListEpic_1 = require("./view/taskManager/taskListView/epics/fetchTaskListEpic");
530
527
  const fetchTaskListPageEpic_1 = require("./view/taskManager/taskListView/epics/fetchTaskListPageEpic");
531
528
  const updateTaskFromListViewEpic_1 = require("./view/taskManager/taskListView/epics/updateTaskFromListViewEpic");
529
+ const fetchCannedResponsesEpic_1 = require("./view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic");
530
+ const saveCannedResponseEpic_1 = require("./view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic");
531
+ const deleteCannedResponseEpic_1 = require("./view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic");
532
532
  const fetchTasksCardEpic_1 = require("./view/tasksCard/fetchTasksCardEpic");
533
533
  const topExEpic_1 = require("./view/topEx/topExEpic");
534
534
  const fetchTransactionActivityLogEpic_1 = require("./view/transactionActivityLogView/fetchTransactionActivityLogEpic");
@@ -542,13 +542,13 @@ const updateTransactionDetailEpic_1 = require("./view/transactionDetail/epics/up
542
542
  const uploadMissingAttachmentSuccessEpic_1 = require("./view/transactionDetail/epics/uploadMissingAttachmentSuccessEpic");
543
543
  const fetchTransactionListByAccountEpic_1 = require("./view/transactionList/fetchTransactionListByAccountEpic");
544
544
  const fetchTransactionListByClassEpic_1 = require("./view/transactionList/fetchTransactionListByClassEpic");
545
- const fetchTransactionListByEntityEpic_1 = require("./view/transactionList/fetchTransactionListByEntityEpic");
546
545
  const fetchTransactionListByProjectEpic_1 = require("./view/transactionList/fetchTransactionListByProjectEpic");
546
+ const fetchTransactionListByEntityEpic_1 = require("./view/transactionList/fetchTransactionListByEntityEpic");
547
547
  const fetchTransactionsListByCategoryTypeEpic_1 = require("./view/transactionList/fetchTransactionsListByCategoryTypeEpic");
548
548
  const parallelFetchAccountTransactionListEpic_1 = require("./view/transactionList/parallelFetchAccountTransactionListEpic");
549
549
  const parallelFetchClassTransactionListEpic_1 = require("./view/transactionList/parallelFetchClassTransactionListEpic");
550
- const parallelFetchEntityTransactionListEpic_1 = require("./view/transactionList/parallelFetchEntityTransactionListEpic");
551
550
  const parallelFetchProjectTransactionListEpic_1 = require("./view/transactionList/parallelFetchProjectTransactionListEpic");
551
+ const parallelFetchEntityTransactionListEpic_1 = require("./view/transactionList/parallelFetchEntityTransactionListEpic");
552
552
  const parallelFetchTransactionListByCategoryTypeEpic_1 = require("./view/transactionList/parallelFetchTransactionListByCategoryTypeEpic");
553
553
  const fetchExpenseTrendEpic_1 = require("./view/trend/fetchExpenseTrendEpic");
554
554
  const fetchIncomeTrendEpic_1 = require("./view/trend/fetchIncomeTrendEpic");
@@ -21,8 +21,8 @@ import { fetchSubscriptionSummaryForTenantEpic } from './entity/tenant/epic/fetc
21
21
  import { resendVerifyDeviceOTPEpic } from './entity/tenant/epic/resendVerifyDeviceOTPEpic';
22
22
  import { saveExternalConnectionEpic } from './entity/tenant/epic/saveExternalConnectionEpic';
23
23
  import { sendEmailMagicLinkToUserEpic } from './entity/tenant/epic/sendEmailMagicLinkToUserEpic';
24
- import { sessionHeartbeatEpic } from './entity/tenant/epic/sessionHeartbeatEpic';
25
24
  import { doSignInEpic } from './entity/tenant/epic/signInUserEpic';
25
+ import { sessionHeartbeatEpic } from './entity/tenant/epic/sessionHeartbeatEpic';
26
26
  import { doSignOutEpic } from './entity/tenant/epic/signOutUserEpic';
27
27
  import { verifyDeviceWithTwoFAEpic } from './entity/tenant/epic/verifyDeviceWithTwoFAEpic';
28
28
  // ── Toast Notification Epic ──────────────────────────────────────────
@@ -1,8 +1,7 @@
1
- import { createSelector } from '@reduxjs/toolkit';
2
1
  import flatMap from 'lodash/flatMap';
3
2
  import { getCOABalances } from '../../commonStateTypes/coaBalance/coaBalance';
4
3
  import { sortComparator } from '../../commonStateTypes/coaBalance/sortBalancesByFreeRangeTotal';
5
- import { getAccountKey, isPaymentAccountType, } from './accountState';
4
+ import { getAccountKey, } from './accountState';
6
5
  function getCommonAccountFields(accountState, id) {
7
6
  const key = getAccountKey(id.reportId, id.accountId, id.classesViewParentId, id.accountsViewParentId, id.projectsViewParentId);
8
7
  const account = accountState.accountsByKey[key];
@@ -180,47 +179,3 @@ export const getAccountIdsForLabels = (accountState, labels) => {
180
179
  });
181
180
  return allAccountIdsForLabels;
182
181
  };
183
- /**
184
- * Returns all accounts currently in state (single pass over accountsByKey).
185
- * Use for dropdowns that need account names and types; map to
186
- * { accountId, accountName, accountType } as needed.
187
- */
188
- export const getAllAccounts = (accountState) => Object.values(accountState.accountsByKey);
189
- /**
190
- * Partitions accounts for transaction filter dropdowns: bank/credit_card → paymentAccountNames,
191
- * all other account types → categoryOptions. Use for payment_account_name and category filter options.
192
- *
193
- * Memoised via `createSelector` so the composite `{categoryOptions,
194
- * paymentAccountNames}` keeps a stable identity across Redux dispatches that
195
- * don't change account data. Without this, every consumer using
196
- * `useSelector(state => getTransactionFilterAccountOptions(state.accountState))`
197
- * would re-render on every dispatch (the inline call returns a fresh outer
198
- * object each time, defeating reference equality).
199
- */
200
- export const getTransactionFilterAccountOptions = createSelector(
201
- // Key the memo on the underlying `accountsByKey` record rather than on
202
- // `getAllAccounts` output: the latter returns a fresh `Object.values(...)`
203
- // array on every call, which would defeat reselect's reference-equality
204
- // check and re-run the projection on every dispatch.
205
- [(accountState) => accountState.accountsByKey], (accountsByKey) => {
206
- const accounts = Object.values(accountsByKey);
207
- const paymentAccountNames = [];
208
- const categoryOptions = [];
209
- for (const account of accounts) {
210
- if (account.accountType == null) {
211
- continue;
212
- }
213
- const option = {
214
- accountId: account.accountId,
215
- accountName: account.accountName,
216
- accountType: account.accountType,
217
- };
218
- if (isPaymentAccountType(account.accountType)) {
219
- paymentAccountNames.push(option);
220
- }
221
- else {
222
- categoryOptions.push(option);
223
- }
224
- }
225
- return { categoryOptions, paymentAccountNames };
226
- });
@@ -1,7 +1,7 @@
1
1
  import { getNestedAccountIDStr, } from '../../commonStateTypes/accountView/nestedAccountID';
2
2
  import { getNestedClassIDStr, } from '../../commonStateTypes/classesView/nestedClassID';
3
3
  import { stringToUnion, stringToUnionStrict, } from '../../commonStateTypes/stringToUnion';
4
- export const ALL_ACCOUNT_TYPES = [
4
+ const ALL_ACCOUNT_TYPES = [
5
5
  'bank',
6
6
  'credit_card',
7
7
  'expenses',
@@ -25,12 +25,6 @@ export const ALL_ACCOUNT_TYPES = [
25
25
  ];
26
26
  export const toAccountType = (v) => stringToUnion(v, ALL_ACCOUNT_TYPES);
27
27
  export const toAccountTypeStrict = (v) => stringToUnionStrict(v ?? '', ALL_ACCOUNT_TYPES);
28
- /** Account types used for payment-account filters (e.g. transaction filter "payment account name"). */
29
- export const PAYMENT_ACCOUNT_TYPES = ['bank', 'credit_card'];
30
- export function isPaymentAccountType(accountType) {
31
- return (accountType != null &&
32
- PAYMENT_ACCOUNT_TYPES.includes(accountType));
33
- }
34
28
  const ALL_ACCOUNT_LABELS = [
35
29
  'uncategorized_income',
36
30
  'uncategorized_expense',
@@ -19,7 +19,9 @@ const toAccuracyByModel = (accuracyPayload) => {
19
19
  export const toAiAccountantEnrollment = (payload) => ({
20
20
  status: toAiAccountantEnrollmentStatus(payload.status),
21
21
  accuracy: toAccuracyByModel(payload.accuracy),
22
- latestTraining: payload.latest_training != null ? date(payload.latest_training) : undefined,
22
+ latestTraining: payload.latest_training != null
23
+ ? date(payload.latest_training)
24
+ : undefined,
23
25
  latestTransactionSync: payload.latest_transaction_sync != null
24
26
  ? date(payload.latest_transaction_sync)
25
27
  : undefined,
@@ -27,7 +27,8 @@ const aiAccountantCustomer = createSlice({
27
27
  const existing = draft.jobsByTenantId[action.payload.tenantId] ?? [];
28
28
  const jobMap = new Map(existing.map((job) => [job.jobId, job]));
29
29
  mappedJobs.forEach((job) => jobMap.set(job.jobId, job));
30
- draft.jobsByTenantId[action.payload.tenantId] = Array.from(jobMap.values());
30
+ draft.jobsByTenantId[action.payload.tenantId] =
31
+ Array.from(jobMap.values());
31
32
  }
32
33
  else {
33
34
  draft.jobsByTenantId[action.payload.tenantId] = mappedJobs;
@@ -1,7 +1,5 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
2
  import assignWith from 'lodash/assignWith';
3
- import { toAmount } from '../../commonStateTypes/amount';
4
- import { toCardStatusCodeType } from './chargeCard';
5
3
  import { mapChargeCardPayloadToChargeCard, } from './chargeCardPayload';
6
4
  export const initialState = {
7
5
  chargeCardByID: {},
@@ -37,37 +35,6 @@ const chargeCard = createSlice({
37
35
  const latestChargeCard = mapChargeCardPayloadToChargeCard(action.payload);
38
36
  draft.chargeCardByID[latestChargeCard.id] = latestChargeCard;
39
37
  },
40
- updateChargeCardStatusFromPusher(draft, action) {
41
- const { cardId, cardStatus, isLockedByAdmin } = action.payload;
42
- const card = draft.chargeCardByID[cardId];
43
- if (card != null) {
44
- card.status = {
45
- code: toCardStatusCodeType(cardStatus.code),
46
- name: cardStatus.name,
47
- };
48
- if (isLockedByAdmin !== undefined) {
49
- card.isLockedByAdmin = isLockedByAdmin;
50
- }
51
- }
52
- },
53
- updateChargeCardSpendingFromPusher(draft, action) {
54
- const { cardId, currencyCode, currencySymbol } = action.payload;
55
- const card = draft.chargeCardByID[cardId];
56
- if (card == null) {
57
- return;
58
- }
59
- const amt = (v) => v !== undefined ? toAmount(v, currencyCode, currencySymbol) : undefined;
60
- card.balance = amt(action.payload.balance) ?? card.balance;
61
- card.hold = amt(action.payload.hold) ?? card.hold;
62
- card.dailyPurchaseSpends =
63
- amt(action.payload.dailyPurchaseSpends) ?? card.dailyPurchaseSpends;
64
- card.monthlyPurchaseSpends =
65
- amt(action.payload.monthlyPurchaseSpends) ?? card.monthlyPurchaseSpends;
66
- card.dailyWithdrawals =
67
- amt(action.payload.dailyWithdrawals) ?? card.dailyWithdrawals;
68
- card.monthlyWithdrawals =
69
- amt(action.payload.monthlyWithdrawals) ?? card.monthlyWithdrawals;
70
- },
71
38
  removeChargeCard(draft, action) {
72
39
  delete draft.chargeCardByID[action.payload];
73
40
  },
@@ -76,5 +43,5 @@ const chargeCard = createSlice({
76
43
  },
77
44
  },
78
45
  });
79
- export const { updateChargeCards, updateChargeCard, updateChargeCardStatusFromPusher, updateChargeCardSpendingFromPusher, removeChargeCard, clearAllChargeCards, } = chargeCard.actions;
46
+ export const { updateChargeCards, updateChargeCard, removeChargeCard, clearAllChargeCards, } = chargeCard.actions;
80
47
  export default chargeCard.reducer;
@@ -1,6 +1,4 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
- import { addChargeCardTransactionFromPusher, addDeclinedChargeCardTransactionFromPusher, } from '../../commonStateTypes/pusherActions';
3
- import { toCardTransactionStatusCode, } from './chargeCardTransaction';
4
2
  import { toChargeCardTransaction, } from './chargeCardTransactionPayload';
5
3
  export const initialState = {
6
4
  chargeCardTransactionById: {},
@@ -48,42 +46,10 @@ const chargeCardTransaction = createSlice({
48
46
  }
49
47
  }
50
48
  },
51
- updateChargeCardTransactionStatusFromPusher(draft, action) {
52
- const { transactionId, transactionStatus } = action.payload;
53
- const transaction = draft.chargeCardTransactionById[transactionId];
54
- if (transaction != null) {
55
- transaction.transactionStatus = {
56
- code: toCardTransactionStatusCode(transactionStatus.code),
57
- name: transactionStatus.name,
58
- };
59
- }
60
- },
61
- updateChargeCardTransactionFromPusher(draft, action) {
62
- const entity = toChargeCardTransaction(action.payload.transaction);
63
- draft.chargeCardTransactionById[entity.id] = entity;
64
- },
65
- updateChargeCardTransactionReceiptFromPusher(draft, action) {
66
- const { transactionId, attachmentFilePaths } = action.payload;
67
- const transaction = draft.chargeCardTransactionById[transactionId];
68
- if (transaction != null) {
69
- transaction.attachmentFilePaths = attachmentFilePaths;
70
- }
71
- },
72
49
  clearAllChargeCardTransactions(draft) {
73
50
  draft.chargeCardTransactionById = {};
74
51
  },
75
52
  },
76
- extraReducers: (builder) => {
77
- builder
78
- .addCase(addChargeCardTransactionFromPusher, (draft, action) => {
79
- const entity = toChargeCardTransaction(action.payload.transaction);
80
- draft.chargeCardTransactionById[entity.id] = entity;
81
- })
82
- .addCase(addDeclinedChargeCardTransactionFromPusher, (draft, action) => {
83
- const entity = toChargeCardTransaction(action.payload.transaction);
84
- draft.chargeCardTransactionById[entity.id] = entity;
85
- });
86
- },
87
53
  });
88
- export const { updateChargeCardTransactions, updateChargeCardTransaction, updateChargeCardTransactionAttachments, updateChargeCardTransactionStatusFromPusher, updateChargeCardTransactionFromPusher, updateChargeCardTransactionReceiptFromPusher, removeChargeCardTransaction, removeChargeCardTransactionAttachmentByThirdPartyTransactionId, clearAllChargeCardTransactions, } = chargeCardTransaction.actions;
54
+ export const { updateChargeCardTransactions, updateChargeCardTransaction, updateChargeCardTransactionAttachments, removeChargeCardTransaction, removeChargeCardTransactionAttachmentByThirdPartyTransactionId, clearAllChargeCardTransactions, } = chargeCardTransaction.actions;
89
55
  export default chargeCardTransaction.reducer;
@@ -1,4 +1,3 @@
1
- import { createSelector } from '@reduxjs/toolkit';
2
1
  import recordGet from 'lodash/get';
3
2
  import { getCOABalances } from '../../commonStateTypes/coaBalance/coaBalance';
4
3
  import { getAccount } from '../account/accountSelector';
@@ -51,50 +50,3 @@ export function getClassReport(classState, accountState, id, filter) {
51
50
  accounts: accountReport,
52
51
  };
53
52
  }
54
- /**
55
- * Returns all classes currently in state (single pass over classesByKey).
56
- * Use for dropdowns that need class names; map to { classId, className } as needed.
57
- */
58
- export function getAllClasses(classState) {
59
- return Object.values(classState.classesByKey);
60
- }
61
- /**
62
- * Memoised projection of `getAllClasses` to the `{classId, className}` shape
63
- * expected by filter dropdowns. Consumers should prefer this over inlining a
64
- * `getAllClasses(...).map(...)` inside `useSelector`: the inline map allocates
65
- * a fresh array on every Redux dispatch, breaking `useSelector`'s
66
- * reference-equality optimisation and triggering re-renders on every state
67
- * change unrelated to class data.
68
- *
69
- * Two cleanups happen here, intentionally inside the selector so every
70
- * consumer benefits uniformly:
71
- * 1. **Drop entries with a blank `className`.** Soft-deleted classes can
72
- * retain their classId in state while the human name is blanked, which
73
- * would otherwise render as an empty row in the filter dropdown.
74
- * 2. **Dedupe by `classId`.** `classesByKey` is keyed by
75
- * `${classId}-${reportId}` (see `getClassKey`), so a class loaded under
76
- * multiple report contexts appears as multiple entries from
77
- * `Object.values(classesByKey)`. The first non-blank entry per
78
- * `classId` wins.
79
- */
80
- export const getClassFilterOptions = createSelector(
81
- // Key the memo on the underlying `classesByKey` record rather than on
82
- // `getAllClasses` output: the latter returns a fresh `Object.values(...)`
83
- // array on every call, which would defeat reselect's reference-equality
84
- // check and re-run the projection on every dispatch.
85
- [(classState) => classState.classesByKey], (classesByKey) => {
86
- const classes = Object.values(classesByKey);
87
- const seenClassIds = new Set();
88
- const options = [];
89
- for (const c of classes) {
90
- if (c.classId == null || seenClassIds.has(c.classId)) {
91
- continue;
92
- }
93
- if (c.className == null || c.className.trim() === '') {
94
- continue;
95
- }
96
- seenClassIds.add(c.classId);
97
- options.push({ classId: c.classId, className: c.className });
98
- }
99
- return options;
100
- });
@@ -1,6 +1,6 @@
1
1
  import recordGet from 'lodash/get';
2
- import { getSumOfBalancesByGroupedByPeriod } from '../../commonStateTypes/coaBalance/classBalances/getSumOfBalancesGroupedByPeriod';
3
2
  import { getCOABalances, } from '../../commonStateTypes/coaBalance/coaBalance';
3
+ import { getSumOfBalancesByGroupedByPeriod } from '../../commonStateTypes/coaBalance/classBalances/getSumOfBalancesGroupedByPeriod';
4
4
  import { getNestedAccountReportForAccount, } from '../account/subAccountSelector';
5
5
  import { getProjectById } from '../project/projectSelector';
6
6
  import { getSectionProjectViewKey } from './sectionProjectView';
@@ -260,10 +260,7 @@ export class SessionManager {
260
260
  this.callbacks?.onHeartbeat();
261
261
  // Let other tabs know we just fired a heartbeat — they can skip theirs
262
262
  // this cycle to avoid N tabs all firing heartbeats.
263
- this.broadcast({
264
- type: 'heartbeat-fired',
265
- timestamp: this.lastHeartbeatTime,
266
- });
263
+ this.broadcast({ type: 'heartbeat-fired', timestamp: this.lastHeartbeatTime });
267
264
  }
268
265
  // ─── BroadcastChannel (cross-tab activity sync) ───────────
269
266
  setupBroadcastChannel() {
@@ -3,13 +3,13 @@ import { filter, mergeMap } from 'rxjs/operators';
3
3
  import { clearAllAiAccountantCustomers } from '../../entity/aiAccountantCustomer/aiAccountantCustomerReducer';
4
4
  import { clearAiCfo } from '../../entity/aiCfo/aiCfoReducer';
5
5
  import { clearAllApprovalRules } from '../../entity/approvalRule/approvalRuleReducer';
6
- import { clearAllCreditAgent } from '../../entity/creditAgent/creditAgentReducer';
7
6
  import { clearAllEntityApprovalStatus } from '../../entity/entityApprovalStatus/entityApprovalStatusReducer';
8
7
  import { clearAllMonthEndCloseChecks } from '../../entity/monthEndCloseChecks/monthEndCloseChecksReducer';
9
8
  import { clearAllNotifications } from '../../entity/notification/notificationReducer';
10
9
  import { clearAllSectionsClassesViewV2 } from '../../entity/sectionClassesViewV2/sectionClassesViewReducer';
11
10
  import { clearAllSectionsProjectView } from '../../entity/sectionProjectView/sectionProjectViewReducer';
12
11
  import { clearAllTaskGroups } from '../../entity/taskGroup/taskGroupReducer';
12
+ import { clearCannedResponses } from '../../view/taskManager/cannedResponsesView/cannedResponsesReducer';
13
13
  import { clearAllToastNotifications } from '../../entity/toastNotification/toastNotificationReducer';
14
14
  import { clearAccountList } from '../../view/accountList/accountListReducer';
15
15
  import { clearAccountMappingView } from '../../view/accountMappingView/accountMappingReducer';
@@ -40,6 +40,7 @@ import { clearCompanyHealthMetricView } from '../../view/companyHealthMetricView
40
40
  import { clearCompanyMonthEndReportView } from '../../view/companyMonthEndReportView/companyMonthEndReportViewReducer';
41
41
  import { clearCompanyTaskManagerView } from '../../view/companyTaskManagerView/companyTaskManagerViewReducer';
42
42
  import { clearCompanyView } from '../../view/companyView/companyViewReducer';
43
+ import { clearAllCreditAgent } from '../../entity/creditAgent/creditAgentReducer';
43
44
  import { clearCreditAgentView } from '../../view/creditAgentView/creditAgentViewReducer';
44
45
  import { clearDashboard } from '../../view/dashboard/dashboardReducer';
45
46
  import { clearDashboardLayout } from '../../view/dashboardLayout/dashboardLayoutReducer';
@@ -134,7 +135,6 @@ import { clearZeniAccountSetupView } from '../../view/spendManagement/zeniAccoun
134
135
  import { clearZeniAccountsConfig } from '../../view/spendManagement/zeniAccounts/zeniAccountsConfig/zeniAccountsConfigReducer';
135
136
  import { clearSubscriptionView } from '../../view/subscriptionView/subscriptionViewReducer';
136
137
  import { clearTagView } from '../../view/tagView/tagViewReducer';
137
- import { clearCannedResponses } from '../../view/taskManager/cannedResponsesView/cannedResponsesReducer';
138
138
  import { clearTaskDetail } from '../../view/taskManager/taskDetailView/taskDetailReducer';
139
139
  import { clearTaskGroupTemplatesView } from '../../view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
140
140
  import { clearTaskGroupView } from '../../view/taskManager/taskGroupView/taskGroupViewReducer';
@@ -18,13 +18,9 @@ export const saveAPIKeyConnectionEpic = (actions$, _, zeniAPI) => actions$.pipe(
18
18
  }
19
19
  const status = response.status ??
20
20
  createZeniAPIStatus('Failed to save connection. Please try again.');
21
- return from([
22
- saveAPIKeyConnectionFailure(action.payload.tenantId, status),
23
- ]);
21
+ return from([saveAPIKeyConnectionFailure(action.payload.tenantId, status)]);
24
22
  }), catchError((error) => {
25
- const message = error instanceof Error
26
- ? error.message
27
- : 'Unexpected error saving connection.';
23
+ const message = error instanceof Error ? error.message : 'Unexpected error saving connection.';
28
24
  return from([
29
25
  saveAPIKeyConnectionFailure(action.payload.tenantId, createZeniAPIStatus(message)),
30
26
  ]);
@@ -20,13 +20,9 @@ export const saveOAuthConnectionEpic = (actions$, _, zeniAPI) => actions$.pipe(f
20
20
  }
21
21
  const status = response.status ??
22
22
  createZeniAPIStatus('Failed to save connection. Please try again.');
23
- return from([
24
- saveOAuthConnectionFailure(action.payload.tenantId, status),
25
- ]);
23
+ return from([saveOAuthConnectionFailure(action.payload.tenantId, status)]);
26
24
  }), catchError((error) => {
27
- const message = error instanceof Error
28
- ? error.message
29
- : 'Unexpected error saving connection.';
25
+ const message = error instanceof Error ? error.message : 'Unexpected error saving connection.';
30
26
  return from([
31
27
  saveOAuthConnectionFailure(action.payload.tenantId, createZeniAPIStatus(message)),
32
28
  ]);
@@ -563,12 +563,7 @@ const tenant = createSlice({
563
563
  saveConnectorCredentialsSuccess: {
564
564
  prepare(tenantId, connectionType, connectionName, connectionPayload) {
565
565
  return {
566
- payload: {
567
- tenantId,
568
- connectionType,
569
- connectionName,
570
- connectionPayload,
571
- },
566
+ payload: { tenantId, connectionType, connectionName, connectionPayload },
572
567
  };
573
568
  },
574
569
  reducer(draft, action) {
@@ -23,9 +23,7 @@ const toTransactionLineBase = (payload, lineType, currency) => ({
23
23
  });
24
24
  const toLinkedTransactionLine = (payload, currency) => ({
25
25
  ...toTransactionLineBase(payload, 'linked_transaction_line', currency),
26
- linkedTransactions: payload.linked_transactions != null
27
- ? payload.linked_transactions.map((transactionIDPayload) => toTransactionID(transactionIDPayload))
28
- : [],
26
+ linkedTransactions: payload.linked_transactions != null ? payload.linked_transactions.map((transactionIDPayload) => toTransactionID(transactionIDPayload)) : [],
29
27
  });
30
28
  /**
31
29
  * Transaction with account and class line payload with COT tracking