@zeniai/client-epic-state 5.0.1 → 5.0.2-betaRD2

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 (185) hide show
  1. package/lib/commonPayloadTypes/subAccountView/reportBySubAccountPayload.d.ts +2 -0
  2. package/lib/commonStateTypes/coaBalance/coaBalancesFilterProjectView.d.ts +13 -0
  3. package/lib/commonStateTypes/coaBalance/coaBalancesFilterProjectView.js +9 -0
  4. package/lib/commonStateTypes/common.d.ts +1 -1
  5. package/lib/commonStateTypes/projectView/projectViewParentID.d.ts +5 -0
  6. package/lib/commonStateTypes/projectView/projectViewParentID.js +2 -0
  7. package/lib/commonStateTypes/viewAndReport/reportIDHelper.d.ts +1 -0
  8. package/lib/commonStateTypes/viewAndReport/reportIDHelper.js +3 -1
  9. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  10. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  11. package/lib/entity/account/accountReducer.js +6 -3
  12. package/lib/entity/account/accountSelector.d.ts +7 -0
  13. package/lib/entity/account/accountSelector.js +4 -2
  14. package/lib/entity/account/accountState.d.ts +3 -1
  15. package/lib/entity/account/accountState.js +4 -1
  16. package/lib/entity/account/pickAndMergeForecastAccountReport.d.ts +1 -0
  17. package/lib/entity/account/subAccountSelector.d.ts +2 -0
  18. package/lib/entity/account/subAccountSelector.js +2 -0
  19. package/lib/entity/accountGroup/accountGroupSelector.d.ts +22 -0
  20. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  21. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerPayload.d.ts +44 -0
  22. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +55 -0
  23. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerReducer.d.ts +10 -0
  24. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +51 -0
  25. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerSelector.d.ts +48 -0
  26. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerSelector.js +66 -0
  27. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerState.d.ts +52 -0
  28. package/lib/entity/aiAccountantCustomer/aiAccountantCustomerState.js +37 -0
  29. package/lib/entity/billPay/billTransaction/billTransactionState.d.ts +2 -2
  30. package/lib/entity/chargeCard/chargeCard.d.ts +1 -1
  31. package/lib/entity/class/classReducer.d.ts +4 -4
  32. package/lib/entity/class/classState.d.ts +1 -1
  33. package/lib/entity/depositAccountTransaction/depositAccountTransaction.d.ts +1 -1
  34. package/lib/entity/entityApprovalStatus/entityApprovalStatusState.d.ts +2 -2
  35. package/lib/entity/forecast/forecastState.d.ts +1 -1
  36. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
  37. package/lib/entity/project/projectPayload.d.ts +13 -0
  38. package/lib/entity/project/projectPayload.js +30 -0
  39. package/lib/entity/project/projectReducer.d.ts +10 -0
  40. package/lib/entity/project/projectReducer.js +31 -0
  41. package/lib/entity/project/projectSelector.d.ts +5 -0
  42. package/lib/entity/project/projectSelector.js +12 -0
  43. package/lib/entity/project/projectState.d.ts +13 -0
  44. package/lib/entity/project/projectState.js +2 -0
  45. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  46. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  47. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  48. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +11 -0
  49. package/lib/entity/sectionProjectView/sectionProjectView.js +6 -0
  50. package/lib/entity/sectionProjectView/sectionProjectViewEpic.d.ts +6 -0
  51. package/lib/entity/sectionProjectView/sectionProjectViewEpic.js +56 -0
  52. package/lib/entity/sectionProjectView/sectionProjectViewHelper.d.ts +10 -0
  53. package/lib/entity/sectionProjectView/sectionProjectViewHelper.js +14 -0
  54. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +15 -0
  55. package/lib/entity/sectionProjectView/sectionProjectViewReducer.js +56 -0
  56. package/lib/entity/sectionProjectView/sectionProjectViewSelector.d.ts +11 -0
  57. package/lib/entity/sectionProjectView/sectionProjectViewSelector.js +94 -0
  58. package/lib/entity/sectionProjectView/sectionProjectViewSelectorTypes.d.ts +16 -0
  59. package/lib/entity/sectionProjectView/sectionProjectViewSelectorTypes.js +2 -0
  60. package/lib/entity/sectionProjectView/sectionProjectViewState.d.ts +4 -0
  61. package/lib/entity/sectionProjectView/sectionProjectViewState.js +2 -0
  62. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  63. package/lib/entity/tenant/clearAllEpic.d.ts +7 -2
  64. package/lib/entity/tenant/clearAllEpic.js +10 -0
  65. package/lib/entity/tenant/tenantPayload.d.ts +1 -0
  66. package/lib/entity/tenant/tenantReducer.js +1 -0
  67. package/lib/entity/tenant/tenantSelector.d.ts +1 -0
  68. package/lib/entity/tenant/tenantSelector.js +9 -1
  69. package/lib/entity/tenant/tenantState.d.ts +1 -0
  70. package/lib/entity/transaction/payloadTypes/transactionPayload.js +0 -21
  71. package/lib/entity/userRole/userRoleType.d.ts +2 -2
  72. package/lib/epic.d.ts +8 -1
  73. package/lib/epic.js +8 -1
  74. package/lib/esm/commonStateTypes/coaBalance/coaBalancesFilterProjectView.js +5 -0
  75. package/lib/esm/commonStateTypes/projectView/projectViewParentID.js +1 -0
  76. package/lib/esm/commonStateTypes/viewAndReport/reportIDHelper.js +1 -0
  77. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  78. package/lib/esm/entity/account/accountReducer.js +6 -3
  79. package/lib/esm/entity/account/accountSelector.js +4 -2
  80. package/lib/esm/entity/account/accountState.js +4 -1
  81. package/lib/esm/entity/account/subAccountSelector.js +2 -0
  82. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +49 -0
  83. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerReducer.js +47 -0
  84. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerSelector.js +62 -0
  85. package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerState.js +31 -0
  86. package/lib/esm/entity/project/projectPayload.js +26 -0
  87. package/lib/esm/entity/project/projectReducer.js +27 -0
  88. package/lib/esm/entity/project/projectSelector.js +8 -0
  89. package/lib/esm/entity/project/projectState.js +1 -0
  90. package/lib/esm/entity/sectionProjectView/sectionProjectView.js +3 -0
  91. package/lib/esm/entity/sectionProjectView/sectionProjectViewEpic.js +52 -0
  92. package/lib/esm/entity/sectionProjectView/sectionProjectViewHelper.js +10 -0
  93. package/lib/esm/entity/sectionProjectView/sectionProjectViewReducer.js +52 -0
  94. package/lib/esm/entity/sectionProjectView/sectionProjectViewSelector.js +87 -0
  95. package/lib/esm/entity/sectionProjectView/sectionProjectViewSelectorTypes.js +1 -0
  96. package/lib/esm/entity/sectionProjectView/sectionProjectViewState.js +1 -0
  97. package/lib/esm/entity/tenant/clearAllEpic.js +10 -0
  98. package/lib/esm/entity/tenant/tenantReducer.js +1 -0
  99. package/lib/esm/entity/tenant/tenantSelector.js +7 -0
  100. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +0 -21
  101. package/lib/esm/epic.js +8 -1
  102. package/lib/esm/index.js +14 -4
  103. package/lib/esm/reducer.js +15 -0
  104. package/lib/esm/view/aiAccountantView/aiAccountantViewPayload.js +2 -0
  105. package/lib/esm/view/aiAccountantView/aiAccountantViewReducer.js +149 -0
  106. package/lib/esm/view/aiAccountantView/aiAccountantViewSelector.js +72 -0
  107. package/lib/esm/view/aiAccountantView/aiAccountantViewState.js +11 -0
  108. package/lib/esm/view/aiAccountantView/epics/cancelAiAccountantOnboardingEpic.js +46 -0
  109. package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +27 -0
  110. package/lib/esm/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +47 -0
  111. package/lib/esm/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +52 -0
  112. package/lib/esm/view/financeStatement/financeStatementSelector.js +12 -1
  113. package/lib/esm/view/profitAndLossProjectView/profitAndLossForTimeframeProjectViewEpic.js +47 -0
  114. package/lib/esm/view/profitAndLossProjectView/profitAndLossProjectViewEpic.js +30 -0
  115. package/lib/esm/view/profitAndLossProjectView/profitAndLossProjectViewPayload.js +1 -0
  116. package/lib/esm/view/profitAndLossProjectView/profitAndLossProjectViewReducer.js +113 -0
  117. package/lib/esm/view/profitAndLossProjectView/profitAndLossProjectViewSelector.js +65 -0
  118. package/lib/esm/view/profitAndLossProjectView/profitAndLossProjectViewSelectorTypes.js +1 -0
  119. package/lib/esm/view/profitAndLossProjectView/profitAndLossProjectViewState.js +1 -0
  120. package/lib/esm/view/reportsResync/reportsClassViewRefetchingEpic.js +4 -0
  121. package/lib/index.d.ts +20 -4
  122. package/lib/index.js +73 -34
  123. package/lib/reducer.d.ts +15 -0
  124. package/lib/reducer.js +15 -0
  125. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  126. package/lib/view/aiAccountantView/aiAccountantViewPayload.d.ts +31 -0
  127. package/lib/view/aiAccountantView/aiAccountantViewPayload.js +8 -0
  128. package/lib/view/aiAccountantView/aiAccountantViewReducer.d.ts +29 -0
  129. package/lib/view/aiAccountantView/aiAccountantViewReducer.js +153 -0
  130. package/lib/view/aiAccountantView/aiAccountantViewSelector.d.ts +14 -0
  131. package/lib/view/aiAccountantView/aiAccountantViewSelector.js +78 -0
  132. package/lib/view/aiAccountantView/aiAccountantViewState.d.ts +26 -0
  133. package/lib/view/aiAccountantView/aiAccountantViewState.js +13 -0
  134. package/lib/view/aiAccountantView/epics/cancelAiAccountantOnboardingEpic.d.ts +33 -0
  135. package/lib/view/aiAccountantView/epics/cancelAiAccountantOnboardingEpic.js +50 -0
  136. package/lib/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.d.ts +23 -0
  137. package/lib/view/aiAccountantView/epics/fetchAiAccountantCustomersEpic.js +31 -0
  138. package/lib/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.d.ts +33 -0
  139. package/lib/view/aiAccountantView/epics/fetchAiAccountantJobsEpic.js +51 -0
  140. package/lib/view/aiAccountantView/epics/triggerAiAccountantJobEpic.d.ts +28 -0
  141. package/lib/view/aiAccountantView/epics/triggerAiAccountantJobEpic.js +56 -0
  142. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  143. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  144. package/lib/view/cardBalance/cardBalanceSelector.d.ts +2 -1
  145. package/lib/view/cashBalance/cashBalanceSelector.d.ts +2 -1
  146. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  147. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  148. package/lib/view/companyView/types/cockpitTypes.d.ts +6 -5
  149. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  150. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  151. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +1 -1
  152. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  153. package/lib/view/financeStatement/financeStatementSelector.d.ts +2 -0
  154. package/lib/view/financeStatement/financeStatementSelector.js +12 -1
  155. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  156. package/lib/view/onboardingView/cockpitView/types/onboardingCockpitViewTypes.d.ts +1 -1
  157. package/lib/view/profitAndLossProjectView/profitAndLossForTimeframeProjectViewEpic.d.ts +9 -0
  158. package/lib/view/profitAndLossProjectView/profitAndLossForTimeframeProjectViewEpic.js +51 -0
  159. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewEpic.d.ts +6 -0
  160. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewEpic.js +34 -0
  161. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewPayload.d.ts +33 -0
  162. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewPayload.js +2 -0
  163. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewReducer.d.ts +33 -0
  164. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewReducer.js +117 -0
  165. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelector.d.ts +9 -0
  166. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelector.js +69 -0
  167. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelectorTypes.d.ts +19 -0
  168. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewSelectorTypes.js +2 -0
  169. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewState.d.ts +22 -0
  170. package/lib/view/profitAndLossProjectView/profitAndLossProjectViewState.js +2 -0
  171. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  172. package/lib/view/reportsResync/reportsClassViewRefetchingEpic.d.ts +2 -1
  173. package/lib/view/reportsResync/reportsClassViewRefetchingEpic.js +4 -0
  174. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  175. package/lib/view/reviewCompanyView/reviewCompanyViewState.d.ts +1 -1
  176. package/lib/view/spendManagement/billPay/billList/billListReducer.d.ts +1 -1
  177. package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
  178. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetail.d.ts +1 -1
  179. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.d.ts +4 -4
  180. package/lib/view/spendManagement/reimbursement/remiListView/remiListReducer.d.ts +1 -1
  181. package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +3 -3
  182. package/lib/view/subscriptionView/types/subscriptionTypes.d.ts +1 -1
  183. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  184. package/lib/view/topEx/topExSelector.d.ts +1 -1
  185. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ import { ZeniAPIResponse } from '../../responsePayload';
