@zeniai/client-epic-state 5.2.31 → 5.2.32-betaAK0

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 (120) hide show
  1. package/lib/epic.d.ts +6 -6
  2. package/lib/epic.js +7 -8
  3. package/lib/esm/epic.js +6 -7
  4. package/lib/esm/index.js +9 -10
  5. package/lib/esm/reducer.js +12 -12
  6. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +29 -11
  7. package/lib/esm/view/invoicing/customerPaymentMethod/customerPaymentMethodEpic.js +1 -1
  8. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +1 -1
  9. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewReducer.js +1 -24
  10. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +10 -36
  11. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogSubFamilyEpics.js +2 -21
  12. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +11 -33
  13. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +9 -1
  14. package/lib/esm/view/invoicing/editInvoicingCustomerDetailView/editInvoicingCustomerDetailViewSelector.js +2 -0
  15. package/lib/esm/view/invoicing/editInvoicingCustomerDetailView/initializeInvoicingCustomerAddressEpic.js +1 -1
  16. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector.js +15 -0
  17. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/fetchInvoicingSubscriptionFormPageEpic.js +1 -1
  18. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/initializeInvoicingSubscriptionAddressEpic.js +1 -1
  19. package/lib/esm/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewEpics.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewEpics.js} +1 -1
  20. package/lib/esm/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewReducer.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewReducer.js} +4 -4
  21. package/lib/esm/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewSelector.js} +2 -4
  22. package/lib/esm/view/invoicing/{invoicingCouponDetailView → invoicingCouponRecordView}/fetchInvoicingCouponDetailEpic.js +1 -1
  23. package/lib/esm/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewReducer.js → invoicingCouponRecordView/invoicingCouponRecordViewReducer.js} +4 -4
  24. package/lib/esm/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewSelector.js → invoicingCouponRecordView/invoicingCouponRecordViewSelector.js} +2 -2
  25. package/lib/esm/view/invoicing/{invoicingCustomerDetailView → invoicingCustomerRecordView}/fetchInvoicingCustomerDetailEpic.js +1 -1
  26. package/lib/esm/view/invoicing/{invoicingCustomerDetailView → invoicingCustomerRecordView}/fetchInvoicingCustomerDetailPageEpic.js +2 -2
  27. package/lib/esm/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewReducer.js → invoicingCustomerRecordView/invoicingCustomerRecordViewReducer.js} +4 -4
  28. package/lib/esm/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewSelector.js → invoicingCustomerRecordView/invoicingCustomerRecordViewSelector.js} +3 -3
  29. package/lib/esm/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewEpics.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewEpics.js} +1 -1
  30. package/lib/esm/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewReducer.js} +4 -4
  31. package/lib/esm/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewSelector.js} +2 -2
  32. package/lib/esm/view/invoicing/promotionalCreditAction/promotionalCreditActionEpic.js +1 -1
  33. package/lib/index.d.ts +15 -17
  34. package/lib/index.js +23 -32
  35. package/lib/reducer.d.ts +4 -4
  36. package/lib/reducer.js +12 -12
  37. package/lib/rootStateTypes.d.ts +8 -8
  38. package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +29 -11
  39. package/lib/view/invoicing/createInvoice/createInvoiceSelector.d.ts +2 -2
  40. package/lib/view/invoicing/customerPaymentMethod/customerPaymentMethodEpic.d.ts +1 -1
  41. package/lib/view/invoicing/customerPaymentMethod/customerPaymentMethodEpic.js +2 -2
  42. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.d.ts +1 -1
  43. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +1 -1
  44. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewReducer.d.ts +3 -19
  45. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewReducer.js +2 -25
  46. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.d.ts +11 -11
  47. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +11 -38
  48. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewState.d.ts +4 -27
  49. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogSubFamilyEpics.d.ts +2 -3
  50. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogSubFamilyEpics.js +2 -22
  51. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.d.ts +2 -2
  52. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +9 -31
  53. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.d.ts +12 -1
  54. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +9 -1
  55. package/lib/view/invoicing/editInvoicingCustomerDetailView/editInvoicingCustomerDetailViewSelector.d.ts +8 -0
  56. package/lib/view/invoicing/editInvoicingCustomerDetailView/editInvoicingCustomerDetailViewSelector.js +2 -0
  57. package/lib/view/invoicing/editInvoicingCustomerDetailView/initializeInvoicingCustomerAddressEpic.d.ts +1 -1
  58. package/lib/view/invoicing/editInvoicingCustomerDetailView/initializeInvoicingCustomerAddressEpic.js +2 -2
  59. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector.d.ts +11 -2
  60. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector.js +15 -0
  61. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/fetchInvoicingSubscriptionFormPageEpic.d.ts +1 -1
  62. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/fetchInvoicingSubscriptionFormPageEpic.js +2 -2
  63. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/initializeInvoicingSubscriptionAddressEpic.d.ts +1 -1
  64. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/initializeInvoicingSubscriptionAddressEpic.js +2 -2
  65. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewEpics.d.ts → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewEpics.d.ts} +1 -1
  66. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewEpics.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewEpics.js} +5 -5
  67. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewReducer.d.ts → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewReducer.d.ts} +5 -5
  68. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewReducer.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewReducer.js} +4 -4
  69. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector.d.ts → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewSelector.d.ts} +3 -5
  70. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewSelector.js} +4 -6
  71. package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState.d.ts → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewState.d.ts} +1 -1
  72. package/lib/view/invoicing/{invoicingCouponDetailView → invoicingCouponRecordView}/fetchInvoicingCouponDetailEpic.d.ts +1 -1
  73. package/lib/view/invoicing/{invoicingCouponDetailView → invoicingCouponRecordView}/fetchInvoicingCouponDetailEpic.js +5 -5
  74. package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewReducer.d.ts → invoicingCouponRecordView/invoicingCouponRecordViewReducer.d.ts} +6 -6
  75. package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewReducer.js → invoicingCouponRecordView/invoicingCouponRecordViewReducer.js} +4 -4
  76. package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewSelector.d.ts → invoicingCouponRecordView/invoicingCouponRecordViewSelector.d.ts} +2 -2
  77. package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewSelector.js → invoicingCouponRecordView/invoicingCouponRecordViewSelector.js} +4 -4
  78. package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewState.d.ts → invoicingCouponRecordView/invoicingCouponRecordViewState.d.ts} +1 -1
  79. package/lib/view/invoicing/{invoicingCustomerDetailView → invoicingCustomerRecordView}/fetchInvoicingCustomerDetailEpic.d.ts +1 -1
  80. package/lib/view/invoicing/{invoicingCustomerDetailView → invoicingCustomerRecordView}/fetchInvoicingCustomerDetailEpic.js +5 -5
  81. package/lib/view/invoicing/{invoicingCustomerDetailView → invoicingCustomerRecordView}/fetchInvoicingCustomerDetailPageEpic.d.ts +1 -1
  82. package/lib/view/invoicing/{invoicingCustomerDetailView → invoicingCustomerRecordView}/fetchInvoicingCustomerDetailPageEpic.js +4 -4
  83. package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewReducer.d.ts → invoicingCustomerRecordView/invoicingCustomerRecordViewReducer.d.ts} +7 -7
  84. package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewReducer.js → invoicingCustomerRecordView/invoicingCustomerRecordViewReducer.js} +4 -4
  85. package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewSelector.d.ts → invoicingCustomerRecordView/invoicingCustomerRecordViewSelector.d.ts} +2 -2
  86. package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewSelector.js → invoicingCustomerRecordView/invoicingCustomerRecordViewSelector.js} +5 -5
  87. package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewState.d.ts → invoicingCustomerRecordView/invoicingCustomerRecordViewState.d.ts} +1 -1
  88. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewEpics.d.ts → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewEpics.d.ts} +1 -1
  89. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewEpics.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewEpics.js} +5 -5
  90. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer.d.ts → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewReducer.d.ts} +5 -5
  91. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewReducer.js} +4 -4
  92. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.d.ts → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewSelector.d.ts} +2 -2
  93. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewSelector.js} +4 -4
  94. package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewState.d.ts → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewState.d.ts} +1 -1
  95. package/lib/view/invoicing/promotionalCreditAction/promotionalCreditActionEpic.d.ts +1 -1
  96. package/lib/view/invoicing/promotionalCreditAction/promotionalCreditActionEpic.js +2 -2
  97. package/package.json +71 -38
  98. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +0 -191
  99. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.d.ts +0 -46
  100. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +0 -198
  101. /package/lib/esm/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewPayload.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewPayload.js} +0 -0
  102. /package/lib/esm/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewState.js} +0 -0
  103. /package/lib/esm/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewPayload.js → invoicingCouponRecordView/invoicingCouponRecordViewPayload.js} +0 -0
  104. /package/lib/esm/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewState.js → invoicingCouponRecordView/invoicingCouponRecordViewState.js} +0 -0
  105. /package/lib/esm/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewPayload.js → invoicingCustomerRecordView/invoicingCustomerRecordViewPayload.js} +0 -0
  106. /package/lib/esm/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewState.js → invoicingCustomerRecordView/invoicingCustomerRecordViewState.js} +0 -0
  107. /package/lib/esm/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewPayload.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewPayload.js} +0 -0
  108. /package/lib/esm/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewState.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewState.js} +0 -0
  109. /package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewPayload.d.ts → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewPayload.d.ts} +0 -0
  110. /package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewPayload.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewPayload.js} +0 -0
  111. /package/lib/view/invoicing/{invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState.js → invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewState.js} +0 -0
  112. /package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewPayload.d.ts → invoicingCouponRecordView/invoicingCouponRecordViewPayload.d.ts} +0 -0
  113. /package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewPayload.js → invoicingCouponRecordView/invoicingCouponRecordViewPayload.js} +0 -0
  114. /package/lib/view/invoicing/{invoicingCouponDetailView/invoicingCouponDetailViewState.js → invoicingCouponRecordView/invoicingCouponRecordViewState.js} +0 -0
  115. /package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewPayload.d.ts → invoicingCustomerRecordView/invoicingCustomerRecordViewPayload.d.ts} +0 -0
  116. /package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewPayload.js → invoicingCustomerRecordView/invoicingCustomerRecordViewPayload.js} +0 -0
  117. /package/lib/view/invoicing/{invoicingCustomerDetailView/invoicingCustomerDetailViewState.js → invoicingCustomerRecordView/invoicingCustomerRecordViewState.js} +0 -0
  118. /package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewPayload.d.ts → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewPayload.d.ts} +0 -0
  119. /package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewPayload.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewPayload.js} +0 -0
  120. /package/lib/view/invoicing/{invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewState.js → invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewState.js} +0 -0
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.resetEditInvoicingCatalogItemDetailView = exports.submitInvoicingCatalogItemFormFailure = exports.submitInvoicingCatalogItemFormSuccess = exports.archiveInvoicingCatalogSubFamily = exports.createInvoicingCatalogSubFamily = exports.saveInvoicingCatalogItem = exports.submitInvoicingCatalogItemForm = exports.updateInvoicingCatalogItemFormDraft = exports.updateInvoicingCatalogItemDetailEditDraft = exports.initialState = void 0;
4
+ exports.resetEditInvoicingCatalogItemDetailView = exports.submitInvoicingCatalogItemFormFailure = exports.submitInvoicingCatalogItemFormSuccess = exports.archiveInvoicingCatalogSubFamily = exports.submitInvoicingCatalogItemForm = exports.updateInvoicingCatalogItemFormDraft = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  const rootActions_1 = require("../../../rootActions");
7
7
  const invoicingCatalogItemFormConfig_1 = require("./invoicingCatalogItemFormConfig");
