@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.
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/epic.d.ts +10 -1
- package/lib/epic.js +10 -1
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/esm/epic.js +10 -1
- package/lib/esm/index.js +8 -6
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +24 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +49 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +31 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +41 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +57 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +31 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +39 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +27 -0
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +44 -0
- package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +96 -1
- package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +280 -1
- package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +134 -1
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +1 -10
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +2 -4
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +2 -5
- package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +1 -10
- package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelector.js +2 -4
- package/lib/esm/zeniAPI.js +41 -3
- package/lib/index.d.ts +11 -9
- package/lib/index.js +60 -32
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +15 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +28 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.d.ts +7 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +53 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.d.ts +8 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +35 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.d.ts +7 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +45 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.d.ts +8 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +61 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.d.ts +8 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +35 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.d.ts +9 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +44 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +6 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +31 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +8 -0
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +49 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +98 -0
- package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +102 -0
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +53 -3
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +281 -2
- package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +64 -1
- package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.d.ts +1 -1
- package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +133 -0
- package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +106 -0
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +2 -11
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +2 -4
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelectorTypes.d.ts +0 -2
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState.d.ts +0 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +0 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +2 -5
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +0 -2
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.d.ts +1 -1
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +2 -11
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelector.js +2 -4
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewSelectorTypes.d.ts +0 -2
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts +0 -1
- package/lib/zeniAPI.d.ts +9 -0
- package/lib/zeniAPI.js +40 -2
- 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">,
|
|
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;
|
package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.clearBillPaySetupApproverView = exports.
|
|
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.
|
|
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
|
|
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,
|
|
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
|
}
|
|
@@ -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 (
|
|
45
|
-
payload
|
|
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>,
|
|
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;
|
package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
|
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,
|
|
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
|
}
|
package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts
CHANGED
|
@@ -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-
|
|
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\"
|
|
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",
|