@zeniai/client-epic-state 5.1.29-beta0ND → 5.1.30

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 (81) hide show
  1. package/lib/__testHelpers__/apiFailure.json +6 -0
  2. package/lib/entity/genericEntity/entity.d.ts +1 -1
  3. package/lib/entity/jeSchedules/jeSchedulesPayload.js +3 -2
  4. package/lib/entity/jeSchedules/jeSchedulesSelector.d.ts +1 -1
  5. package/lib/entity/jeSchedules/jeSchedulesSelector.js +4 -4
  6. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +1 -1
  7. package/lib/entity/vendor/__mocks__/vendorMock.d.ts +7 -0
  8. package/lib/entity/vendor/__mocks__/vendorMock.js +311 -0
  9. package/lib/entity/vendor/__mocks__/vendorStateMocks.d.ts +8 -0
  10. package/lib/entity/vendor/__mocks__/vendorStateMocks.js +415 -0
  11. package/lib/entity/vendor/vendorPayload.d.ts +4 -2
  12. package/lib/entity/vendor/vendorPayload.js +3 -1
  13. package/lib/esm/__testHelpers__/apiFailure.json +6 -0
  14. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +3 -2
  15. package/lib/esm/entity/jeSchedules/jeSchedulesSelector.js +4 -4
  16. package/lib/esm/entity/vendor/__mocks__/vendorMock.js +308 -0
  17. package/lib/esm/entity/vendor/__mocks__/vendorStateMocks.js +412 -0
  18. package/lib/esm/entity/vendor/vendorPayload.js +3 -1
  19. package/lib/esm/index.js +2 -2
  20. package/lib/esm/view/accountMappingView/__mocks__/accountMappingSelectorMock.js +4650 -0
  21. package/lib/esm/view/addressView/__mocks__/addressViewMocks.js +203 -0
  22. package/lib/esm/view/addressView/__mocks__/json/createAddressResponse.json +23 -0
  23. package/lib/esm/view/addressView/__mocks__/json/createCompanyAddressSuccess.json +258 -0
  24. package/lib/esm/view/addressView/__mocks__/json/createCompanyUserAddressSuccess.json +418 -0
  25. package/lib/esm/view/addressView/__mocks__/json/fetchAddressResponse.json +24 -0
  26. package/lib/esm/view/addressView/__mocks__/json/updateAddressResponse.json +24 -0
  27. package/lib/esm/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js +11 -6
  28. package/lib/esm/view/createTransferEntry/epics/createTransferEntryEpic.js +5 -1
  29. package/lib/esm/view/expenseAutomationView/payload/jeSchedulesPayload.js +4 -1
  30. package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +1 -1
  31. package/lib/esm/view/referralView/referralReducer.js +3 -2
  32. package/lib/esm/view/scheduleView/scheduleAccruedDetailView/epics/deleteScheduleAccruedDetailEpic.js +1 -1
  33. package/lib/esm/view/scheduleView/scheduleAccruedDetailView/epics/fetchRecommendedTransactionRowIndexEpic.js +11 -5
  34. package/lib/esm/view/scheduleView/scheduleAccruedDetailView/scheduleAccruedDetailPayload.js +4 -1
  35. package/lib/esm/view/scheduleView/scheduleDetailView/epics/createNewSchedulesEpic.js +1 -1
  36. package/lib/esm/view/scheduleView/scheduleDetailView/epics/deleteScheduleDetailEpic.js +1 -1
  37. package/lib/esm/view/scheduleView/scheduleDetailView/epics/markAsCompleteScheduleDetailEpic.js +1 -1
  38. package/lib/esm/view/scheduleView/scheduleDetailView/epics/saveScheduleDetailsEpic.js +1 -1
  39. package/lib/esm/view/scheduleView/scheduleDetailView/scheduleDetailPayload.js +12 -3
  40. package/lib/esm/view/scheduleView/scheduleListView/scheduleListSelector.js +8 -7
  41. package/lib/esm/view/spendManagement/billPay/billDetailView/epics/fetchBillDetailEpic.js +8 -3
  42. package/lib/esm/view/transactionDetail/epics/markTransactionAsNotMiscategorizedEpic.js +2 -28
  43. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +5 -1
  44. package/lib/esm/view/trendWithTransactions/fetchTrendForEntityEpic.js +3 -1
  45. package/lib/esm/view/vendorFiling1099/vendorFiling1099List/vendorFiling1099ListReducer.js +4 -1
  46. package/lib/esm/view/vendorList/vendorListReducer.js +4 -1
  47. package/lib/esm/view/vendorReviewView/vendorFirstReviewView/vendorFirstReviewViewReducer.js +9 -1
  48. package/lib/index.d.ts +2 -2
  49. package/lib/index.js +7 -6
  50. package/lib/view/accountMappingView/__mocks__/accountMappingSelectorMock.d.ts +11 -0
  51. package/lib/view/accountMappingView/__mocks__/accountMappingSelectorMock.js +4659 -0
  52. package/lib/view/addressView/__mocks__/addressViewMocks.d.ts +35 -0
  53. package/lib/view/addressView/__mocks__/addressViewMocks.js +239 -0
  54. package/lib/view/addressView/__mocks__/json/createAddressResponse.json +23 -0
  55. package/lib/view/addressView/__mocks__/json/createCompanyAddressSuccess.json +258 -0
  56. package/lib/view/addressView/__mocks__/json/createCompanyUserAddressSuccess.json +418 -0
  57. package/lib/view/addressView/__mocks__/json/fetchAddressResponse.json +24 -0
  58. package/lib/view/addressView/__mocks__/json/updateAddressResponse.json +24 -0
  59. package/lib/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js +11 -6
  60. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.js +5 -1
  61. package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.js +4 -1
  62. package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +1 -1
  63. package/lib/view/referralView/referralReducer.d.ts +1 -0
  64. package/lib/view/referralView/referralReducer.js +4 -3
  65. package/lib/view/scheduleView/scheduleAccruedDetailView/epics/deleteScheduleAccruedDetailEpic.js +1 -1
  66. package/lib/view/scheduleView/scheduleAccruedDetailView/epics/fetchRecommendedTransactionRowIndexEpic.js +11 -5
  67. package/lib/view/scheduleView/scheduleAccruedDetailView/scheduleAccruedDetailPayload.js +4 -1
  68. package/lib/view/scheduleView/scheduleDetailView/epics/createNewSchedulesEpic.js +1 -1
  69. package/lib/view/scheduleView/scheduleDetailView/epics/deleteScheduleDetailEpic.js +1 -1
  70. package/lib/view/scheduleView/scheduleDetailView/epics/markAsCompleteScheduleDetailEpic.js +1 -1
  71. package/lib/view/scheduleView/scheduleDetailView/epics/saveScheduleDetailsEpic.js +1 -1
  72. package/lib/view/scheduleView/scheduleDetailView/scheduleDetailPayload.js +12 -3
  73. package/lib/view/scheduleView/scheduleListView/scheduleListSelector.js +8 -7
  74. package/lib/view/spendManagement/billPay/billDetailView/epics/fetchBillDetailEpic.js +8 -3
  75. package/lib/view/transactionDetail/epics/markTransactionAsNotMiscategorizedEpic.js +2 -28
  76. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +5 -1
  77. package/lib/view/trendWithTransactions/fetchTrendForEntityEpic.js +3 -1
  78. package/lib/view/vendorFiling1099/vendorFiling1099List/vendorFiling1099ListReducer.js +4 -1
  79. package/lib/view/vendorList/vendorListReducer.js +4 -1
  80. package/lib/view/vendorReviewView/vendorFirstReviewView/vendorFirstReviewViewReducer.js +9 -1
  81. package/package.json +1 -1
