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

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 (70) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +1 -0
  3. package/lib/epic.d.ts +10 -1
  4. package/lib/epic.js +10 -1
  5. package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
  6. package/lib/esm/epic.js +10 -1
  7. package/lib/esm/index.js +8 -6
  8. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +24 -0
  9. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +49 -0
  10. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +31 -0
  11. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +41 -0
  12. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +57 -0
  13. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +31 -0
  14. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +39 -0
  15. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +27 -0
  16. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +44 -0
  17. package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +96 -1
  18. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +280 -1
  19. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +134 -1
  20. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +1 -10
  21. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +2 -4
  22. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +2 -5
  23. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +1 -10
  24. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelector.js +2 -4
  25. package/lib/esm/zeniAPI.js +41 -3
  26. package/lib/index.d.ts +11 -9
  27. package/lib/index.js +60 -32
  28. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +15 -0
  29. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +28 -0
  30. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.d.ts +7 -0
  31. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +53 -0
  32. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.d.ts +8 -0
  33. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +35 -0
  34. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.d.ts +7 -0
  35. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +45 -0
  36. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.d.ts +8 -0
  37. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +61 -0
  38. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.d.ts +8 -0
  39. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +35 -0
  40. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.d.ts +9 -0
  41. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +44 -0
  42. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +6 -0
  43. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +31 -0
  44. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +8 -0
  45. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +49 -0
  46. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  47. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +98 -0
  48. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +102 -0
  49. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +53 -3
  50. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +281 -2
  51. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +64 -1
  52. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.d.ts +1 -1
  53. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +133 -0
  54. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +106 -0
  55. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.d.ts +1 -1
  56. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +2 -11
  57. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +2 -4
  58. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelectorTypes.d.ts +0 -2
  59. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState.d.ts +0 -1
  60. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +0 -1
  61. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +2 -5
  62. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +0 -2
  63. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.d.ts +1 -1
  64. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +2 -11
  65. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelector.js +2 -4
  66. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelectorTypes.d.ts +0 -2
  67. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts +0 -1
  68. package/lib/zeniAPI.d.ts +9 -0
  69. package/lib/zeniAPI.js +40 -2
  70. package/package.json +2 -2
