@riboseinc/paneron-registry-kit 2.0.0-dev9 → 2.0.0

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 (179) hide show
  1. package/common.d.ts +1 -1
  2. package/common.js +1 -1
  3. package/common.js.map +1 -1
  4. package/index.d.ts +3 -3
  5. package/index.js +3 -3
  6. package/index.js.map +1 -1
  7. package/package.json +26 -19
  8. package/types/cr.d.ts +216 -0
  9. package/types/cr.js +175 -0
  10. package/types/cr.js.map +1 -0
  11. package/types/index.d.ts +1 -0
  12. package/types/index.js +19 -0
  13. package/types/index.js.map +1 -1
  14. package/types/item.d.ts +13 -3
  15. package/types/item.js +11 -1
  16. package/types/item.js.map +1 -1
  17. package/types/proposal.d.ts +31 -14
  18. package/types/proposal.js +1 -1
  19. package/types/proposal.js.map +1 -1
  20. package/types/register.d.ts +6 -5
  21. package/types/register.js +19 -1
  22. package/types/register.js.map +1 -1
  23. package/types/registry.d.ts +8 -3
  24. package/types/registry.js +8 -1
  25. package/types/registry.js.map +1 -1
  26. package/types/stakeholder.d.ts +40 -16
  27. package/types/stakeholder.js +47 -3
  28. package/types/stakeholder.js.map +1 -1
  29. package/types/views.d.ts +98 -24
  30. package/types/views.js.map +1 -1
  31. package/views/AnnotatedChange.d.ts +7 -0
  32. package/views/AnnotatedChange.js +91 -0
  33. package/views/AnnotatedChange.js.map +1 -0
  34. package/views/BrowserCtx.d.ts +66 -2
  35. package/views/BrowserCtx.js +13 -2
  36. package/views/BrowserCtx.js.map +1 -1
  37. package/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +13 -1
  38. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +178 -85
  39. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -1
  40. package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +4 -0
  41. package/views/FilterCriteria/criteriaGroupToQueryExpression.js +10 -3
  42. package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
  43. package/views/FilterCriteria/criteriaGroupToSummary.js +7 -7
  44. package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -1
  45. package/views/FilterCriteria/criteriaToNodes.d.ts +9 -0
  46. package/views/FilterCriteria/criteriaToNodes.js +42 -28
  47. package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
  48. package/views/FilterCriteria/index.d.ts +1 -0
  49. package/views/FilterCriteria/index.js +29 -21
  50. package/views/FilterCriteria/index.js.map +1 -1
  51. package/views/FilterCriteria/models.d.ts +29 -2
  52. package/views/FilterCriteria/models.js +17 -10
  53. package/views/FilterCriteria/models.js.map +1 -1
  54. package/views/FilterCriteria/mutateGroup.d.ts +4 -1
  55. package/views/FilterCriteria/mutateGroup.js +4 -3
  56. package/views/FilterCriteria/mutateGroup.js.map +1 -1
  57. package/views/GenericRelatedItemView.d.ts +1 -1
  58. package/views/GenericRelatedItemView.js +142 -102
  59. package/views/GenericRelatedItemView.js.map +1 -1
  60. package/views/RegisterStakeholder.d.ts +9 -0
  61. package/views/RegisterStakeholder.js +40 -0
  62. package/views/RegisterStakeholder.js.map +1 -0
  63. package/views/RegisterVersion.d.ts +9 -0
  64. package/views/RegisterVersion.js +41 -0
  65. package/views/RegisterVersion.js.map +1 -0
  66. package/views/SearchQuery.d.ts +13 -0
  67. package/views/SearchQuery.js +137 -0
  68. package/views/SearchQuery.js.map +1 -0
  69. package/views/change-request/ChangeRequestContext.d.ts +20 -0
  70. package/views/change-request/ChangeRequestContext.js +56 -0
  71. package/views/change-request/ChangeRequestContext.js.map +1 -0
  72. package/views/change-request/Proposals.d.ts +21 -0
  73. package/views/change-request/Proposals.js +331 -0
  74. package/views/change-request/Proposals.js.map +1 -0
  75. package/views/change-request/objectChangeset.d.ts +31 -0
  76. package/views/change-request/objectChangeset.js +229 -0
  77. package/views/change-request/objectChangeset.js.map +1 -0
  78. package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
  79. package/views/detail/ChangeRequest/Proposal.js +142 -0
  80. package/views/detail/ChangeRequest/Proposal.js.map +1 -0
  81. package/views/detail/ChangeRequest/index.d.ts +13 -0
  82. package/views/detail/ChangeRequest/index.js +207 -0
  83. package/views/detail/ChangeRequest/index.js.map +1 -0
  84. package/views/detail/ChangeRequest/transitions.d.ts +28 -0
  85. package/views/detail/ChangeRequest/transitions.js +530 -0
  86. package/views/detail/ChangeRequest/transitions.js.map +1 -0
  87. package/views/detail/CustomView/index.d.ts +13 -0
  88. package/views/detail/CustomView/index.js +68 -0
  89. package/views/detail/CustomView/index.js.map +1 -0
  90. package/views/detail/RegisterHome/index.d.ts +5 -0
  91. package/views/detail/RegisterHome/index.js +128 -0
  92. package/views/detail/RegisterHome/index.js.map +1 -0
  93. package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
  94. package/views/detail/RegisterItem/RelatedItems.js +61 -0
  95. package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
  96. package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
  97. package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
  98. package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
  99. package/views/detail/RegisterItem/index.d.ts +13 -0
  100. package/views/detail/RegisterItem/index.js +356 -0
  101. package/views/detail/RegisterItem/index.js.map +1 -0
  102. package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
  103. package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
  104. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
  105. package/views/detail/RegisterMeta/index.d.ts +10 -0
  106. package/views/detail/RegisterMeta/index.js +111 -0
  107. package/views/detail/RegisterMeta/index.js.map +1 -0
  108. package/views/detail/index.d.ts +1 -0
  109. package/views/detail/index.js +24 -0
  110. package/views/detail/index.js.map +1 -0
  111. package/views/diffing/InlineDiff.d.ts +12 -0
  112. package/views/diffing/InlineDiff.js +58 -0
  113. package/views/diffing/InlineDiff.js.map +1 -0
  114. package/views/diffing/StructuredDiff.d.ts +11 -0
  115. package/views/diffing/StructuredDiff.js +65 -0
  116. package/views/diffing/StructuredDiff.js.map +1 -0
  117. package/views/hooks/useCustomView.d.ts +3 -0
  118. package/views/hooks/useCustomView.js +24 -0
  119. package/views/hooks/useCustomView.js.map +1 -0
  120. package/views/hooks/useItemClassConfig.d.ts +3 -0
  121. package/views/hooks/useItemClassConfig.js +24 -0
  122. package/views/hooks/useItemClassConfig.js.map +1 -0
  123. package/views/hooks/useItemRef.d.ts +3 -0
  124. package/views/hooks/useItemRef.js +39 -0
  125. package/views/hooks/useItemRef.js.map +1 -0
  126. package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
  127. package/views/hooks/useSingleRegisterItemData.js +32 -0
  128. package/views/hooks/useSingleRegisterItemData.js.map +1 -0
  129. package/views/index.d.ts +2 -2
  130. package/views/index.js +161 -130
  131. package/views/index.js.map +1 -1
  132. package/views/itemPathUtils.d.ts +45 -2
  133. package/views/itemPathUtils.js +101 -14
  134. package/views/itemPathUtils.js.map +1 -1
  135. package/views/itemQueryUtils.d.ts +11 -0
  136. package/views/itemQueryUtils.js +48 -0
  137. package/views/itemQueryUtils.js.map +1 -0
  138. package/views/protocolRegistry.d.ts +12 -0
  139. package/views/protocolRegistry.js +42 -0
  140. package/views/protocolRegistry.js.map +1 -0
  141. package/views/sidebar/Browse/index.d.ts +11 -0
  142. package/views/sidebar/Browse/index.js +453 -0
  143. package/views/sidebar/Browse/index.js.map +1 -0
  144. package/views/sidebar/Export/index.d.ts +5 -0
  145. package/views/sidebar/Export/index.js +94 -0
  146. package/views/sidebar/Export/index.js.map +1 -0
  147. package/views/sidebar/ListItem.d.ts +10 -0
  148. package/views/sidebar/ListItem.js +43 -0
  149. package/views/sidebar/ListItem.js.map +1 -0
  150. package/views/sidebar/Registration/index.d.ts +5 -0
  151. package/views/sidebar/Registration/index.js +163 -0
  152. package/views/sidebar/Registration/index.js.map +1 -0
  153. package/views/sidebar/Search/index.d.ts +18 -0
  154. package/views/sidebar/Search/index.js +177 -0
  155. package/views/sidebar/Search/index.js.map +1 -0
  156. package/views/sidebar/index.d.ts +6 -0
  157. package/views/sidebar/index.js +104 -0
  158. package/views/sidebar/index.js.map +1 -0
  159. package/views/util.d.ts +29 -5
  160. package/views/util.js +92 -6
  161. package/views/util.js.map +1 -1
  162. package/views/ChangeRequest.d.ts +0 -12
  163. package/views/ChangeRequest.js +0 -689
  164. package/views/ChangeRequest.js.map +0 -1
  165. package/views/ItemBrowser.d.ts +0 -12
  166. package/views/ItemBrowser.js +0 -258
  167. package/views/ItemBrowser.js.map +0 -1
  168. package/views/ItemDetails.d.ts +0 -14
  169. package/views/ItemDetails.js +0 -128
  170. package/views/ItemDetails.js.map +0 -1
  171. package/views/MainView.d.ts +0 -8
  172. package/views/MainView.js +0 -34
  173. package/views/MainView.js.map +0 -1
  174. package/views/RegisterInformation.d.ts +0 -7
  175. package/views/RegisterInformation.js +0 -264
  176. package/views/RegisterInformation.js.map +0 -1
  177. package/views/RegisterItemGrid.d.ts +0 -25
  178. package/views/RegisterItemGrid.js +0 -276
  179. package/views/RegisterItemGrid.js.map +0 -1
