@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.
- package/lib/coreEpics.js +1 -1
- package/lib/entity/account/accountSelector.d.ts +1 -27
- package/lib/entity/account/accountSelector.js +1 -47
- package/lib/entity/account/accountState.d.ts +1 -6
- package/lib/entity/account/accountState.js +4 -11
- package/lib/entity/account/subAccountSelector.d.ts +1 -1
- package/lib/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +3 -1
- package/lib/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +2 -1
- package/lib/entity/aiAccountantCustomer/aiAccountantCustomerSelector.d.ts +1 -1
- package/lib/entity/chargeCard/chargeCardReducer.d.ts +2 -19
- package/lib/entity/chargeCard/chargeCardReducer.js +2 -35
- package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.d.ts +1 -14
- package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.js +2 -36
- package/lib/entity/class/classSelector.d.ts +0 -35
- package/lib/entity/class/classSelector.js +0 -50
- package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +1 -1
- package/lib/entity/sectionProjectView/sectionProjectViewSelector.js +1 -1
- package/lib/entity/tenant/SessionManager.js +3 -6
- package/lib/entity/tenant/clearAllEpic.d.ts +2 -2
- package/lib/entity/tenant/clearAllEpic.js +2 -2
- package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.js +2 -6
- package/lib/entity/tenant/epic/saveOAuthConnectionEpic.js +2 -6
- package/lib/entity/tenant/tenantReducer.js +1 -6
- package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +1 -3
- package/lib/epic.d.ts +9 -9
- package/lib/epic.js +10 -10
- package/lib/esm/coreEpics.js +1 -1
- package/lib/esm/entity/account/accountSelector.js +1 -46
- package/lib/esm/entity/account/accountState.js +1 -7
- package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +3 -1
- package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +2 -1
- package/lib/esm/entity/chargeCard/chargeCardReducer.js +1 -34
- package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionReducer.js +1 -35
- package/lib/esm/entity/class/classSelector.js +0 -48
- package/lib/esm/entity/sectionProjectView/sectionProjectViewSelector.js +1 -1
- package/lib/esm/entity/tenant/SessionManager.js +1 -4
- package/lib/esm/entity/tenant/clearAllEpic.js +2 -2
- package/lib/esm/entity/tenant/epic/saveAPIKeyConnectionEpic.js +2 -6
- package/lib/esm/entity/tenant/epic/saveOAuthConnectionEpic.js +2 -6
- package/lib/esm/entity/tenant/tenantReducer.js +1 -6
- package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +1 -3
- package/lib/esm/epic.js +10 -10
- package/lib/esm/index.js +16 -26
- package/lib/esm/reducer.js +2 -2
- package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +5 -2
- package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +5 -2
- package/lib/esm/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +1 -4
- package/lib/esm/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
- package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +1 -1
- package/lib/esm/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +1 -1
- package/lib/esm/view/companyView/helpers/cockpitHelpers.js +1 -1
- package/lib/esm/view/companyView/selector/companyManagementViewSelector.js +1 -1
- package/lib/esm/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +2 -2
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +1 -2
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +6 -8
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +1 -7
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +1 -11
- package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +1 -2
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +1 -137
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -89
- package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +2 -0
- package/lib/esm/view/financeStatement/financeStatementSelector.js +1 -1
- package/lib/esm/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +2 -3
- package/lib/esm/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +2 -3
- package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +18 -55
- package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +2 -16
- package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +4 -5
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +9 -26
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +6 -9
- package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +2 -3
- package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
- package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +3 -7
- package/lib/esm/view/spendManagement/spendManagementFilterHelpers.js +2 -4
- package/lib/esm/view/subscriptionView/subscriptionViewSelector.js +1 -1
- package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +1 -1
- package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +1 -1
- package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +1 -1
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +1 -1
- package/lib/esm/view/transactionDetail/transactionDetailSelector.js +1 -7
- package/lib/index.d.ts +19 -25
- package/lib/index.js +58 -81
- package/lib/reducer.d.ts +2 -2
- package/lib/reducer.js +2 -2
- package/lib/view/aiAccountantView/aiAccountantViewPayload.d.ts +2 -2
- package/lib/view/aiAccountantView/aiAccountantViewReducer.d.ts +1 -1
- package/lib/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +5 -2
- package/lib/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +5 -2
- package/lib/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +1 -4
- package/lib/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
- package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +1 -1
- package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +1 -1
- package/lib/view/companyView/helpers/cockpitHelpers.js +1 -1
- package/lib/view/companyView/selector/companyManagementViewSelector.js +1 -1
- package/lib/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
- package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +2 -2
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +1 -2
- package/lib/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +6 -8
- package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +1 -7
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +0 -10
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +0 -21
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +1 -2
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +1 -2
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +4 -14
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -138
- package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +1 -2
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +0 -14
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +1 -4
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -91
- package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +2 -1
- package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +4 -1
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +2 -43
- package/lib/view/financeStatement/financeStatementSelector.js +1 -1
- package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelectorTypes.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
- package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.d.ts +1 -3
- package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +2 -3
- package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.d.ts +1 -3
- package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +2 -3
- package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +18 -55
- package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +2 -16
- package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +4 -5
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.d.ts +3 -18
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +10 -27
- package/lib/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +6 -9
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistory.d.ts +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.d.ts +1 -3
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +2 -3
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.d.ts +1 -3
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +3 -7
- package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +1 -1
- package/lib/view/spendManagement/spendManagementFilterHelpers.d.ts +3 -12
- package/lib/view/spendManagement/spendManagementFilterHelpers.js +2 -4
- package/lib/view/subscriptionView/subscriptionViewSelector.js +1 -1
- package/lib/view/taskManager/taskListView/taskList.d.ts +1 -1
- package/lib/view/taskManager/taskListView/taskListReducer.js +1 -1
- package/lib/view/transactionDetail/transactionDetailSelector.js +1 -7
- package/lib/view/zeniOAuthView/zeniOAuthSelector.d.ts +1 -1
- package/package.json +4 -9
- package/lib/commonStateTypes/cacheOverrideFetchReducer.d.ts +0 -17
- package/lib/commonStateTypes/cacheOverrideFetchReducer.js +0 -20
- package/lib/commonStateTypes/filterPrimitives.d.ts +0 -23
- package/lib/commonStateTypes/filterPrimitives.js +0 -21
- package/lib/commonStateTypes/pusherActions.d.ts +0 -11
- package/lib/commonStateTypes/pusherActions.js +0 -6
- package/lib/esm/commonStateTypes/cacheOverrideFetchReducer.js +0 -16
- package/lib/esm/commonStateTypes/filterPrimitives.js +0 -20
- package/lib/esm/commonStateTypes/pusherActions.js +0 -3
- package/lib/esm/view/expenseAutomationView/transactionFilterHelpers.js +0 -258
- package/lib/esm/view/expenseAutomationView/types/completedSubTab.js +0 -17
- package/lib/view/expenseAutomationView/transactionFilterHelpers.d.ts +0 -66
- package/lib/view/expenseAutomationView/transactionFilterHelpers.js +0 -262
- package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +0 -10
- 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");
|
package/lib/esm/coreEpics.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
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] =
|
|
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,
|
|
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,
|
|
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
|