@@ -53,6 +53,82 @@ 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 batchList = monthYearPeriodId != null
61
+ ? bulkUpload.batchListByPeriod[monthYearPeriodId] ?? []
62
+ : [];
63
+ const completedBatchesSorted = (0, orderBy_1.default)(batchList.filter((b) => b.status === 'completed'), (b) => b.createdAt, 'desc');
64
+ const effectiveCurrentBatchId = bulkUpload.currentBatchId ?? completedBatchesSorted[0]?.batchId;
65
+ const currentBatchDetails = effectiveCurrentBatchId != null
66
+ ? bulkUpload.batchDetailsById[effectiveCurrentBatchId]
67
+ : undefined;
68
+ const resolvedFiles = currentBatchDetails?.files.map((file) => resolveBatchFile(file, transactionState));
69
+ const hasMoreBatchDetails = completedBatchesSorted.some((b) => bulkUpload.batchDetailsById[b.batchId] == null);
70
+ const getSortValue = (file) => {
71
+ const t = file.matchedTransaction;
72
+ if (t == null) {
73
+ return null;
74
+ }
75
+ switch (bulkUpload.sortKey) {
76
+ case 'vendor':
77
+ return (t.vendorName ?? t.description)?.toLowerCase() ?? null;
78
+ case 'category': {
79
+ const line = t.lines?.[0];
80
+ return line?.account?.accountName?.toLowerCase() ?? null;
81
+ }
82
+ case 'class': {
83
+ const line = t.lines?.[0];
84
+ return line?.class?.className?.toLowerCase() ?? null;
85
+ }
86
+ case 'date':
87
+ return t.date.valueOf();
88
+ case 'amount':
89
+ return t.amount.amount;
90
+ default:
91
+ return null;
92
+ }
93
+ };
94
+ const bulkUploadSortDirection = bulkUpload.sortOrder === 'ascending' ? 'asc' : 'desc';
95
+ const matchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((f) => f.status === 'matched') ?? [], getSortValue, bulkUploadSortDirection);
96
+ const unmatchedFiles = (0, orderBy_1.default)(resolvedFiles?.filter((f) => f.status === 'un_matched' || f.status === 'no_match') ?? [], getSortValue, bulkUploadSortDirection);
97
+ const progress = currentBatchStatus != null
98
+ ? {
99
+ ...currentBatchStatus.progress,
100
+ percentage: currentBatchStatus.progress.total > 0
101
+ ? Math.round((currentBatchStatus.progress.processed /
102
+ currentBatchStatus.progress.total) *
103
+ 100)
104
+ : 0,
105
+ }
106
+ : { total: 0, processed: 0, percentage: 0 };
107
+ const batchListFetchState = bulkUpload.batchListFetchState;
108
+ const pastBatches = batchList.filter((b) => b.batchId !== effectiveCurrentBatchId);
109
+ const pastUnmatchedFiles = pastBatches.flatMap((b) => {
110
+ const details = bulkUpload.batchDetailsById[b.batchId];
111
+ if (details == null) {
112
+ return [];
113
+ }
114
+ return details.files
115
+ .filter((f) => f.status === 'un_matched' || f.status === 'no_match')
116
+ .map((f) => resolveBatchFile(f, transactionState));
117
+ });
118
+ const completedTransactionsForPeriod = monthYearPeriodId != null
119
+ ? bulkUpload.completedTransactionsByPeriod[monthYearPeriodId]
120
+ : undefined;
121
+ const completedTransactionIds = completedTransactionsForPeriod?.transactionIds ?? [];
122
+ const resolvedCompletedTransactions = (0, transactionSelector_1.getSupportedTransactionsByIds)(transactionState, completedTransactionIds);
123
+ const resolvedBatchDetails = currentBatchDetails != null && resolvedFiles != null
124
+ ? {
125
+ batchId: currentBatchDetails.batchId,
126
+ createdAt: currentBatchDetails.createdAt,
127
+ files: resolvedFiles,
128
+ status: currentBatchDetails.status,
129
+ summary: currentBatchDetails.summary,
130
+ }
131
+ : undefined;
56
132
  return {
57
133
  fetchState,
58
134
  error,
@@ -61,5 +137,62 @@ function getExpenseAutomationMissingReceiptsView(state) {
61
137
  refreshStatus,
62
138
  transactions: sortedTransactions,
63
139
  completionStatus,
140
+ bulkUpload: {
141
+ phase: bulkUpload.phase,
142
+ uploadStatus: bulkUpload.uploadStatus,
143
+ batchStatus: currentBatchStatus,
144
+ batchDetails: resolvedBatchDetails,
145
+ completedSubTab: bulkUpload.completedSubTab,
146
+ completedTransactions: {
147
+ fetchState: completedTransactionsForPeriod?.fetchState ?? {
148
+ fetchState: 'Not-Started',
149
+ error: undefined,
150
+ },
151
+ nextPageToken: completedTransactionsForPeriod?.nextPageToken ?? null,
152
+ totalCount: completedTransactionsForPeriod?.totalCount ?? 0,
153
+ transactions: resolvedCompletedTransactions,
154
+ },
155
+ matchedFiles,
156
+ unmatchedFiles,
157
+ progress,
158
+ currentResultsTab: bulkUpload.currentResultsTab,
159
+ sortKey: bulkUpload.sortKey,
160
+ sortOrder: bulkUpload.sortOrder,
161
+ batchList,
162
+ batchListFetchState,
163
+ pastBatches,
164
+ pastUnmatchedFiles,
165
+ confirmMatchStatus: bulkUpload.confirmMatchStatus,
166
+ hasMoreBatchDetails,
167
+ batchDetailsPaginationState: bulkUpload.batchDetailsPaginationState,
168
+ manualSearch: bulkUpload.manualSearch,
169
+ uploadProgress: bulkUpload.uploadProgress,
170
+ },
171
+ };
172
+ }
173
+ function resolveBatchFile(file, transactionState) {
174
+ const matchedTransaction = file.matchedTransactionId != null
175
+ ? (0, transactionSelector_1.getSupportedTransactionById)(transactionState, file.matchedTransactionId)
176
+ : undefined;
177
+ const candidates = file.candidates
178
+ ?.map((ref) => {
179
+ const transaction = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, ref.transactionId);
180
+ return transaction != null
181
+ ? { transaction, matchScore: ref.matchScore }
182
+ : undefined;
183
+ })
184
+ .filter((c) => c != null);
185
+ return {
186
+ attachmentId: file.attachmentId,
187
+ fileDownloadUrl: file.fileDownloadUrl,
188
+ fileId: file.fileId,
189
+ filename: file.filename,
190
+ filePreviewUrl: file.filePreviewUrl,
191
+ status: file.status,
192
+ matchedTransaction,
193
+ candidates: candidates != null && candidates.length > 0
194
+ ? candidates
195
+ : undefined,
196
+ matchSource: file.matchSource,
64
197
  };
65
198
  }