8
8
  exports.initialState = {
9
9
  fetchState: 'Not-Started',
10
10
  error: undefined,
11
- detailEditDraftById: {},
12
11
  editDraftById: {},
13
12
  newItemDraft: { ...invoicingCatalogItemFormConfig_1.initialInvoicingCatalogItemFormLocalData },
14
13
  savedItemId: undefined,
@@ -30,10 +29,6 @@ const editInvoicingCatalogItemDetailView = (0, toolkit_1.createSlice)({
30
29
  draft.newItemDraft = localData;
31
30
  }
32
31
  },
33
- updateInvoicingCatalogItemDetailEditDraft(draft, action) {
34
- const { id, localData } = action.payload;
35
- draft.detailEditDraftById[id] = localData;
36
- },
37
32
  submitInvoicingCatalogItemForm: {
38
33
  reducer(draft) {
39
34
  draft.fetchState = 'In-Progress';
@@ -44,22 +39,6 @@ const editInvoicingCatalogItemDetailView = (0, toolkit_1.createSlice)({
44
39
  return { payload };
45
40
  },
46
41
  },
47
- saveInvoicingCatalogItem(draft, action) {
48
- draft.fetchState = 'In-Progress';
49
- draft.error = undefined;
50
- draft.savedItemId = undefined;
51
- draft.savedKind = action.payload.kind;
52
- },
53
- createInvoicingCatalogSubFamily: {
54
- reducer(draft) {
55
- draft.fetchState = 'In-Progress';
56
- draft.error = undefined;
57
- draft.savedItemId = undefined;
58
- },
59
- prepare(payload) {
60
- return { payload };
61
- },
62
- },
63
42
  archiveInvoicingCatalogSubFamily: {
64
43
  reducer(draft) {
65
44
  draft.fetchState = 'In-Progress';
@@ -75,7 +54,6 @@ const editInvoicingCatalogItemDetailView = (0, toolkit_1.createSlice)({
75
54
  draft.error = undefined;
76
55
  draft.savedItemId = action.payload.itemId;
77
56
  draft.savedKind = action.payload.kind;
78
- delete draft.detailEditDraftById[action.payload.itemId];
79
57
  },
80
58
  submitInvoicingCatalogItemFormFailure(draft, action) {
81
59
  draft.fetchState = 'Error';
@@ -86,7 +64,6 @@ const editInvoicingCatalogItemDetailView = (0, toolkit_1.createSlice)({
86
64
  draft.error = undefined;
87
65
  draft.savedItemId = undefined;
88
66
  draft.savedKind = undefined;
89
- draft.detailEditDraftById = {};
90
67
  draft.editDraftById = {};
91
68
  draft.newItemDraft = { ...invoicingCatalogItemFormConfig_1.initialInvoicingCatalogItemFormLocalData };
92
69
  },
@@ -97,5 +74,5 @@ const editInvoicingCatalogItemDetailView = (0, toolkit_1.createSlice)({
97
74
  });
98
75
  },
99
76
  });
100
- _a = editInvoicingCatalogItemDetailView.actions, exports.updateInvoicingCatalogItemDetailEditDraft = _a.updateInvoicingCatalogItemDetailEditDraft, exports.updateInvoicingCatalogItemFormDraft = _a.updateInvoicingCatalogItemFormDraft, exports.submitInvoicingCatalogItemForm = _a.submitInvoicingCatalogItemForm, exports.saveInvoicingCatalogItem = _a.saveInvoicingCatalogItem, exports.createInvoicingCatalogSubFamily = _a.createInvoicingCatalogSubFamily, exports.archiveInvoicingCatalogSubFamily = _a.archiveInvoicingCatalogSubFamily, exports.submitInvoicingCatalogItemFormSuccess = _a.submitInvoicingCatalogItemFormSuccess, exports.submitInvoicingCatalogItemFormFailure = _a.submitInvoicingCatalogItemFormFailure, exports.resetEditInvoicingCatalogItemDetailView = _a.resetEditInvoicingCatalogItemDetailView;
77
+ _a = editInvoicingCatalogItemDetailView.actions, exports.updateInvoicingCatalogItemFormDraft = _a.updateInvoicingCatalogItemFormDraft, exports.submitInvoicingCatalogItemForm = _a.submitInvoicingCatalogItemForm, exports.archiveInvoicingCatalogSubFamily = _a.archiveInvoicingCatalogSubFamily, exports.submitInvoicingCatalogItemFormSuccess = _a.submitInvoicingCatalogItemFormSuccess, exports.submitInvoicingCatalogItemFormFailure = _a.submitInvoicingCatalogItemFormFailure, exports.resetEditInvoicingCatalogItemDetailView = _a.resetEditInvoicingCatalogItemDetailView;
101
78
  exports.default = editInvoicingCatalogItemDetailView.reducer;
@@ -5,17 +5,9 @@ import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndRep
5
5
  import { InvoicingFieldHelpByCode, InvoicingNamedOption, InvoicingNamedOptionsByKey } from '../../../entity/invoicing/invoicingCommonPayload';
6
6
  import { InvoicingPlan } from '../../../entity/invoicing/plan/planState';
7
7
  import { RootState } from '../../../rootStateTypes';
8
- import { InvoicingCatalogItemKind } from '../invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState';
9
- import { type CatalogDetailEditValues, InvoicingCatalogItemFormLocalData } from './editInvoicingCatalogItemDetailViewState';
10
- /** An unsaved item's inline-edit draft, before the record has loaded. */
11
- export declare const initialCatalogDetailEditValues: () => CatalogDetailEditValues;
12
- /**
13
- * The detail page's inline-edit form data: the stored draft once the user has
14
- * touched the form, seeded from the loaded record until then. Memoized so the
15
- * page receives a stable value — recomputing it per store change would reseed
16
- * the form mid-edit and drop what the user had typed.
17
- */
18
- export declare const getInvoicingCatalogItemDetailEditLocalData: (state: RootState, id: ID | undefined) => CatalogDetailEditValues;
8
+ import { InvoicingCatalogItemKind } from '../invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewState';
9
+ import { type InvoicingCatalogItemRecordView } from '../invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewSelector';
10
+ import { InvoicingCatalogItemFormLocalData } from './editInvoicingCatalogItemDetailViewState';
19
11
  export declare const getEditInvoicingCatalogItemDetailViewState: (state: RootState) => FetchStateAndError;
20
12
  export declare const getSavedInvoicingCatalogItemId: (state: RootState) => ID | undefined;
21
13
  export declare const getSavedInvoicingCatalogItemKind: (state: RootState) => InvoicingCatalogItemKind | undefined;
@@ -41,6 +33,9 @@ export declare const getInvoicingApplicableCatalogItemOptions: (state: RootState
41
33
  export interface InvoicingCatalogItemFormView extends SelectorView {
42
34
  applicabilityValues: readonly string[];
43
35
  applicableItemOptions: ApplicableCatalogItemOption[];
36
+ /** Lifecycle option lists, folded in from the record view. */
37
+ catalogItemLifecycleActionOptions: InvoicingCatalogItemRecordView['catalogItemLifecycleActionOptions'];
38
+ catalogProductLifecycleActionOptions: InvoicingCatalogItemRecordView['catalogProductLifecycleActionOptions'];
44
39
  /**
45
40
  * Backend help copy for this screen's field group, keyed by field code.
46
41
  * Folded in here so the screen never reaches for the config view itself.
@@ -64,6 +59,11 @@ export interface InvoicingCatalogItemFormView extends SelectorView {
64
59
  */
65
60
  qboAccountHierarchy: NestedAccountHierarchyForReport[];
66
61
  qboClassHierarchy: NestedClassHierarchyForReport[];
62
+ /**
63
+ * Loading the item, as distinct from this view's own `fetchState`, which
64
+ * tracks the save.
65
+ */
66
+ recordState: FetchStateAndError;
67
67
  tierTypeValues: readonly string[];
68
68
  trialEndActionOptions: InvoicingNamedOption[];
69
69
  trialUnitOptions: InvoicingNamedOption[];
@@ -1,48 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getInvoicingCatalogItemFormView = exports.getInvoicingApplicableCatalogItemOptions = exports.getSavedInvoicingCatalogItemKind = exports.getSavedInvoicingCatalogItemId = exports.getEditInvoicingCatalogItemDetailViewState = exports.getInvoicingCatalogItemDetailEditLocalData = exports.initialCatalogDetailEditValues = void 0;
3
+ exports.getInvoicingCatalogItemFormView = exports.getInvoicingApplicableCatalogItemOptions = exports.getSavedInvoicingCatalogItemKind = exports.getSavedInvoicingCatalogItemId = exports.getEditInvoicingCatalogItemDetailViewState = void 0;
4
4
  const toolkit_1 = require("@reduxjs/toolkit");
5
5
  const planSelector_1 = require("../../../entity/invoicing/plan/planSelector");
6
+ const invoicingCatalogItemRecordViewSelector_1 = require("../invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewSelector");
6
7
  const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
7
8
  const invoicingQboViewSelector_1 = require("../invoicingQboView/invoicingQboViewSelector");
8
- const catalogDetailEditPayload_1 = require("./catalogDetailEditPayload");
9
9
  const invoicingCatalogItemFormConfig_1 = require("./invoicingCatalogItemFormConfig");
10
- /** An unsaved item's inline-edit draft, before the record has loaded. */
11
- const initialCatalogDetailEditValues = () => ({
12
- applicableItems: [],
13
- description: '',
14
- enabledForCheckout: true,
15
- enabledInPortal: true,
16
- giftClaimRedirectUrl: '',
17
- includedInMrr: true,
18
- isGiftable: false,
19
- isShippable: false,
20
- itemApplicability: 'all',
21
- metered: false,
22
- name: '',
23
- productCode: '',
24
- subFamilies: [],
25
- unit: '',
26
- usageCalculation: 'sum_of_usages',
27
- });
28
- exports.initialCatalogDetailEditValues = initialCatalogDetailEditValues;
29
- /**
30
- * The detail page's inline-edit form data: the stored draft once the user has
31
- * touched the form, seeded from the loaded record until then. Memoized so the
32
- * page receives a stable value — recomputing it per store change would reseed
33
- * the form mid-edit and drop what the user had typed.
34
- */
35
- exports.getInvoicingCatalogItemDetailEditLocalData = (0, toolkit_1.createSelector)([
36
- (state, id) => id != null
37
- ? state.editInvoicingCatalogItemDetailViewState.detailEditDraftById[id]
38
- : undefined,
39
- (state, id) => id != null
40
- ? (0, planSelector_1.getInvoicingPlanById)(state.invoicingPlanState, id)
41
- : undefined,
42
- ], (storedDraft, plan) => storedDraft ??
43
- (plan != null
44
- ? (0, catalogDetailEditPayload_1.planToCatalogDetailEditValues)(plan)
45
- : (0, exports.initialCatalogDetailEditValues)()));
46
10
  const getEditInvoicingCatalogItemDetailViewState = (state) => ({
47
11
  fetchState: state.editInvoicingCatalogItemDetailViewState.fetchState,
48
12
  error: state.editInvoicingCatalogItemDetailViewState.error,
@@ -96,7 +60,16 @@ const getInvoicingCatalogItemFormView = (state, id) => {
96
60
  ? (0, invoicingQboViewSelector_1.getInvoicingQboView)(state)
97
61
  : undefined;
98
62
  const { billingPeriodUnitOptions, catalogItemTypeOptions, catalogTierTypeOptionsByPricingModel, catalogTrialEndActionOptions, catalogTrialUnitOptions, } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
63
+ // In create mode there is no record to load, so the record view is only
64
+ // consulted when editing an existing item.
65
+ const recordView = id != null ? (0, invoicingCatalogItemRecordViewSelector_1.getInvoicingCatalogItemRecord)(state, 'plan', id) : undefined;
99
66
  return {
67
+ catalogItemLifecycleActionOptions: recordView?.catalogItemLifecycleActionOptions ?? [],
68
+ catalogProductLifecycleActionOptions: recordView?.catalogProductLifecycleActionOptions ?? [],
69
+ recordState: {
70
+ error: recordView?.error,
71
+ fetchState: recordView?.fetchState ?? 'Not-Started',
72
+ },
100
73
  fieldHelp: (0, invoicingConfigViewSelector_1.invoicingFieldHelpForGroup)(state, 'catalog'),
101
74
  isQboPickerDataLoading: (0, invoicingQboViewSelector_1.isInvoicingAccountingPickerDataLoading)(state),
102
75
  qboAccountHierarchy: qboView?.nestedAccountHierarchy ?? [],
@@ -1,7 +1,7 @@
1
1
  import { Amount } from '../../../commonStateTypes/amount';
2
2
  import { FetchedState, ID } from '../../../commonStateTypes/common';
3
- import { InvoicingCatalogItemKind } from '../invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState';
4
- /** A single pricing tier within a sub-family (values kept as raw strings). */
3
+ import { InvoicingCatalogItemKind } from '../invoicingCatalogItemRecordView/invoicingCatalogItemRecordViewState';
4
+ /** A single pricing tier within a price point (values kept as raw strings). */
5
5
  export interface InvoicingCatalogItemFormTier {
6
6
  endingUnit: string;
7
7
  packageSize: string;
@@ -10,9 +10,9 @@ export interface InvoicingCatalogItemFormTier {
10
10
  /** Unset until entered, so a blank field is distinguishable from a real 0. */
11
11
  price?: Amount;
12
12
  }
13
- /** A sub-family (price point) of a catalog item. */
13
+ /** A price point (price point) of a catalog item. */
14
14
  export interface InvoicingCatalogItemFormSubFamily {
15
- /** Accounting integration is per sub-family: the API carries
15
+ /** Accounting integration is per price point: the API carries
16
16
  * `accounting_detail` on each product, not on the parent item. */
17
17
  accountingCategory: string;
18
18
  accountingCode: string;
@@ -55,31 +55,8 @@ export interface InvoicingCatalogItemFormLocalData {
55
55
  subFamilies: InvoicingCatalogItemFormSubFamily[];
56
56
  unit: string;
57
57
  }
58
- /**
59
- * Draft form state for the detail page's inline edit. Separate from
60
- * {@link InvoicingCatalogItemFormLocalData}: the inline editor exposes the
61
- * portal/checkout/gifting fields the create form does not.
62
- */
63
- export interface CatalogDetailEditValues {
64
- applicableItems: string[];
65
- description: string;
66
- enabledForCheckout: boolean;
67
- enabledInPortal: boolean;
68
- giftClaimRedirectUrl: string;
69
- includedInMrr: boolean;
70
- isGiftable: boolean;
71
- isShippable: boolean;
72
- itemApplicability: string;
73
- metered: boolean;
74
- name: string;
75
- productCode: string;
76
- subFamilies: InvoicingCatalogItemFormSubFamily[];
77
- unit: string;
78
- usageCalculation: string;
79
- }
80
58
  export interface EditInvoicingCatalogItemDetailViewState extends FetchedState {
81
59
  /** Inline-edit drafts, keyed by catalog item id. */
82
- detailEditDraftById: Record<ID, CatalogDetailEditValues>;
83
60
  editDraftById: Record<ID, InvoicingCatalogItemFormLocalData>;
84
61
  newItemDraft: InvoicingCatalogItemFormLocalData;
85
62
  savedItemId?: ID;
@@ -3,7 +3,6 @@ import { Observable } from 'rxjs';
3
3
  import { mergeInvoicingPlanSubFamily } from '../../../entity/invoicing/plan/planReducer';
4
4
  import { RootState } from '../../../rootStateTypes';
5
5
  import { ZeniAPI } from '../../../zeniAPI';
6
- import { archiveInvoicingCatalogSubFamily, createInvoicingCatalogSubFamily, submitInvoicingCatalogItemFormFailure, submitInvoicingCatalogItemFormSuccess } from './editInvoicingCatalogItemDetailViewReducer';
7
- export type ActionType = ReturnType<typeof createInvoicingCatalogSubFamily> | ReturnType<typeof archiveInvoicingCatalogSubFamily> | ReturnType<typeof mergeInvoicingPlanSubFamily> | ReturnType<typeof submitInvoicingCatalogItemFormSuccess> | ReturnType<typeof submitInvoicingCatalogItemFormFailure>;
8
- export declare const createInvoicingCatalogSubFamilyEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
6
+ import { archiveInvoicingCatalogSubFamily, submitInvoicingCatalogItemFormFailure, submitInvoicingCatalogItemFormSuccess } from './editInvoicingCatalogItemDetailViewReducer';
7
+ export type ActionType = ReturnType<typeof archiveInvoicingCatalogSubFamily> | ReturnType<typeof mergeInvoicingPlanSubFamily> | ReturnType<typeof submitInvoicingCatalogItemFormSuccess> | ReturnType<typeof submitInvoicingCatalogItemFormFailure>;
9
8
  export declare const archiveInvoicingCatalogSubFamilyEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.archiveInvoicingCatalogSubFamilyEpic = exports.createInvoicingCatalogSubFamilyEpic = void 0;
3
+ exports.archiveInvoicingCatalogSubFamilyEpic = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
6
  const planReducer_1 = require("../../../entity/invoicing/plan/planReducer");
7
7
  const responsePayload_1 = require("../../../responsePayload");
8
- const invoicingQboViewSelector_1 = require("../invoicingQboView/invoicingQboViewSelector");
9
- const catalogDetailEditPayload_1 = require("./catalogDetailEditPayload");
10
8
  const editInvoicingCatalogItemDetailViewReducer_1 = require("./editInvoicingCatalogItemDetailViewReducer");
11
9
  const subFamilySuccessActions = (parentItemId, subFamilyPayload) => [
12
10
  (0, planReducer_1.mergeInvoicingPlanSubFamily)(parentItemId, subFamilyPayload),
@@ -15,24 +13,6 @@ const subFamilySuccessActions = (parentItemId, subFamilyPayload) => [
15
13
  kind: 'plan',
16
14
  }),
17
15
  ];
18
- const createInvoicingCatalogSubFamilyEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(editInvoicingCatalogItemDetailViewReducer_1.createInvoicingCatalogSubFamily.match), (0, operators_1.mergeMap)((action) => {
19
- const { itemType, parentItemId, values } = action.payload;
20
- const state = state$.value;
21
- // Built here so the dialog can stay in picked ids: resolving one to the
22
- // account record the payload carries needs the shared account list.
23
- const data = (0, catalogDetailEditPayload_1.createSubFamilyFormToPayload)(parentItemId, itemType, values, (0, invoicingQboViewSelector_1.getInvoicingCatalogAccountingLookup)(state));
24
- const baseUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0`;
25
- return zeniAPI
26
- .postAndGetJSON(`${baseUrl}/catalog/products`, data)
27
- .pipe((0, operators_1.mergeMap)((response) => {
28
- if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
29
- return subFamilySuccessActions(parentItemId, response.data);
30
- }
31
- return (0, rxjs_1.of)((0, editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemFormFailure)(response.status));
32
- }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemFormFailure)((0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Create sub-family REST API call errored out ' +
33
- JSON.stringify(error))))));
34
- }));
35
- exports.createInvoicingCatalogSubFamilyEpic = createInvoicingCatalogSubFamilyEpic;
36
16
  const archiveInvoicingCatalogSubFamilyEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(editInvoicingCatalogItemDetailViewReducer_1.archiveInvoicingCatalogSubFamily.match), (0, operators_1.mergeMap)((action) => {
37
17
  const { parentItemId, subFamilyId } = action.payload;
38
18
  const baseUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0`;
@@ -44,7 +24,7 @@ const archiveInvoicingCatalogSubFamilyEpic = (actions$, _state$, zeniAPI) => act
44
24
  return subFamilySuccessActions(parentItemId, response.data);
45
25
  }
46
26
  return (0, rxjs_1.of)((0, editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemFormFailure)(response.status));
47
- }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemFormFailure)((0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Archive sub-family REST API call errored out ' +
27
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemFormFailure)((0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Archive price point REST API call errored out ' +
48
28
  JSON.stringify(error))))));
49
29
  }));
50
30
  exports.archiveInvoicingCatalogSubFamilyEpic = archiveInvoicingCatalogSubFamilyEpic;
@@ -6,6 +6,6 @@ import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
6
6
  import { RootState } from '../../../rootStateTypes';
7
7
  import { ZeniAPI } from '../../../zeniAPI';
8
8
  import { addInvoicingCatalogItem } from '../invoicingCatalogListView/invoicingCatalogListViewReducer';
9
- import { saveInvoicingCatalogItem, submitInvoicingCatalogItemForm, submitInvoicingCatalogItemFormFailure, submitInvoicingCatalogItemFormSuccess } from './editInvoicingCatalogItemDetailViewReducer';
10
- export type ActionType = ReturnType<typeof submitInvoicingCatalogItemForm> | ReturnType<typeof saveInvoicingCatalogItem> | ReturnType<typeof submitInvoicingCatalogItemFormSuccess> | ReturnType<typeof submitInvoicingCatalogItemFormFailure> | ReturnType<typeof updateInvoicingPlans> | ReturnType<typeof updateInvoicingProducts> | ReturnType<typeof mergeInvoicingPlanSubFamily> | ReturnType<typeof addInvoicingCatalogItem> | ReturnType<typeof openSnackbar>;
9
+ import { submitInvoicingCatalogItemForm, submitInvoicingCatalogItemFormFailure, submitInvoicingCatalogItemFormSuccess } from './editInvoicingCatalogItemDetailViewReducer';
10
+ export type ActionType = ReturnType<typeof submitInvoicingCatalogItemForm> | ReturnType<typeof submitInvoicingCatalogItemFormSuccess> | ReturnType<typeof submitInvoicingCatalogItemFormFailure> | ReturnType<typeof updateInvoicingPlans> | ReturnType<typeof updateInvoicingProducts> | ReturnType<typeof mergeInvoicingPlanSubFamily> | ReturnType<typeof addInvoicingCatalogItem> | ReturnType<typeof openSnackbar>;
11
11
  export declare const saveInvoicingCatalogItemEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.saveInvoicingCatalogItemEpic = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
- const planSelector_1 = require("../../../entity/invoicing/plan/planSelector");
7
6
  const planReducer_1 = require("../../../entity/invoicing/plan/planReducer");
8
7
  const productReducer_1 = require("../../../entity/invoicing/product/productReducer");
9
8
  const snackbarApiError_1 = require("../../../entity/snackbar/snackbarApiError");
@@ -11,34 +10,19 @@ const snackbarReducer_1 = require("../../../entity/snackbar/snackbarReducer");
11
10
  const responsePayload_1 = require("../../../responsePayload");
12
11
  const invoicingCatalogListViewReducer_1 = require("../invoicingCatalogListView/invoicingCatalogListViewReducer");
13
12
  const invoicingQboViewSelector_1 = require("../invoicingQboView/invoicingQboViewSelector");
14
- const catalogDetailEditPayload_1 = require("./catalogDetailEditPayload");
15
13
  const editInvoicingCatalogItemDetailViewPayload_1 = require("./editInvoicingCatalogItemDetailViewPayload");
16
- const editInvoicingCatalogItemDetailViewSelector_1 = require("./editInvoicingCatalogItemDetailViewSelector");
17
14
  const editInvoicingCatalogItemDetailViewReducer_1 = require("./editInvoicingCatalogItemDetailViewReducer");
18
- const saveInvoicingCatalogItemEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)((action) => editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemForm.match(action) ||
19
- editInvoicingCatalogItemDetailViewReducer_1.saveInvoicingCatalogItem.match(action)), (0, operators_1.mergeMap)((action) => {
15
+ const saveInvoicingCatalogItemEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)((action) => editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemForm.match(action)), (0, operators_1.mergeMap)((action) => {
20
16
  const { id } = action.payload;
21
17
  const state = state$.value;
22
18
  const accountingLookup = (0, invoicingQboViewSelector_1.getInvoicingCatalogAccountingLookup)(state);
23
- // Both sources are form values, turned into request bodies here so the
24
- // picked account and class become the records the service stores: the
25
- // detail page's edit form, or the create/edit form's draft.
26
- let data;
27
- let editProductUpdates;
28
- if (editInvoicingCatalogItemDetailViewReducer_1.saveInvoicingCatalogItem.match(action)) {
29
- const plan = id != null
30
- ? (0, planSelector_1.getInvoicingPlanById)(state.invoicingPlanState, id)
31
- : undefined;
32
- const savePayload = (0, catalogDetailEditPayload_1.catalogDetailEditValuesToSavePayload)((0, editInvoicingCatalogItemDetailViewSelector_1.getInvoicingCatalogItemDetailEditLocalData)(state, id), accountingLookup, plan?.type ?? plan?.itemType, plan?.subFamilies);
33
- data = savePayload.planData;
34
- editProductUpdates = savePayload.productUpdates;
35
- }
36
- else {
37
- const viewState = state.editInvoicingCatalogItemDetailViewState;
38
- const localData = (id != null ? viewState.editDraftById[id] : viewState.newItemDraft) ??
39
- viewState.newItemDraft;
40
- data = (0, editInvoicingCatalogItemDetailViewPayload_1.localDataToSaveInvoicingCatalogItemPayload)(localData, id == null, accountingLookup);
41
- }
19
+ // Form values, turned into a request body here so the picked account and
20
+ // class become the records the service stores. Price points ride along
21
+ // nested, so the detail page and the create/edit form share one request.
22
+ const viewState = state.editInvoicingCatalogItemDetailViewState;
23
+ const localData = (id != null ? viewState.editDraftById[id] : viewState.newItemDraft) ??
24
+ viewState.newItemDraft;
25
+ const data = (0, editInvoicingCatalogItemDetailViewPayload_1.localDataToSaveInvoicingCatalogItemPayload)(localData, id == null, accountingLookup);
42
26
  const baseUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0`;
43
27
  const path = id != null
44
28
  ? `${baseUrl}/catalog/plans/${encodeURIComponent(id)}`
@@ -99,13 +83,7 @@ const saveInvoicingCatalogItemEpic = (actions$, state$, zeniAPI) => actions$.pip
99
83
  }));
100
84
  return resultActions;
101
85
  };
102
- const productUpdates = editInvoicingCatalogItemDetailViewReducer_1.saveInvoicingCatalogItem.match(action)
103
- ? (editProductUpdates ?? [])
104
- : [];
105
- if (productUpdates.length === 0) {
106
- return completeSave([]);
107
- }
108
- return (0, rxjs_1.forkJoin)(productUpdates.map((productUpdate) => zeniAPI.putAndGetJSON(`${baseUrl}/catalog/products/${encodeURIComponent(productUpdate.id)}`, productUpdate.data))).pipe((0, operators_1.mergeMap)(completeSave));
86
+ return completeSave([]);
109
87
  }
110
88
  return (0, rxjs_1.from)([
111
89
  (0, editInvoicingCatalogItemDetailViewReducer_1.submitInvoicingCatalogItemFormFailure)(response.status),
@@ -1,4 +1,4 @@
1
- import { FetchState, ID } from '../../../commonStateTypes/common';
1
+ import { FetchState, FetchStateAndError, ID } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
3
  import { InvoicingCoupon } from '../../../entity/invoicing/coupon/couponState';
4
4
  import { InvoicingDiscountLifecycleActionOption, InvoicingFieldHelpByCode, InvoicingFormOption } from '../../../entity/invoicing/invoicingCommonPayload';
@@ -8,6 +8,17 @@ export interface EditInvoicingCouponDetailView extends SelectorView {
8
8
  /** Config-owned; folded in so the screen reads one selector. */
9
9
  configFetchState: FetchState;
10
10
  discountLifecycleActionOptions: InvoicingDiscountLifecycleActionOption[];
11
+ /**
12
+ * Backend help copy for this screen's field group, keyed by field code.
13
+ * Folded in here so the screen never reaches for the config view itself.
14
+ */
15
+ fieldHelp: InvoicingFieldHelpByCode;
16
+ /**
17
+ * Loading the coupon, as distinct from this view's own `fetchState`, which
18
+ * tracks the save. Folded in from the read view so a screen reads one
19
+ * selector rather than pairing this one with it.
20
+ */
21
+ recordState: FetchStateAndError;
11
22
  coupon?: InvoicingCoupon;
12
23
  savedCouponId?: ID;
13
24
  }
@@ -4,6 +4,7 @@ exports.getInvoicingCouponFormView = exports.getEditInvoicingCouponDetailViewSta
4
4
  const couponSelector_1 = require("../../../entity/invoicing/coupon/couponSelector");
5
5
  const invoicingCommonPayload_1 = require("../../../entity/invoicing/invoicingCommonPayload");
6
6
  const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
7
+ const invoicingCouponRecordViewSelector_1 = require("../invoicingCouponRecordView/invoicingCouponRecordViewSelector");
7
8
  const editInvoicingCouponDetailViewState_1 = require("./editInvoicingCouponDetailViewState");
8
9
  /**
9
10
  * Bundled view for the discount create/edit form: the save fetch state/error,
@@ -13,9 +14,17 @@ const editInvoicingCouponDetailViewState_1 = require("./editInvoicingCouponDetai
13
14
  const getEditInvoicingCouponDetailViewState = (state, couponId) => {
14
15
  const { error, fetchState, savedCouponId } = state.editInvoicingCouponDetailViewState;
15
16
  const { discountLifecycleActionOptions, fetchState: configFetchState } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
17
+ // In create mode there is no record to load, so the read view is only
18
+ // consulted when editing an existing coupon.
19
+ const readView = couponId != null ? (0, invoicingCouponRecordViewSelector_1.getInvoicingCouponRecord)(state, couponId) : undefined;
16
20
  return {
17
21
  configFetchState,
18
22
  discountLifecycleActionOptions,
23
+ fieldHelp: (0, invoicingConfigViewSelector_1.invoicingFieldHelpForGroup)(state, 'discount'),
24
+ recordState: {
25
+ error: readView?.error,
26
+ fetchState: readView?.fetchState ?? 'Not-Started',
27
+ },
19
28
  coupon: couponId != null
20
29
  ? (0, couponSelector_1.getInvoicingCouponById)(state.invoicingCouponState, couponId)
21
30
  : undefined,
@@ -41,7 +50,6 @@ const getInvoicingCouponFormView = (state, couponId) => {
41
50
  : newCouponDraft;
42
51
  const { billingPeriodUnitOptions, discountApplyOnOptions, discountDurationTypeOptions, discountTypeOptions, } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
43
52
  return {
44
- fieldHelp: (0, invoicingConfigViewSelector_1.invoicingFieldHelpForGroup)(state, 'discount'),
45
53
  ...base,
46
54
  applyOnOptions: discountApplyOnOptions.map(invoicingCommonPayload_1.toInvoicingFormOption),
47
55
  discountTypeOptions: discountTypeOptions.map(invoicingCommonPayload_1.toInvoicingFormOption),
@@ -2,6 +2,7 @@ import { ID } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
3
  import { InvoicingFieldHelpByCode, InvoicingNamedOption } from '../../../entity/invoicing/invoicingCommonPayload';
4
4
  import { RootState } from '../../../rootStateTypes';
5
+ import { type InvoicingCustomerRecordView } from '../invoicingCustomerRecordView/invoicingCustomerRecordViewSelector';
5
6
  import { InvoicingCustomerFormLocalData } from './editInvoicingCustomerDetailViewState';
6
7
  export interface InvoicingCustomerFormView extends SelectorView {
7
8
  customerTypeOptions: InvoicingNamedOption[];
@@ -13,6 +14,13 @@ export interface InvoicingCustomerFormView extends SelectorView {
13
14
  localData: InvoicingCustomerFormLocalData;
14
15
  mode: 'create' | 'edit';
15
16
  netTermDayOptions: InvoicingNamedOption[];
17
+ /**
18
+ * The record and everything the detail page renders alongside it — invoices,
19
+ * payment methods, branding, Stripe state. Nested rather than flattened: it
20
+ * is a page's worth of state, and spreading it here would bury this view's
21
+ * own form fields. Screens read one selector and reach through this.
22
+ */
23
+ record: InvoicingCustomerRecordView;
16
24
  taxabilityOptions: InvoicingNamedOption[];
17
25
  billingAddressId?: ID;
18
26
  billingAddressLabel?: string;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getInvoicingCustomerFormView = void 0;
4
4
  const invoicingCustomerSelector_1 = require("../../../entity/invoicing/invoicingCustomer/invoicingCustomerSelector");
5
5
  const addressViewSelector_1 = require("../../addressView/addressViewSelector");
6
+ const invoicingCustomerRecordViewSelector_1 = require("../invoicingCustomerRecordView/invoicingCustomerRecordViewSelector");
6
7
  const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
7
8
  const invoicingCustomerFormConfig_1 = require("./invoicingCustomerFormConfig");
8
9
  /**
@@ -32,6 +33,7 @@ const getInvoicingCustomerFormView = (state, invoicingCustomerID) => {
32
33
  : undefined;
33
34
  const { customerTypeOptions, netTermDayOptions, taxabilityOptions } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
34
35
  return {
36
+ record: (0, invoicingCustomerRecordViewSelector_1.getInvoicingCustomerRecord)(state, invoicingCustomerID ?? ''),
35
37
  fieldHelp: (0, invoicingConfigViewSelector_1.invoicingFieldHelpForGroup)(state, 'customer'),
36
38
  customerTypeOptions,
37
39
  localData,
@@ -2,7 +2,7 @@ import { ActionsObservable, StateObservable } from 'redux-observable';
2
2
  import { Observable } from 'rxjs';
3
3
  import { RootState } from '../../../rootStateTypes';
4
4
  import { newAddressInLocalStore } from '../../addressView/addressViewReducer';
5
- import { updateInvoicingCustomerDetail } from '../invoicingCustomerDetailView/invoicingCustomerDetailViewReducer';
5
+ import { updateInvoicingCustomerDetail } from '../invoicingCustomerRecordView/invoicingCustomerRecordViewReducer';
6
6
  import { initializeInvoicingCustomerAddress } from './editInvoicingCustomerDetailViewReducer';
7
7
  export type ActionType = ReturnType<typeof initializeInvoicingCustomerAddress> | ReturnType<typeof updateInvoicingCustomerDetail> | ReturnType<typeof newAddressInLocalStore>;
8
8
  /**
@@ -6,7 +6,7 @@ const operators_1 = require("rxjs/operators");
6
6
  const addressSelector_1 = require("../../../entity/address/addressSelector");
7
7
  const invoicingCustomerSelector_1 = require("../../../entity/invoicing/invoicingCustomer/invoicingCustomerSelector");
8
8
  const addressViewReducer_1 = require("../../addressView/addressViewReducer");
9
- const invoicingCustomerDetailViewReducer_1 = require("../invoicingCustomerDetailView/invoicingCustomerDetailViewReducer");
9
+ const invoicingCustomerRecordViewReducer_1 = require("../invoicingCustomerRecordView/invoicingCustomerRecordViewReducer");
10
10
  const editInvoicingCustomerDetailViewReducer_1 = require("./editInvoicingCustomerDetailViewReducer");
11
11
  const invoicingCustomerFormConfig_1 = require("./invoicingCustomerFormConfig");
12
12
  /**
@@ -18,7 +18,7 @@ const invoicingCustomerFormConfig_1 = require("./invoicingCustomerFormConfig");
18
18
  * `initializeVendorAddressEpic`.
19
19
  */
20
20
  const initializeInvoicingCustomerAddressEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)((action) => editInvoicingCustomerDetailViewReducer_1.initializeInvoicingCustomerAddress.match(action) ||
21
- invoicingCustomerDetailViewReducer_1.updateInvoicingCustomerDetail.match(action)), (0, operators_1.mergeMap)((action) => {
21
+ invoicingCustomerRecordViewReducer_1.updateInvoicingCustomerDetail.match(action)), (0, operators_1.mergeMap)((action) => {
22
22
  const { id } = action.payload;
23
23
  const rootState = state$.value;
24
24
  const existingDraft = rootState.addressViewState.newAddressState?.[invoicingCustomerFormConfig_1.INVOICING_CUSTOMER_BILLING_ADDRESS_TYPE]?.addressToCreate;
@@ -1,7 +1,7 @@
1
- import { ID } from '../../../commonStateTypes/common';
1
+ import { FetchStateAndError, ID } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
3
  import { InvoicingCoupon } from '../../../entity/invoicing/coupon/couponState';
4
- import { InvoicingFieldHelpByCode, InvoicingSubscriptionLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
4
+ import { InvoicingFieldHelpByCode, InvoicingNamedOption, InvoicingSubscriptionLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
5
5
  import { InvoicingCustomer } from '../../../entity/invoicing/invoicingCustomer/invoicingCustomerState';
6
6
  import { InvoicingSubscription } from '../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionState';
7
7
  import { InvoicingProduct } from '../../../entity/invoicing/product/productState';
@@ -30,6 +30,10 @@ export interface EditInvoicingSubscriptionDetailView extends SelectorView {
30
30
  * to its own option shapes, so this stays free of any web-components dependency.
31
31
  */
32
32
  export interface InvoicingSubscriptionFormView extends SelectorView {
33
+ /** Lifecycle action in flight, folded in from the record view. */
34
+ actionState: FetchStateAndError;
35
+ /** Cancel reasons from `/1.0/config`, so the dialog hardcodes nothing. */
36
+ cancelReasonCodeOptions: InvoicingNamedOption[];
33
37
  coupons: InvoicingCoupon[];
34
38
  customers: InvoicingCustomer[];
35
39
  /**
@@ -41,6 +45,11 @@ export interface InvoicingSubscriptionFormView extends SelectorView {
41
45
  mode: 'create' | 'edit';
42
46
  plans: InvoicingProduct[];
43
47
  products: InvoicingProduct[];
48
+ /**
49
+ * Loading the subscription, as distinct from this view's own `fetchState`,
50
+ * which tracks the save. Folded in so a screen reads one selector.
51
+ */
52
+ recordState: FetchStateAndError;
44
53
  savedSubscriptionId?: ID;
45
54
  shippingAddressLabel?: string;
46
55
  subscription?: InvoicingSubscription;
@@ -5,6 +5,7 @@ const invoicingSubscriptionSelector_1 = require("../../../entity/invoicing/invoi
5
5
  const addressViewSelector_1 = require("../../addressView/addressViewSelector");
6
6
  const couponViewSelector_1 = require("../couponView/couponViewSelector");
7
7
  const invoicingCatalogListViewSelector_1 = require("../invoicingCatalogListView/invoicingCatalogListViewSelector");
8
+ const invoicingSubscriptionRecordViewSelector_1 = require("../invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewSelector");
8
9
  const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
9
10
  const invoicingCustomerListViewSelector_1 = require("../invoicingCustomerListView/invoicingCustomerListViewSelector");
10
11
  const invoicingSubscriptionFormConfig_1 = require("./invoicingSubscriptionFormConfig");
@@ -45,7 +46,21 @@ const getInvoicingSubscriptionFormView = (state, invoicingSubscriptionID) => {
45
46
  const catalogListView = (0, invoicingCatalogListViewSelector_1.getInvoicingCatalogListView)(state);
46
47
  const planPrices = (0, invoicingCatalogListViewSelector_1.getInvoicingCatalogPrices)(catalogListView.plans);
47
48
  const addonAndChargePrices = (0, invoicingCatalogListViewSelector_1.getInvoicingCatalogPrices)(catalogListView.products);
49
+ // In create mode there is no record to load, so the record view is only
50
+ // consulted when editing an existing subscription.
51
+ const recordView = invoicingSubscriptionID != null
52
+ ? (0, invoicingSubscriptionRecordViewSelector_1.getInvoicingSubscriptionRecord)(state, invoicingSubscriptionID)
53
+ : undefined;
48
54
  return {
55
+ actionState: recordView?.actionState ?? {
56
+ error: undefined,
57
+ fetchState: 'Not-Started',
58
+ },
59
+ cancelReasonCodeOptions: (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state).subscriptionCancelReasonCodeOptions,
60
+ recordState: {
61
+ error: recordView?.error,
62
+ fetchState: recordView?.fetchState ?? 'Not-Started',
63
+ },
49
64
  fieldHelp: (0, invoicingConfigViewSelector_1.invoicingFieldHelpForGroup)(state, 'subscription'),
50
65
  coupons: (0, couponViewSelector_1.getInvoicingCouponListItems)(state),
51
66
  customers: (0, invoicingCustomerListViewSelector_1.getInvoicingCustomerListView)(state).customers,
@@ -3,7 +3,7 @@ import { Observable } from 'rxjs';
3
3
  import { fetchInvoicingCouponList } from '../couponView/couponViewReducer';
4
4
  import { fetchInvoicingCatalogPlanList } from '../invoicingCatalogListView/invoicingCatalogListViewReducer';
5
5
  import { fetchInvoicingCustomerList } from '../invoicingCustomerListView/invoicingCustomerListViewReducer';
6
- import { fetchInvoicingSubscriptionDetail } from '../invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer';
6
+ import { fetchInvoicingSubscriptionDetail } from '../invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewReducer';
7
7
  import { fetchInvoicingSubscriptionFormPage } from './editInvoicingSubscriptionDetailViewReducer';
8
8
  /**
9
9
  * Every action this epic can emit, plus the trigger it listens for. Wired into
@@ -6,7 +6,7 @@ const operators_1 = require("rxjs/operators");
6
6
  const couponViewReducer_1 = require("../couponView/couponViewReducer");
7
7
  const invoicingCatalogListViewReducer_1 = require("../invoicingCatalogListView/invoicingCatalogListViewReducer");
8
8
  const invoicingCustomerListViewReducer_1 = require("../invoicingCustomerListView/invoicingCustomerListViewReducer");
9
- const invoicingSubscriptionDetailViewReducer_1 = require("../invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer");
9
+ const invoicingSubscriptionRecordViewReducer_1 = require("../invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewReducer");
10
10
  const editInvoicingSubscriptionDetailViewReducer_1 = require("./editInvoicingSubscriptionDetailViewReducer");
11
11
  /**
12
12
  * Orchestrates the subscription create/edit form: on
@@ -26,7 +26,7 @@ const fetchInvoicingSubscriptionFormPageEpic = (actions$) => actions$.pipe((0, o
26
26
  (0, couponViewReducer_1.fetchInvoicingCouponList)({ filters: {}, keepExistingListItems: false }),
27
27
  ];
28
28
  if (subscriptionId != null) {
29
- pageActions.push((0, invoicingSubscriptionDetailViewReducer_1.fetchInvoicingSubscriptionDetail)({ id: subscriptionId }));
29
+ pageActions.push((0, invoicingSubscriptionRecordViewReducer_1.fetchInvoicingSubscriptionDetail)({ id: subscriptionId }));
30
30
  }
31
31
  return (0, rxjs_1.concat)((0, rxjs_1.from)(pageActions));
32
32
  }));
@@ -2,7 +2,7 @@ import { ActionsObservable, StateObservable } from 'redux-observable';
2
2
  import { Observable } from 'rxjs';
3
3
  import { RootState } from '../../../rootStateTypes';
4
4
  import { newAddressInLocalStore } from '../../addressView/addressViewReducer';
5
- import { updateInvoicingSubscriptionDetail } from '../invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer';
5
+ import { updateInvoicingSubscriptionDetail } from '../invoicingSubscriptionRecordView/invoicingSubscriptionRecordViewReducer';
6
6
  import { initializeInvoicingSubscriptionAddress } from './editInvoicingSubscriptionDetailViewReducer';
7
7
  export type ActionType = ReturnType<typeof initializeInvoicingSubscriptionAddress> | ReturnType<typeof updateInvoicingSubscriptionDetail> | ReturnType<typeof newAddressInLocalStore>;
8
8
  /**