@riboseinc/paneron-registry-kit 2.2.29 → 2.2.31

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 (85) hide show
  1. package/index.d.ts +4 -1
  2. package/index.js +26 -0
  3. package/index.js.map +1 -1
  4. package/item-classes/Tree.d.ts +5 -0
  5. package/item-classes/Tree.js +115 -0
  6. package/item-classes/Tree.js.map +1 -0
  7. package/item-classes/treeNodes.d.ts +12 -0
  8. package/item-classes/treeNodes.js +68 -0
  9. package/item-classes/treeNodes.js.map +1 -0
  10. package/package.json +2 -2
  11. package/proposals/actionableGroups/Tree.d.ts +7 -0
  12. package/proposals/actionableGroups/Tree.js +179 -0
  13. package/proposals/actionableGroups/Tree.js.map +1 -0
  14. package/proposals/actionableGroups/queries.d.ts +5 -0
  15. package/proposals/actionableGroups/queries.js +81 -0
  16. package/proposals/actionableGroups/queries.js.map +1 -0
  17. package/proposals/actionableGroups/treeNodes.d.ts +26 -0
  18. package/proposals/actionableGroups/treeNodes.js +94 -0
  19. package/proposals/actionableGroups/treeNodes.js.map +1 -0
  20. package/proposals/actionableGroups/types.d.ts +6 -0
  21. package/proposals/actionableGroups/types.js +5 -0
  22. package/proposals/actionableGroups/types.js.map +1 -0
  23. package/types/cr.d.ts +2 -1
  24. package/types/cr.js.map +1 -1
  25. package/types/item.d.ts +4 -1
  26. package/types/item.js.map +1 -1
  27. package/types/register.d.ts +4 -1
  28. package/types/register.js.map +1 -1
  29. package/types/stakeholder.d.ts +24 -41
  30. package/types/stakeholder.js +48 -16
  31. package/types/stakeholder.js.map +1 -1
  32. package/types/views.d.ts +4 -0
  33. package/types/views.js.map +1 -1
  34. package/views/BrowserCtx.d.ts +1 -1
  35. package/views/BrowserCtx.js.map +1 -1
  36. package/views/GenericRelatedItemView.js +21 -8
  37. package/views/GenericRelatedItemView.js.map +1 -1
  38. package/views/ItemDetailsDrawer.d.ts +1 -0
  39. package/views/ItemDetailsDrawer.js +4 -2
  40. package/views/ItemDetailsDrawer.js.map +1 -1
  41. package/views/ItemSearchDrawer.js +1 -1
  42. package/views/ItemSearchDrawer.js.map +1 -1
  43. package/views/Party.d.ts +0 -0
  44. package/views/Party.js +154 -0
  45. package/views/Party.js.map +1 -0
  46. package/views/RegisterStakeholder.js +2 -2
  47. package/views/RegisterStakeholder.js.map +1 -1
  48. package/views/StatefulTree.d.ts +19 -0
  49. package/views/StatefulTree.js +128 -0
  50. package/views/StatefulTree.js.map +1 -0
  51. package/views/change-request/ChangeRequestContext.js.map +1 -1
  52. package/views/change-request/TransitionHistory.js +6 -3
  53. package/views/change-request/TransitionHistory.js.map +1 -1
  54. package/views/change-request/TransitionOptions.js +37 -13
  55. package/views/change-request/TransitionOptions.js.map +1 -1
  56. package/views/detail/RegisterHome/index.js +20 -79
  57. package/views/detail/RegisterHome/index.js.map +1 -1
  58. package/views/detail/RegisterItem/index.d.ts +2 -2
  59. package/views/detail/RegisterItem/index.js +21 -14
  60. package/views/detail/RegisterItem/index.js.map +1 -1
  61. package/views/detail/RegisterItemClass.d.ts +12 -0
  62. package/views/detail/RegisterItemClass.js +98 -0
  63. package/views/detail/RegisterItemClass.js.map +1 -0
  64. package/views/detail/RegisterMeta/RegisterMetaForm.js +272 -114
  65. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
  66. package/views/detail/RegisterMeta/index.js +1 -1
  67. package/views/detail/RegisterMeta/index.js.map +1 -1
  68. package/views/hooks/useStakeholder.d.ts +0 -0
  69. package/views/hooks/useStakeholder.js +1 -0
  70. package/views/hooks/useStakeholder.js.map +1 -0
  71. package/views/index.d.ts +1 -0
  72. package/views/index.js +71 -8
  73. package/views/index.js.map +1 -1
  74. package/views/protocolRegistry.d.ts +1 -0
  75. package/views/protocolRegistry.js +4 -0
  76. package/views/protocolRegistry.js.map +1 -1
  77. package/views/sidebar/Browse/index.js +8 -44
  78. package/views/sidebar/Browse/index.js.map +1 -1
  79. package/views/sidebar/Registration/index.js.map +1 -1
  80. package/views/sidebar/index.d.ts +2 -1
  81. package/views/sidebar/index.js +77 -62
  82. package/views/sidebar/index.js.map +1 -1
  83. package/views/util.d.ts +5 -0
  84. package/views/util.js +42 -4
  85. package/views/util.js.map +1 -1
@@ -13,14 +13,14 @@ var _react2 = require("@emotion/react");
13
13
 
14
14
  var _core = require("@blueprintjs/core");
15
15
 
16
+ var _select = require("@blueprintjs/select");
17
+
16
18
  var _datetime = require("@blueprintjs/datetime");
17
19
 
18
20
  var _HelpTooltip = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/HelpTooltip"));
19
21
 
20
22
  var _util = require("../../../views/util");
21
23
 
22
- var _types = require("../../../types");
23
-
24
24
  var _stakeholder = require("../../../types/stakeholder");
25
25
 
26
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -34,17 +34,23 @@ const DUMMY_VERSION = {
34
34
  };
35
35
  const DUMMY_CONTACT = {
36
36
  label: 'email',
37
- value: ''
38
- };
39
- const DUMMY_PARTY = {
40
- name: '',
41
- contacts: [DUMMY_CONTACT]
37
+ value: 'example@example.com'
42
38
  };
