@zeniai/client-epic-state 4.19.37-betaAS2 → 4.19.37-betaVR1

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 (61) hide show
  1. package/lib/epic.d.ts +8 -1
  2. package/lib/epic.js +8 -1
  3. package/lib/esm/epic.js +8 -1
  4. package/lib/esm/index.js +8 -6
  5. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +28 -0
  6. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +25 -0
  7. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +31 -0
  8. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +16 -0
  9. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +48 -0
  10. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +27 -0
  11. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +41 -0
  12. package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +164 -1
  13. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +245 -1
  14. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +114 -1
  15. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +1 -10
  16. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +2 -4
  17. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +2 -5
  18. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +1 -10
  19. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelector.js +2 -4
  20. package/lib/esm/zeniAPI.js +41 -3
  21. package/lib/index.d.ts +11 -9
  22. package/lib/index.js +57 -32
  23. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  24. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +18 -0
  25. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +32 -0
  26. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.d.ts +6 -0
  27. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +29 -0
  28. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.d.ts +8 -0
  29. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +35 -0
  30. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.d.ts +6 -0
  31. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +20 -0
  32. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.d.ts +8 -0
  33. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +52 -0
  34. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +6 -0
  35. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +31 -0
  36. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +15 -0
  37. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +46 -0
  38. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +168 -0
  39. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +172 -0
  40. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +43 -3
  41. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +246 -2
  42. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +60 -1
  43. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.d.ts +1 -1
  44. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +113 -0
  45. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +102 -0
  46. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.d.ts +1 -1
  47. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +2 -11
  48. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +2 -4
  49. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelectorTypes.d.ts +0 -2
  50. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState.d.ts +0 -1
  51. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +0 -1
  52. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +2 -5
  53. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +0 -2
  54. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.d.ts +1 -1
  55. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +2 -11
  56. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelector.js +2 -4
  57. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelectorTypes.d.ts +0 -2
  58. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts +0 -1
  59. package/lib/zeniAPI.d.ts +9 -0
  60. package/lib/zeniAPI.js +40 -2
  61. package/package.json +1 -1
@@ -53,6 +53,66 @@ function getExpenseAutomationMissingReceiptsView(state) {
53
53
  const completionStatus = missingReceiptsCompletionStatus != null
54
54
  ? missingReceiptsCompletionStatus
55
55
  : 'incomplete';
56
+ const { bulkUpload } = expenseAutomationMissingReceiptsViewState;
57
+ const currentBatchStatus = bulkUpload.currentBatchId != null
58
+ ? bulkUpload.batchStatusById[bulkUpload.currentBatchId]
59
+ : undefined;
60
+ const currentBatchDetails = bulkUpload.currentBatchId != null
61
+ ? bulkUpload.batchDetailsById[bulkUpload.currentBatchId]
62
+ : undefined;
63
+ const resolvedFiles = currentBatchDetails?.files.map((file) => resolveBatchFile(file, transactionState));
64
+ const getSortValue = (file) => {
65
+ const t = file.matchedTransaction;
66
+ if (t == null) {
67
+ return null;
68
+ }
69
+ switch (bulkUpload.sortKey) {
70
+ case 'vendor':
71
+ return (t.vendorName ?? t.description)?.toLowerCase() ?? null;
72
+ case 'category': {
73
+ const line = t.lines?.[0];
74
+ return line?.account?.accountName?.toLowerCase() ?? null;
75
+ }
76
+ case 'class': {
77
+ const line = t.lines?.[0];
78
+ return line?.class?.className?.toLowerCase() ?? null;
79
+ }
80
+ case 'date':
81
+ return t.date.valueOf();
82
+ case 'amount':
83
+ return t.amount.amount;
84
+ default:
85
+ return null;
86
+ }
87
+ };
88
+ const bulkUploadSortDirection = bulkUpload.sortOrder === 'ascending' ? 'asc' : 'desc';
89
+ const matchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((f) => f.status === 'matched') ?? [], getSortValue, bulkUploadSortDirection);
90
+ const unmatchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((f) => f.status === 'un_matched' || f.status === 'no_match') ?? [], getSortValue, bulkUploadSortDirection);
91
+ const progress = currentBatchStatus != null
92
+ ? {
93
+ ...currentBatchStatus.progress,
94
+ percentage: currentBatchStatus.progress.total > 0
95
+ ? Math.round((currentBatchStatus.progress.processed /
96
+ currentBatchStatus.progress.total) *
97
+ 100)
98
+ : 0,
99
+ }
100
+ : { total: 0, processed: 0, percentage: 0 };
101
+ const pastBatches = bulkUpload.batchList.filter((b) => b.batchId !== bulkUpload.currentBatchId);
102
+ const completedTransactionsForPeriod = monthYearPeriodId != null
103
+ ? bulkUpload.completedTransactionsByPeriod[monthYearPeriodId]
104
+ : undefined;
105
+ const completedTransactionIds = completedTransactionsForPeriod?.transactionIds ?? [];
106
+ const resolvedCompletedTransactions = (0, transactionSelector_1.getSupportedTransactionsByIds)(transactionState, completedTransactionIds);
107
+ const resolvedBatchDetails = currentBatchDetails != null && resolvedFiles != null
108
+ ? {
109
+ batchId: currentBatchDetails.batchId,
110
+ createdAt: currentBatchDetails.createdAt,
111
+ files: resolvedFiles,
112
+ status: currentBatchDetails.status,
113
+ summary: currentBatchDetails.summary,
114
+ }
115
+ : undefined;
56
116
  return {
57
117
  fetchState,
58
118
  error,
@@ -61,5 +121,58 @@ function getExpenseAutomationMissingReceiptsView(state) {
61
121
  refreshStatus,
62
122
  transactions: sortedTransactions,
63
123
  completionStatus,
124
+ bulkUpload: {
125
+ phase: bulkUpload.phase,
126
+ uploadStatus: bulkUpload.uploadStatus,
127
+ batchStatus: currentBatchStatus,
128
+ batchDetails: resolvedBatchDetails,
129
+ completedSubTab: bulkUpload.completedSubTab,
130
+ completedTransactions: {
131
+ fetchState: completedTransactionsForPeriod?.fetchState ?? {
132
+ fetchState: 'Not-Started',
133
+ error: undefined,
134
+ },
135
+ nextPageToken: completedTransactionsForPeriod?.nextPageToken ?? null,
136
+ totalCount: completedTransactionsForPeriod?.totalCount ?? 0,
137
+ transactions: resolvedCompletedTransactions,
138
+ },
139
+ matchedFiles,
140
+ unmatchedFiles,
141
+ progress,
142
+ currentResultsTab: bulkUpload.currentResultsTab,
143
+ sortKey: bulkUpload.sortKey,
144
+ sortOrder: bulkUpload.sortOrder,
145
+ batchList: bulkUpload.batchList,
146
+ batchListFetchState: bulkUpload.batchListFetchState,
147
+ pastBatches,
148
+ confirmMatchStatus: bulkUpload.confirmMatchStatus,
149
+ manualSearch: bulkUpload.manualSearch,
150
+ uploadProgress: bulkUpload.uploadProgress,
151
+ },
152
+ };
153
+ }
154
+ function resolveBatchFile(file, transactionState) {
155
+ const matchedTransaction = file.matchedTransactionId != null
156
+ ? (0, transactionSelector_1.getSupportedTransactionById)(transactionState, file.matchedTransactionId)
157
+ : undefined;
158
+ const candidates = file.candidates
159
+ ?.map((ref) => {
160
+ const transaction = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, ref.transactionId);
161
+ return transaction != null
162
+ ? { transaction, matchScore: ref.matchScore }
163
+ : undefined;
164
+ })
165
+ .filter((c) => c != null);
166
+ return {
167
+ attachmentId: file.attachmentId,
168
+ fileId: file.fileId,
169
+ filename: file.filename,
170
+ filePreviewUrl: file.filePreviewUrl,
171
+ status: file.status,
172
+ matchedTransaction,
173
+ candidates: candidates != null && candidates.length > 0
174
+ ? candidates
175
+ : undefined,
176
+ matchSource: file.matchSource,
64
177
  };