2
+ export { AiAccountantCustomerPayload, AiAccountantEnrollmentPayload, AiAccountantJobPayload, toAiAccountantCustomer, toAiAccountantEnrollment, toAiAccountantJob, } from '../../entity/aiAccountantCustomer/aiAccountantCustomerPayload';
3
+ import type { AiAccountantCustomerPayload, AiAccountantJobPayload } from '../../entity/aiAccountantCustomer/aiAccountantCustomerPayload';
4
+ import { UserPayload } from '../../entity/user/userPayload';
5
+ export interface AiAccountantCustomersResponseData {
6
+ customers: AiAccountantCustomerPayload[];
7
+ users: UserPayload[];
8
+ }
9
+ export interface AiAccountantJobsResponseData {
10
+ jobs: AiAccountantJobPayload[];
11
+ page_size: number;
12
+ users: UserPayload[];
13
+ next_page_token?: string | null;
14
+ }
15
+ export interface AiAccountantTriggerJobResponseData {
16
+ job_ids: string[];
17
+ queued_count: number;
18
+ skipped?: Array<{
19
+ reason: string;
20
+ tenant_id: string;
21
+ }>;
22
+ }
23
+ export interface AiAccountantCancelOnboardingResponseData {
24
+ cancelled_jobs: string[];
25
+ ok: boolean;
26
+ workflow_cancelled: boolean;
27
+ }
28
+ export type AiAccountantCustomersResponse = ZeniAPIResponse<AiAccountantCustomersResponseData>;
29
+ export type AiAccountantJobsResponse = ZeniAPIResponse<AiAccountantJobsResponseData>;
30
+ export type AiAccountantTriggerJobResponse = ZeniAPIResponse<AiAccountantTriggerJobResponseData>;
31
+ export type AiAccountantCancelOnboardingResponse = ZeniAPIResponse<AiAccountantCancelOnboardingResponseData>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toAiAccountantJob = exports.toAiAccountantEnrollment = exports.toAiAccountantCustomer = void 0;
4
+ // Re-export entity payload types and mapping functions.
5
+ var aiAccountantCustomerPayload_1 = require("../../entity/aiAccountantCustomer/aiAccountantCustomerPayload");
6
+ Object.defineProperty(exports, "toAiAccountantCustomer", { enumerable: true, get: function () { return aiAccountantCustomerPayload_1.toAiAccountantCustomer; } });
7
+ Object.defineProperty(exports, "toAiAccountantEnrollment", { enumerable: true, get: function () { return aiAccountantCustomerPayload_1.toAiAccountantEnrollment; } });
8
+ Object.defineProperty(exports, "toAiAccountantJob", { enumerable: true, get: function () { return aiAccountantCustomerPayload_1.toAiAccountantJob; } });
@@ -0,0 +1,29 @@
1
+ import { AiAccountantCustomerPayload } from '../../entity/aiAccountantCustomer/aiAccountantCustomerPayload';
2
+ import { ID } from '../../commonStateTypes/common';
3
+ import { ZeniAPIStatus } from '../../responsePayload';
4
+ import { AiAccountantUIState, AiAccountantViewState } from './aiAccountantViewState';
5
+ export declare const initialAiAccountantViewState: AiAccountantViewState;
6
+ export declare const cancelAiAccountantOnboarding: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string, tenantId: string], {
7
+ companyId: string;
8
+ tenantId: string;
9
+ }, "aiAccountantView/cancelAiAccountantOnboarding", never, never>, cancelAiAccountantOnboardingFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[tenantId: string, error: ZeniAPIStatus<Record<string, unknown>>], {
10
+ tenantId: string;
11
+ error: ZeniAPIStatus<Record<string, unknown>>;
12
+ }, "aiAccountantView/cancelAiAccountantOnboardingFailure", never, never>, cancelAiAccountantOnboardingSuccess: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[tenantId: string], {
13
+ tenantId: string;
14
+ }, "aiAccountantView/cancelAiAccountantOnboardingSuccess", never, never>, clearAiAccountantView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"aiAccountantView/clearAiAccountantView">, fetchAiAccountantCustomers: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"aiAccountantView/fetchAiAccountantCustomers">, fetchAiAccountantJobs: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[tenantId: string, fetchNextPage?: boolean | undefined], {
15
+ tenantId: string;
16
+ fetchNextPage: boolean;
17
+ }, "aiAccountantView/fetchAiAccountantJobs", never, never>, setSelectedTenantIdsForJobTrigger: import("@reduxjs/toolkit").ActionCreatorWithPayload<string[], "aiAccountantView/setSelectedTenantIdsForJobTrigger">, triggerAiAccountantJob: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[operationType: "onboard" | "offboard" | "retrain" | "full_pipeline" | "cancel_onboarding", startDate: string, endDate: string], {
18
+ operationType: "onboard" | "offboard" | "retrain" | "full_pipeline" | "cancel_onboarding";
19
+ startDate: string;
20
+ endDate: string;
21
+ }, "aiAccountantView/triggerAiAccountantJob", never, never>, triggerAiAccountantJobFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "aiAccountantView/triggerAiAccountantJobFailure">, triggerAiAccountantJobSuccess: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"aiAccountantView/triggerAiAccountantJobSuccess">, updateAiAccountantCustomers: import("@reduxjs/toolkit").ActionCreatorWithPayload<AiAccountantCustomerPayload[], "aiAccountantView/updateAiAccountantCustomers">, updateAiAccountantCustomersFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "aiAccountantView/updateAiAccountantCustomersFailure">, updateAiAccountantJobs: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[tenantId: string, nextPageToken?: string | null | undefined], {
22
+ tenantId: string;
23
+ nextPageToken: string | null;
24
+ }, "aiAccountantView/updateAiAccountantJobs", never, never>, updateAiAccountantJobsFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
25
+ error: ZeniAPIStatus;
26
+ tenantId: ID;
27
+ }, "aiAccountantView/updateAiAccountantJobsFailure">, updateAiAccountantUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<Partial<AiAccountantUIState>, "aiAccountantView/updateAiAccountantUIState">;
28
+ declare const _default: import("redux").Reducer<AiAccountantViewState>;
29
+ export default _default;
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.updateAiAccountantUIState = exports.updateAiAccountantJobsFailure = exports.updateAiAccountantJobs = exports.updateAiAccountantCustomersFailure = exports.updateAiAccountantCustomers = exports.triggerAiAccountantJobSuccess = exports.triggerAiAccountantJobFailure = exports.triggerAiAccountantJob = exports.setSelectedTenantIdsForJobTrigger = exports.fetchAiAccountantJobs = exports.fetchAiAccountantCustomers = exports.clearAiAccountantView = exports.cancelAiAccountantOnboardingSuccess = exports.cancelAiAccountantOnboardingFailure = exports.cancelAiAccountantOnboarding = exports.initialAiAccountantViewState = void 0;
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ exports.initialAiAccountantViewState = {
7
+ customersByTenantId: {},
8
+ customersFetchStatus: { fetchState: 'Not-Started' },
9
+ selectedTenantIdsForJobTrigger: [],
10
+ triggerJobStatus: { fetchState: 'Not-Started' },
11
+ uiState: {
12
+ filterText: '',
13
+ filters: {},
14
+ selectedCustomerTenantId: '',
15
+ sortKey: 'companyName',
16
+ sortOrder: 'ascending',
17
+ },
18
+ };
19
+ const aiAccountantView = (0, toolkit_1.createSlice)({
20
+ name: 'aiAccountantView',
21
+ initialState: exports.initialAiAccountantViewState,
22
+ reducers: {
23
+ // ── Customers ──
24
+ fetchAiAccountantCustomers(draft) {
25
+ draft.customersFetchStatus = { fetchState: 'In-Progress' };
26
+ },
27
+ updateAiAccountantCustomers(draft, action) {
28
+ draft.customersByTenantId = toCustomersByTenantId(action.payload, draft.customersByTenantId);
29
+ draft.customersFetchStatus = { fetchState: 'Completed' };
30
+ },
31
+ updateAiAccountantCustomersFailure(draft, action) {
32
+ draft.customersFetchStatus = {
33
+ fetchState: 'Error',
34
+ error: action.payload,
35
+ };
36
+ },
37
+ // ── Jobs ──
38
+ fetchAiAccountantJobs: {
39
+ reducer(draft, action) {
40
+ const customerView = draft.customersByTenantId[action.payload.tenantId];
41
+ if (customerView != null) {
42
+ customerView.jobsFetchStatus = { fetchState: 'In-Progress' };
43
+ }
44
+ },
45
+ prepare(tenantId, fetchNextPage) {
46
+ return { payload: { tenantId, fetchNextPage: fetchNextPage ?? false } };
47
+ },
48
+ },
49
+ updateAiAccountantJobs: {
50
+ reducer(draft, action) {
51
+ const customerView = draft.customersByTenantId[action.payload.tenantId];
52
+ if (customerView != null) {
53
+ customerView.jobsFetchStatus = { fetchState: 'Completed' };
54
+ customerView.jobsPageToken = action.payload.nextPageToken;
55
+ }
56
+ },
57
+ prepare(tenantId, nextPageToken) {
58
+ return { payload: { tenantId, nextPageToken: nextPageToken ?? null } };
59
+ },
60
+ },
61
+ updateAiAccountantJobsFailure(draft, action) {
62
+ const customerView = draft.customersByTenantId[action.payload.tenantId];
63
+ if (customerView != null) {
64
+ customerView.jobsFetchStatus = {
65
+ fetchState: 'Error',
66
+ error: action.payload.error,
67
+ };
68
+ }
69
+ },
70
+ setSelectedTenantIdsForJobTrigger(draft, action) {
71
+ draft.selectedTenantIdsForJobTrigger = action.payload;
72
+ },
73
+ // ── Trigger Job ──
74
+ triggerAiAccountantJob: {
75
+ reducer(draft,
76
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
77
+ _action) {
78
+ draft.triggerJobStatus = { fetchState: 'In-Progress' };
79
+ },
80
+ prepare(operationType, startDate, endDate) {
81
+ return { payload: { operationType, startDate, endDate } };
82
+ },
83
+ },
84
+ triggerAiAccountantJobSuccess(draft) {
85
+ draft.triggerJobStatus = { fetchState: 'Completed' };
86
+ },
87
+ triggerAiAccountantJobFailure(draft, action) {
88
+ draft.triggerJobStatus = { fetchState: 'Error', error: action.payload };
89
+ },
90
+ // ── Cancel Onboarding ──
91
+ cancelAiAccountantOnboarding: {
92
+ reducer(draft, action) {
93
+ const customerView = draft.customersByTenantId[action.payload.tenantId];
94
+ if (customerView != null) {
95
+ customerView.cancelOnboardingStatus = { fetchState: 'In-Progress' };
96
+ }
97
+ },
98
+ prepare(companyId, tenantId) {
99
+ return { payload: { companyId, tenantId } };
100
+ },
101
+ },
102
+ cancelAiAccountantOnboardingSuccess: {
103
+ reducer(draft, action) {
104
+ const customerView = draft.customersByTenantId[action.payload.tenantId];
105
+ if (customerView != null) {
106
+ customerView.cancelOnboardingStatus = { fetchState: 'Completed' };
107
+ }
108
+ },
109
+ prepare(tenantId) {
110
+ return { payload: { tenantId } };
111
+ },
112
+ },
113
+ cancelAiAccountantOnboardingFailure: {
114
+ reducer(draft, action) {
115
+ const customerView = draft.customersByTenantId[action.payload.tenantId];
116
+ if (customerView != null) {
117
+ customerView.cancelOnboardingStatus = {
118
+ fetchState: 'Error',
119
+ error: action.payload.error,
120
+ };
121
+ }
122
+ },
123
+ prepare(tenantId, error) {
124
+ return { payload: { tenantId, error } };
125
+ },
126
+ },
127
+ // ── UI State ──
128
+ updateAiAccountantUIState(draft, action) {
129
+ Object.assign(draft.uiState, action.payload);
130
+ },
131
+ // ── Clear ──
132
+ clearAiAccountantView() {
133
+ return exports.initialAiAccountantViewState;
134
+ },
135
+ },
136
+ });
137
+ _a = aiAccountantView.actions, exports.cancelAiAccountantOnboarding = _a.cancelAiAccountantOnboarding, exports.cancelAiAccountantOnboardingFailure = _a.cancelAiAccountantOnboardingFailure, exports.cancelAiAccountantOnboardingSuccess = _a.cancelAiAccountantOnboardingSuccess, exports.clearAiAccountantView = _a.clearAiAccountantView, exports.fetchAiAccountantCustomers = _a.fetchAiAccountantCustomers, exports.fetchAiAccountantJobs = _a.fetchAiAccountantJobs, exports.setSelectedTenantIdsForJobTrigger = _a.setSelectedTenantIdsForJobTrigger, exports.triggerAiAccountantJob = _a.triggerAiAccountantJob, exports.triggerAiAccountantJobFailure = _a.triggerAiAccountantJobFailure, exports.triggerAiAccountantJobSuccess = _a.triggerAiAccountantJobSuccess, exports.updateAiAccountantCustomers = _a.updateAiAccountantCustomers, exports.updateAiAccountantCustomersFailure = _a.updateAiAccountantCustomersFailure, exports.updateAiAccountantJobs = _a.updateAiAccountantJobs, exports.updateAiAccountantJobsFailure = _a.updateAiAccountantJobsFailure, exports.updateAiAccountantUIState = _a.updateAiAccountantUIState;
138
+ exports.default = aiAccountantView.reducer;
139
+ // ── Helpers ──
140
+ const toCustomersByTenantId = (customers, existing) => {
141
+ const result = {};
142
+ for (const payload of customers) {
143
+ const tenantId = payload.tenant_id;
144
+ const existingState = existing[tenantId];
145
+ result[tenantId] = existingState ?? {
146
+ cancelOnboardingStatus: { fetchState: 'Not-Started' },
147
+ jobsFetchStatus: { fetchState: 'Not-Started' },
148
+ jobsPageToken: null,
149
+ tenantId,
150
+ };
151
+ }
152
+ return result;
153
+ };
@@ -0,0 +1,14 @@
1
+ import { FetchStateAndError } from '../../commonStateTypes/common';
2
+ import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
3
+ import { AiAccountantCustomerView } from '../../entity/aiAccountantCustomer/aiAccountantCustomerSelector';
4
+ import { RootState } from '../../reducer';
5
+ import { AiAccountantCustomerViewState, AiAccountantUIState } from './aiAccountantViewState';
6
+ export interface AiAccountantCockpitView extends SelectorView {
7
+ averageAccuracy: number;
8
+ customers: AiAccountantCustomerView[];
9
+ customerViewStateByTenantId: Record<string, AiAccountantCustomerViewState>;
10
+ selectedCustomersForJobTrigger: AiAccountantCustomerView[];
11
+ triggerJobStatus: FetchStateAndError;
12
+ uiState: AiAccountantUIState;
13
+ }
14
+ export declare const getAiAccountantCockpitView: (state: RootState) => AiAccountantCockpitView;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAiAccountantCockpitView = void 0;
7
+ const toolkit_1 = require("@reduxjs/toolkit");
8
+ const orderBy_1 = __importDefault(require("lodash/orderBy"));
9
+ const aiAccountantCustomerSelector_1 = require("../../entity/aiAccountantCustomer/aiAccountantCustomerSelector");
10
+ exports.getAiAccountantCockpitView = (0, toolkit_1.createSelector)((state) => state.aiAccountantViewState, (state) => state.aiAccountantCustomerState, (state) => state.userState, (viewState, customerEntityState, userState) => {
11
+ const { customersByTenantId, customersFetchStatus, selectedTenantIdsForJobTrigger, triggerJobStatus, uiState, } = viewState;
12
+ const allCustomers = (0, aiAccountantCustomerSelector_1.getAiAccountantCustomers)(customerEntityState, userState);
13
+ let filteredCustomers = allCustomers;
14
+ // Text filter
15
+ const trimmedFilterText = uiState.filterText.trim();
16
+ if (trimmedFilterText.length > 0) {
17
+ const query = trimmedFilterText.toLowerCase();
18
+ filteredCustomers = filteredCustomers.filter((customer) => customer.companyName.toLowerCase().includes(query) ||
19
+ customer.tenantId.toLowerCase().includes(query));
20
+ }
21
+ // Cockpit filters (e.g. enrollmentStatus)
22
+ const enrollmentStatusFilter = uiState.filters.categories?.find((category) => category.field === 'enrollmentStatus');
23
+ if (enrollmentStatusFilter != null &&
24
+ enrollmentStatusFilter.values.length > 0) {
25
+ const selectedStatuses = enrollmentStatusFilter.values.map(String);
26
+ const isEqual = enrollmentStatusFilter.matchingOperator === 'equal';
27
+ filteredCustomers = filteredCustomers.filter((customer) => {
28
+ const status = customer.enrollment?.status ?? 'unknown';
29
+ const matches = selectedStatuses.includes(status);
30
+ return isEqual ? matches : !matches;
31
+ });
32
+ }
33
+ // Sorting
34
+ const sortedCustomers = getSortedCustomers(filteredCustomers, uiState.sortKey, uiState.sortOrder);
35
+ const selectedCustomersForJobTrigger = allCustomers.filter((customer) => selectedTenantIdsForJobTrigger.includes(customer.tenantId));
36
+ return {
37
+ averageAccuracy: calcOverallAverageAccuracy(allCustomers),
38
+ fetchState: customersFetchStatus.fetchState,
39
+ error: customersFetchStatus.error,
40
+ customers: sortedCustomers,
41
+ customerViewStateByTenantId: customersByTenantId,
42
+ selectedCustomersForJobTrigger,
43
+ triggerJobStatus,
44
+ uiState,
45
+ };
46
+ });
47
+ // ── Helpers ──
48
+ const getSortedCustomers = (customers, sortKey, sortOrder) => {
49
+ const direction = sortOrder === 'ascending' ? 'asc' : 'desc';
50
+ return (0, orderBy_1.default)(customers, (customer) => {
51
+ switch (sortKey) {
52
+ case 'companyName':
53
+ return customer.companyName.toLowerCase();
54
+ case 'status':
55
+ return (customer.enrollment?.status ?? 'unknown').toLowerCase();
56
+ case 'bookcloseDate':
57
+ return customer.bookcloseDate?.valueOf() ?? 0;
58
+ case 'latestTraining':
59
+ return customer.enrollment?.latestTraining?.valueOf() ?? 0;
60
+ case 'latestSync':
61
+ return customer.enrollment?.latestTransactionSync?.valueOf() ?? 0;
62
+ case 'accuracy':
63
+ return customer.averageAccuracy;
64
+ default:
65
+ return customer.companyName.toLowerCase();
66
+ }
67
+ }, direction);
68
+ };
69
+ const calcOverallAverageAccuracy = (customers) => {
70
+ const customerAccuracies = customers
71
+ .map((customer) => customer.averageAccuracy)
72
+ .filter((accuracy) => accuracy > 0);
73
+ if (customerAccuracies.length === 0) {
74
+ return 0;
75
+ }
76
+ return (customerAccuracies.reduce((sum, accuracy) => sum + accuracy, 0) /
77
+ customerAccuracies.length);
78
+ };
@@ -0,0 +1,26 @@
1
+ import { FetchStateAndError, ID } from '../../commonStateTypes/common';
2
+ import { SortOrder } from '../../commonStateTypes/selectorTypes/sortOrderTypes';
3
+ import { CockpitFilters } from '../companyView/types/cockpitTypes';
4
+ export type { AiAccountantCustomer, AiAccountantEnrollment, AiAccountantEnrollmentStatus, AiAccountantJob, AiAccountantJobStatus, AiAccountantOperationType, } from '../../entity/aiAccountantCustomer/aiAccountantCustomerState';
5
+ declare const toAiAccountantSortKeyType: (v: string) => "status" | "companyName" | "bookcloseDate" | "accuracy" | "latestTraining" | "latestSync";
6
+ export type AiAccountantSortKey = ReturnType<typeof toAiAccountantSortKeyType>;
7
+ export interface AiAccountantUIState {
8
+ filters: CockpitFilters;
9
+ filterText: string;
10
+ selectedCustomerTenantId: string;
11
+ sortKey: AiAccountantSortKey;
12
+ sortOrder: SortOrder;
13
+ }
14
+ export interface AiAccountantCustomerViewState {
15
+ cancelOnboardingStatus: FetchStateAndError;
16
+ jobsFetchStatus: FetchStateAndError;
17
+ jobsPageToken: string | null;
18
+ tenantId: ID;
19
+ }
20
+ export interface AiAccountantViewState {
21
+ customersByTenantId: Record<ID, AiAccountantCustomerViewState>;
22
+ customersFetchStatus: FetchStateAndError;
23
+ selectedTenantIdsForJobTrigger: ID[];
24
+ triggerJobStatus: FetchStateAndError;
25
+ uiState: AiAccountantUIState;
26
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const stringToUnion_1 = require("../../commonStateTypes/stringToUnion");
4
+ const ALL_AI_ACCOUNTANT_SORT_KEYS = [
5
+ 'companyName',
6
+ 'status',
7
+ 'bookcloseDate',
8
+ 'latestTraining',
9
+ 'latestSync',
10
+ 'accuracy',
11
+ ];
12
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
+ const toAiAccountantSortKeyType = (v) => (0, stringToUnion_1.stringToUnion)(v, ALL_AI_ACCOUNTANT_SORT_KEYS);
@@ -0,0 +1,33 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
3
+ import { RootState } from '../../../reducer';
4
+ import { ZeniAPI } from '../../../zeniAPI';
5
+ import { cancelAiAccountantOnboarding, cancelAiAccountantOnboardingFailure, cancelAiAccountantOnboardingSuccess, fetchAiAccountantCustomers } from '../aiAccountantViewReducer';
6
+ export type ActionType = ReturnType<typeof cancelAiAccountantOnboarding> | ReturnType<typeof cancelAiAccountantOnboardingSuccess> | ReturnType<typeof cancelAiAccountantOnboardingFailure> | ReturnType<typeof fetchAiAccountantCustomers> | ReturnType<typeof openSnackbar>;
7
+ export declare const cancelAiAccountantOnboardingEpic: (actions$: ActionsObservable<ActionType>, _: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
8
+ payload: {
9
+ messageSection: import("../../..").SnackbarMessageSections;
10
+ messageText: import("../../..").SnackbarMessageSectionTexts;
11
+ type: import("../../..").SnackbarMessageType;
12
+ showStatusIcon?: boolean;
13
+ variables?: {
14
+ variableName: string;
15
+ variableValue: string;
16
+ }[];
17
+ };
18
+ type: "snackbar/openSnackbar";
19
+ } | {
20
+ payload: {
21
+ tenantId: string;
22
+ };
23
+ type: "aiAccountantView/cancelAiAccountantOnboardingSuccess";
24
+ } | {
25
+ payload: {
26
+ tenantId: string;
27
+ error: import("../../../responsePayload").ZeniAPIStatus<Record<string, unknown>>;
28
+ };
29
+ type: "aiAccountantView/cancelAiAccountantOnboardingFailure";
30
+ } | {
31
+ payload: undefined;
32
+ type: "aiAccountantView/fetchAiAccountantCustomers";
33
+ }>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cancelAiAccountantOnboardingEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const snackbarReducer_1 = require("../../../entity/snackbar/snackbarReducer");
7
+ const responsePayload_1 = require("../../../responsePayload");
8
+ const aiAccountantViewReducer_1 = require("../aiAccountantViewReducer");
9
+ const cancelAiAccountantOnboardingEpic = (actions$, _, zeniAPI) => actions$.pipe((0, operators_1.filter)(aiAccountantViewReducer_1.cancelAiAccountantOnboarding.match), (0, operators_1.mergeMap)((action) => {
10
+ const { tenantId, companyId } = action.payload;
11
+ const base = `${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/cockpit-panels`;
12
+ const url = `${base}/ai-accountant/cancel-onboarding`;
13
+ return zeniAPI
14
+ .postAndGetJSON(url, {
15
+ tenant_id: tenantId,
16
+ company_id: companyId,
17
+ })
18
+ .pipe((0, operators_1.mergeMap)((response) => {
19
+ if ((0, responsePayload_1.isSuccessResponse)(response)) {
20
+ return (0, rxjs_1.from)([
21
+ (0, aiAccountantViewReducer_1.cancelAiAccountantOnboardingSuccess)(tenantId),
22
+ (0, aiAccountantViewReducer_1.fetchAiAccountantCustomers)(),
23
+ (0, snackbarReducer_1.openSnackbar)({
24
+ messageSection: 'common',
25
+ messageText: 'success',
26
+ type: 'success',
27
+ }),
28
+ ]);
29
+ }
30
+ else {
31
+ return (0, rxjs_1.from)([
32
+ (0, aiAccountantViewReducer_1.cancelAiAccountantOnboardingFailure)(tenantId, response.status),
33
+ (0, snackbarReducer_1.openSnackbar)({
34
+ messageSection: 'common',
35
+ messageText: 'failed',
36
+ type: 'error',
37
+ }),
38
+ ]);
39
+ }
40
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.from)([
41
+ (0, aiAccountantViewReducer_1.cancelAiAccountantOnboardingFailure)(tenantId, (0, responsePayload_1.createZeniAPIStatus)('Unexpected error', 'AI Accountant cancel onboarding failed: ' +
42
+ JSON.stringify(error))),
43
+ (0, snackbarReducer_1.openSnackbar)({
44
+ messageSection: 'common',
45
+ messageText: 'failed',
46
+ type: 'error',
47
+ }),
48
+ ])));
49
+ }));
50
+ exports.cancelAiAccountantOnboardingEpic = cancelAiAccountantOnboardingEpic;
@@ -0,0 +1,23 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { updateAiAccountantCustomers as updateAiAccountantCustomerEntities } from '../../../entity/aiAccountantCustomer/aiAccountantCustomerReducer';
3
+ import { updateAllUsers } from '../../../entity/user/userReducer';
4
+ import { RootState } from '../../../reducer';
5
+ import { ZeniAPI } from '../../../zeniAPI';
6
+ import { fetchAiAccountantCustomers, updateAiAccountantCustomers, updateAiAccountantCustomersFailure } from '../aiAccountantViewReducer';
7
+ export type ActionType = ReturnType<typeof fetchAiAccountantCustomers> | ReturnType<typeof updateAiAccountantCustomers> | ReturnType<typeof updateAiAccountantCustomersFailure> | ReturnType<typeof updateAiAccountantCustomerEntities> | ReturnType<typeof updateAllUsers>;
8
+ export declare const fetchAiAccountantCustomersEpic: (actions$: ActionsObservable<ActionType>, _: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
9
+ payload: {
10
+ users: import("../../..").UserPayload[];
11
+ updateType?: import("../../..").UpdateType;
12
+ };
13
+ type: "user/updateAllUsers";
14
+ } | {
15
+ payload: import("../aiAccountantViewPayload").AiAccountantCustomerPayload[];
16
+ type: "aiAccountantView/updateAiAccountantCustomers";
17
+ } | {
18
+ payload: import("../../../responsePayload").ZeniAPIStatus<Record<string, unknown>>;
19
+ type: "aiAccountantView/updateAiAccountantCustomersFailure";
20
+ } | {
21
+ payload: import("../aiAccountantViewPayload").AiAccountantCustomerPayload[];
22
+ type: "aiAccountantCustomer/updateAiAccountantCustomers";
23
+ }>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchAiAccountantCustomersEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const aiAccountantCustomerReducer_1 = require("../../../entity/aiAccountantCustomer/aiAccountantCustomerReducer");
7
+ const userReducer_1 = require("../../../entity/user/userReducer");
8
+ const responsePayload_1 = require("../../../responsePayload");
9
+ const aiAccountantViewReducer_1 = require("../aiAccountantViewReducer");
10
+ const fetchAiAccountantCustomersEpic = (actions$, _, zeniAPI) => actions$.pipe((0, operators_1.filter)(aiAccountantViewReducer_1.fetchAiAccountantCustomers.match), (0, operators_1.switchMap)(() => {
11
+ const base = `${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/cockpit-panels`;
12
+ const url = `${base}/ai-accountant/customers`;
13
+ return zeniAPI
14
+ .getJSON(url)
15
+ .pipe((0, operators_1.mergeMap)((response) => {
16
+ if ((0, responsePayload_1.isSuccessResponse)(response)) {
17
+ const customers = response.data?.customers ?? [];
18
+ const users = response.data?.users ?? [];
19
+ return (0, rxjs_1.from)([
20
+ (0, aiAccountantCustomerReducer_1.updateAiAccountantCustomers)(customers),
21
+ (0, userReducer_1.updateAllUsers)({ users }),
22
+ (0, aiAccountantViewReducer_1.updateAiAccountantCustomers)(customers),
23
+ ]);
24
+ }
25
+ else {
26
+ return (0, rxjs_1.of)((0, aiAccountantViewReducer_1.updateAiAccountantCustomersFailure)(response.status));
27
+ }
28
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, aiAccountantViewReducer_1.updateAiAccountantCustomersFailure)((0, responsePayload_1.createZeniAPIStatus)('Unexpected error', 'AI Accountant customers fetch failed: ' +
29
+ JSON.stringify(error))))));
30
+ }));
31
+ exports.fetchAiAccountantCustomersEpic = fetchAiAccountantCustomersEpic;
@@ -0,0 +1,33 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { updateAiAccountantJobs as updateAiAccountantJobEntities } from '../../../entity/aiAccountantCustomer/aiAccountantCustomerReducer';
3
+ import { updateAllUsers } from '../../../entity/user/userReducer';
4
+ import { RootState } from '../../../reducer';
5
+ import { ZeniAPI } from '../../../zeniAPI';
6
+ import { fetchAiAccountantJobs, updateAiAccountantJobs, updateAiAccountantJobsFailure } from '../aiAccountantViewReducer';
7
+ export type ActionType = ReturnType<typeof fetchAiAccountantJobs> | ReturnType<typeof updateAiAccountantJobs> | ReturnType<typeof updateAiAccountantJobEntities> | ReturnType<typeof updateAiAccountantJobsFailure> | ReturnType<typeof updateAllUsers>;
8
+ export declare const fetchAiAccountantJobsEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
9
+ payload: {
10
+ users: import("../../..").UserPayload[];
11
+ updateType?: import("../../..").UpdateType;
12
+ };
13
+ type: "user/updateAllUsers";
14
+ } | {
15
+ payload: {
16
+ tenantId: string;
17
+ nextPageToken: string | null;
18
+ };
19
+ type: "aiAccountantView/updateAiAccountantJobs";
20
+ } | {
21
+ payload: {
22
+ tenantId: string;
23
+ jobs: import("../aiAccountantViewPayload").AiAccountantJobPayload[];
24
+ append: boolean;
25
+ };
26
+ type: "aiAccountantCustomer/updateAiAccountantJobs";
27
+ } | {
28
+ payload: {
29
+ error: import("../../../responsePayload").ZeniAPIStatus;
30
+ tenantId: import("../../..").ID;
31
+ };
32
+ type: "aiAccountantView/updateAiAccountantJobsFailure";
33
+ }>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchAiAccountantJobsEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const aiAccountantCustomerReducer_1 = require("../../../entity/aiAccountantCustomer/aiAccountantCustomerReducer");
7
+ const userReducer_1 = require("../../../entity/user/userReducer");
8
+ const responsePayload_1 = require("../../../responsePayload");
9
+ const aiAccountantViewReducer_1 = require("../aiAccountantViewReducer");
10
+ const fetchAiAccountantJobsEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(aiAccountantViewReducer_1.fetchAiAccountantJobs.match), (0, operators_1.switchMap)((action) => {
11
+ const { tenantId, fetchNextPage } = action.payload;
12
+ const rootState = state$.value;
13
+ const customerView = rootState.aiAccountantViewState.customersByTenantId[tenantId];
14
+ const pageToken = fetchNextPage && customerView?.jobsPageToken != null
15
+ ? customerView.jobsPageToken
16
+ : null;
17
+ const params = new URLSearchParams({
18
+ page_size: '50',
19
+ tenant_id: tenantId,
20
+ });
21
+ if (pageToken != null) {
22
+ params.set('page_token', pageToken);
23
+ }
24
+ const base = `${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/cockpit-panels`;
25
+ const url = `${base}/ai-accountant/jobs?${params.toString()}`;
26
+ return zeniAPI
27
+ .getJSON(url)
28
+ .pipe((0, operators_1.mergeMap)((response) => {
29
+ if ((0, responsePayload_1.isSuccessResponse)(response)) {
30
+ const jobs = response.data?.jobs ?? [];
31
+ const users = response.data?.users ?? [];
32
+ const nextPageToken = response.data?.next_page_token ?? null;
33
+ return (0, rxjs_1.from)([
34
+ (0, userReducer_1.updateAllUsers)({ users }),
35
+ (0, aiAccountantCustomerReducer_1.updateAiAccountantJobs)(tenantId, jobs, fetchNextPage),
36
+ (0, aiAccountantViewReducer_1.updateAiAccountantJobs)(tenantId, nextPageToken),
37
+ ]);
38
+ }
39
+ else {
40
+ return (0, rxjs_1.of)((0, aiAccountantViewReducer_1.updateAiAccountantJobsFailure)({
41
+ tenantId,
42
+ error: response.status,
43
+ }));
44
+ }
45
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, aiAccountantViewReducer_1.updateAiAccountantJobsFailure)({
46
+ tenantId,
47
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected error', 'AI Accountant jobs fetch failed: ' +
48
+ JSON.stringify(error)),
49
+ }))));
50
+ }));
51
+ exports.fetchAiAccountantJobsEpic = fetchAiAccountantJobsEpic;
@@ -0,0 +1,28 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
3
+ import { RootState } from '../../../reducer';
4
+ import { ZeniAPI } from '../../../zeniAPI';
5
+ import { fetchAiAccountantCustomers, triggerAiAccountantJob, triggerAiAccountantJobFailure, triggerAiAccountantJobSuccess } from '../aiAccountantViewReducer';
6
+ export type ActionType = ReturnType<typeof triggerAiAccountantJob> | ReturnType<typeof triggerAiAccountantJobSuccess> | ReturnType<typeof triggerAiAccountantJobFailure> | ReturnType<typeof fetchAiAccountantCustomers> | ReturnType<typeof openSnackbar>;
7
+ export declare const triggerAiAccountantJobEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
8
+ payload: {
9
+ messageSection: import("../../..").SnackbarMessageSections;
10
+ messageText: import("../../..").SnackbarMessageSectionTexts;
11
+ type: import("../../..").SnackbarMessageType;
12
+ showStatusIcon?: boolean;
13
+ variables?: {
14
+ variableName: string;
15
+ variableValue: string;
16
+ }[];
17
+ };
18
+ type: "snackbar/openSnackbar";
19
+ } | {
20
+ payload: undefined;
21
+ type: "aiAccountantView/fetchAiAccountantCustomers";
22
+ } | {
23
+ payload: undefined;
24
+ type: "aiAccountantView/triggerAiAccountantJobSuccess";
25
+ } | {
26
+ payload: import("../../../responsePayload").ZeniAPIStatus<Record<string, unknown>>;
27
+ type: "aiAccountantView/triggerAiAccountantJobFailure";
28
+ }>;