39
+ const DUMMY_ORG = {
40
+ name: 'New organization',
41
+ logoURL: ''
42
+ }; // const DUMMY_PARTY: Register["stakeholders"][number]["parties"][number] = {
43
+ // name: '',
44
+ // contacts: [DUMMY_CONTACT],
45
+ // };
46
+
43
47
  const DUMMY_STAKEHOLDER = {
44
- role: _stakeholder.StakeholderRole.Submitter,
45
- name: '',
48
+ roles: [_stakeholder.StakeholderRole.Submitter],
49
+ name: 'New stakeholder',
46
50
  gitServerUsername: undefined,
47
- parties: [DUMMY_PARTY]
51
+ affiliations: {},
52
+ contacts: [DUMMY_CONTACT] //parties: [DUMMY_PARTY],
53
+
48
54
  };
49
55
 
50
56
  const RegisterMetaForm = function ({
@@ -52,9 +58,7 @@ const RegisterMetaForm = function ({
52
58
  onChange,
53
59
  className
54
60
  }) {
55
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
56
-
57
- console.debug("Rendering RegisterMetaForm");
61
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
58
62
 
59
63
  function handleOperatingLanguageChange(fieldName) {
60
64
  return evt => {
@@ -80,6 +84,8 @@ const RegisterMetaForm = function ({
80
84
  }
81
85
 
82
86
  const stakeholders = (_a = value.stakeholders) !== null && _a !== void 0 ? _a : [];
87
+ const orgs = (_b = value.organizations) !== null && _b !== void 0 ? _b : {};
88
+ const organizationIDs = Object.keys(orgs);
83
89
 
84
90
  function makeStakeholderChangeHandler(idx, func) {
85
91
  return makeFormEventHandler(val => ({
@@ -103,6 +109,54 @@ const RegisterMetaForm = function ({
103
109
  }));
104
110
  }
105
111
 
112
+ function makeOrgChangeHandler(orgID, func) {
113
+ return makeFormEventHandler(val => ({
114
+ organizations: {
115
+ [orgID]: func(val)
116
+ }
117
+ }));
118
+ }
119
+
120
+ function handleOrgAdd() {
121
+ const newID = crypto.randomUUID();
122
+ onChange({ ...value,
123
+ organizations: { ...orgs,
124
+ [newID]: DUMMY_ORG
125
+ }
126
+ });
127
+ }
128
+
129
+ function handleOrgDelete(orgID) {
130
+ onChange((0, _immutabilityHelper.default)(value, {
131
+ organizations: {
132
+ $unset: [orgID]
133
+ }
134
+ }));
135
+ }
136
+
137
+ function findAffiliations(orgID) {
138
+ return stakeholders.filter(s => {
139
+ var _a;
140
+
141
+ return ((_a = s.affiliations) === null || _a === void 0 ? void 0 : _a[orgID]) !== undefined;
142
+ }).flatMap(s => {
143
+ var _a;
144
+
145
+ return Object.values((_a = s.affiliations) !== null && _a !== void 0 ? _a : {});
146
+ });
147
+ }
148
+
149
+ function findAffiliationOptions(s) {
150
+ return Object.entries(orgs).filter(([orgID]) => {
151
+ var _a;
152
+
153
+ return ((_a = s.affiliations) === null || _a === void 0 ? void 0 : _a[orgID]) === undefined;
154
+ }).map(([orgID, org]) => ({
155
+ value: orgID,
156
+ label: org.name
157
+ }));
158
+ }
159
+
106
160
  return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
107
161
  label: "Basics:",
108
162
  paddingPx: PADDING_PX
@@ -148,17 +202,17 @@ const RegisterMetaForm = function ({
148
202
  }, (0, _react2.jsx)(_core.InputGroup, {
149
203
  readOnly: !onChange,
150
204
  placeholder: "E.g., Welsh",
151
- value: (_c = (_b = value.operatingLanguage) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '',
205
+ value: (_d = (_c = value.operatingLanguage) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',
152
206
  onChange: handleOperatingLanguageChange('name')
153
207
  }), (0, _react2.jsx)(_core.InputGroup, {
154
208
  readOnly: !onChange,
155
209
  placeholder: "3-character numerical country code from ISO 3166-1",
156
- value: (_e = (_d = value.operatingLanguage) === null || _d === void 0 ? void 0 : _d.country) !== null && _e !== void 0 ? _e : '',
210
+ value: (_f = (_e = value.operatingLanguage) === null || _e === void 0 ? void 0 : _e.country) !== null && _f !== void 0 ? _f : '',
157
211
  onChange: handleOperatingLanguageChange('country')
158
212
  }), (0, _react2.jsx)(_core.InputGroup, {
159
213
  readOnly: !onChange,
160
214
  placeholder: "3-character language code from ISO 639-2",
161
- value: (_g = (_f = value.operatingLanguage) === null || _f === void 0 ? void 0 : _f.languageCode) !== null && _g !== void 0 ? _g : '',
215
+ value: (_h = (_g = value.operatingLanguage) === null || _g === void 0 ? void 0 : _g.languageCode) !== null && _h !== void 0 ? _h : '',
162
216
  onChange: handleOperatingLanguageChange('languageCode')
163
217
  })))), (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
164
218
  label: "Version: ",
@@ -168,7 +222,7 @@ const RegisterMetaForm = function ({
168
222
  }, (0, _react2.jsx)(_core.FormGroup, {
169
223
  label: "Identifier: "
170
224
  }, (0, _react2.jsx)(_core.InputGroup, {
171
- value: (_j = (_h = value.version) === null || _h === void 0 ? void 0 : _h.id) !== null && _j !== void 0 ? _j : '',
225
+ value: (_k = (_j = value.version) === null || _j === void 0 ? void 0 : _j.id) !== null && _k !== void 0 ? _k : '',
172
226
  readOnly: !onChange,
173
227
  placeholder: "E.g., 1.2",
174
228
  onChange: makeFormEventHandler(val => ({
@@ -186,7 +240,7 @@ const RegisterMetaForm = function ({
186
240
  }, (0, _react2.jsx)(_datetime.DatePicker, {
187
241
  css: (0, _react2.css)`margin: 0 -${PADDING_PX - 1}px;`,
188
242
  timePrecision: _datetime.TimePrecision.MINUTE,
189
- value: (_l = (_k = value.version) === null || _k === void 0 ? void 0 : _k.timestamp) !== null && _l !== void 0 ? _l : null,
243
+ value: (_m = (_l = value.version) === null || _l === void 0 ? void 0 : _l.timestamp) !== null && _m !== void 0 ? _m : null,
190
244
  showActionsBar: onChange ? true : false,
191
245
  onChange: val => onChange((0, _immutabilityHelper.default)(value, val !== null ? {
192
246
  version: v => (0, _immutabilityHelper.default)(v !== null && v !== void 0 ? v : DUMMY_VERSION, {
@@ -199,34 +253,30 @@ const RegisterMetaForm = function ({
199
253
  }))
200
254
  }))), (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
201
255
  paddingPx: PADDING_PX,
202
- label: "Stakeholders:",
203
- css: (0, _react2.css)`min-width: max-content`,
256
+ label: "Organizations:",
257
+ css: (0, _react2.css)`min-width: 100%`,
204
258
  helperText: onChange ? (0, _react2.jsx)(_core.Button, {
205
- onClick: handleStakeholderAdd,
259
+ onClick: handleOrgAdd,
206
260
  icon: "add"
207
261
  }, "Add") : null
208
- }, stakeholders.length > 0 ? (0, _react2.jsx)(_core.HTMLTable, {
262
+ }, organizationIDs.length > 0 ? (0, _react2.jsx)(_core.HTMLTable, {
209
263
  css: (0, _react2.css)`margin: 0 -${PADDING_PX}px;`
210
264
  }, (0, _react2.jsx)("thead", null, (0, _react2.jsx)("tr", {
211
265
  css: (0, _react2.css)`& > * { white-space: nowrap }`
212
- }, (0, _react2.jsx)("th", null, "Role"), (0, _react2.jsx)("th", null, "Name"), (0, _react2.jsx)("th", null, "Git server username"), (0, _react2.jsx)("th", null, "Parties"), (0, _react2.jsx)("th", null, "Name"), (0, _react2.jsx)("th", null, "Email"))), (0, _react2.jsx)("tbody", null, [...stakeholders.entries()].map(([idx, s]) => (0, _react2.jsx)("tr", {
213
- key: idx
214
- }, (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.HTMLSelect, {
215
- options: _stakeholder.STAKEHOLDER_ROLES.map(r => ({
216
- value: r,
217
- label: r
218
- })),
219
- disabled: !onChange,
220
- onChange: makeStakeholderChangeHandler(idx, val => (0, _types.isStakeholderRole)(val) ? {
221
- role: {
222
- $set: val
223
- }
224
- } // Why do we need to cast this
225
- : {}),
226
- value: s.role
227
- })), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.InputGroup, {
266
+ }, (0, _react2.jsx)("th", null, "Name"), (0, _react2.jsx)("th", null, "Logo URL"))), (0, _react2.jsx)("tbody", null, [...Object.entries(value.organizations)].map(([orgID, s]) => (0, _react2.jsx)("tr", {
267
+ key: orgID
268
+ }, (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.InputGroup, {
228
269
  readOnly: !onChange,
229
- onChange: makeStakeholderChangeHandler(idx, val => ({
270
+ rightElement: (0, _react2.jsx)(_core.Button, {
271
+ key: "delete",
272
+ outlined: true,
273
+ disabled: !onChange || findAffiliations(orgID).length > 0,
274
+ title: "Delete this organization",
275
+ onClick: () => handleOrgDelete(orgID),
276
+ icon: "cross",
277
+ intent: "warning"
278
+ }),
279
+ onChange: makeOrgChangeHandler(orgID, val => ({
230
280
  name: {
231
281
  $set: val
232
282
  }
@@ -234,92 +284,200 @@ const RegisterMetaForm = function ({
234
284
  value: s.name
235
285
  })), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.InputGroup, {
236
286
  readOnly: !onChange,
237
- onChange: makeStakeholderChangeHandler(idx, val => ({
238
- gitServerUsername: {
239
- $set: val || undefined
287
+ onChange: makeOrgChangeHandler(orgID, val => ({
288
+ logoURL: {
289
+ $set: val
240
290
  }
241
291
  })),
242
- value: s.gitServerUsername || ''
243
- })), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.ControlGroup, {
244
- vertical: s.parties.length > 1
245
- }, s.parties.map((party, partyIdx) => (0, _react2.jsx)(_core.ButtonGroup, {
246
- key: partyIdx
247
- }, s.parties.length < 2 ? (0, _react2.jsx)(_core.Button, {
248
- key: "delete",
249
- outlined: true,
250
- disabled: !onChange || s.parties.length > 1,
251
- title: "Delete this stakeholder",
252
- onClick: () => handleStakeholderDelete(idx),
253
- icon: "cross",
254
- intent: "warning"
255
- }) : (0, _react2.jsx)(_core.Button, {
256
- key: "delete",
257
- outlined: true,
258
- disabled: !onChange || s.parties.length < 2 || party.name !== '',
259
- title: "Delete this party",
260
- onClick: () => onChange((0, _immutabilityHelper.default)(value, {
261
- stakeholders: {
262
- [idx]: {
263
- parties: {
264
- $splice: [[partyIdx, 1]]
265
- }
292
+ value: s.logoURL
293
+ })))))) : null), (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
294
+ paddingPx: PADDING_PX,
295
+ label: "Users:",
296
+ css: (0, _react2.css)`min-width: 100%`,
297
+ helperText: onChange ? (0, _react2.jsx)(_core.Button, {
298
+ onClick: handleStakeholderAdd,
299
+ icon: "add"
300
+ }, "Add") : null
301
+ }, stakeholders.length > 0 ? (0, _react2.jsx)(_core.HTMLTable, {
302
+ css: (0, _react2.css)`margin: 0 -${PADDING_PX}px;`
303
+ }, (0, _react2.jsx)("thead", null, (0, _react2.jsx)("tr", {
304
+ css: (0, _react2.css)`& > * { white-space: nowrap }`
305
+ }, (0, _react2.jsx)("th", null, "Name"), (0, _react2.jsx)("th", null, "Git server username"), (0, _react2.jsx)("th", null, "Role"), (0, _react2.jsx)("th", null, "Affiliations"), (0, _react2.jsx)("th", null, "Contact email"))), (0, _react2.jsx)("tbody", null, [...stakeholders.entries()].map(([idx, s]) => {
306
+ var _a, _b, _c, _d;
307
+
308
+ return (0, _react2.jsx)("tr", {
309
+ key: idx
310
+ }, (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.InputGroup, {
311
+ readOnly: !onChange,
312
+ onChange: makeStakeholderChangeHandler(idx, val => ({
313
+ name: {
314
+ $set: val
266
315
  }
267
- }
268
- })),
269
- icon: "cross"
270
- }), partyIdx === s.parties.length - 1 ? (0, _react2.jsx)(_core.Button, {
271
- key: "add",
272
- outlined: true,
273
- disabled: !onChange,
274
- onClick: () => onChange((0, _immutabilityHelper.default)(value, {
275
- stakeholders: {
276
- [idx]: {
277
- parties: {
278
- $push: [DUMMY_PARTY]
316
+ })),
317
+ rightElement: (0, _react2.jsx)(_core.Button, {
318
+ key: "delete",
319
+ outlined: true,
320
+ disabled: !onChange,
321
+ title: "Delete this stakeholder",
322
+ onClick: () => handleStakeholderDelete(idx),
323
+ icon: "cross",
324
+ intent: "warning"
325
+ }),
326
+ value: s.name
327
+ })), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.InputGroup, {
328
+ readOnly: !onChange,
329
+ onChange: makeStakeholderChangeHandler(idx, val => ({
330
+ gitServerUsername: {
331
+ $set: val || undefined
332
+ }
333
+ })),
334
+ value: s.gitServerUsername || ''
335
+ })), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_select.MultiSelect2, {
336
+ items: _stakeholder.STAKEHOLDER_ROLES,
337
+ popoverProps: {
338
+ minimal: true,
339
+ matchTargetWidth: true
340
+ },
341
+ itemPredicate: (query, roleID) => // Match can be in both role ID and role label
342
+ `${roleID} ${_stakeholder.StakeholderRoleLabels[roleID]}`.toLowerCase().indexOf(query.toLowerCase()) >= 0,
343
+ resetOnSelect: true,
344
+ css: (0, _react2.css)`max-width: 300px;`,
345
+ selectedItems: [...((_a = s.roles) !== null && _a !== void 0 ? _a : [s.role])],
346
+ disabled: !onChange || !s.roles,
347
+ itemDisabled: roleID => {
348
+ var _a;
349
+
350
+ return (_a = s.roles) === null || _a === void 0 ? void 0 : _a.includes(roleID);
351
+ },
352
+ tagRenderer: roleID => _stakeholder.StakeholderRoleLabels[roleID],
353
+ // Make each role take full width & so stak them vertically
354
+ tagInputProps: {
355
+ tagProps: {
356
+ className: 'bp4-fill'
357
+ }
358
+ },
359
+ onRemove: roleID => onChange((0, _immutabilityHelper.default)(value, {
360
+ stakeholders: {
361
+ [idx]: {
362
+ roles: {
363
+ $splice: [[s.roles.indexOf(roleID), 1]]
364
+ }
279
365
  }
280
366
  }
281
- }
282
- })),
283
- title: "Append a party",
284
- icon: "plus"
285
- }) : null)))), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.ControlGroup, {
286
- vertical: s.parties.length > 1
287
- }, s.parties.map((party, partyIdx) => (0, _react2.jsx)(_core.InputGroup, {
288
- key: partyIdx,
289
- readOnly: !onChange,
290
- placeholder: "Individual or organization",
291
- onChange: makeStakeholderChangeHandler(idx, val => ({
292
- parties: {
293
- [partyIdx]: {
294
- name: {
295
- $set: val
367
+ })),
368
+ itemRenderer: (roleID, {
369
+ handleClick,
370
+ modifiers: {
371
+ active,
372
+ disabled
373
+ }
374
+ }) => (0, _react2.jsx)(_core.MenuItem, {
375
+ text: _stakeholder.StakeholderRoleLabels[roleID],
376
+ active: active,
377
+ disabled: disabled,
378
+ onClick: handleClick
379
+ }),
380
+ onItemSelect: roleID => onChange((0, _immutabilityHelper.default)(value, {
381
+ stakeholders: {
382
+ [idx]: {
383
+ roles: {
384
+ $push: [roleID]
385
+ }
296
386
  }
297
387
  }
298
- }
299
- })),
300
- value: party.name
301
- })))), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.ControlGroup, {
302
- vertical: s.parties.length > 1
303
- }, s.parties.map((party, partyIdx) => (0, _react2.jsx)(_core.InputGroup, {
304
- key: partyIdx,
305
- type: "email",
306
- placeholder: "Contact email",
307
- readOnly: !onChange,
308
- onChange: makeStakeholderChangeHandler(idx, val => ({
309
- parties: {
310
- [partyIdx]: {
311
- contacts: {
312
- 0: {
313
- value: {
314
- $set: val
388
+ }))
389
+ })), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.ControlGroup, {
390
+ vertical: true
391
+ }, Object.entries((_b = s.affiliations) !== null && _b !== void 0 ? _b : {}).sort(([, aff], [, aff2]) => aff2.role.localeCompare(aff.role)).map(([orgID, affiliation], _affiliationIdx) => {
392
+ var _a, _b;
393
+
394
+ return (0, _react2.jsx)(_core.ButtonGroup, {
395
+ key: orgID
396
+ }, (0, _react2.jsx)(_core.InputGroup, {
397
+ key: "org",
398
+ readOnly: true,
399
+ value: (_b = (_a = orgs[orgID]) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : orgID,
400
+ rightElement: (0, _react2.jsx)(_core.Button, {
401
+ key: "delete",
402
+ outlined: true,
403
+ disabled: !onChange,
404
+ title: "Delete this affiliation",
405
+ onClick: () => onChange((0, _immutabilityHelper.default)(value, {
406
+ stakeholders: {
407
+ [idx]: {
408
+ affiliations: {
409
+ $unset: [orgID]
410
+ }
411
+ }
412
+ }
413
+ })),
414
+ icon: "cross"
415
+ })
416
+ }), (0, _react2.jsx)(_core.HTMLSelect, {
417
+ key: "set-role",
418
+ disabled: !onChange,
419
+ value: affiliation.role,
420
+ options: [{
421
+ value: 'pointOfContact',
422
+ label: 'point of contact'
423
+ }, {
424
+ value: 'member',
425
+ label: 'member'
426
+ }],
427
+ onChange: evt => onChange((0, _immutabilityHelper.default)(value, {
428
+ stakeholders: {
429
+ [idx]: {
430
+ affiliations: {
431
+ [orgID]: {
432
+ role: {
433
+ $set: evt.currentTarget.value
434
+ }
435
+ }
315
436
  }
316
437
  }
317
438
  }
439
+ })),
440
+ title: "Specify role in organization"
441
+ }));
442
+ }), findAffiliationOptions(s).length > 0 && onChange ? (0, _react2.jsx)(_core.HTMLSelect, {
443
+ key: "add",
444
+ options: [{
445
+ label: "Append affiliation…",
446
+ value: ''
447
+ }, ...findAffiliationOptions(s)],
448
+ value: "",
449
+ onChange: evt => {
450
+ var _a;
451
+
452
+ return ((_a = evt.currentTarget.value) === null || _a === void 0 ? void 0 : _a.trim()) !== '' ? onChange((0, _immutabilityHelper.default)(value, {
453
+ stakeholders: {
454
+ [idx]: {
455
+ affiliations: {
456
+ [evt.currentTarget.value]: {
457
+ $set: {
458
+ role: 'member'
459
+ }
460
+ }
461
+ }
462
+ }
463
+ }
464
+ })) : void 0;
465
+ },
466
+ title: "Append affiliation\u2026"
467
+ }) : null)), (0, _react2.jsx)("td", null, (0, _react2.jsx)(_core.InputGroup, {
468
+ readOnly: !onChange,
469
+ type: "email",
470
+ onChange: makeStakeholderChangeHandler(idx, val => ({
471
+ contacts: {
472
+ $set: [{
473
+ label: 'email',
474
+ value: val
475
+ }]
318
476
  }
319
- }
320
- })),
321
- value: party.contacts[0].value || ''
322
- })))))))) : null));
477
+ })),
478
+ value: ((_d = (_c = s.contacts) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.value) || ''
479
+ })));
480
+ }))) : null));
323
481
  };
324
482
 
325
483
  const PADDING_PX = 11;
@@ -1 +1 @@
1
- {"version":3,"file":"RegisterMetaForm.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterMeta/RegisterMetaForm.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport update, { type Spec } from 'immutability-helper';\nimport React from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n ControlGroup,\n InputGroup,\n FormGroup,\n TextArea,\n HTMLTable,\n HTMLSelect,\n Button,\n ButtonGroup,\n} from '@blueprintjs/core';\nimport { DatePicker, TimePrecision } from '@blueprintjs/datetime';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport { FormGroupAsCardInGrid } from '../../../views/util'; \nimport type { Register, RegisterStakeholder, Locale } from '../../../types';\nimport { isStakeholderRole } from '../../../types';\nimport { STAKEHOLDER_ROLES, StakeholderRole } from '../../../types/stakeholder';\n\n\n\nconst DUMMY_VERSION: Register[\"version\"] = {\n id: '',\n timestamp: new Date(),\n};\n\nconst DUMMY_CONTACT: Register[\"stakeholders\"][number][\"parties\"][number][\"contacts\"][number] = {\n label: 'email',\n value: '',\n};\n\nconst DUMMY_PARTY: Register[\"stakeholders\"][number][\"parties\"][number] = {\n name: '',\n contacts: [DUMMY_CONTACT],\n};\n\nconst DUMMY_STAKEHOLDER: Register[\"stakeholders\"][number] = {\n role: StakeholderRole.Submitter,\n name: '',\n gitServerUsername: undefined,\n parties: [DUMMY_PARTY],\n};\n\n\nconst RegisterMetaForm: React.FC<{\n value: Register;\n onChange?: (newMeta: Register) => void;\n className?: string;\n}> = function ({ value, onChange, className }) {\n\n console.debug(\"Rendering RegisterMetaForm\");\n\n function handleOperatingLanguageChange(fieldName: keyof Omit<Locale, 'characterEncoding'>) {\n return (evt: React.FormEvent<HTMLInputElement>) => {\n const newValue = update(value, { operatingLanguage: op => update(op ?? {}, { [fieldName]: { $set: evt.currentTarget.value } }) });\n onChange!(newValue);\n }\n }\n\n function makeFormEventHandler\n <T extends HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = HTMLInputElement>\n (func: (val: string) => Spec<typeof value>) {\n return (evt: React.FormEvent<T>) => {\n const spec = func(evt.currentTarget.value);\n if (spec) {\n onChange!(update(value, spec));\n }\n };\n }\n\n const stakeholders = value.stakeholders ?? [];\n\n function makeStakeholderChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n idx: number,\n func: (val: string) => Spec<typeof value[\"stakeholders\"][number]>,\n ) {\n return makeFormEventHandler<T>(val => ({ stakeholders: { [idx]: func(val) } }));\n }\n\n function handleStakeholderAdd() {\n onChange!({ ...value, stakeholders: [ ...stakeholders, DUMMY_STAKEHOLDER ] });\n }\n function handleStakeholderDelete(idx: number) {\n onChange!(update(value, { stakeholders: { $splice: [[idx, 1]] } }));\n }\n\n return (\n <>\n\n <FormGroupAsCardInGrid label=\"Basics:\" paddingPx={PADDING_PX}>\n <FormGroup label=\"Name:\">\n <InputGroup\n fill\n value={value.name || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ name: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Uniform resource identifier:\">\n <InputGroup\n fill\n type=\"url\"\n value={value.uniformResourceIdentifier || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ uniformResourceIdentifier: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Content summary:\">\n <TextArea\n fill\n value={value.contentSummary || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler<HTMLTextAreaElement>(val => ({ contentSummary: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Operating language (locale):\" helperText=\"Name, country and ISO 639-2 language code.\">\n <ControlGroup vertical>\n <InputGroup\n readOnly={!onChange}\n placeholder=\"E.g., Welsh\"\n value={value.operatingLanguage?.name ?? ''}\n onChange={handleOperatingLanguageChange('name')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character numerical country code from ISO 3166-1\"\n value={value.operatingLanguage?.country ?? ''}\n onChange={handleOperatingLanguageChange('country')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character language code from ISO 639-2\"\n value={value.operatingLanguage?.languageCode ?? ''}\n onChange={handleOperatingLanguageChange('languageCode')} />\n </ControlGroup>\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n label=\"Version: \"\n // Accommodation for date picker\n css={css`padding-bottom: 0;`}\n paddingPx={PADDING_PX}>\n <FormGroup label=\"Identifier: \">\n <InputGroup\n value={value.version?.id ?? ''}\n readOnly={!onChange}\n placeholder=\"E.g., 1.2\"\n onChange={makeFormEventHandler(val =>\n ({ version: v => update(v ?? DUMMY_VERSION, { id: { $set: val } }) })\n )}\n />\n </FormGroup>\n <FormGroup\n label=\"Published on: \"\n helperText={\n <>\n Date and time are\n <br />\n in {Intl.DateTimeFormat().resolvedOptions().timeZone}.\n {\" \"}\n <HelpTooltip content={<>\n Times are in your computer’s current time zone.\n {onChange\n ? \" When specifying, make sure to offset accordingly if it is different than register publication time zone.\"\n : null}\n </>} />\n </>}>\n <DatePicker\n css={css`margin: 0 -${PADDING_PX - 1}px;`}\n timePrecision={TimePrecision.MINUTE}\n value={value.version?.timestamp ?? null}\n showActionsBar={onChange ? true : false}\n onChange={(val: Date | null) =>\n onChange!(update(value, val !== null\n ? { version: v => update(v ?? DUMMY_VERSION, { timestamp: { $set: val } }) }\n : { $unset: ['version'] }))\n }\n />\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Stakeholders:\"\n css={css`min-width: max-content`}\n helperText={onChange\n ? <Button onClick={handleStakeholderAdd} icon=\"add\">Add</Button>\n : null}>\n {stakeholders.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Role</th>\n <th>Name</th>\n <th>Git server username</th>\n <th>Parties</th>\n <th>Name</th>\n <th>Email</th>\n </tr>\n </thead>\n <tbody>\n {[ ...stakeholders.entries() ].map(([idx, s]) =>\n <tr key={idx}>\n <td>\n <HTMLSelect\n options={STAKEHOLDER_ROLES.map(r => ({ value: r, label: r }))}\n disabled={!onChange}\n onChange={makeStakeholderChangeHandler<HTMLSelectElement>(idx, (val) =>\n isStakeholderRole(val)\n ? { role: { $set: val } } as Spec<RegisterStakeholder> // Why do we need to cast this\n : {}\n )}\n value={s.role} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ name: { $set: val } })\n )}\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ gitServerUsername: { $set: val || undefined } })\n )}\n value={s.gitServerUsername || ''} />\n </td>\n <td>\n <ControlGroup vertical={s.parties.length > 1}>\n {s.parties.map((party, partyIdx) =>\n <ButtonGroup key={partyIdx}>\n {s.parties.length < 2\n ? <Button\n key=\"delete\"\n outlined\n disabled={!onChange || s.parties.length > 1}\n title=\"Delete this stakeholder\"\n onClick={() => handleStakeholderDelete(idx)}\n icon=\"cross\"\n intent=\"warning\"\n />\n : <Button\n key=\"delete\"\n outlined\n disabled={!onChange || s.parties.length < 2 || party.name !== ''}\n title=\"Delete this party\"\n onClick={() => onChange!(update(value, { stakeholders: { [idx]: { parties: { $splice: [[ partyIdx, 1 ]] } } } }))}\n icon=\"cross\"\n />}\n {partyIdx === s.parties.length - 1\n ? <Button\n key=\"add\"\n outlined\n disabled={!onChange}\n onClick={() => onChange!(update(value, { stakeholders: { [idx]: { parties: { $push: [DUMMY_PARTY] } } } }))}\n title=\"Append a party\"\n icon=\"plus\"\n />\n : null}\n </ButtonGroup>\n )}\n </ControlGroup>\n </td>\n <td>\n <ControlGroup vertical={s.parties.length > 1}>\n {s.parties.map((party, partyIdx) =>\n <InputGroup\n key={partyIdx}\n readOnly={!onChange}\n placeholder=\"Individual or organization\"\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ parties: { [partyIdx]: { name: { $set: val } } } })\n )}\n value={(party as { name: string }).name}\n />\n )}\n </ControlGroup>\n </td>\n <td>\n <ControlGroup vertical={s.parties.length > 1}>\n {s.parties.map((party, partyIdx) =>\n <InputGroup\n key={partyIdx}\n type=\"email\"\n placeholder=\"Contact email\"\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ parties: { [partyIdx]: { contacts: { 0: { value: { $set: val } } } } } })\n )}\n value={party.contacts[0].value || ''} />\n )}\n </ControlGroup>\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n </>\n );\n};\n\n\nconst PADDING_PX = 11;\n\n\nexport default RegisterMetaForm;\n"]}
1
+ {"version":3,"file":"RegisterMetaForm.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterMeta/RegisterMetaForm.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport update, { type Spec } from 'immutability-helper';\nimport React from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n ControlGroup,\n InputGroup,\n FormGroup,\n TextArea,\n HTMLTable,\n HTMLSelect,\n Button,\n ButtonGroup,\n MenuItem,\n} from '@blueprintjs/core';\nimport { MultiSelect2 as Select } from '@blueprintjs/select';\nimport { DatePicker, TimePrecision } from '@blueprintjs/datetime';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport { FormGroupAsCardInGrid } from '../../../views/util'; \nimport type { Register, RegisterStakeholder, Locale } from '../../../types';\nimport {\n STAKEHOLDER_ROLES,\n type Contact,\n type Organization,\n type StakeholderOrgAffiliation,\n StakeholderRole,\n StakeholderRoleLabels,\n type StakeholderRoleType,\n} from '../../../types/stakeholder';\n\n\n\nconst DUMMY_VERSION: Register[\"version\"] = {\n id: '',\n timestamp: new Date(),\n} as const;\n\nconst DUMMY_CONTACT: Contact = {\n label: 'email',\n value: 'example@example.com',\n} as const;\n\nconst DUMMY_ORG: Organization = {\n name: 'New organization',\n logoURL: '',\n} as const;\n \n// const DUMMY_PARTY: Register[\"stakeholders\"][number][\"parties\"][number] = {\n// name: '',\n// contacts: [DUMMY_CONTACT],\n// };\n\nconst DUMMY_STAKEHOLDER: Register[\"stakeholders\"][number] = {\n roles: [StakeholderRole.Submitter],\n name: 'New stakeholder',\n gitServerUsername: undefined,\n affiliations: {},\n contacts: [DUMMY_CONTACT] as Contact[],\n //parties: [DUMMY_PARTY],\n} as const;\n\n\nconst RegisterMetaForm: React.FC<{\n value: Register;\n onChange?: (newMeta: Register) => void;\n className?: string;\n}> = function ({ value, onChange, className }) {\n\n function handleOperatingLanguageChange(fieldName: keyof Omit<Locale, 'characterEncoding'>) {\n return (evt: React.FormEvent<HTMLInputElement>) => {\n const newValue = update(value, { operatingLanguage: op => update(op ?? {}, { [fieldName]: { $set: evt.currentTarget.value } }) });\n onChange!(newValue);\n }\n }\n\n function makeFormEventHandler\n <T extends HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = HTMLInputElement>\n (func: (val: string) => Spec<typeof value>) {\n return (evt: React.FormEvent<T>) => {\n const spec = func(evt.currentTarget.value);\n if (spec) {\n onChange!(update(value, spec));\n }\n };\n }\n\n const stakeholders = value.stakeholders ?? [];\n\n const orgs = value.organizations ?? {};\n const organizationIDs = Object.keys(orgs);\n\n function makeStakeholderChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n idx: number,\n func: (val: string) => Spec<typeof value[\"stakeholders\"][number]>,\n ) {\n return makeFormEventHandler<T>(val => ({ stakeholders: { [idx]: func(val) } }));\n }\n\n function handleStakeholderAdd() {\n onChange!({ ...value, stakeholders: [ ...stakeholders, DUMMY_STAKEHOLDER ] });\n }\n function handleStakeholderDelete(idx: number) {\n onChange!(update(value, { stakeholders: { $splice: [[idx, 1]] } }));\n }\n\n function makeOrgChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n orgID: string,\n func: (val: string) => Spec<typeof value[\"organizations\"][string]>,\n ) {\n return makeFormEventHandler<T>(val => ({ organizations: { [orgID]: func(val) } }));\n }\n\n function handleOrgAdd() {\n const newID = crypto.randomUUID();\n onChange!({ ...value, organizations: { ...orgs, [newID]: DUMMY_ORG } });\n }\n function handleOrgDelete(orgID: string) {\n onChange!(update(value, { organizations: { $unset: [orgID] } }));\n }\n\n function findAffiliations(orgID: string): StakeholderOrgAffiliation[] {\n return stakeholders.\n filter(s => s.affiliations?.[orgID] !== undefined).\n flatMap(s => Object.values(s.affiliations ?? {}));\n }\n\n function findAffiliationOptions(s: RegisterStakeholder) {\n return Object.entries(orgs).\n filter(([orgID]) => s.affiliations?.[orgID] === undefined).\n map(([orgID, org]) => ({\n value: orgID,\n label: org.name,\n }));\n }\n\n return (\n <>\n\n <FormGroupAsCardInGrid label=\"Basics:\" paddingPx={PADDING_PX}>\n <FormGroup label=\"Name:\">\n <InputGroup\n fill\n value={value.name || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ name: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Uniform resource identifier:\">\n <InputGroup\n fill\n type=\"url\"\n value={value.uniformResourceIdentifier || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ uniformResourceIdentifier: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Content summary:\">\n <TextArea\n fill\n value={value.contentSummary || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler<HTMLTextAreaElement>(val => ({ contentSummary: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Operating language (locale):\" helperText=\"Name, country and ISO 639-2 language code.\">\n <ControlGroup vertical>\n <InputGroup\n readOnly={!onChange}\n placeholder=\"E.g., Welsh\"\n value={value.operatingLanguage?.name ?? ''}\n onChange={handleOperatingLanguageChange('name')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character numerical country code from ISO 3166-1\"\n value={value.operatingLanguage?.country ?? ''}\n onChange={handleOperatingLanguageChange('country')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character language code from ISO 639-2\"\n value={value.operatingLanguage?.languageCode ?? ''}\n onChange={handleOperatingLanguageChange('languageCode')} />\n </ControlGroup>\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n label=\"Version: \"\n // Accommodation for date picker\n css={css`padding-bottom: 0;`}\n paddingPx={PADDING_PX}>\n <FormGroup label=\"Identifier: \">\n <InputGroup\n value={value.version?.id ?? ''}\n readOnly={!onChange}\n placeholder=\"E.g., 1.2\"\n onChange={makeFormEventHandler(val =>\n ({ version: v => update(v ?? DUMMY_VERSION, { id: { $set: val } }) })\n )}\n />\n </FormGroup>\n <FormGroup\n label=\"Published on: \"\n helperText={\n <>\n Date and time are\n <br />\n in {Intl.DateTimeFormat().resolvedOptions().timeZone}.\n {\" \"}\n <HelpTooltip content={<>\n Times are in your computer’s current time zone.\n {onChange\n ? \" When specifying, make sure to offset accordingly if it is different than register publication time zone.\"\n : null}\n </>} />\n </>}>\n <DatePicker\n css={css`margin: 0 -${PADDING_PX - 1}px;`}\n timePrecision={TimePrecision.MINUTE}\n value={value.version?.timestamp ?? null}\n showActionsBar={onChange ? true : false}\n onChange={(val: Date | null) =>\n onChange!(update(value, val !== null\n ? { version: v => update(v ?? DUMMY_VERSION, { timestamp: { $set: val } }) }\n : { $unset: ['version'] }))\n }\n />\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Organizations:\"\n css={css`min-width: 100%`}\n helperText={onChange\n ? <Button onClick={handleOrgAdd} icon=\"add\">Add</Button>\n : null}>\n {organizationIDs.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Name</th>\n <th>Logo URL</th>\n </tr>\n </thead>\n <tbody>\n {[ ...Object.entries(value.organizations) ].map(([orgID, s]) =>\n <tr key={orgID}>\n <td>\n <InputGroup\n readOnly={!onChange}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange || findAffiliations(orgID).length > 0}\n title=\"Delete this organization\"\n onClick={() => handleOrgDelete(orgID)}\n icon=\"cross\"\n intent=\"warning\"\n />\n }\n onChange={makeOrgChangeHandler(orgID, (val) =>\n ({ name: { $set: val } })\n )}\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeOrgChangeHandler(orgID, (val) =>\n ({ logoURL: { $set: val } })\n )}\n value={s.logoURL} />\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Users:\"\n css={css`min-width: 100%`}\n helperText={onChange\n ? <Button onClick={handleStakeholderAdd} icon=\"add\">Add</Button>\n : null}>\n {stakeholders.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Name</th>\n <th>Git server username</th>\n <th>Role</th>\n <th>Affiliations</th>\n <th>Contact email</th>\n </tr>\n </thead>\n <tbody>\n {[ ...stakeholders.entries() ].map(([idx, s]) =>\n <tr key={idx}>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ name: { $set: val } })\n )}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange}\n title=\"Delete this stakeholder\"\n onClick={() => handleStakeholderDelete(idx)}\n icon=\"cross\"\n intent=\"warning\"\n />\n }\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ gitServerUsername: { $set: val || undefined } })\n )}\n value={s.gitServerUsername || ''} />\n </td>\n <td>\n <Select<StakeholderRoleType>\n items={STAKEHOLDER_ROLES}\n popoverProps={{\n minimal: true,\n matchTargetWidth: true,\n }}\n itemPredicate={(query, roleID) =>\n // Match can be in both role ID and role label\n `${roleID} ${StakeholderRoleLabels[roleID]}`.\n toLowerCase().\n indexOf(query.toLowerCase()) >= 0\n }\n resetOnSelect\n css={css`max-width: 300px;`}\n selectedItems={[...(s.roles ?? [(s as any).role as string])]}\n disabled={!onChange || !s.roles}\n itemDisabled={roleID => s.roles?.includes(roleID)}\n tagRenderer={roleID => StakeholderRoleLabels[roleID]}\n // Make each role take full width & so stak them vertically\n tagInputProps={{ tagProps: { className: 'bp4-fill' }}}\n onRemove={roleID =>\n onChange!(update(value, { stakeholders: { [idx]: { roles: { $splice: [[s.roles.indexOf(roleID), 1]] } } } }))\n }\n itemRenderer={(roleID, { handleClick, modifiers: { active, disabled } }) =>\n <MenuItem\n text={StakeholderRoleLabels[roleID]}\n active={active}\n disabled={disabled}\n onClick={handleClick}\n />\n }\n onItemSelect={roleID =>\n onChange!(update(value, { stakeholders: { [idx]: { roles: { $push: [roleID] } } } }))\n }\n />\n </td>\n <td>\n <ControlGroup vertical>\n {Object.entries(s.affiliations ?? {}).\n sort(([, aff], [, aff2]) => aff2.role.localeCompare(aff.role)).\n map(([orgID, affiliation], _affiliationIdx) =>\n <ButtonGroup key={orgID}>\n <InputGroup\n key=\"org\"\n readOnly\n value={orgs[orgID]?.name ?? orgID}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange}\n title=\"Delete this affiliation\"\n onClick={() => onChange!(update(value, { stakeholders: { [idx]: { affiliations: { $unset: [orgID] } } } }))}\n icon=\"cross\"\n />\n }\n />\n <HTMLSelect\n key=\"set-role\"\n disabled={!onChange}\n value={affiliation.role}\n options={[\n { value: 'pointOfContact', label: 'point of contact' },\n { value: 'member', label: 'member' },\n ]}\n onChange={(evt) => onChange!(update(value, { stakeholders: { [idx]: { affiliations: { [orgID]: { role: { $set: evt.currentTarget.value as 'pointOfContact' | 'member' } } } } } }))}\n title=\"Specify role in organization\"\n />\n </ButtonGroup>\n )}\n {findAffiliationOptions(s).length > 0 && onChange\n ? <HTMLSelect\n key=\"add\"\n options={[\n { label: \"Append affiliation…\", value: '' },\n ...findAffiliationOptions(s),\n ]}\n value=\"\"\n onChange={(evt) => evt.currentTarget.value?.trim() !== ''\n ? onChange!(update(value, { stakeholders: { [idx]: { affiliations: { [evt.currentTarget.value]: { $set: { role: 'member' } } } } } }))\n : void 0}\n title=\"Append affiliation…\"\n />\n : null}\n </ControlGroup>\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n type=\"email\"\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ contacts: { $set: [{ label: 'email', value: val }] } })\n )}\n value={s.contacts?.[0]?.value || ''} />\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n </>\n );\n};\n\n\nconst PADDING_PX = 11;\n\n\nexport default RegisterMetaForm;\n"]}
@@ -48,7 +48,7 @@ const RegisterMeta = function () {
48
48
  const [editedMetadata, setEditedMetadata] = (0, _react.useState)(null);
49
49
  const canChange = updateObjects ? true : false;
50
50
  const didChange = registerMetadata && editedMetadata && JSON.stringify(editedMetadata) !== JSON.stringify(registerMetadata);
51
- const owner = ((_a = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.stakeholders) !== null && _a !== void 0 ? _a : []).find(s => s.role === 'owner');
51
+ const owner = ((_a = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.stakeholders) !== null && _a !== void 0 ? _a : []).find(_stakeholder.isOwner);
52
52
  const stakeholderCanEdit = !owner || stakeholder && (0, _stakeholder.isOwner)(stakeholder);
53
53
 
54
54
  function handleClear() {