@@ -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,112 @@ 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 MissingReceiptsTab = 'missing' | BulkUploadResultsTab;
21
+ export type CompletedSubTab = 'all' | 'ai_accountant' | 'manual';
22
+ export type MatchSource = 'ai' | 'manual';
23
+ export interface CandidateRef {
24
+ matchScore: number;
25
+ transactionId: ID;
26
+ }
27
+ export interface MatchCandidate {
28
+ amount: number;
29
+ currencyCode: string;
30
+ matchScore: number;
31
+ transactionDate: string;
32
+ transactionId: ID;
33
+ transactionType: string;
34
+ vendorName: string;
35
+ vendorLogo?: string;
36
+ }
37
+ export interface BatchFile {
38
+ attachmentId: ID;
39
+ fileDownloadUrl: string | null;
40
+ fileId: ID;
41
+ filename: string;
42
+ filePreviewUrl: string | null;
43
+ status: BatchFileStatus;
44
+ candidates?: CandidateRef[];
45
+ matchedTransactionId?: ID;
46
+ matchSource?: MatchSource;
47
+ }
48
+ export interface BatchSummary {
49
+ failed: number;
50
+ matched: number;
51
+ noMatch: number;
52
+ possibleMatches: number;
53
+ total: number;
54
+ }
55
+ export interface BatchStatus {
56
+ batchId: ID;
57
+ progress: {
58
+ processed: number;
59
+ total: number;
60
+ };
61
+ status: BatchStatusValue;
62
+ }
63
+ export interface BatchDetails {
64
+ batchId: ID;
65
+ createdAt: string;
66
+ files: BatchFile[];
67
+ status: BatchStatusValue;
68
+ summary: BatchSummary;
69
+ }
70
+ export interface BatchListItem {
71
+ batchId: ID;
72
+ createdAt: string;
73
+ failedCount: number;
74
+ matchedCount: number;
75
+ noMatchCount: number;
76
+ possibleMatchesCount: number;
77
+ status: string;
78
+ totalFiles: number;
79
+ }
80
+ export interface ManualSearchResult {
81
+ amount: number;
82
+ currencyCode: string;
83
+ entityId: string;
84
+ memo: string;
85
+ transactionDate: string;
86
+ transactionId: ID;
87
+ transactionType: string;
88
+ vendorName: string;
89
+ }
90
+ export interface ManualSearchState {
91
+ fetchState: FetchStateAndError;
92
+ results: ManualSearchResult[];
93
+ searchQuery: string;
94
+ }
95
+ export type CompletedTransactionsMatchType = 'all' | 'ai_accountant' | 'manual';
96
+ export interface CompletedTransactionsState {
97
+ fetchState: FetchStateAndError;
98
+ nextPageToken: string | null;
99
+ totalCount: number;
100
+ transactionIds: ID[];
101
+ }
102
+ export interface BulkUploadState {
103
+ batchDetailsById: Record<ID, BatchDetails>;
104
+ batchDetailsPaginationState: FetchStateAndError;
105
+ batchListByPeriod: Record<MonthYearPeriodId, BatchListItem[]>;
106
+ batchListFetchState: FetchStateAndError;
107
+ batchStatusById: Record<ID, BatchStatus>;
108
+ completedSubTab: CompletedSubTab;
109
+ completedTransactionsByPeriod: Record<MonthYearPeriodId, CompletedTransactionsState>;
110
+ confirmMatchStatus: FetchStateAndError;
111
+ currentResultsTab: BulkUploadResultsTab;
112
+ manualSearch: ManualSearchState;
113
+ phase: BulkUploadPhase;
114
+ sortKey: BulkUploadSortKey;
115
+ sortOrder: SortOrder;
116
+ uploadProgress: number;
117
+ uploadStatus: FetchStateAndError;
118
+ currentBatchId?: ID;
119
+ }
15
120
  export interface MissingReceiptsViewState extends FetchedState {
121
+ bulkUpload: BulkUploadState;
16
122
  refreshStatus: FetchStateAndError;
17
123
  transactionIdsBySelectedPeriod: Record<MonthYearPeriodId, ID[]>;
18
124
  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-betaVR10",
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",
@@ -111,7 +111,7 @@
111
111
  "find-dead-code": "ts-prune | grep -v '(used in module)'",
112
112
  "find-unused-exports": "ts-unused-exports ./tsconfig.json",
113
113
  "circular-dependency": "npx madge --circular --extensions ts ./src",
114
- "build": "concurrently --kill-others-on-fail --handle-input \"echo 'Running ESLint...' && eslint . --ext .js,.jsx,.ts,.tsx\" \"echo 'TypeScript build in progress...' && time tsc && echo 'ESM build...' && tsc -p tsconfig.esm.json\" \"echo 'Running tests and typecheck...' && pnpm test\" && rimraf \"lib/**/__mocks__\" \"lib/**/__testHelpers__\"",
114
+ "build": "concurrently --kill-others-on-fail --handle-input \"echo 'Running ESLint...' && eslint . --ext .js,.jsx,.ts,.tsx\" \"echo 'TypeScript build in progress...' && time tsc && echo 'ESM build...' && tsc -p tsconfig.esm.json\"",
115
115
  "only-build": "eslint . --ext .js,.jsx,.ts,.tsx && time tsc && tsc -p tsconfig.esm.json && rimraf \"lib/**/__mocks__\" \"lib/**/__testHelpers__\"",
116
116
  "format": "prettier --write --ignore-unknown \"src/**/*\" && pnpm lint",
117
117
  "format-watch": "(git diff --name-only --diff-filter=ACM && git ls-files --others --exclude-standard) | grep -E '\\.(ts|tsx)$' | xargs prettier --write",