@@ -1,689 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ChangeRequestView = exports.CHANGE_REQUEST_OPTIONS = void 0;
7
-
8
- var _electronLog = _interopRequireDefault(require("electron-log"));
9
-
10
- var _jsYaml = _interopRequireDefault(require("js-yaml"));
11
-
12
- var _immutabilityHelper = _interopRequireDefault(require("immutability-helper"));
13
-
14
- var _react = _interopRequireWildcard(require("react"));
15
-
16
- var _core = require("@emotion/core");
17
-
18
- var _core2 = require("@blueprintjs/core");
19
-
20
- var _context = require("@riboseinc/paneron-extension-kit/context");
21
-
22
- var _types = require("../types");
23
-
24
- var _MainView = require("./MainView");
25
-
26
- var _util = require("./util");
27
-
28
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
29
-
30
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
-
32
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
-
34
- /** @jsx jsx */
35
-
36
- /** @jsxFrag React.Fragment */
37
- const PROPOSAL_ICON = {
38
- addition: 'add',
39
- clarification: 'edit',
40
- amendment: 'remove'
41
- };
42
- const CHANGE_REQUEST_OPTIONS = {
43
- new: {
44
- value: 'new',
45
- label: "New change request…"
46
- }
47
- };
48
- exports.CHANGE_REQUEST_OPTIONS = CHANGE_REQUEST_OPTIONS;
49
-
50
- const ChangeRequestView = function ({
51
- itemClassConfiguration,
52
- id,
53
- useRegisterItemData,
54
- onSave,
55
- onDelete
56
- }) {
57
- var _a, _b, _c, _d;
58
-
59
- const {
60
- useObjectData,
61
- makeRandomID,
62
- updateObjects
63
- } = (0, _react.useContext)(_context.DatasetContext);
64
- const [selectedItem, selectItem] = (0, _react.useState)('justification');
65
- const objectPath = `change-requests/${id}.yaml`;
66
- const crData = useObjectData({
67
- objectPaths: [objectPath]
68
- });
69
- const dataAsString = (_c = (_b = (_a = crData.value.data) === null || _a === void 0 ? void 0 : _a[objectPath]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : undefined;
70
- const maybeCR = dataAsString !== undefined ? _jsYaml.default.load(dataAsString) : undefined;
71
- const itemPaths = Object.keys(((_d = maybeCR) === null || _d === void 0 ? void 0 : _d.proposals) || {}); //log.debug("Item data request", itemDataRequest);
72
- //const itemData = useObjectData(itemDataRequest).value;
73
-
74
- const itemData = useRegisterItemData({
75
- itemPaths
76
- }).value;
77
- const [edited, updateEdited] = (0, _react.useState)(null);
78
- let el;
79
-
80
- if (maybeCR === undefined) {
81
- el = (0, _core.jsx)(_core2.NonIdealState, {
82
- title: (0, _core.jsx)(_core2.Spinner, null)
83
- });
84
- } else if (maybeCR.id) {
85
- const originalCR = maybeCR;
86
- const cr = edited || originalCR;
87
-
88
- async function handleSave() {
89
- if (!onSave) {
90
- return;
91
- }
92
-
93
- if (edited === null) {
94
- return;
95
- }
96
-
97
- await onSave(originalCR.id, edited, originalCR);
98
- updateEdited(null);
99
- }
100
-
101
- function handlePropose() {
102
- if (!onSave) {
103
- return;
104
- }
105
-
106
- if (edited !== null) {
107
- return;
108
- }
109
-
110
- onSave(originalCR.id, Object.assign(Object.assign({}, cr), {
111
- status: 'pending',
112
- disposition: undefined,
113
- timeProposed: new Date()
114
- }), originalCR);
115
- }
116
-
117
- function handleUpdateState(newStatus, newDisposition) {
118
- if (!onSave) {
119
- return;
120
- }
121
-
122
- if (edited !== null) {
123
- return;
124
- }
125
-
126
- let extraProps;
127
-
128
- if (newStatus === 'final') {
129
- extraProps = {
130
- timeDisposed: new Date()
131
- };
132
- } else {
133
- if (newDisposition === 'withdrawn') {
134
- extraProps = {
135
- timeProposed: undefined
136
- };
137
- } else {
138
- extraProps = {};
139
- }
140
- }
141
-
142
- onSave(originalCR.id, Object.assign(Object.assign(Object.assign({}, cr), {
143
- status: newStatus,
144
- disposition: newDisposition
145
- }), extraProps), originalCR);
146
- }
147
-
148
- async function handleAddProposal(id, defaults) {
149
- updateEdited((0, _immutabilityHelper.default)(cr, {
150
- proposals: {
151
- [id]: {
152
- $set: {
153
- type: 'addition',
154
- payload: defaults
155
- }
156
- }
157
- }
158
- }));
159
- }
160
-
161
- async function handleAcceptProposal(itemID, clsID, proposal) {
162
- var _a;
163
-
164
- if (!updateObjects) {
165
- return;
166
- }
167
-
168
- const itemPath = `${clsID}/${itemID}`;
169
- const itemFilePath = `${itemPath}.yaml`;
170
- const existingItem = itemData[itemPath];
171
-
172
- if (proposal.type === 'addition') {
173
- if (existingItem) {
174
- _electronLog.default.error("Cannot accept proposed addition: item already exists", clsID, itemID);
175
-
176
- throw new Error("Cannot accept proposed addition: item already exists");
177
- }
178
-
179
- const newItem = {
180
- id: itemID,
181
- status: 'valid',
182
- dateAccepted: new Date(),
183
- data: proposal.payload
184
- };
185
- await updateObjects({
186
- commitMessage: `CR: Accepted addition of ${clsID}/${itemID} (per CR ${id})`,
187
- objectChangeset: {
188
- [itemFilePath]: {
189
- newValue: newItem,
190
- oldValue: null
191
- }
192
- }
193
- });
194
- } else if (proposal.type === 'clarification') {
195
- if (!existingItem) {
196
- _electronLog.default.error("Cannot accept proposed clarification: item does not exist", clsID, itemID);
197
-
198
- throw new Error("Cannot accept proposed clarification: item does not exist");
199
- }
200
-
201
- const clarifiedItem = Object.assign(Object.assign({}, existingItem), {
202
- data: proposal.payload
203
- });
204
- await updateObjects({
205
- commitMessage: `CR: Accepted clarification of ${clsID}/${itemID} (per CR ${id})`,
206
- objectChangeset: {
207
- [itemPath]: {
208
- newValue: clarifiedItem,
209
- oldValue: existingItem
210
- }
211
- }
212
- });
213
- } else if (proposal.type === 'amendment') {
214
- if (!existingItem) {
215
- _electronLog.default.error("Cannot accept proposed amendment: item does not exist", clsID, itemID);
216
-
217
- throw new Error("Cannot accept proposed amendment: item does not exist");
218
- }
219
-
220
- if (existingItem.status !== 'valid') {
221
- _electronLog.default.error("Cannot accept proposed amendment: item is not valid", clsID, itemID);
222
-
223
- throw new Error("Cannot accept proposed amendment: item is not valid");
224
- }
225
-
226
- const amendedItem = Object.assign(Object.assign({}, existingItem), {
227
- status: proposal.amendmentType === 'retirement' ? 'retired' : 'superseded'
228
- });
229
-
230
- if (proposal.amendmentType === 'supersession') {
231
- if (((_a = cr.proposals[`${clsID}/${proposal.supersedingItemID}`]) === null || _a === void 0 ? void 0 : _a.type) !== 'addition') {
232
- _electronLog.default.error("Cannot accept proposed amendment: superseding item is not specified or cannot be found", clsID, itemID);
233
-
234
- throw new Error("Cannot accept proposed amendment: superseding item is not specified or cannot be found");
235
- }
236
- }
237
-
238
- await updateObjects({
239
- commitMessage: `CR: Accepted amendment of ${clsID}/${itemID} (per CR ${id})`,
240
- objectChangeset: {
241
- [itemPath]: {
242
- newValue: amendedItem,
243
- oldValue: existingItem
244
- }
245
- }
246
- });
247
- }
248
- }
249
-
250
- const tentativelyAccepted = cr.status === 'tentative' && cr.disposition === 'accepted';
251
- const tentativelyNotAccepted = cr.status === 'tentative' && cr.disposition === 'notAccepted';
252
- const actions = updateObjects !== undefined ? (0, _core.jsx)(_core2.ButtonGroup, null, (0, _core.jsx)(_core2.Button, {
253
- disabled: edited === null,
254
- onClick: handleSave
255
- }, "Save"), (0, _core.jsx)(_core2.Button, {
256
- intent: "danger",
257
- disabled: edited !== null,
258
- onClick: onDelete ? () => onDelete(originalCR.id, originalCR) : void 0
259
- }, "Delete"), (0, _core.jsx)(_core2.Button, {
260
- disabled: edited !== null,
261
- intent: "success",
262
- onClick: handlePropose
263
- }, "Propose"), (0, _core.jsx)(_core2.Button, {
264
- disabled: edited !== null,
265
- intent: "warning",
266
- onClick: () => handleUpdateState('pending', 'withdrawn')
267
- }, "Withdraw"), (0, _core.jsx)(_react.default.Fragment, null, !tentativelyNotAccepted ? (0, _core.jsx)(_core2.Button, {
268
- disabled: edited !== null,
269
- active: cr.disposition === 'accepted',
270
- onClick: () => handleUpdateState('tentative', 'accepted')
271
- }, "Accept") : null, tentativelyAccepted ? (0, _core.jsx)(_core2.Button, {
272
- disabled: edited !== null,
273
- active: cr.status === 'final',
274
- icon: "take-action",
275
- onClick: () => handleUpdateState('final', 'accepted')
276
- }, "Final") : null, !tentativelyAccepted ? (0, _core.jsx)(_core2.Button, {
277
- disabled: edited !== null,
278
- active: cr.disposition === 'notAccepted',
279
- onClick: () => handleUpdateState('tentative', 'notAccepted')
280
- }, "Do not accept") : null, tentativelyNotAccepted ? (0, _core.jsx)(_core2.Button, {
281
- disabled: edited !== null,
282
- active: cr.status === 'final',
283
- icon: "take-action",
284
- onClick: () => handleUpdateState('final', 'notAccepted')
285
- }, "Final") : null)) : (0, _core.jsx)(_react.default.Fragment, null, "Status: ", (0, _core.jsx)("em", null, cr.status || '—'), "\u2003\u2022\u2003 Disposition: ", (0, _core.jsx)("em", null, cr.disposition || '—'));
286
- let detailView;
287
-
288
- if (selectedItem === 'justification') {
289
- detailView = (0, _core.jsx)(CRJustification, {
290
- value: cr.justification,
291
- onChange: updateObjects ? justification => updateEdited(Object.assign(Object.assign({}, cr), {
292
- justification
293
- })) : undefined
294
- });
295
- } else if (selectedItem === 'control-body') {
296
- detailView = (0, _core.jsx)(CRControlBodyInput, {
297
- value: {
298
- notes: cr.controlBodyNotes,
299
- event: cr.controlBodyDecisionEvent
300
- },
301
- onChange: updateObjects ? (controlBodyNotes, controlBodyDecisionEvent) => updateEdited(Object.assign(Object.assign({}, cr), {
302
- controlBodyNotes,
303
- controlBodyDecisionEvent
304
- })) : undefined
305
- });
306
- } else if (selectedItem === 'manager') {
307
- detailView = (0, _core.jsx)(CRManagerNotes, {
308
- value: cr.registerManagerNotes,
309
- onChange: updateObjects ? registerManagerNotes => updateEdited(Object.assign(Object.assign({}, cr), {
310
- registerManagerNotes
311
- })) : undefined
312
- });
313
- } else if (selectedItem === 'proposals') {
314
- detailView = (0, _core.jsx)(_core2.NonIdealState, {
315
- description: updateObjects ? (0, _core.jsx)(_react.default.Fragment, null, (0, _core.jsx)(_core2.Callout, {
316
- style: {
317
- textAlign: 'left',
318
- marginBottom: '1rem'
319
- },
320
- title: "Managing your proposals",
321
- intent: "primary"
322
- }, (0, _core.jsx)("p", null, "Select a proposed change on the left to\u00A0view or\u00A0edit\u00A0it."), (0, _core.jsx)("p", null, "To propose a change, close this CR, navigate to an item you want to change in item list, and\u00A0click \u201CPropose\u00A0a\u00A0change\u201D."), (0, _core.jsx)("p", null, "You won\u2019t be able to edit your change request once you have submitted it.")), (0, _core.jsx)(_core2.Menu, {
323
- className: _core2.Classes.ELEVATION_1,
324
- style: {
325
- marginBottom: '1rem'
326
- }
327
- }, (0, _core.jsx)(_core2.Menu.Divider, {
328
- title: "New item"
329
- }), Object.entries(itemClassConfiguration).map(([classID, classCfg]) => (0, _core.jsx)(_core2.Menu.Item, {
330
- key: classID,
331
- icon: "add",
332
- text: classCfg.meta.title,
333
- disabled: !makeRandomID,
334
- onClick: makeRandomID ? async () => handleAddProposal(`${classCfg.meta.id}/${await makeRandomID()}`, classCfg.defaults || {}) : undefined
335
- })))) : (0, _core.jsx)(_core2.Callout, {
336
- style: {
337
- textAlign: 'left'
338
- },
339
- title: "Reviewing proposed changes",
340
- intent: "primary"
341
- }, "Select a proposed change on the left to view.")
342
- });
343
- } else if (cr.proposals[selectedItem] && (itemData[selectedItem] || cr.proposals[selectedItem].type === 'addition')) {
344
- const proposal = cr.proposals[selectedItem];
345
- const classID = selectedItem.split('/')[0];
346
- const classConfig = Object.values(itemClassConfiguration).find(cls => cls.meta.id === classID);
347
- const existingItemData = itemData[selectedItem];
348
- const getRelatedClass = (0, _util._getRelatedClass)(itemClassConfiguration);
349
-
350
- if (classConfig && (existingItemData || proposal.type === 'addition')) {
351
- try {
352
- detailView = (0, _core.jsx)(ProposalDetails, {
353
- value: proposal,
354
- classConfig: classConfig,
355
- existingItemData: existingItemData || undefined,
356
- getRelatedClass: getRelatedClass,
357
- useRegisterItemData: useRegisterItemData,
358
- onAccept: updateObjects ? (itemID, clsID) => handleAcceptProposal(itemID, clsID, proposal) : undefined,
359
- ItemView: updateObjects && proposal.type !== 'amendment' ? classConfig.views.editView : classConfig.views.detailView,
360
- onChange: updateObjects ? proposal => updateEdited((0, _immutabilityHelper.default)(cr, {
361
- proposals: {
362
- [selectedItem]: {
363
- $set: proposal
364
- }
365
- }
366
- })) : undefined,
367
- onDelete: updateObjects ? () => updateEdited((0, _immutabilityHelper.default)(cr, {
368
- proposals: {
369
- $unset: [selectedItem]
370
- }
371
- })) : undefined
372
- });
373
- } catch (e) {
374
- detailView = (0, _core.jsx)(_core2.NonIdealState, {
375
- icon: "heart-broken",
376
- title: "Unable to load existing item data"
377
- });
378
- }
379
- } else {
380
- detailView = (0, _core.jsx)(_core2.NonIdealState, {
381
- icon: "heart-broken",
382
- title: "Unknown item class or missing item data!"
383
- });
384
- }
385
- } else {
386
- detailView = (0, _core.jsx)(_core2.NonIdealState, {
387
- icon: "heart-broken",
388
- title: "A strange thing happened",
389
- description: `Unable to find selected item “${selectedItem}”`
390
- });
391
- }
392
-
393
- el = (0, _core.jsx)(_MainView.MainView, {
394
- actions: actions
395
- }, (0, _core.jsx)("div", {
396
- css: (0, _core.css)`flex-shrink: 0; width: 30vw; display: flex; flex-flow: column nowrap; background: ${_core2.Colors.WHITE}`
397
- }, (0, _core.jsx)(CRNavigation, {
398
- itemClassConfiguration: itemClassConfiguration,
399
- useRegisterItemData: useRegisterItemData,
400
- proposals: cr.proposals,
401
- itemData: itemData,
402
- onSelect: selectItem,
403
- selectedItem: selectedItem,
404
- enableControlBodyInput: updateObjects !== undefined || cr.controlBodyDecisionEvent !== undefined || cr.controlBodyNotes !== undefined,
405
- enableManagerNotes: updateObjects !== undefined || cr.registerManagerNotes !== undefined
406
- })), (0, _core.jsx)("div", {
407
- css: (0, _core.css)`flex: 1; padding: 1rem;`,
408
- className: _core2.Classes.ELEVATION_1
409
- }, detailView));
410
- } else {
411
- el = (0, _core.jsx)(_core2.NonIdealState, {
412
- icon: "heart-broken",
413
- title: "Failed to load selected change request"
414
- });
415
- }
416
-
417
- return el;
418
- };
419
-
420
- exports.ChangeRequestView = ChangeRequestView;
421
-
422
- const CRNavigation = function ({
423
- itemData,
424
- proposals,
425
- itemClassConfiguration,
426
- useRegisterItemData,
427
- onSelect,
428
- selectedItem,
429
- enableControlBodyInput,
430
- enableManagerNotes
431
- }) {
432
- function handleSelect(node) {
433
- onSelect(node.id);
434
- }
435
-
436
- const getRelatedClass = (0, _util._getRelatedClass)(itemClassConfiguration);
437
- const nodes = [{
438
- id: 'justification',
439
- label: "Justification",
440
- isSelected: selectedItem === 'justification'
441
- }, {
442
- id: 'control-body',
443
- disabled: !enableControlBodyInput,
444
- label: "Control body input",
445
- isSelected: selectedItem === 'control-body'
446
- }, {
447
- id: 'manager',
448
- disabled: !enableManagerNotes,
449
- label: "Manager notes",
450
- isSelected: selectedItem === 'manager'
451
- }, {
452
- id: 'proposals',
453
- label: "Proposals",
454
- isExpanded: true,
455
- isSelected: selectedItem === 'proposals',
456
- hasCaret: Object.keys(proposals).length > 0,
457
- childNodes: [...Object.entries(proposals).map(([itemIDWithClass, proposal]) => {
458
- var _a, _b;
459
-
460
- const [classID, itemID] = itemIDWithClass.split('/');
461
- const clsConfig = Object.values(itemClassConfiguration).find(cls => cls.meta.id === classID);
462
- const View = clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.views.listItemView;
463
- const data = ((_a = itemData[itemIDWithClass]) === null || _a === void 0 ? void 0 : _a.data) || undefined;
464
- let label;
465
-
466
- if (!View) {
467
- label = (0, _core.jsx)("span", null, itemIDWithClass);
468
- } else if (proposal.type === 'addition') {
469
- label = (0, _core.jsx)(View, {
470
- itemID: itemID,
471
- css: (0, _core.css)`white-space: nowrap;`,
472
- getRelatedItemClassConfiguration: getRelatedClass,
473
- useRegisterItemData: useRegisterItemData,
474
- itemData: proposal.payload
475
- });
476
- } else if (data !== undefined) {
477
- label = (0, _core.jsx)(View, {
478
- itemID: itemID,
479
- css: (0, _core.css)`white-space: nowrap;`,
480
- useRegisterItemData: useRegisterItemData,
481
- getRelatedItemClassConfiguration: getRelatedClass,
482
- itemData: data
483
- });
484
- } else {
485
- label = (0, _core.jsx)("span", null, "Unable to read item");
486
- }
487
-
488
- return {
489
- isSelected: selectedItem === itemIDWithClass,
490
- id: itemIDWithClass,
491
- icon: PROPOSAL_ICON[proposal.type],
492
- secondaryLabel: (0, _core.jsx)(_core2.Tag, {
493
- minimal: true,
494
- css: (0, _core.css)`white-space: nowrap;`,
495
- title: clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.meta.title
496
- }, ((_b = Object.entries(itemClassConfiguration).find(([_, cfg]) => cfg.meta.id === classID)) === null || _b === void 0 ? void 0 : _b[0]) || (clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.meta.title)),
497
- label
498
- };
499
- })]
500
- }];
501
- return (0, _core.jsx)(_core2.Tree, {
502
- contents: nodes,
503
- onNodeClick: handleSelect
504
- });
505
- };
506
-
507
- const CRJustification = function ({
508
- value,
509
- onChange
510
- }) {
511
- return (0, _core.jsx)(_core2.FormGroup, {
512
- label: "Justification:"
513
- }, (0, _core.jsx)(_core2.TextArea, {
514
- fill: true,
515
- disabled: !onChange,
516
- value: value,
517
- onChange: evt => onChange ? onChange(evt.currentTarget.value) : void 0
518
- }));
519
- };
520
-
521
- const CRControlBodyInput = function ({
522
- value,
523
- onChange
524
- }) {
525
- function handleNotesChange(evt) {
526
- onChange ? onChange(evt.currentTarget.value || undefined, value.event) : void 0;
527
- }
528
-
529
- function handleEventChange(evt) {
530
- onChange ? onChange(value.notes, evt.currentTarget.value || undefined) : void 0;
531
- }
532
-
533
- return (0, _core.jsx)(_react.default.Fragment, null, (0, _core.jsx)(_core2.FormGroup, {
534
- label: "Control body notes"
535
- }, (0, _core.jsx)(_core2.TextArea, {
536
- fill: true,
537
- disabled: !onChange,
538
- value: value.notes || '',
539
- onChange: handleNotesChange
540
- })), (0, _core.jsx)(_core2.FormGroup, {
541
- label: "Control body decision event"
542
- }, (0, _core.jsx)(_core2.TextArea, {
543
- fill: true,
544
- disabled: !onChange,
545
- value: value.event || '',
546
- onChange: handleEventChange
547
- })));
548
- };
549
-
550
- const CRManagerNotes = function ({
551
- value,
552
- onChange
553
- }) {
554
- return (0, _core.jsx)(_core2.FormGroup, {
555
- label: "Manager notes:"
556
- }, (0, _core.jsx)(_core2.TextArea, {
557
- fill: true,
558
- disabled: !onChange,
559
- value: value || '',
560
- onChange: evt => onChange ? onChange(evt.currentTarget.value || undefined) : void 0
561
- }));
562
- };
563
-
564
- const ProposalDetails = function ({
565
- value,
566
- onChange,
567
- ItemView,
568
- existingItemData,
569
- classConfig,
570
- getRelatedClass,
571
- useRegisterItemData
572
- }) {
573
- let itemView;
574
- let proposalProperties;
575
-
576
- if (value.type === 'amendment') {
577
- proposalProperties = (0, _core.jsx)(_core2.FormGroup, {
578
- inline: true,
579
- label: "Supersede with:"
580
- }, (0, _core.jsx)(_core2.InputGroup, {
581
- value: value.amendmentType === 'supersession' ? value.supersedingItemID : '',
582
- disabled: !onChange,
583
- placeholder: "Item ID",
584
- onChange: onChange ? evt => {
585
- if (!onChange) {
586
- return;
587
- }
588
-
589
- const itemID = evt.currentTarget.value;
590
-
591
- if (itemID.trim() === '') {
592
- const newVal = (0, _immutabilityHelper.default)(value, {
593
- $unset: ['supersedingItemID']
594
- });
595
- onChange(Object.assign(Object.assign({}, newVal), {
596
- amendmentType: 'retirement'
597
- }));
598
- } else {
599
- onChange(Object.assign(Object.assign({}, value), {
600
- amendmentType: 'supersession',
601
- supersedingItemID: itemID
602
- }));
603
- }
604
- } : undefined
605
- }));
606
- } else {
607
- proposalProperties = null;
608
- }
609
-
610
- const itemData = value.type === 'addition' ? value.payload : existingItemData;
611
-
612
- if (itemData === undefined) {
613
- itemView = (0, _core.jsx)(_core2.NonIdealState, {
614
- icon: "heart-broken",
615
- title: "Unable to display this item"
616
- });
617
- } else if (onChange && value.type !== 'amendment') {
618
- const View = ItemView;
619
- itemView = (0, _core.jsx)(View, {
620
- itemData: itemData,
621
- getRelatedItemClassConfiguration: getRelatedClass,
622
- useRegisterItemData: useRegisterItemData,
623
- onChange: onChange ? payload => onChange ? onChange(Object.assign(Object.assign({}, value), {
624
- payload
625
- })) : void 0 : undefined
626
- });
627
- } else {
628
- const View = ItemView;
629
- itemView = (0, _core.jsx)(View, {
630
- useRegisterItemData: useRegisterItemData,
631
- getRelatedItemClassConfiguration: getRelatedClass,
632
- itemData: itemData
633
- });
634
- }
635
-
636
- const canChangeProposalType = value.type !== 'addition';
637
-
638
- function handleTypeChange(type) {
639
- const pt = type;
640
-
641
- if (_types.PROPOSAL_TYPES.indexOf(pt) < 0) {
642
- return;
643
- }
644
-
645
- if (!onChange || !canChangeProposalType || pt === 'addition' || existingItemData === undefined) {
646
- return;
647
- }
648
-
649
- if (pt === 'amendment') {
650
- onChange((0, _immutabilityHelper.default)(value, {
651
- type: {
652
- $set: pt
653
- },
654
- amendmentType: {
655
- $set: 'retirement'
656
- },
657
- $unset: ['payload']
658
- }));
659
- } else {
660
- onChange((0, _immutabilityHelper.default)(value, {
661
- type: {
662
- $set: pt
663
- },
664
- payload: existingItemData
665
- }));
666
- }
667
- }
668
-
669
- return (0, _core.jsx)("div", {
670
- css: (0, _core.css)`flex: 1; display: flex; flex-flow: column nowrap;`
671
- }, (0, _core.jsx)("div", {
672
- css: (0, _core.css)`flex-shrink: 0; display: flex; flex-flow: row nowrap; align-items: center; margin-bottom: 1rem;`
673
- }, (0, _core.jsx)(_core2.HTMLSelect, {
674
- options: _types.PROPOSAL_TYPES.map(pt => ({
675
- value: pt,
676
- label: pt
677
- })),
678
- iconProps: {
679
- icon: PROPOSAL_ICON[value.type]
680
- },
681
- value: value.type,
682
- disabled: !onChange || !canChangeProposalType || existingItemData === undefined,
683
- onChange: onChange && canChangeProposalType && existingItemData !== undefined ? evt => handleTypeChange(evt.currentTarget.value) : undefined
684
- }), "\u2002 of a \u2002", (0, _core.jsx)(_core2.H4, {
685
- css: (0, _core.css)`margin: 0;`
686
- }, classConfig.meta.title), proposalProperties), (0, _core.jsx)("div", {
687
- css: (0, _core.css)`flex: 1; overflow-y: auto;`
688
- }, itemView));
689
- };