@@ -6,14 +6,13 @@ const operators_1 = require("rxjs/operators");
6
6
  const formatZeniDateFY_1 = require("../../../../commonStateTypes/fiscalYearHelpers/formatZeniDateFY");
7
7
  const jeSchedulesSelector_1 = require("../../../../entity/jeSchedules/jeSchedulesSelector");
8
8
  const transactionReducer_1 = require("../../../../entity/transaction/transactionReducer");
9
- const vendorSelector_1 = require("../../../../entity/vendor/vendorSelector");
10
9
  const responsePayload_1 = require("../../../../responsePayload");
11
10
  const zeniDayJS_1 = require("../../../../zeniDayJS");
12
11
  const scheduleAccruedDetailReducer_1 = require("../scheduleAccruedDetailReducer");
13
12
  const fetchRecommendedTransactionRowIndexEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(scheduleAccruedDetailReducer_1.fetchRecommendedTransactionRowIndex.match), (0, operators_1.mergeMap)((action) => {
14
13
  const state = state$.value;
15
14
  const { selectedJELinkRowIndex } = action.payload;
16
- const { scheduleAccruedDetailState, vendorState } = state;
15
+ const { scheduleAccruedDetailState } = state;
17
16
  const actions = [];
18
17
  const { selectedJEAccruedScheduleKey } = scheduleAccruedDetailState;
19
18
  if (selectedJEAccruedScheduleKey == null ||
@@ -30,14 +29,21 @@ const fetchRecommendedTransactionRowIndexEpic = (actions$, state$, zeniAPI) => a
30
29
  const { amount, runningBalance: accruedBalance, expectedPostDate, } = selectedJournalEntry;
31
30
  const endDate = (0, zeniDayJS_1.dateNow)().endOf('month').format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT);
32
31
  const { vendor } = jeScheduleState;
33
- const vendorId = vendor.id;
34
- const vendorEntity = (0, vendorSelector_1.getVendorByVendorId)(vendorState, vendorId);
32
+ if (vendor?.id == null) {
33
+ return (0, rxjs_1.from)([
34
+ (0, scheduleAccruedDetailReducer_1.updateFetchedTransactionIds)([], (value) => value.transaction_id),
35
+ (0, scheduleAccruedDetailReducer_1.updatedFetchRecommendationBillExpenseSuccessOrFailure)({
36
+ fetchState: 'Completed',
37
+ error: undefined,
38
+ }),
39
+ ]);
40
+ }
35
41
  const queryParam = {
36
42
  start_date: expectedPostDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT),
37
43
  end_date: endDate,
38
44
  amount: amount?.amount ?? 0,
39
45
  accrued_balance: accruedBalance?.amount ?? 0,
40
- vendor_id: vendorEntity?.id ?? '',
46
+ vendor_id: vendor.id,
41
47
  account_name: account?.accountName ?? '',
42
48
  class_name: accountingClass?.className ?? '',
43
49
  };
@@ -210,7 +210,10 @@ const mapAccruedExpenseJEScheduleTransactionToPayload = (jeScheduleAccruedExpens
210
210
  const lastJEScheduleDate = scheduleLength > 0
211
211
  ? scheduleDetailsLocalDataAccruedExpenses.jeScheduleDetails[scheduleLength - 1].postingDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT)
212
212
  : null;
213
- const vendorID = vendor.id;
213
+ const vendorID = vendor?.id;
214
+ if (vendorID == null) {
215
+ throw new Error('Vendor is required to build accrued schedule detail payload');
216
+ }
214
217
  const vendorDetails = vendorState.vendorByID[vendorID];
215
218
  const payload = {
216
219
  status: status,
@@ -15,7 +15,7 @@ const createNewSchedulesEpic = (actions$, state$) => actions$.pipe((0, operators
15
15
  if (selectedJEScheduleKey != null) {
16
16
  const jeScheduleTransactionState = (0, jeSchedulesSelector_1.getJEScheduledTransactionByJEScheduleTransactionKey)(selectedJEScheduleKey, state);
17
17
  const totalAmount = jeScheduleTransactionState.baseTransaction.amount;
18
- const vendorName = jeScheduleTransactionState.vendor.name;
18
+ const vendorName = jeScheduleTransactionState.vendor?.name ?? '';
19
19
  const currentLocalData = jeScheduleTransactionState.jeScheduleId != null
20
20
  ? scheduleDetailState.editScheduleStateByDetailId[scheduleType][jeScheduleTransactionState.jeScheduleId]
21
21
  : scheduleDetailState.newScheduleState[scheduleType];
@@ -19,7 +19,7 @@ const deleteScheduleDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe((0
19
19
  return (0, rxjs_1.from)(actions);
20
20
  }
21
21
  const jeScheduleTransactionState = (0, jeSchedulesSelector_1.getJEScheduledTransactionByJEScheduleTransactionKey)(selectedJEScheduleKey, state);
22
- const vendorName = jeScheduleTransactionState.vendor.name;
22
+ const vendorName = jeScheduleTransactionState.vendor?.name ?? '';
23
23
  const scheduleDetailId = jeScheduleTransactionState.jeScheduleId ?? selectedJeScheduleDetailId;
24
24
  if (scheduleDetailId == null) {
25
25
  return (0, rxjs_1.from)(actions);
@@ -15,7 +15,7 @@ const markAsCompleteScheduleDetailEpic = (actions$, state$, zeniAPI) => actions$
15
15
  const actions = [];
16
16
  const jeScheduleTransactionState = (0, jeSchedulesSelector_1.getJEScheduledTransactionByJEScheduleTransactionKey)(jeScheduleKey, state);
17
17
  const scheduleDetailId = jeScheduleTransactionState.jeScheduleId;
18
- const vendorName = jeScheduleTransactionState.vendor.name;
18
+ const vendorName = jeScheduleTransactionState.vendor?.name ?? '';
19
19
  const scheduleDetailsUpdated = scheduleDetailId != null
20
20
  ? state.scheduleDetailState.editScheduleStateByDetailId[scheduleType][scheduleDetailId]
21
21
  : state.scheduleDetailState.newScheduleState[scheduleType];
@@ -19,7 +19,7 @@ const saveScheduleDetailsEpic = (actions$, state$, zeniAPI) => actions$.pipe((0,
19
19
  return (0, rxjs_1.from)(actions);
20
20
  }
21
21
  const jeScheduleTransactionState = (0, jeSchedulesSelector_1.getJEScheduledTransactionByJEScheduleTransactionKey)(selectedJEScheduleKey, state);
22
- const vendorName = jeScheduleTransactionState.vendor.name;
22
+ const vendorName = jeScheduleTransactionState.vendor?.name ?? '';
23
23
  const scheduleDetailId = jeScheduleTransactionState.jeScheduleId ?? selectedJeScheduleDetailId;
24
24
  const scheduleDetailsUpdated = scheduleDetailId != null
25
25
  ? state.scheduleDetailState.editScheduleStateByDetailId[scheduleType][scheduleDetailId]
@@ -125,7 +125,10 @@ const mapJEScheduleTransactionToPayload = (jeScheduleTransactionState, vendorSta
125
125
  const lastJEScheduleDate = scheduleLength > 0
126
126
  ? scheduleDetailsLocalData.jeScheduleDetails[scheduleLength - 1].postingDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT)
127
127
  : null;
128
- const vendorID = vendor.id;
128
+ const vendorID = vendor?.id;
129
+ if (vendorID == null) {
130
+ throw new Error('Vendor is required to build schedule detail payload (mapJEScheduleTransactionToPayload)');
131
+ }
129
132
  const vendorDetails = vendorState.vendorByID[vendorID];
130
133
  const updatedVendor = {
131
134
  vendor_id: selectedVendor?.id ?? '',
@@ -200,7 +203,10 @@ const mapFixedAssetJEScheduleTransactionToPayload = (jeScheduleTransactionState,
200
203
  const lastJEScheduleDate = scheduleLength > 0
201
204
  ? scheduleDetailsLocalData.jeScheduleDetails[scheduleLength - 1].postingDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT)
202
205
  : null;
203
- const vendorID = vendor.id;
206
+ const vendorID = vendor?.id;
207
+ if (vendorID == null) {
208
+ throw new Error('Vendor is required to build schedule detail payload (mapFixedAssetJEScheduleTransactionToPayload)');
209
+ }
204
210
  const vendorDetails = vendorState.vendorByID[vendorID];
205
211
  const updatedVendor = {
206
212
  vendor_id: selectedVendor?.id ?? '',
@@ -278,7 +284,10 @@ const mapAccruedExpenseJEScheduleTransactionToPayload = (jeScheduleTransactionSt
278
284
  const lastJEScheduleDate = scheduleLength > 0
279
285
  ? scheduleDetailsLocalData.jeScheduleDetails[scheduleLength - 1].postingDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT)
280
286
  : null;
281
- const vendorID = vendor.id;
287
+ const vendorID = vendor?.id;
288
+ if (vendorID == null) {
289
+ throw new Error('Vendor is required to build schedule detail payload (mapAccruedExpenseJEScheduleTransactionToPayload)');
290
+ }
282
291
  const vendorDetails = vendorState.vendorByID[vendorID];
283
292
  const payload = {
284
293
  status: updatedStatus,
@@ -18,9 +18,9 @@ const sortedJETransactionsView = (jeTransactions, sortKey, sortOrder) => {
18
18
  case 'transactionDate':
19
19
  return jeTransaction.baseTransaction.date.valueOf();
20
20
  case 'vendor':
21
- return jeTransaction.vendor.name != null
21
+ return jeTransaction.vendor?.name != null
22
22
  ? jeTransaction.vendor.name.toLowerCase()
23
- : jeTransaction.vendor.name;
23
+ : jeTransaction.vendor?.name;
24
24
  case 'scheduleCategory':
25
25
  return jeTransaction.baseTransaction.account.accountName.toLowerCase();
26
26
  case 'expenseCategory':
@@ -81,9 +81,9 @@ const sortedJEAccruedSchedules = (jeAccruedSchedules, sortKey, sortOrder) => {
81
81
  case 'createTime':
82
82
  return jeAccruedSchedule.createTime.valueOf();
83
83
  case 'vendor':
84
- return jeAccruedSchedule.vendor.name != null
84
+ return jeAccruedSchedule.vendor?.name != null
85
85
  ? jeAccruedSchedule.vendor.name.toLowerCase()
86
- : jeAccruedSchedule.vendor.name;
86
+ : jeAccruedSchedule.vendor?.name;
87
87
  case 'expenseCategory':
88
88
  return jeAccruedSchedule.jeDebit.account != null
89
89
  ? jeAccruedSchedule.jeDebit.account.accountName.toLowerCase()
@@ -208,7 +208,7 @@ const getScheduleListReport = (state, scheduleType) => {
208
208
  .trim()
209
209
  .toLowerCase();
210
210
  const sortedJETransactionView = sortedJETransactionsView(jeTransactionsView.filter((jeTransaction) => {
211
- return ((jeTransaction.vendor.name != null &&
211
+ return ((jeTransaction.vendor?.name != null &&
212
212
  jeTransaction.vendor.name
213
213
  .toLowerCase()
214
214
  .includes(loweredSearchText) === true) ||
@@ -329,8 +329,9 @@ const getAccruedScheduleListReport = (state, scheduleType) => {
329
329
  .trim()
330
330
  .toLocaleLowerCase();
331
331
  const sortedJESchedules = sortedJEAccruedSchedules(jeScheduleAccrued.filter((jeSchedule) => {
332
- return (jeSchedule.vendor.name.toLowerCase().includes(loweredSearchText) ===
333
- true ||
332
+ return (jeSchedule.vendor?.name
333
+ ?.toLowerCase()
334
+ ?.includes(loweredSearchText) === true ||
334
335
  jeSchedule.memo.toLowerCase().includes(loweredSearchText) === true);
335
336
  }), sortKey, sortOrder);
336
337
  const totalBalances = (0, scheduleListHelper_1.getCalculatedAccruedScheduleTotal)(sortedJESchedules);
@@ -20,6 +20,7 @@ const entityApprovalStatusReducer_1 = require("../../../../../entity/entityAppro
20
20
  const paymentAccountReducer_1 = require("../../../../../entity/paymentAccount/paymentAccountReducer");
21
21
  const paymentInstrumentReducer_1 = require("../../../../../entity/paymentInstrument/paymentInstrumentReducer");
22
22
  const userReducer_1 = require("../../../../../entity/user/userReducer");
23
+ const vendorPayload_1 = require("../../../../../entity/vendor/vendorPayload");
23
24
  const vendorReducer_1 = require("../../../../../entity/vendor/vendorReducer");
24
25
  const responsePayload_1 = require("../../../../../responsePayload");
25
26
  const commonVendorViewHelper_1 = require("../../../../commonVendorView/commonVendorViewHelper");
@@ -104,12 +105,16 @@ const fetchBillDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, ope
104
105
  }
105
106
  else {
106
107
  fetchActions.push((0, billDetailViewReducer_1.updateBillDetail)({ billId, billDetail: response.data }));
107
- fetchActions.push((0, billDetailViewReducer_1.updateBillDetailFetchState)(transcationId, 'Completed', undefined, vendorInResponse?.vendor_id));
108
108
  const transactionInResponse = response.data?.transaction;
109
+ const resolvedVendorId = vendorInResponse != null
110
+ ? (0, vendorPayload_1.getVendorPayloadIdentifier)(vendorInResponse)
111
+ : null;
112
+ fetchActions.push((0, billDetailViewReducer_1.updateBillDetailFetchState)(transcationId, 'Completed', undefined, resolvedVendorId ?? undefined));
109
113
  if (transactionInResponse != null &&
110
114
  transactionInResponse.total_amount != null &&
115
+ resolvedVendorId != null &&
111
116
  vendorInResponse != null) {
112
- fetchActions.push((0, billPayReviewReducer_1.fetchDuplicateBill)(vendorInResponse.vendor_name, vendorInResponse.vendor_id, transactionInResponse.total_amount, transactionInResponse.recipient_total_amount, transactionInResponse.document_id, billId));
117
+ fetchActions.push((0, billPayReviewReducer_1.fetchDuplicateBill)(vendorInResponse.vendor_name, resolvedVendorId, transactionInResponse.total_amount, transactionInResponse.recipient_total_amount, transactionInResponse.document_id, billId));
113
118
  }
114
119
  const billHasPaymentError = [
115
120
  'failed',
@@ -165,7 +170,7 @@ function removeCompleteTransaction(billId, transaction) {
165
170
  function getVendorPreviousBillsActions(billTransactionPayload) {
166
171
  const fetchPreviousBillsActions = [];
167
172
  const vendorId = billTransactionPayload.vendor_id;
168
- if (Boolean(vendorId) === true) {
173
+ if (vendorId != null && vendorId !== '') {
169
174
  fetchPreviousBillsActions.push((0, previousBillsReducer_1.fetchPreviousBills)(vendorId, false));
170
175
  }
171
176
  return fetchPreviousBillsActions;
@@ -12,36 +12,10 @@ const transactionsViewReducer_1 = require("../../expenseAutomationView/reducers/
12
12
  const transactionDetailReducer_1 = require("../transactionDetailReducer");
13
13
  const transactionDetailState_1 = require("../transactionDetailState");
14
14
  const markTransactionAsNotMiscategorizedEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionDetailReducer_1.markTransactionAsNotMiscategorized.match), (0, operators_1.mergeMap)((action) => {
15
- // Expense-automation customers must be marked review-complete through the
16
- // same endpoint the categorization list uses; mark-miscategorized-as-correct
17
- // does not move their lines out of review. Mirror the list flow by reviewing
18
- // the transaction's categorizable line ids (updatesByLineId).
19
- const { url, body } = action.payload.isExpenseAutomationEnabled === true
20
- ? {
21
- url: `${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/mark-as-reviewed`,
22
- body: {
23
- transactions_reviewed: [
24
- {
25
- transaction_id: action.payload.transactionId.id,
26
- line_ids: Object.keys(action.payload.transactionSaveUpdates.updates
27
- ?.updatesByLineId ?? {}),
28
- },
29
- ],
30
- },
31
- }
32
- : {
33
- url: `${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/mark-miscategorized-as-correct`,
34
- body: preparePayload(action.payload.transactionId),
35
- };
36
15
  return zeniAPI
37
- .putAndGetJSON(url, body)
16
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/mark-miscategorized-as-correct`, preparePayload(action.payload.transactionId))
38
17
  .pipe((0, operators_1.mergeMap)((response) => {
39
- // mark-as-reviewed can return 200 while still listing this
40
- // transaction under transactions_reviewed_failed; don't clear it then.
41
- const reviewedFailedForExpenseAutomation = action.payload.isExpenseAutomationEnabled === true &&
42
- (response.data?.transactions_reviewed_failed ?? []).some((reviewed) => reviewed.transaction_id === action.payload.transactionId.id);
43
- if ((0, responsePayload_1.isSuccessStatus)(response) &&
44
- !reviewedFailedForExpenseAutomation) {
18
+ if ((0, responsePayload_1.isSuccessStatus)(response)) {
45
19
  const actions = [];
46
20
  actions.push((0, transactionDetailReducer_1.updateStatusForTransactionNotMiscategorizedUpdate)(action.payload.transactionId, 'Completed', undefined));
47
21
  const transactionKey = (0, transactionDetailState_1.getTransactionDetailKey)(action.payload.transactionId);
@@ -23,6 +23,7 @@ const transactionHelper_1 = require("../../../entity/transaction/transactionHelp
23
23
  const transactionReducer_1 = require("../../../entity/transaction/transactionReducer");
24
24
  const transactionSelector_1 = require("../../../entity/transaction/transactionSelector");
25
25
  const vendorReducer_1 = require("../../../entity/vendor/vendorReducer");
26
+ const vendorPayload_1 = require("../../../entity/vendor/vendorPayload");
26
27
  const vendorSelector_1 = require("../../../entity/vendor/vendorSelector");
27
28
  const responsePayload_1 = require("../../../responsePayload");
28
29
  const tenantSelector_1 = require("../../../entity/tenant/tenantSelector");
@@ -65,9 +66,12 @@ const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe
65
66
  actions.push((0, vendorReducer_1.updateVendors)(response.data.vendors, 'merge'));
66
67
  }
67
68
  actions.push((0, transactionReducer_1.updateTransaction)(transactionDetailKeyForResponse, response.data.transaction));
69
+ const updatedVendor = response.data.vendors?.[0];
68
70
  actions.push((0, transactionDetailReducer_1.initializeTransactionDetailLocalData)({
69
71
  transactionId: transactionIdResp,
70
- vendorId: response.data.vendors?.[0]?.vendor_id,
72
+ vendorId: updatedVendor != null
73
+ ? (0, vendorPayload_1.getVendorPayloadIdentifier)(updatedVendor) ?? undefined
74
+ : undefined,
71
75
  }));
72
76
  actions.push((0, transactionDetailReducer_1.updateTransactionDetailSaveStatus)(transactionIdResp, 'Completed'));
73
77
  let callMarkTransactionAsNotMiscategorized = true;
@@ -13,7 +13,9 @@ _state$) => actions$.pipe((0, operators_1.filter)(trendWithTransactionsReducer_1
13
13
  return (0, rxjs_1.of)((0, trendReducer_1.fetchIncomeTrend)(entity.id, entity.name));
14
14
  }
15
15
  if (entity.type === 'vendor') {
16
- return (0, rxjs_1.of)((0, trendReducer_1.fetchExpenseTrend)(entity.id, entity.name, entity.zeniId));
16
+ // QBO-only vendors may lack zeniId; fall back to entity.id so spend
17
+ // trend state still keys off the resolved vendor identifier.
18
+ return (0, rxjs_1.of)((0, trendReducer_1.fetchExpenseTrend)(entity.id, entity.name, entity.zeniId ?? entity.id));
17
19
  }
18
20
  return (0, rxjs_1.from)([]);
19
21
  }));
@@ -3,6 +3,7 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.updateVendorFiling1099DownloadData = exports.fetchVendorsFiling1099Download = exports.updateFiling1099SearchUIState = exports.updateFiling1099SortUIState = exports.updateFiling1099ScrollYOffset = exports.clearVendorsFiling1099List = exports.updateVendorFiling1099ListFailure = exports.updateVendorsFiling1099List = exports.fetchVendorsFiling1099List = exports.fetchVendorsFiling1099All = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
+ const vendorPayload_1 = require("../../../entity/vendor/vendorPayload");
6
7
  const zeniDayJS_1 = require("../../../zeniDayJS");
7
8
  exports.initialState = {
8
9
  fetchState: 'Not-Started',
@@ -79,7 +80,9 @@ const vendorFiling1099List = (0, toolkit_1.createSlice)({
79
80
  },
80
81
  updateVendorsFiling1099List(draft, action) {
81
82
  const { response } = action.payload;
82
- const newVendorIds = response.data?.report.vendors?.map((vendor) => vendor.vendor_id) ?? [];
83
+ const newVendorIds = (response.data?.report.vendors
84
+ ?.map((vendor) => (0, vendorPayload_1.getVendorPayloadIdentifier)(vendor))
85
+ .filter((vendorId) => vendorId != null)) ?? [];
83
86
  draft.vendorIds = [...new Set([...draft.vendorIds, ...newVendorIds])];
84
87
  draft.isVendor1099Populated =
85
88
  response.data?.report.is_vendor_1099_populated ?? true;
@@ -3,6 +3,7 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.updateYTDSelectionUIState = exports.updatePageToken = exports.updateSortUiState = exports.updateScrollYOffset = exports.clearVendorsList = exports.updateVendorListFailure = exports.updateVendorsList = exports.fetchVendorsList = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
+ const vendorPayload_1 = require("../../entity/vendor/vendorPayload");
6
7
  const zeniDayJS_1 = require("../../zeniDayJS");
7
8
  exports.initialState = {
8
9
  fetchState: 'Not-Started',
@@ -88,7 +89,9 @@ const vendorList = (0, toolkit_1.createSlice)({
88
89
  },
89
90
  updateVendorsList(draft, action) {
90
91
  const { response, searchString, view } = action.payload;
91
- const newVendorIds = response.data?.vendors?.map((vendor) => vendor.vendor_id) ?? [];
92
+ const newVendorIds = (response.data?.vendors
93
+ ?.map((vendor) => (0, vendorPayload_1.getVendorPayloadIdentifier)(vendor))
94
+ .filter((vendorId) => vendorId != null)) ?? [];
92
95
  if (searchString.length > 0) {
93
96
  if (action.payload.keepExistingListItems === false) {
94
97
  draft.searchResults = newVendorIds;
@@ -5,6 +5,7 @@ exports.updateVendorDetailsViewFailureOrSuccess = exports.saveVendorDetailsView
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  const attachmentPayload_1 = require("../../../entity/transaction/payloadTypes/attachmentPayload");
7
7
  const commonTypes_1 = require("../common/state/commonTypes");
8
+ const vendorPayload_1 = require("../../../entity/vendor/vendorPayload");
8
9
  exports.initialState = {
9
10
  vendorFirstReviewViewLocalDataById: {},
10
11
  fetchState: 'Not-Started',
@@ -303,7 +304,14 @@ const toVendorReviewViewUpdatedVendorLocalData = (vendorId, vendorPayload) => {
303
304
  const toVendorReviewViewLocalDataById = (vendorsPayload) => {
304
305
  const vendorById = {};
305
306
  vendorsPayload.forEach((vendor) => {
306
- const vendorView = mapPayloadToVendorFirstReviewView(vendor);
307
+ const resolvedVendorId = (0, vendorPayload_1.getVendorPayloadIdentifier)(vendor);
308
+ if (resolvedVendorId == null) {
309
+ return;
310
+ }
311
+ const vendorView = mapPayloadToVendorFirstReviewView({
312
+ ...vendor,
313
+ vendor_id: resolvedVendorId,
314
+ });
307
315
  vendorById[vendorView.selectedVendorId] = {
308
316
  vendorFirstReviewViewLocalData: vendorView,
309
317
  saveStatus: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.1.29-beta0ND",
3
+ "version": "5.1.30",
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",