65
178
  }
@@ -3,6 +3,7 @@ import { SortOrder } from '../../../commonStateTypes/selectorTypes/sortOrderType
3
3
  import { MonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
4
4
  export declare const toMissingReceiptsSortKey: (v: string) => "date" | "amount" | "vendor" | "category" | "class";
5
5
  export type MissingReceiptsSortKey = ReturnType<typeof toMissingReceiptsSortKey>;
6
+ export type BulkUploadSortKey = 'amount' | 'category' | 'class' | 'date' | 'vendor';
6
7
  export interface MissingReceiptsViewUIState {
7
8
  scrollPosition: {
8
9
  scrollTop: number;
@@ -12,7 +13,108 @@ export interface MissingReceiptsViewUIState {
12
13
  sortKey: MissingReceiptsSortKey;
13
14
  sortOrder: SortOrder;
14
15
  }
16
+ export type BatchStatusValue = 'pending' | 'processing' | 'completed';
17
+ export type BatchFileStatus = 'matched' | 'un_matched' | 'no_match' | 'failed';
18
+ export type BulkUploadPhase = 'idle' | 'uploading' | 'matching' | 'completed';
19
+ export type BulkUploadResultsTab = 'completed' | 'unmatched';
20
+ export type CompletedSubTab = 'all' | 'ai_accountant' | 'manual';
21
+ export type MatchSource = 'ai' | 'manual';
22
+ export interface CandidateRef {
23
+ matchScore: number;
24
+ transactionId: ID;
25
+ }
26
+ export interface MatchCandidate {
27
+ amount: number;
28
+ currencyCode: string;
29
+ matchScore: number;
30
+ transactionDate: string;
31
+ transactionId: ID;
32
+ vendorName: string;
33
+ vendorLogo?: string;
34
+ }
35
+ export interface BatchFile {
36
+ attachmentId: ID;
37
+ fileId: ID;
38
+ filename: string;
39
+ filePreviewUrl: string;
40
+ status: BatchFileStatus;
41
+ candidates?: CandidateRef[];
42
+ matchedTransactionId?: ID;
43
+ matchSource?: MatchSource;
44
+ }
45
+ export interface BatchSummary {
46
+ failed: number;
47
+ matched: number;
48
+ noMatch: number;
49
+ possibleMatches: number;
50
+ total: number;
51
+ }
52
+ export interface BatchStatus {
53
+ batchId: ID;
54
+ progress: {
55
+ processed: number;
56
+ total: number;
57
+ };
58
+ status: BatchStatusValue;
59
+ }
60
+ export interface BatchDetails {
61
+ batchId: ID;
62
+ createdAt: string;
63
+ files: BatchFile[];
64
+ status: BatchStatusValue;
65
+ summary: BatchSummary;
66
+ }
67
+ export interface BatchListItem {
68
+ batchId: ID;
69
+ createdAt: string;
70
+ failedCount: number;
71
+ matchedCount: number;
72
+ noMatchCount: number;
73
+ possibleMatchesCount: number;
74
+ status: string;
75
+ totalFiles: number;
76
+ }
77
+ export interface ManualSearchResult {
78
+ amount: number;
79
+ currency: string;
80
+ entityId: string;
81
+ memo: string;
82
+ transactionDate: string;
83
+ transactionId: ID;
84
+ transactionType: string;
85
+ vendorName: string;
86
+ }
87
+ export interface ManualSearchState {
88
+ fetchState: FetchStateAndError;
89
+ results: ManualSearchResult[];
90
+ searchQuery: string;
91
+ }
92
+ export type CompletedTransactionsMatchType = 'all' | 'ai_accountant' | 'manual';
93
+ export interface CompletedTransactionsState {
94
+ fetchState: FetchStateAndError;
95
+ nextPageToken: string | null;
96
+ totalCount: number;
97
+ transactionIds: ID[];
98
+ }
99
+ export interface BulkUploadState {
100
+ batchDetailsById: Record<ID, BatchDetails>;
101
+ batchList: BatchListItem[];
102
+ batchListFetchState: FetchStateAndError;
103
+ batchStatusById: Record<ID, BatchStatus>;
104
+ completedSubTab: CompletedSubTab;
105
+ completedTransactionsByPeriod: Record<MonthYearPeriodId, CompletedTransactionsState>;
106
+ confirmMatchStatus: FetchStateAndError;
107
+ currentResultsTab: BulkUploadResultsTab;
108
+ manualSearch: ManualSearchState;
109
+ phase: BulkUploadPhase;
110
+ sortKey: BulkUploadSortKey;
111
+ sortOrder: SortOrder;
112
+ uploadProgress: number;
113
+ uploadStatus: FetchStateAndError;
114
+ currentBatchId?: ID;
115
+ }
15
116
  export interface MissingReceiptsViewState extends FetchedState {
117
+ bulkUpload: BulkUploadState;
16
118
  refreshStatus: FetchStateAndError;
17
119
  transactionIdsBySelectedPeriod: Record<MonthYearPeriodId, ID[]>;
18
120
  uiState: MissingReceiptsViewUIState;
@@ -34,6 +34,6 @@ export declare const fetchBillPaySetupApproverView: import("@reduxjs/toolkit").A
34
34
  approvalRuleId: string | undefined;
35
35
  }, "billPaySetupApproverView/initializeBillPaySetupApproverViewUpdateData", never, never>, saveBillPaySetupApproverViewUpdateData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[billPaySetupApproverViewUpdateData: Partial<ApprovalRuleUpdateData | ApprovalRuleCreateData>], {
36
36
  billPaySetupApproverViewUpdateData: Partial<ApprovalRuleUpdateData | ApprovalRuleCreateData>;
37
- }, "billPaySetupApproverView/saveBillPaySetupApproverViewUpdateData", never, never>, clearBillPaySetupApproverViewUpdateData: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"billPaySetupApproverView/clearBillPaySetupApproverViewUpdateData">, setListeningToPusherEvent: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "billPaySetupApproverView/setListeningToPusherEvent">, clearBillPaySetupApproverView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"billPaySetupApproverView/clearBillPaySetupApproverView">;
37
+ }, "billPaySetupApproverView/saveBillPaySetupApproverViewUpdateData", never, never>, clearBillPaySetupApproverViewUpdateData: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"billPaySetupApproverView/clearBillPaySetupApproverViewUpdateData">, clearBillPaySetupApproverView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"billPaySetupApproverView/clearBillPaySetupApproverView">;
38
38
  declare const _default: import("redux").Reducer<BillPaySetupApproverViewState>;
39
39
  export default _default;
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.clearBillPaySetupApproverView = exports.setListeningToPusherEvent = exports.clearBillPaySetupApproverViewUpdateData = exports.saveBillPaySetupApproverViewUpdateData = exports.initializeBillPaySetupApproverViewUpdateData = exports.saveBillPaySetupApproverViewUpdatesFailure = exports.saveBillPaySetupApproverViewUpdatesSuccess = exports.saveBillPaySetupApproverViewUpdates = exports.deleteBillPayApprovalRuleFailure = exports.deleteBillPayApprovalRuleSuccess = exports.deleteBillPayApprovalRule = exports.fetchBillPayApproversListFailure = exports.fetchBillPayApproversListSuccess = exports.fetchBillPayApproversList = exports.fetchBillPayApproversDetails = exports.fetchBillPaySetupApproverViewFailure = exports.fetchBillPaySetupApproverViewSuccess = exports.fetchBillPaySetupApproverView = exports.initialState = void 0;
4
+ exports.clearBillPaySetupApproverView = exports.clearBillPaySetupApproverViewUpdateData = exports.saveBillPaySetupApproverViewUpdateData = exports.initializeBillPaySetupApproverViewUpdateData = exports.saveBillPaySetupApproverViewUpdatesFailure = exports.saveBillPaySetupApproverViewUpdatesSuccess = exports.saveBillPaySetupApproverViewUpdates = exports.deleteBillPayApprovalRuleFailure = exports.deleteBillPayApprovalRuleSuccess = exports.deleteBillPayApprovalRule = exports.fetchBillPayApproversListFailure = exports.fetchBillPayApproversListSuccess = exports.fetchBillPayApproversList = exports.fetchBillPayApproversDetails = exports.fetchBillPaySetupApproverViewFailure = exports.fetchBillPaySetupApproverViewSuccess = exports.fetchBillPaySetupApproverView = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  exports.initialState = {
7
7
  fetchState: 'Not-Started',
8
8
  error: undefined,
9
- listeningToPusherEvent: false,
10
9
  approverListState: {
11
10
  approverIds: [],
12
11
  attributes: [],
@@ -159,11 +158,6 @@ const billPaySetupApproverView = (0, toolkit_1.createSlice)({
159
158
  reducer(draft, action) {
160
159
  const { approvalRuleIds } = action.payload;
161
160
  if (draft.billPaySetupApproverViewUpdateData != null) {
162
- if (draft.billPaySetupApproverViewUpdateData.type === 'approval_update' &&
163
- draft.billPaySetupApproverViewUpdateData.data
164
- ?.isApplicableOnPendingApprovalEntity === true) {
165
- draft.listeningToPusherEvent = true;
166
- }
167
161
  draft.billPaySetupApproverViewUpdateData.updateStatus = {
168
162
  fetchState: 'Completed',
169
163
  error: undefined,
@@ -224,9 +218,6 @@ const billPaySetupApproverView = (0, toolkit_1.createSlice)({
224
218
  return { payload: { billPaySetupApproverViewUpdateData } };
225
219
  },
226
220
  },
227
- setListeningToPusherEvent(draft, action) {
228
- draft.listeningToPusherEvent = action.payload;
229
- },
230
221
  clearBillPaySetupApproverViewUpdateData(draft) {
231
222
  if (draft.billPaySetupApproverViewUpdateData != null) {
232
223
  draft.billPaySetupApproverViewUpdateData.data = undefined;
@@ -237,5 +228,5 @@ const billPaySetupApproverView = (0, toolkit_1.createSlice)({
237
228
  },
238
229
  },
239
230
  });
240
- _a = billPaySetupApproverView.actions, exports.fetchBillPaySetupApproverView = _a.fetchBillPaySetupApproverView, exports.fetchBillPaySetupApproverViewSuccess = _a.fetchBillPaySetupApproverViewSuccess, exports.fetchBillPaySetupApproverViewFailure = _a.fetchBillPaySetupApproverViewFailure, exports.fetchBillPayApproversDetails = _a.fetchBillPayApproversDetails, exports.fetchBillPayApproversList = _a.fetchBillPayApproversList, exports.fetchBillPayApproversListSuccess = _a.fetchBillPayApproversListSuccess, exports.fetchBillPayApproversListFailure = _a.fetchBillPayApproversListFailure, exports.deleteBillPayApprovalRule = _a.deleteBillPayApprovalRule, exports.deleteBillPayApprovalRuleSuccess = _a.deleteBillPayApprovalRuleSuccess, exports.deleteBillPayApprovalRuleFailure = _a.deleteBillPayApprovalRuleFailure, exports.saveBillPaySetupApproverViewUpdates = _a.saveBillPaySetupApproverViewUpdates, exports.saveBillPaySetupApproverViewUpdatesSuccess = _a.saveBillPaySetupApproverViewUpdatesSuccess, exports.saveBillPaySetupApproverViewUpdatesFailure = _a.saveBillPaySetupApproverViewUpdatesFailure, exports.initializeBillPaySetupApproverViewUpdateData = _a.initializeBillPaySetupApproverViewUpdateData, exports.saveBillPaySetupApproverViewUpdateData = _a.saveBillPaySetupApproverViewUpdateData, exports.clearBillPaySetupApproverViewUpdateData = _a.clearBillPaySetupApproverViewUpdateData, exports.setListeningToPusherEvent = _a.setListeningToPusherEvent, exports.clearBillPaySetupApproverView = _a.clearBillPaySetupApproverView;
231
+ _a = billPaySetupApproverView.actions, exports.fetchBillPaySetupApproverView = _a.fetchBillPaySetupApproverView, exports.fetchBillPaySetupApproverViewSuccess = _a.fetchBillPaySetupApproverViewSuccess, exports.fetchBillPaySetupApproverViewFailure = _a.fetchBillPaySetupApproverViewFailure, exports.fetchBillPayApproversDetails = _a.fetchBillPayApproversDetails, exports.fetchBillPayApproversList = _a.fetchBillPayApproversList, exports.fetchBillPayApproversListSuccess = _a.fetchBillPayApproversListSuccess, exports.fetchBillPayApproversListFailure = _a.fetchBillPayApproversListFailure, exports.deleteBillPayApprovalRule = _a.deleteBillPayApprovalRule, exports.deleteBillPayApprovalRuleSuccess = _a.deleteBillPayApprovalRuleSuccess, exports.deleteBillPayApprovalRuleFailure = _a.deleteBillPayApprovalRuleFailure, exports.saveBillPaySetupApproverViewUpdates = _a.saveBillPaySetupApproverViewUpdates, exports.saveBillPaySetupApproverViewUpdatesSuccess = _a.saveBillPaySetupApproverViewUpdatesSuccess, exports.saveBillPaySetupApproverViewUpdatesFailure = _a.saveBillPaySetupApproverViewUpdatesFailure, exports.initializeBillPaySetupApproverViewUpdateData = _a.initializeBillPaySetupApproverViewUpdateData, exports.saveBillPaySetupApproverViewUpdateData = _a.saveBillPaySetupApproverViewUpdateData, exports.clearBillPaySetupApproverViewUpdateData = _a.clearBillPaySetupApproverViewUpdateData, exports.clearBillPaySetupApproverView = _a.clearBillPaySetupApproverView;
241
232
  exports.default = billPaySetupApproverView.reducer;
@@ -12,7 +12,7 @@ const classSelector_1 = require("../../../../entity/class/classSelector");
12
12
  const userSelector_1 = require("../../../../entity/user/userSelector");
13
13
  const userRoleSelector_1 = require("../../../../entity/userRole/userRoleSelector");
14
14
  exports.getBillPaySetupApproverView = (0, toolkit_1.createSelector)((state) => state.billPaySetupApproverViewState, (state) => state.approvalRuleState, (state) => state.userState, (billPaySetupApproverViewState, approvalRuleState, userState) => {
15
- const { approvalRulesDeleteStatusById, approvalRuleIds, fetchState, error, listeningToPusherEvent, } = billPaySetupApproverViewState;
15
+ const { approvalRulesDeleteStatusById, approvalRuleIds, fetchState, error } = billPaySetupApproverViewState;
16
16
  const deleteStateList = Object.values(approvalRulesDeleteStatusById);
17
17
  const approvalRules = (0, approvalRuleSelector_1.getApprovalRulesByIds)(approvalRuleState, approvalRuleIds);
18
18
  const allApprovalRules = approvalRules.map((approvalRule) => {
@@ -46,11 +46,10 @@ exports.getBillPaySetupApproverView = (0, toolkit_1.createSelector)((state) => s
46
46
  approvalRulesStatus,
47
47
  fetchState,
48
48
  error,
49
- listeningToPusherEvent,
50
49
  };
51
50
  });
52
51
  exports.getBillPaySetupApproverUpdateDataView = (0, toolkit_1.createSelector)((state) => state.billPaySetupApproverViewState, (state) => state.approvalRuleState, (state) => state.userState, (state) => state.classState, (state) => state.classListState, (state) => state.userRoleState, (billPaySetupApproverViewState, approvalRuleState, userState, classState, classListState, userRoleState) => {
53
- const { approvalRuleIds, approverListState, billPaySetupApproverViewUpdateData, fetchState, error, listeningToPusherEvent, } = billPaySetupApproverViewState;
52
+ const { approvalRuleIds, approverListState, billPaySetupApproverViewUpdateData, fetchState, error, } = billPaySetupApproverViewState;
54
53
  const { approverIds, attributes } = approverListState;
55
54
  const allApprovalRules = (0, approvalRuleSelector_1.getApprovalRulesByIds)(approvalRuleState, approvalRuleIds);
56
55
  const allApprovers = approverIds
@@ -103,6 +102,5 @@ exports.getBillPaySetupApproverUpdateDataView = (0, toolkit_1.createSelector)((s
103
102
  fetchState,
104
103
  allAccountingClasses,
105
104
  error,
106
- listeningToPusherEvent,
107
105
  };
108
106
  });
@@ -17,7 +17,6 @@ export interface BillPaySetupApproverView extends SelectorView {
17
17
  allApprovalRules: ApprovalRuleWithUser[];
18
18
  approvalRulesStatus: AllowedValueWithCode;
19
19
  deleteStatus: FetchStateAndError;
20
- listeningToPusherEvent?: boolean;
21
20
  }
22
21
  export interface BillPaySetupApproverUpdateDataView extends SelectorView {
23
22
  allAccountingClasses: Class[];
@@ -28,5 +27,4 @@ export interface BillPaySetupApproverUpdateDataView extends SelectorView {
28
27
  filteredApprovers: UserAndRole[];
29
28
  filteredAttributes: AttributeType[];
30
29
  billPaySetupApproverViewUpdateData?: ApproverViewUpdateData;
31
- listeningToPusherEvent?: boolean;
32
30
  }
@@ -10,5 +10,4 @@ export interface BillPaySetupApproverViewState extends FetchedState {
10
10
  fetchStatus: FetchStateAndError;
11
11
  };
12
12
  billPaySetupApproverViewUpdateData?: ApproverViewUpdateData;
13
- listeningToPusherEvent?: boolean;
14
13
  }
@@ -13,7 +13,6 @@ interface ApproverViewStepPayload extends Omit<StepPayload, 'actors'> {
13
13
  interface ApprovalUpdatableInfoPayload {
14
14
  approval_rule_id: ID;
15
15
  criteria: CriteriaPayload[];
16
- is_applicable_on_pending_approval_entity: boolean;
17
16
  steps: ApproverViewStepPayload[];
18
17
  }
19
18
  export declare const toApprovalChangableInfoPayload: (approverViewUpdateData: ApprovalRuleUpdateData | ApprovalRuleCreateData) => Partial<ApprovalUpdatableInfoPayload>;
@@ -36,15 +36,12 @@ const toApprovalChangableInfoPayload = (approverViewUpdateData) => {
36
36
  }),
37
37
  };
38
38
  });
39
- const isUpdate = approverViewUpdateData.approvalRuleId != null;
40
39
  const payload = {
41
40
  criteria: criteriaPayload,
42
41
  steps,
43
42
  };
44
- if (isUpdate) {
45
- payload.approval_rule_id = approverViewUpdateData.approvalRuleId;
46
- payload.is_applicable_on_pending_approval_entity =
47
- approverViewUpdateData.isApplicableOnPendingApprovalEntity ?? false;
43
+ if (approverViewUpdateData.approvalRuleId != null) {
44
+ payload['approval_rule_id'] = approverViewUpdateData.approvalRuleId;
48
45
  }
49
46
  return payload;
50
47
  };
@@ -10,10 +10,8 @@ export interface ApprovalRuleUpdateData {
10
10
  approvalRuleId: ID;
11
11
  criteria: Criteria;
12
12
  steps: Step[];
13
- isApplicableOnPendingApprovalEntity?: boolean;
14
13
  }
15
14
  export interface ApprovalRuleCreateData {
16
15
  criteria: Criteria;
17
16
  steps: Step[];
18
- isApplicableOnPendingApprovalEntity?: boolean;
19
17
  }
@@ -40,6 +40,6 @@ export declare const fetchRemiSetupApproverView: import("@reduxjs/toolkit").Acti
40
40
  approvalRuleId: string | undefined;
41
41
  }, "remiSetupApproverView/initializeRemiSetupApproverViewUpdateData", never, never>, saveRemiSetupApproverViewUpdateData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[remiSetupApproverViewUpdateData: Partial<ApprovalRuleUpdateData | ApprovalRuleCreateData>], {
42
42
  remiSetupApproverViewUpdateData: Partial<ApprovalRuleUpdateData | ApprovalRuleCreateData>;
43
- }, "remiSetupApproverView/saveRemiSetupApproverViewUpdateData", never, never>, setListeningToPusherEvent: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "remiSetupApproverView/setListeningToPusherEvent">, clearRemiSetupApproverViewUpdateData: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"remiSetupApproverView/clearRemiSetupApproverViewUpdateData">, clearRemiSetupApproverView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"remiSetupApproverView/clearRemiSetupApproverView">;
43
+ }, "remiSetupApproverView/saveRemiSetupApproverViewUpdateData", never, never>, clearRemiSetupApproverViewUpdateData: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"remiSetupApproverView/clearRemiSetupApproverViewUpdateData">, clearRemiSetupApproverView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"remiSetupApproverView/clearRemiSetupApproverView">;
44
44
  declare const _default: import("redux").Reducer<RemiSetupApproverViewState>;
45
45
  export default _default;
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.clearRemiSetupApproverView = exports.clearRemiSetupApproverViewUpdateData = exports.setListeningToPusherEvent = exports.saveRemiSetupApproverViewUpdateData = exports.initializeRemiSetupApproverViewUpdateData = exports.saveRemiSetupApproverViewUpdatesFailure = exports.saveRemiSetupApproverViewUpdatesSuccess = exports.saveRemiSetupApproverViewUpdates = exports.deleteRemiApprovalRuleFailure = exports.deleteRemiApprovalRuleSuccess = exports.deleteRemiApprovalRule = exports.fetchRemiApproversListFailure = exports.fetchRemiApproversListSuccess = exports.fetchRemiApproversList = exports.fetchRemiApproversDetails = exports.fetchRemiSetupApproverViewFailure = exports.fetchRemiSetupApproverViewSuccess = exports.fetchRemiSetupApproverView = exports.initialState = void 0;
4
+ exports.clearRemiSetupApproverView = exports.clearRemiSetupApproverViewUpdateData = exports.saveRemiSetupApproverViewUpdateData = exports.initializeRemiSetupApproverViewUpdateData = exports.saveRemiSetupApproverViewUpdatesFailure = exports.saveRemiSetupApproverViewUpdatesSuccess = exports.saveRemiSetupApproverViewUpdates = exports.deleteRemiApprovalRuleFailure = exports.deleteRemiApprovalRuleSuccess = exports.deleteRemiApprovalRule = exports.fetchRemiApproversListFailure = exports.fetchRemiApproversListSuccess = exports.fetchRemiApproversList = exports.fetchRemiApproversDetails = exports.fetchRemiSetupApproverViewFailure = exports.fetchRemiSetupApproverViewSuccess = exports.fetchRemiSetupApproverView = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  exports.initialState = {
7
7
  fetchState: 'Not-Started',
8
8
  error: undefined,
9
- listeningToPusherEvent: false,
10
9
  approverListState: {
11
10
  approverIds: [],
12
11
  attributes: [],
@@ -181,11 +180,6 @@ const remiSetupApproverView = (0, toolkit_1.createSlice)({
181
180
  reducer(draft, action) {
182
181
  const { approvalRuleIds } = action.payload;
183
182
  if (draft.remiSetupApproverViewUpdateData != null) {
184
- if (draft.remiSetupApproverViewUpdateData.type === 'approval_update' &&
185
- draft.remiSetupApproverViewUpdateData.data
186
- ?.isApplicableOnPendingApprovalEntity === true) {
187
- draft.listeningToPusherEvent = true;
188
- }
189
183
  draft.remiSetupApproverViewUpdateData.updateStatus = {
190
184
  fetchState: 'Completed',
191
185
  error: undefined,
@@ -246,9 +240,6 @@ const remiSetupApproverView = (0, toolkit_1.createSlice)({
246
240
  return { payload: { remiSetupApproverViewUpdateData } };
247
241
  },
248
242
  },
249
- setListeningToPusherEvent(draft, action) {
250
- draft.listeningToPusherEvent = action.payload;
251
- },
252
243
  clearRemiSetupApproverViewUpdateData(draft) {
253
244
  if (draft.remiSetupApproverViewUpdateData != null) {
254
245
  draft.remiSetupApproverViewUpdateData.data = undefined;
@@ -259,5 +250,5 @@ const remiSetupApproverView = (0, toolkit_1.createSlice)({
259
250
  },
260
251
  },
261
252
  });
262
- _a = remiSetupApproverView.actions, exports.fetchRemiSetupApproverView = _a.fetchRemiSetupApproverView, exports.fetchRemiSetupApproverViewSuccess = _a.fetchRemiSetupApproverViewSuccess, exports.fetchRemiSetupApproverViewFailure = _a.fetchRemiSetupApproverViewFailure, exports.fetchRemiApproversDetails = _a.fetchRemiApproversDetails, exports.fetchRemiApproversList = _a.fetchRemiApproversList, exports.fetchRemiApproversListSuccess = _a.fetchRemiApproversListSuccess, exports.fetchRemiApproversListFailure = _a.fetchRemiApproversListFailure, exports.deleteRemiApprovalRule = _a.deleteRemiApprovalRule, exports.deleteRemiApprovalRuleSuccess = _a.deleteRemiApprovalRuleSuccess, exports.deleteRemiApprovalRuleFailure = _a.deleteRemiApprovalRuleFailure, exports.saveRemiSetupApproverViewUpdates = _a.saveRemiSetupApproverViewUpdates, exports.saveRemiSetupApproverViewUpdatesSuccess = _a.saveRemiSetupApproverViewUpdatesSuccess, exports.saveRemiSetupApproverViewUpdatesFailure = _a.saveRemiSetupApproverViewUpdatesFailure, exports.initializeRemiSetupApproverViewUpdateData = _a.initializeRemiSetupApproverViewUpdateData, exports.saveRemiSetupApproverViewUpdateData = _a.saveRemiSetupApproverViewUpdateData, exports.setListeningToPusherEvent = _a.setListeningToPusherEvent, exports.clearRemiSetupApproverViewUpdateData = _a.clearRemiSetupApproverViewUpdateData, exports.clearRemiSetupApproverView = _a.clearRemiSetupApproverView;
253
+ _a = remiSetupApproverView.actions, exports.fetchRemiSetupApproverView = _a.fetchRemiSetupApproverView, exports.fetchRemiSetupApproverViewSuccess = _a.fetchRemiSetupApproverViewSuccess, exports.fetchRemiSetupApproverViewFailure = _a.fetchRemiSetupApproverViewFailure, exports.fetchRemiApproversDetails = _a.fetchRemiApproversDetails, exports.fetchRemiApproversList = _a.fetchRemiApproversList, exports.fetchRemiApproversListSuccess = _a.fetchRemiApproversListSuccess, exports.fetchRemiApproversListFailure = _a.fetchRemiApproversListFailure, exports.deleteRemiApprovalRule = _a.deleteRemiApprovalRule, exports.deleteRemiApprovalRuleSuccess = _a.deleteRemiApprovalRuleSuccess, exports.deleteRemiApprovalRuleFailure = _a.deleteRemiApprovalRuleFailure, exports.saveRemiSetupApproverViewUpdates = _a.saveRemiSetupApproverViewUpdates, exports.saveRemiSetupApproverViewUpdatesSuccess = _a.saveRemiSetupApproverViewUpdatesSuccess, exports.saveRemiSetupApproverViewUpdatesFailure = _a.saveRemiSetupApproverViewUpdatesFailure, exports.initializeRemiSetupApproverViewUpdateData = _a.initializeRemiSetupApproverViewUpdateData, exports.saveRemiSetupApproverViewUpdateData = _a.saveRemiSetupApproverViewUpdateData, exports.clearRemiSetupApproverViewUpdateData = _a.clearRemiSetupApproverViewUpdateData, exports.clearRemiSetupApproverView = _a.clearRemiSetupApproverView;
263
254
  exports.default = remiSetupApproverView.reducer;
@@ -13,7 +13,7 @@ const userSelector_1 = require("../../../../entity/user/userSelector");
13
13
  const userRoleSelector_1 = require("../../../../entity/userRole/userRoleSelector");
14
14
  const getRemiSetupApproverView = (state, filterAdmins = true) => {
15
15
  const { remiSetupApproverViewState, approvalRuleState, userState } = state;
16
- const { approvalRulesDeleteStatusById, approvalRuleIds, fetchState, error, listeningToPusherEvent, } = remiSetupApproverViewState;
16
+ const { approvalRulesDeleteStatusById, approvalRuleIds, fetchState, error } = remiSetupApproverViewState;
17
17
  const deleteStateList = Object.values(approvalRulesDeleteStatusById);
18
18
  const approvalRules = (0, approvalRuleSelector_1.getApprovalRulesByIds)(approvalRuleState, approvalRuleIds);
19
19
  const allApprovalRules = approvalRules.map((approvalRule) => {
@@ -48,12 +48,11 @@ const getRemiSetupApproverView = (state, filterAdmins = true) => {
48
48
  approvalRulesStatus,
49
49
  fetchState,
50
50
  error,
51
- listeningToPusherEvent,
52
51
  };
53
52
  };
54
53
  exports.getRemiSetupApproverView = getRemiSetupApproverView;
55
54
  exports.getRemiSetupApproverUpdateDataView = (0, toolkit_1.createSelector)((state) => state.remiSetupApproverViewState, (state) => state.approvalRuleState, (state) => state.classState, (state) => state.classListState, (state) => state.userState, (state) => state.userRoleState, (remiSetupApproverViewState, approvalRuleState, classState, classListState, userState, userRoleState) => {
56
- const { approvalRuleIds, approverListState, remiSetupApproverViewUpdateData, fetchState, error, listeningToPusherEvent, } = remiSetupApproverViewState;
55
+ const { approvalRuleIds, approverListState, remiSetupApproverViewUpdateData, fetchState, error, } = remiSetupApproverViewState;
57
56
  const { approverIds, attributes, fetchStatus } = approverListState;
58
57
  const { fetchState: classListFetchState, error: classListFetchStateError, classIds, } = classListState;
59
58
  const allApprovalRules = (0, approvalRuleSelector_1.getApprovalRulesByIds)(approvalRuleState, approvalRuleIds).map((approvalRule) => {
@@ -121,6 +120,5 @@ exports.getRemiSetupApproverUpdateDataView = (0, toolkit_1.createSelector)((stat
121
120
  ]),
122
121
  fetchState,
123
122
  error,
124
- listeningToPusherEvent,
125
123
  };
126
124
  });
@@ -17,7 +17,6 @@ export interface RemiSetupApproverView extends SelectorView {
17
17
  allApprovalRules: ApprovalRuleWithUser[];
18
18
  approvalRulesStatus: AllowedValueWithCode;
19
19
  deleteStatus: FetchStateAndError;
20
- listeningToPusherEvent?: boolean;
21
20
  }
22
21
  export interface RemiSetupApproverUpdateDataView extends SelectorView {
23
22
  allAccountingClasses: Class[];
@@ -27,6 +26,5 @@ export interface RemiSetupApproverUpdateDataView extends SelectorView {
27
26
  approversDetailsFetchStatus: FetchStateAndError;
28
27
  filteredApprovers: UserAndRole[];
29
28
  filteredAttributes: AttributeType[];
30
- listeningToPusherEvent?: boolean;
31
29
  remiSetupApproverViewUpdateData?: ApproverViewUpdateData;
32
30
  }
@@ -10,6 +10,5 @@ export interface RemiSetupApproverViewState extends FetchedState {
10
10
  fetchStatus: FetchStateAndError;
11
11
  attributeSubTypeToUserIdMapping?: Record<AttributeType, ID>;
12
12
  };
13
- listeningToPusherEvent?: boolean;
14
13
  remiSetupApproverViewUpdateData?: ApproverViewUpdateData;
15
14
  }
package/lib/zeniAPI.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  import { fetch } from 'cross-fetch';
2
2
  import { Observable } from 'rxjs';
3
+ export type FormDataUploadEvent<T> = {
4
+ percentage: number;
5
+ type: 'progress';
6
+ } | {
7
+ data: T;
8
+ type: 'response';
9
+ };
3
10
  type ThenArgRecursive<T> = T extends PromiseLike<infer U> ? ThenArgRecursive<U> : T;
4
11
  export type FetchResponse = ThenArgRecursive<ReturnType<typeof fetch>>;
5
12
  export interface RESTAPIEndpoints {
@@ -34,6 +41,7 @@ export interface ZeniAPI<ResponseType = FetchResponse> {
34
41
  patchAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
35
42
  postAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
36
43
  postFormData<T>(restEndPoint: string, formData: FormData, signal?: AbortSignal): Observable<T>;
44
+ postFormDataWithProgress<T>(restEndPoint: string, formData: FormData, signal?: AbortSignal): Observable<FormDataUploadEvent<T>>;
37
45
  postJSON(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<ResponseType>;
38
46
  putAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
39
47
  update(userId?: string, sessionId?: string, tenantId?: string): void;
@@ -61,6 +69,7 @@ export declare class ZeniAPIClient implements ZeniAPI {
61
69
  postJSON(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<FetchResponse>;
62
70
  postAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
63
71
  postFormData<T>(restEndPoint: string, formData: FormData, signal?: AbortSignal): Observable<T>;
72
+ postFormDataWithProgress<T>(restEndPoint: string, formData: FormData, signal?: AbortSignal): Observable<FormDataUploadEvent<T>>;
64
73
  deleteAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
65
74
  putAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
66
75
  patchAndGetJSON<T>(restEndPoint: string, body?: Record<string, unknown>, headers?: Record<string, unknown>, signal?: AbortSignal): Observable<T>;
package/lib/zeniAPI.js CHANGED
@@ -82,8 +82,6 @@ class ZeniAPIClient {
82
82
  return (0, rxjs_1.from)(promise);
83
83
  }
84
84
  postFormData(restEndPoint, formData, signal) {
85
- // Use apiHeaders for auth headers, then remove Content-Type
86
- // so the browser sets multipart/form-data with the correct boundary
87
85
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
88
86
  const { 'Content-Type': _contentType, ...headers } = this.apiHeaders();
89
87
  const promise = (0, cross_fetch_1.fetch)(restEndPoint, {
@@ -94,6 +92,46 @@ class ZeniAPIClient {
94
92
  }).then((response) => this.processJsonResponse(response));
95
93
  return (0, rxjs_1.from)(promise);
96
94
  }
95
+ postFormDataWithProgress(restEndPoint, formData, signal) {
96
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
97
+ const { 'Content-Type': _ct, ...headers } = this.apiHeaders();
98
+ return new rxjs_1.Observable((subscriber) => {
99
+ const xhr = new XMLHttpRequest();
100
+ xhr.upload.onprogress = (event) => {
101
+ if (event.lengthComputable) {
102
+ const percentage = Math.round((event.loaded / event.total) * 100);
103
+ subscriber.next({ type: 'progress', percentage });
104
+ }
105
+ };
106
+ xhr.onload = () => {
107
+ try {
108
+ const json = JSON.parse(xhr.responseText);
109
+ this.checkSessionValidity(json);
110
+ subscriber.next({ type: 'response', data: json });
111
+ subscriber.complete();
112
+ }
113
+ catch (e) {
114
+ subscriber.error(e);
115
+ }
116
+ };
117
+ xhr.onerror = () => {
118
+ subscriber.error(new Error('Upload failed'));
119
+ };
120
+ xhr.open('POST', restEndPoint);
121
+ Object.entries(headers).forEach(([key, value]) => {
122
+ xhr.setRequestHeader(key, String(value));
123
+ });
124
+ xhr.send(formData);
125
+ if (signal != null) {
126
+ signal.addEventListener('abort', () => xhr.abort());
127
+ }
128
+ return () => {
129
+ if (xhr.readyState !== XMLHttpRequest.DONE) {
130
+ xhr.abort();
131
+ }
132
+ };
133
+ });
134
+ }
97
135
  deleteAndGetJSON(restEndPoint, body, headers, signal) {
98
136
  let apiHeaders = this.apiHeaders(headers);
99
137
  if (body != null) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "4.19.37-betaAS2",
3
+ "version": "4.19.37-betaVR1",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",