@riboseinc/paneron-registry-kit 2.2.11 → 2.2.13

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 (58) hide show
  1. package/index.d.ts +2 -4
  2. package/package.json +2 -2
  3. package/types/cr.d.ts +5 -1
  4. package/types/cr.js +6 -2
  5. package/types/cr.js.map +1 -1
  6. package/types/util.d.ts +2 -0
  7. package/types/util.js.map +1 -1
  8. package/types/views.d.ts +22 -0
  9. package/types/views.js.map +1 -1
  10. package/views/BrowserCtx.d.ts +3 -11
  11. package/views/BrowserCtx.js +1 -0
  12. package/views/BrowserCtx.js.map +1 -1
  13. package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +1 -1
  14. package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
  15. package/views/FilterCriteria/models.d.ts +1 -1
  16. package/views/FilterCriteria/models.js.map +1 -1
  17. package/views/GenericRelatedItemView.js +7 -4
  18. package/views/GenericRelatedItemView.js.map +1 -1
  19. package/views/SearchQuery.js +34 -15
  20. package/views/SearchQuery.js.map +1 -1
  21. package/views/change-request/ChangeRequestContext.d.ts +13 -6
  22. package/views/change-request/ChangeRequestContext.js +84 -4
  23. package/views/change-request/ChangeRequestContext.js.map +1 -1
  24. package/views/change-request/Proposals.d.ts +16 -3
  25. package/views/change-request/Proposals.js +175 -79
  26. package/views/change-request/Proposals.js.map +1 -1
  27. package/views/change-request/objectChangeset.d.ts +7 -4
  28. package/views/change-request/objectChangeset.js +59 -22
  29. package/views/change-request/objectChangeset.js.map +1 -1
  30. package/views/change-request/util.d.ts +4 -0
  31. package/views/change-request/util.js +14 -0
  32. package/views/change-request/util.js.map +1 -0
  33. package/views/detail/ChangeRequest/index.js +16 -16
  34. package/views/detail/ChangeRequest/index.js.map +1 -1
  35. package/views/detail/RegisterHome/ActiveProposalDetails.d.ts +15 -0
  36. package/views/detail/RegisterHome/ActiveProposalDetails.js +105 -0
  37. package/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -0
  38. package/views/detail/RegisterHome/Block.d.ts +29 -0
  39. package/views/detail/RegisterHome/Block.js +75 -0
  40. package/views/detail/RegisterHome/Block.js.map +1 -0
  41. package/views/detail/RegisterHome/MetaSummary.js +7 -3
  42. package/views/detail/RegisterHome/MetaSummary.js.map +1 -1
  43. package/views/detail/RegisterHome/Proposal.d.ts +1 -11
  44. package/views/detail/RegisterHome/Proposal.js +113 -45
  45. package/views/detail/RegisterHome/Proposal.js.map +1 -1
  46. package/views/detail/RegisterHome/index.js +145 -148
  47. package/views/detail/RegisterHome/index.js.map +1 -1
  48. package/views/detail/RegisterItem/index.js +5 -4
  49. package/views/detail/RegisterItem/index.js.map +1 -1
  50. package/views/hooks/useCustomView.js +1 -1
  51. package/views/hooks/useCustomView.js.map +1 -1
  52. package/views/index.js +5 -3
  53. package/views/index.js.map +1 -1
  54. package/views/sidebar/Search/index.js +12 -2
  55. package/views/sidebar/Search/index.js.map +1 -1
  56. package/views/util.d.ts +26 -17
  57. package/views/util.js +50 -50
  58. package/views/util.js.map +1 -1
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = require("react");
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
11
 
10
12
  var _react2 = require("@emotion/react");
11
13
 
@@ -13,8 +15,6 @@ var _core = require("@blueprintjs/core");
13
15
 
14
16
  var _context = require("@riboseinc/paneron-extension-kit/context");
15
17
 
16
- var _util = require("@riboseinc/paneron-extension-kit/util");
17
-
18
18
  var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
19
19
 
20
20
  var _BrowserCtx = require("../../BrowserCtx");
@@ -25,9 +25,9 @@ var _itemPathUtils = require("../../itemPathUtils");
25
25
 
26
26
  var _objectChangeset = require("../../change-request/objectChangeset");
27
27
 
28
- var _cr = require("../../../types/cr");
28
+ var _Proposals = require("../../change-request/Proposals");
29
29
 
30
- var _TransitionOptions = require("../../change-request/TransitionOptions");
30
+ var _cr = require("../../../types/cr");
31
31
 
32
32
  var _stakeholder = require("../../../types/stakeholder");
33
33
 
@@ -35,34 +35,46 @@ var _protocolRegistry = require("../../protocolRegistry");
35
35
 
36
36
  var _MetaSummary = _interopRequireDefault(require("./MetaSummary"));
37
37
 
38
- var _util2 = require("../../util");
38
+ var _util = require("../../util");
39
39
 
40
40
  var _Proposal = require("./Proposal");
41
41
 
42
+ var _Block = _interopRequireWildcard(require("./Block"));
43
+
44
+ var _ActiveProposalDetails = _interopRequireDefault(require("./ActiveProposalDetails"));
45
+
46
+ var _ItemDrawer = _interopRequireDefault(require("../../ItemDrawer"));
47
+
42
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
49
 
50
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
51
+
52
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
53
+
44
54
  /** @jsx jsx */
45
55
 
46
56
  /** @jsxFrag React.Fragment */
47
57
  //import { Helmet } from 'react-helmet';
48
58
  const RegisterHome = function () {
49
- var _a;
59
+ var _a, _b;
50
60
 
51
61
  const {
52
62
  spawnTab
53
63
  } = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
54
64
  const {
55
- //customViews,
56
65
  registerMetadata,
57
66
  stakeholder,
58
- // offline,
59
67
  itemClasses,
60
- setActiveChangeRequestID
68
+ setActiveChangeRequestID,
69
+ jumpTo
61
70
  } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
62
71
  const {
63
72
  changeRequest: activeCR,
73
+ canEdit: activeCRIsEditable,
74
+ proposeBlankItem,
64
75
  canDelete,
65
- deleteCR
76
+ deleteCR,
77
+ updateItemProposal
66
78
  } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
67
79
  const {
68
80
  requestFileFromFilesystem,
@@ -103,29 +115,43 @@ const RegisterHome = function () {
103
115
 
104
116
  if ((0, _cr.isImportableCR)(fileData)) {
105
117
  try {
106
- const [changeset, crID] = await (0, _objectChangeset.importedProposalToCRObjectChangeset)(fileData, itemClasses, stakeholder.gitServerUsername, getObjectData, async function findObjects(predicate) {
118
+ const [changeset, crID] = await (0, _objectChangeset.importedProposalToCRObjectChangeset)(fileData, itemClasses, stakeholder.gitServerUsername, getObjectData, async function resolvePredicates(predicates) {
119
+ const mapReduceChains = [...predicates.values()].map(predicate => ({
120
+ [predicate]: {
121
+ mapFunc: `
122
+ const data = value.data;
123
+ if (!key.startsWith('/proposals/') && data && (${predicate})) {
124
+ emit({ objectPath: key, objectData: value });
125
+ }
126
+ `
127
+ }
128
+ })).reduce((prev, curr) => ({ ...prev,
129
+ ...curr
130
+ }), {});
107
131
  const result = await getMapReducedData({
108
- chains: {
109
- _: {
110
- mapFunc: `
111
- const data = value.data;
112
- if (data && (${predicate})) {
113
- emit({ objectPath: key, objectData: value });
114
- }
115
- `
116
- }
132
+ chains: mapReduceChains
133
+ });
134
+ return Object.entries(result).map(([chainLabel, chainResult]) => {
135
+ const objects = Array.isArray(chainResult) ? chainResult : [];
136
+
137
+ if (objects.length < 1) {
138
+ throw new Error(`Unable to resolve predicate to item UUID: no item found matching predicate ${chainLabel}`);
139
+ } else if (objects.length > 1) {
140
+ const objectOverview = objects.map(o => JSON.stringify(o)).join(', ');
141
+ throw new Error(`Unable to resolve predicate to item UUID: more than one item matches predicate ${chainLabel}: ${objectOverview}`);
142
+ } else {
143
+ return {
144
+ // There’s just one item anyway, hence `objects[0]`.
145
+ [chainLabel]: (0, _itemPathUtils.itemPathToItemRef)(false, objects[0].objectPath)
146
+ };
117
147
  }
118
- }); // NOTE: map returns an empty object if there’re no items,
119
- // but we promise to return a list.
120
-
121
- if (!Array.isArray(result._)) {
122
- return [];
123
- }
124
-
125
- return result._;
148
+ }).reduce((prev, curr) => ({ ...prev,
149
+ ...curr
150
+ }), {});
126
151
  });
127
152
  return [changeset, crID];
128
153
  } catch (e) {
154
+ console.error("Error reading proposal data", e);
129
155
  throw new Error("Error reading proposal data");
130
156
  }
131
157
  } else {
@@ -178,49 +204,7 @@ const RegisterHome = function () {
178
204
  }), {})
179
205
  });
180
206
  const actionableProposals = (0, _react.useMemo)(() => Object.entries(actionableProposalsResult.value).map(([chainID, chainResult]) => [chainID, (Array.isArray(chainResult) ? chainResult : undefined) || undefined]), [actionableProposalsResult.value]);
181
- const handleRefreshProposals = actionableProposalsResult.refresh; // Actionable proposals
182
- // const [actionableProposals, setActionableProposals] =
183
- // useState<[string, CR[] | undefined][]>([]);
184
- // const [reqCounter, setReqCounter] = useState(1);
185
- // useEffect(() => {
186
- // let cancelled = false;
187
- // if (stakeholder) {
188
- // const proposalGroups = getActionableProposalGroupsForRole(stakeholder.role);
189
- // setActionableProposals(proposalGroups.map(([groupLabel, ]) => [groupLabel, undefined]));
190
- // async function updateItems([ groupLabel, , queryGetter ]: ActionableProposalGroup) {
191
- // const query = queryGetter(stakeholder);
192
- // const mapFunc = `
193
- // const objPath = key, obj = value;
194
- // if ((${CR_BASE_QUERY}) && (${query})) {
195
- // emit(obj);
196
- // }
197
- // `;
198
- // const result = await getMapReducedData({
199
- // chains: { _: { mapFunc } },
200
- // });
201
- // if (!Array.isArray(result._)) {
202
- // console.error("Weird result", result);
203
- // }
204
- // if (!cancelled) {
205
- // setActionableProposals(previousGroups =>
206
- // previousGroups.map(([previousGroupLabel, previousProposals]) =>
207
- // previousGroupLabel === groupLabel
208
- // ? [previousGroupLabel, Array.isArray(result._) ? result._ : []]
209
- // : [previousGroupLabel, previousProposals]
210
- // )
211
- // );
212
- // }
213
- // };
214
- // proposalGroups.map(updateItems);
215
- // } else {
216
- // setActionableProposals([]);
217
- // }
218
- // return function cleanUp() { cancelled = true; };
219
- // }, [stakeholder, reqCounter, getMapReducedData]);
220
- // const handleRefreshProposals = useCallback(
221
- // (() => setReqCounter(c => c + 1)),
222
- // [setReqCounter]);
223
- // TODO: Move to action bar
207
+ const handleRefreshProposals = actionableProposalsResult.refresh; // TODO: Move to action bar
224
208
  // const customActions = useMemo(() => customViews.map(cv => ({
225
209
  // key: cv.id,
226
210
  // text: cv.label,
@@ -290,7 +274,7 @@ const RegisterHome = function () {
290
274
  if (registerMetadata
291
275
  /*&& actionableProposals.find(p => p[1] && p[1].length > 0)*/
292
276
  ) {
293
- return (0, _react2.jsx)(HomeBlock, {
277
+ return (0, _react2.jsx)(_Block.default, {
294
278
  View: _Proposal.Proposals,
295
279
  key: "proposal dashboard",
296
280
  description: "Actionable proposals",
@@ -312,50 +296,32 @@ const RegisterHome = function () {
312
296
  } else {
313
297
  return null;
314
298
  }
315
- }, [createMode, registerMetadata, proposalBlockActions, handleSelectProposal, handleCreate, (0, _util.toJSONNormalized)(actionableProposals)]);
299
+ }, [createMode, registerMetadata, proposalBlockActions, handleSelectProposal, handleCreate, handleRefreshProposals, actionableProposals]);
300
+ const handleOpenProposal = (0, _react.useMemo)(() => {
301
+ return activeCR ? async () => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:${(0, _itemPathUtils.crIDToCRPath)(activeCR.id)}`) : undefined;
302
+ }, [spawnTab, activeCR === null || activeCR === void 0 ? void 0 : activeCR.id]);
316
303
  const activeCRBlock = (0, _react.useMemo)(() => {
317
304
  if (activeCR && registerMetadata) {
318
- const actions = stakeholder && (0, _TransitionOptions.canBeTransitionedBy)(stakeholder, activeCR) ? [
319
- /*{
320
- // Action is taken from within the widget.
321
- text: "Take action",
322
- onClick: () => void 0,
323
- icon: 'take-action',
324
- intent: 'primary',
325
- }*/
326
- ] : canDelete ? [{
327
- text: "Delete this proposal draft",
328
- onClick: deleteCR,
329
- disabled: !deleteCR,
330
- icon: 'delete',
331
- intent: 'danger'
332
- }] : [];
333
- actions.push({
334
- text: "Open in new window",
335
- onClick: async () => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:${(0, _itemPathUtils.crIDToCRPath)(activeCR.id)}`)
336
- });
337
- return (0, _react2.jsx)(HomeBlock, {
338
- View: _Proposal.CurrentProposal,
339
- description: "Active proposal",
340
- props: {
341
- proposal: activeCR,
342
- stakeholder,
343
- register: registerMetadata
344
- },
305
+ return (0, _react2.jsx)(_ActiveProposalDetails.default, {
306
+ proposal: activeCR,
307
+ stakeholder: stakeholder,
308
+ register: registerMetadata,
309
+ onOpen: handleOpenProposal,
310
+ onDelete: deleteCR,
311
+ canDelete: canDelete,
345
312
  css: (0, _react2.css)`
346
- height: 300px;
347
- flex-basis: calc(50% - 10px);
348
- flex-grow: 1;
349
- `,
350
- actions: actions
313
+ height: 300px;
314
+ flex-basis: calc(50% - ${itemGapPx}px);
315
+ flex-grow: 1;
316
+ `
351
317
  });
352
318
  } else {
353
319
  return null;
354
320
  }
355
- }, [activeCR, registerMetadata, canDelete, deleteCR, stakeholder]);
321
+ }, [activeCR, registerMetadata, canDelete, deleteCR, handleOpenProposal, stakeholder]);
356
322
  const registerMetaBlock = (0, _react.useMemo)(() => {
357
323
  if (!activeCRBlock && stakeholder) {
358
- return (0, _react2.jsx)(HomeBlock, {
324
+ return (0, _react2.jsx)(_Block.default, {
359
325
  View: _MetaSummary.default,
360
326
  description: "Register summary",
361
327
  props: registerMetadata ? {
@@ -363,13 +329,13 @@ const RegisterHome = function () {
363
329
  style: {
364
330
  padding: '10px 12px 0 12px',
365
331
  flexGrow: 1,
366
- flexShrink: 0
332
+ overflowY: 'auto'
367
333
  }
368
334
  } : registerMetadata,
369
335
  error: registerMetadata === null ? "Failed to load register metadata" : undefined,
370
336
  css: (0, _react2.css)`
371
337
  height: 300px;
372
- flex-basis: calc(50% - 10px);
338
+ flex-basis: calc(50% - ${itemGapPx}px);
373
339
  flex-grow: 1;
374
340
  `,
375
341
  actions: [{
@@ -382,51 +348,82 @@ const RegisterHome = function () {
382
348
  return null;
383
349
  }
384
350
  }, [!activeCRBlock, registerMetadata, stakeholder]);
385
- return (0, _react2.jsx)(_util2.TabContentsWithHeader, {
351
+ const proposedChangeBlocks = (0, _react.useMemo)(() => {
352
+ if (activeCR) {
353
+ return (0, _react2.jsx)(_Proposals.Proposals, {
354
+ proposals: activeCR.items,
355
+ onDeleteProposalForItemAtPath: updateItemProposal ? path => updateItemProposal("delete item from proposal draft", null, path) : undefined
356
+ });
357
+ } else {
358
+ return null;
359
+ }
360
+ }, [activeCR, updateItemProposal]);
361
+ const [activeItemSelector, activateItemSelector] = (0, _react.useState)(null);
362
+ const itemSelectorBlocks = (0, _react.useMemo)(() => {
363
+ return (0, _react2.jsx)(_react.default.Fragment, null, Object.entries(itemClasses).map(([clsID, cls]) => {
364
+ var _a;
365
+
366
+ const actions = [{
367
+ onClick: () => activateItemSelector(clsID),
368
+ icon: 'search',
369
+ text: "Find item…",
370
+ selected: activeItemSelector === clsID
371
+ }];
372
+
373
+ if (activeCRIsEditable && proposeBlankItem) {
374
+ actions.push({
375
+ onClick: () => proposeBlankItem(clsID),
376
+ icon: 'add',
377
+ text: "Propose new",
378
+ intent: 'primary'
379
+ });
380
+ }
381
+
382
+ return (0, _react2.jsx)(_Block.HomeBlockCard, {
383
+ key: clsID,
384
+ css: (0, _react2.css)`flex-basis: calc(25% - 10px*3/4); flex-shrink: 0;`,
385
+ description: `Search items of class ${cls.meta.title}`
386
+ }, (0, _react2.jsx)(_core.Tag, {
387
+ minimal: true
388
+ }, "Class"), (0, _react2.jsx)("div", {
389
+ css: (0, _react2.css)`padding: 5px; flex-grow: 1;`
390
+ }, (0, _react2.jsx)(_core.H5, {
391
+ css: (0, _react2.css)`margin: 0;`
392
+ }, cls.meta.title), cls.meta.description && cls.meta.description !== cls.meta.title ? (0, _react2.jsx)("p", {
393
+ css: (0, _react2.css)`margin: 10px 0 0 0;`
394
+ }, (_a = cls.meta.description) !== null && _a !== void 0 ? _a : "(no description)") : null), (0, _react2.jsx)(_Block.HomeBlockActions, {
395
+ actions: actions
396
+ }));
397
+ }), (0, _react2.jsx)(_ItemDrawer.default, {
398
+ isOpen: jumpTo && activeItemSelector ? true : false,
399
+ onClose: () => activateItemSelector(null),
400
+ availableClassIDs: typeof activeItemSelector === 'string' ? [activeItemSelector] : [],
401
+ onChooseItem: itemRef => jumpTo === null || jumpTo === void 0 ? void 0 : jumpTo(`itemdetails:${(0, _itemPathUtils.itemRefToItemPath)(itemRef)}`)
402
+ }));
403
+ }, [itemClasses, activeItemSelector, activeCRIsEditable, jumpTo]);
404
+ return (0, _react2.jsx)(_util.TabContentsWithHeader, {
386
405
  title: (_a = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.name) !== null && _a !== void 0 ? _a : 'Register',
406
+ layoutOptions: {
407
+ gapPx: itemGapPx,
408
+ stretch: true
409
+ },
387
410
  layout: "card-grid"
388
- }, activeCRBlock !== null && activeCRBlock !== void 0 ? activeCRBlock : registerMetaBlock, proposalBlock);
411
+ }, activeCRBlock !== null && activeCRBlock !== void 0 ? activeCRBlock : registerMetaBlock, proposalBlock, proposedChangeBlocks ? (0, _react2.jsx)(GridHeader, null, "Proposed Changes: (", Object.keys((_b = activeCR === null || activeCR === void 0 ? void 0 : activeCR.items) !== null && _b !== void 0 ? _b : []).length, " total)") : null, proposedChangeBlocks, (0, _react2.jsx)(GridHeader, null, "Register Items:"), itemSelectorBlocks);
389
412
  };
390
413
 
414
+ const GridHeader = (0, _styled.default)(_core.H4)`
415
+ flex: 100%;
416
+ margin-top: 10px;
417
+ padding-left: 10px;
418
+ color: ${_core.Colors.GRAY2};
419
+ .bp4-dark & {
420
+ color: ${_core.Colors.GRAY2};
421
+ }
422
+ `;
423
+ const itemGapPx = 10;
391
424
  var _default = RegisterHome;
392
425
  exports.default = _default;
393
426
 
394
- function HomeBlock({
395
- View,
396
- description,
397
- props,
398
- error,
399
- actions,
400
- className
401
- }) {
402
- var _a;
403
-
404
- return (0, _react2.jsx)(_util2.CardInGrid, {
405
- css: (0, _react2.css)`
406
- padding: 5px;
407
- display: flex; flex-flow: column nowrap;
408
- overflow: hidden;
409
- transition:
410
- width .5s linear,
411
- height .5s linear;
412
- `,
413
- description: description,
414
- className: className
415
- }, props ? (0, _react2.jsx)(View, { ...props
416
- }) : props === undefined ? (0, _react2.jsx)(_core.NonIdealState, {
417
- icon: (0, _react2.jsx)(_core.Spinner, null)
418
- }) : (0, _react2.jsx)(_core.NonIdealState, {
419
- icon: "heart-broken",
420
- title: "Failed to load",
421
- description: error
422
- }), ((_a = actions === null || actions === void 0 ? void 0 : actions.length) !== null && _a !== void 0 ? _a : 0) > 0 ? (0, _react2.jsx)(_core.Menu, {
423
- css: (0, _react2.css)`background: none !important; flex-shrink: 0;`
424
- }, actions.map((mip, idx) => (0, _react2.jsx)(_core.MenuItem, {
425
- key: idx,
426
- ...mip
427
- }))) : null);
428
- }
429
-
430
427
  function getActionableProposalGroupsForRole(role) {
431
428
  return CR_QUERIES_FOR_ROLES.filter(([, roles]) => roles.has(role));
432
429
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useMemo,\n useContext,\n //useCallback,\n //useEffect,\n useState,\n} from 'react';\n//import { Helmet } from 'react-helmet';\nimport { jsx, css } from '@emotion/react';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { Menu, MenuItem, type MenuItemProps, NonIdealState, Spinner } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { toJSONNormalized } from '@riboseinc/paneron-extension-kit/util';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { crIDToCRPath } from '../../itemPathUtils';\nimport { newCRObjectChangeset, importedProposalToCRObjectChangeset } from '../../change-request/objectChangeset';\nimport { isImportableCR } from '../../../types/cr';\nimport type { RegisterStakeholder, StakeholderRoleType } from '../../../types';\nimport { type SomeCR as CR, State } from '../../../types/cr';\nimport { canBeTransitionedBy } from '../../change-request/TransitionOptions';\nimport { canImportCR, canCreateCR } from '../../../types/stakeholder';\nimport { Protocols } from '../../protocolRegistry';\nimport MetaSummary from './MetaSummary';\nimport { TabContentsWithHeader, CardInGrid } from '../../util';\nimport { Proposals, CurrentProposal } from './Proposal';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const {\n //customViews,\n registerMetadata, stakeholder,\n // offline,\n itemClasses,\n setActiveChangeRequestID,\n } = useContext(BrowserCtx);\n const {\n changeRequest: activeCR,\n canDelete,\n deleteCR,\n } = useContext(ChangeRequestContext);\n const {\n requestFileFromFilesystem,\n makeRandomID,\n getObjectData,\n updateObjects,\n performOperation,\n isBusy,\n getMapReducedData,\n useMapReducedData,\n } = useContext(DatasetContext);\n\n const registerVersion = registerMetadata?.version;\n\n const getNewEmptyCRChangeset:\n undefined | ((idea: string) => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (makeRandomID && stakeholder && canCreateCR(stakeholder)) {\n return async function getNewEmptyCRChangeset (newIdea: string) {\n const crID = await makeRandomID();\n return [newCRObjectChangeset(\n crID,\n newIdea,\n registerVersion!,\n stakeholder!.gitServerUsername!,\n ), crID];\n };\n } else {\n return undefined;\n }\n }, [makeRandomID, stakeholder, registerVersion]);\n\n const getImportedCRChangeset:\n undefined | (() => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (requestFileFromFilesystem && stakeholder && canImportCR(stakeholder)) {\n return async function getImportedCRChangeset() {\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n try {\n const [changeset, crID] = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n stakeholder!.gitServerUsername!,\n getObjectData,\n async function findObjects(predicate: string) {\n const result = await getMapReducedData({\n chains: {\n _: {\n mapFunc: `\n const data = value.data;\n if (data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n },\n });\n // NOTE: map returns an empty object if there’re no items,\n // but we promise to return a list.\n if (!Array.isArray(result._)) {\n return [];\n }\n return result._;\n },\n );\n return [changeset, crID];\n } catch (e) {\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n } else {\n return undefined;\n }\n }, [getMapReducedData, requestFileFromFilesystem, getObjectData, stakeholder]);\n\n const [importCR, createCR] = useMemo(() => {\n if (updateObjects && setActiveChangeRequestID && !isBusy) {\n return [\n getImportedCRChangeset\n ? performOperation('importing proposal', async function () {\n const [objectChangeset, crID] = await getImportedCRChangeset(); \n await updateObjects({\n commitMessage: 'import proposal',\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n getNewEmptyCRChangeset\n ? performOperation('creating blank proposal', async function (newIdea: string) {\n const [objectChangeset, crID] = await getNewEmptyCRChangeset(newIdea);\n await updateObjects({\n commitMessage: `start new empty proposal ${newIdea}`,\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n ];\n } else {\n return [undefined, undefined];\n }\n }, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]);\n\n // Actionable proposals v2\n const proposalGroups = useMemo(\n (() => stakeholder?.role\n ? getActionableProposalGroupsForRole(stakeholder.role)\n : null),\n [stakeholder?.role]);\n\n const actionableProposalsResult = useMapReducedData({\n chains:\n (proposalGroups ?? []).\n map(([label, , queryGetter]) => {\n const query = queryGetter(stakeholder);\n const predicateFunc = `\n const objPath = key, obj = value;\n return ((${CR_BASE_QUERY}) && (${query}));\n `;\n const mapFunc = `emit(value);`;\n return { [label]: { mapFunc, predicateFunc } };\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {}),\n });\n\n const actionableProposals: [string, CR[] | undefined][] = useMemo(\n (() =>\n Object.entries(actionableProposalsResult.value).\n map(([chainID, chainResult]) =>\n [\n chainID,\n (Array.isArray(chainResult)\n ? (chainResult as CR[])\n : undefined) || undefined\n ]\n )\n ),\n [actionableProposalsResult.value]);\n\n const handleRefreshProposals = actionableProposalsResult.refresh;\n\n // Actionable proposals\n // const [actionableProposals, setActionableProposals] =\n // useState<[string, CR[] | undefined][]>([]);\n // const [reqCounter, setReqCounter] = useState(1);\n // useEffect(() => {\n // let cancelled = false;\n // if (stakeholder) {\n // const proposalGroups = getActionableProposalGroupsForRole(stakeholder.role);\n // setActionableProposals(proposalGroups.map(([groupLabel, ]) => [groupLabel, undefined]));\n\n // async function updateItems([ groupLabel, , queryGetter ]: ActionableProposalGroup) {\n // const query = queryGetter(stakeholder);\n\n // const mapFunc = `\n // const objPath = key, obj = value;\n // if ((${CR_BASE_QUERY}) && (${query})) {\n // emit(obj);\n // }\n // `;\n // const result = await getMapReducedData({\n // chains: { _: { mapFunc } },\n // });\n // if (!Array.isArray(result._)) {\n // console.error(\"Weird result\", result);\n // }\n // if (!cancelled) {\n // setActionableProposals(previousGroups =>\n // previousGroups.map(([previousGroupLabel, previousProposals]) =>\n // previousGroupLabel === groupLabel\n // ? [previousGroupLabel, Array.isArray(result._) ? result._ : []]\n // : [previousGroupLabel, previousProposals]\n // )\n // );\n // }\n\n // };\n // proposalGroups.map(updateItems);\n // } else {\n // setActionableProposals([]);\n // }\n // return function cleanUp() { cancelled = true; };\n // }, [stakeholder, reqCounter, getMapReducedData]);\n\n // const handleRefreshProposals = useCallback(\n // (() => setReqCounter(c => c + 1)),\n // [setReqCounter]);\n\n // TODO: Move to action bar\n // const customActions = useMemo(() => customViews.map(cv => ({\n // key: cv.id,\n // text: cv.label,\n // title: cv.description,\n // icon: cv.icon,\n // onClick: () => spawnTab(`${Protocols.CUSTOM_VIEW}:${cv.id}/index`),\n // })), [spawnTab, customViews]);\n\n const [createMode, setCreateMode] = useState(false);\n //const canStakeholderCreateCRs = stakeholder && canCreateCR(stakeholder);\n const handleSelectProposal = useMemo(() => {\n return (setActiveChangeRequestID && !isBusy\n ? function (crid: string) { setActiveChangeRequestID?.(crid) }\n : undefined);\n }, [setActiveChangeRequestID, isBusy]);\n\n const proposalBlockActions = useMemo(() => {\n const actions = [];\n if (activeCR) {\n actions.push({\n text: \"Export proposal\",\n onClick: () => void 0,\n icon: 'export',\n disabled: true,\n } as const);\n actions.push({\n text: \"Exit proposal\",\n icon: 'log-out',\n intent: 'danger',\n disabled: isBusy,\n onClick: setActiveChangeRequestID\n ? () => setActiveChangeRequestID?.(null)\n : undefined,\n } as const);\n } else {\n if (stakeholder && canCreateCR(stakeholder)) {\n actions.push({\n text: \"Create blank proposal\",\n onClick: !createMode ? (() => setCreateMode(true)) : undefined,\n disabled: !createCR,\n active: createMode,\n selected: createMode,\n icon: 'add',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n if (stakeholder && canImportCR(stakeholder)) {\n actions.push({\n text: \"Import proposal\",\n onClick: importCR,\n disabled: !importCR || createMode,\n icon: 'import',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n }\n return actions;\n }, [!activeCR, createMode, importCR, createCR, isBusy, actionableProposals.length < 1]);\n\n const handleCreate = useMemo((() =>\n createCR && createMode\n ? async function (idea: string | false) {\n if (idea && createCR) {\n await createCR(idea);\n }\n setCreateMode(false);\n }\n : undefined\n ), [createMode, createCR]);\n\n const proposalBlock = useMemo(() => {\n if (registerMetadata /*&& actionableProposals.find(p => p[1] && p[1].length > 0)*/) {\n return (\n <HomeBlock\n View={Proposals}\n key=\"proposal dashboard\"\n description=\"Actionable proposals\"\n css={css`\n height: 300px;\n flex-basis: calc(50% - 10px);\n flex-grow: 1;\n `}\n props={{\n register: registerMetadata,\n actionableProposals,\n createMode,\n onCreate: handleCreate,\n onRefreshProposals: handleRefreshProposals,\n onSelectProposal: handleSelectProposal,\n }}\n actions={proposalBlockActions}\n />\n );\n } else {\n return null;\n }\n }, [\n createMode, registerMetadata,\n proposalBlockActions,\n handleSelectProposal,\n handleCreate,\n toJSONNormalized(actionableProposals),\n ]);\n\n const activeCRBlock = useMemo(() => {\n if (activeCR && registerMetadata) {\n const actions: MenuItemProps[] = stakeholder && canBeTransitionedBy(stakeholder, activeCR)\n ? [/*{\n // Action is taken from within the widget.\n text: \"Take action\",\n onClick: () => void 0,\n icon: 'take-action',\n intent: 'primary',\n }*/]\n : canDelete\n ? [{\n text: \"Delete this proposal draft\",\n onClick: deleteCR,\n disabled: !deleteCR,\n icon: 'delete',\n intent: 'danger',\n }]\n : [];\n actions.push({\n text: \"Open in new window\",\n onClick: async () => spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(activeCR.id)}`),\n });\n return (\n <HomeBlock\n View={CurrentProposal}\n description=\"Active proposal\"\n props={{ proposal: activeCR, stakeholder, register: registerMetadata }}\n css={css`\n height: 300px;\n flex-basis: calc(50% - 10px);\n flex-grow: 1;\n `}\n actions={actions}\n />\n );\n } else {\n return null;\n }\n }, [activeCR, registerMetadata, canDelete, deleteCR, stakeholder]);\n\n const registerMetaBlock = useMemo(() => {\n if (!activeCRBlock && stakeholder) {\n return (\n <HomeBlock\n View={MetaSummary}\n description=\"Register summary\"\n props={registerMetadata\n ? {\n register: registerMetadata,\n style: { padding: '10px 12px 0 12px', flexGrow: 1, flexShrink: 0 },\n }\n : registerMetadata}\n error={registerMetadata === null\n ? \"Failed to load register metadata\"\n : undefined}\n css={css`\n height: 300px;\n flex-basis: calc(50% - 10px);\n flex-grow: 1;\n `}\n actions={[{\n text: \"View or edit register metadata\",\n onClick: () => spawnTab(Protocols.REGISTER_META),\n icon: 'properties',\n }]}\n />\n );\n } else {\n return null;\n }\n }, [!activeCRBlock, registerMetadata, stakeholder]);\n\n return (\n <TabContentsWithHeader\n title={registerMetadata?.name ?? 'Register'}\n layout=\"card-grid\">\n\n {activeCRBlock ?? registerMetaBlock}\n\n {proposalBlock}\n\n {/* TODO: Move to action bar customActions.length > 0\n ? <HomeBlock\n description=\"Custom actions\"\n View={() => <></>}\n props={{}}\n actions={customActions}\n />\n : null*/}\n\n </TabContentsWithHeader>\n );\n}\n\nexport default RegisterHome;\n\n\ninterface HomeBlockProps<P extends Record<string, any>> {\n description: string,\n View: React.VoidFunctionComponent<P>,\n\n /** Props to pass the `View`. */\n props: P | null | undefined,\n\n /** Shown if `props` is `null`. */\n error?: string | JSX.Element,\n\n /** Shown beneath `View`. */\n actions?: MenuItemProps[],\n\n /** Applies to wrapper card div. */\n className?: string,\n}\nfunction HomeBlock<P extends Record<string, any>>(\n { View, description, props, error, actions, className }: HomeBlockProps<P>\n) {\n return (\n <CardInGrid\n css={css`\n padding: 5px;\n display: flex; flex-flow: column nowrap;\n overflow: hidden;\n transition:\n width .5s linear,\n height .5s linear;\n `}\n description={description}\n className={className}>\n {props\n ? <View {...props} />\n : props === undefined\n ? <NonIdealState icon={<Spinner />} />\n : <NonIdealState icon=\"heart-broken\" title=\"Failed to load\" description={error} />}\n {(actions?.length ?? 0) > 0\n ? <Menu css={css`background: none !important; flex-shrink: 0;`}>\n {actions!.map((mip, idx) => <MenuItem key={idx} {...mip }/>)}\n </Menu>\n : null}\n </CardInGrid>\n );\n}\n\n\nfunction getActionableProposalGroupsForRole(role: StakeholderRoleType): ActionableProposalGroup[] {\n return CR_QUERIES_FOR_ROLES.filter(([, roles]) => roles.has(role));\n}\n\n\nconst CR_BASE_QUERY = 'objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")';\ntype ActionableProposalGroup = readonly [\n label: string,\n roles: Set<StakeholderRoleType>,\n queryGetter: (stakeholder?: RegisterStakeholder) => string,\n];\nconst CR_QUERIES_FOR_ROLES: readonly ActionableProposalGroup[] =\n[\n ['My Drafts', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.DRAFT}\" || obj.state === \"${State.RETURNED_FOR_CLARIFICATION}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n ['My Rejected', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // Rejections are actionable because they can be appealed by the submitter.\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.REJECTED}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n ['Everyone’s Drafts or Returned', new Set(['manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername !== \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.DRAFT}\" || obj.state === \"${State.RETURNED_FOR_CLARIFICATION}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n // ['latest reviewed', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // // TODO: Should filter only rejected perhaps?\n // // Approved/accepted proposals can be shown in another (public) area.\n // if (stakeholder && stakeholder.gitServerUsername) {\n // const stakeholderCondition = stakeholder?.role !== 'submitter'\n // ? 'true'\n // : `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n // // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n // const query = `(obj.state === \"${State.ACCEPTED} || obj.state === \"${State.REJECTED} || obj.state === \"${State.REJECTION_UPHELD_ON_APPEAL}\"\") && ${stakeholderCondition}`;\n // return query;\n // } else {\n // return 'false';\n // }\n // // TODO: Implement limit\n // }],\n // ['latest withdrawn', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // if (stakeholder && stakeholder.gitServerUsername) {\n // const stakeholderCondition = stakeholder?.role !== 'submitter'\n // ? 'true'\n // : `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n // // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n // const query = `(obj.state === \"${State.WITHDRAWN}\" || obj.state === \"${State.APPEAL_WITHDRAWN}\") && ${stakeholderCondition}`;\n // return query;\n // } else {\n // return 'false';\n // }\n // // TODO: Implement limit\n // }],\n ['Pending Owner Appeal Review', new Set(['owner']), function ownerProposals() {\n return `obj.state === \"${State.APPEALED}\"`;\n }],\n ['Pending Control Body Review', new Set(['control-body', 'owner']), function cbProposals() {\n return `obj.state === \"${State.SUBMITTED_FOR_CONTROL_BODY_REVIEW}\"`;\n }],\n ['Pending Manager Review', new Set(['manager', 'control-body', 'owner']), function managerProposals() {\n return `obj.state === \"${State.PROPOSED}\"`;\n }],\n] as const;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useMemo,\n useContext,\n useState,\n} from 'react';\n//import { Helmet } from 'react-helmet';\nimport styled from '@emotion/styled';\nimport { jsx, css } from '@emotion/react';\nimport { H5, H4, Colors, Tag, type MenuItemProps } from '@blueprintjs/core'\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { crIDToCRPath } from '../../itemPathUtils';\nimport { newCRObjectChangeset, importedProposalToCRObjectChangeset } from '../../change-request/objectChangeset';\nimport { Proposals as CRProposals } from '../../change-request/Proposals';\nimport { isImportableCR } from '../../../types/cr';\nimport type { RegisterStakeholder, StakeholderRoleType } from '../../../types';\nimport { type SomeCR as CR, State } from '../../../types/cr';\nimport { canImportCR, canCreateCR } from '../../../types/stakeholder';\nimport { itemPathToItemRef, itemRefToItemPath } from '../../itemPathUtils';\nimport { Protocols } from '../../protocolRegistry';\nimport MetaSummary from './MetaSummary';\nimport { TabContentsWithHeader } from '../../util';\nimport { Proposals as ProposalsBlock } from './Proposal';\nimport HomeBlock, { HomeBlockCard, HomeBlockActions } from './Block';\nimport CurrentProposalBlock from './ActiveProposalDetails';\nimport ItemDrawer from '../../ItemDrawer';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const {\n registerMetadata, stakeholder,\n itemClasses,\n setActiveChangeRequestID,\n jumpTo,\n } = useContext(BrowserCtx);\n const {\n changeRequest: activeCR,\n canEdit: activeCRIsEditable,\n proposeBlankItem,\n canDelete,\n deleteCR,\n updateItemProposal,\n } = useContext(ChangeRequestContext);\n const {\n requestFileFromFilesystem,\n makeRandomID,\n getObjectData,\n updateObjects,\n performOperation,\n isBusy,\n getMapReducedData,\n useMapReducedData,\n } = useContext(DatasetContext);\n\n const registerVersion = registerMetadata?.version;\n\n const getNewEmptyCRChangeset:\n undefined | ((idea: string) => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (makeRandomID && stakeholder && canCreateCR(stakeholder)) {\n return async function getNewEmptyCRChangeset (newIdea: string) {\n const crID = await makeRandomID();\n return [newCRObjectChangeset(\n crID,\n newIdea,\n registerVersion!,\n stakeholder!.gitServerUsername!,\n ), crID];\n };\n } else {\n return undefined;\n }\n }, [makeRandomID, stakeholder, registerVersion]);\n\n const getImportedCRChangeset:\n undefined | (() => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (requestFileFromFilesystem && stakeholder && canImportCR(stakeholder)) {\n return async function getImportedCRChangeset() {\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n try {\n const [changeset, crID] = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n stakeholder!.gitServerUsername!,\n getObjectData,\n async function resolvePredicates(predicates) {\n const mapReduceChains = [...predicates.values()].map(predicate => ({\n [predicate]: {\n mapFunc: `\n const data = value.data;\n if (!key.startsWith('/proposals/') && data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n })).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n\n const result:\n Record<string, { objectPath: string, objectData: any }[] | {}> =\n await getMapReducedData({\n chains: mapReduceChains,\n });\n\n return Object.entries(result).map(([chainLabel, chainResult]) => {\n const objects =\n // Map returns an empty object if there’re no items,\n // but we promise to return a list.\n (Array.isArray(chainResult) ? chainResult : []);\n if (objects.length < 1) {\n throw new Error(`Unable to resolve predicate to item UUID: no item found matching predicate ${chainLabel}`);\n } else if (objects.length > 1) {\n const objectOverview = objects.map((o: any) => JSON.stringify(o)).join(', ')\n throw new Error(`Unable to resolve predicate to item UUID: more than one item matches predicate ${chainLabel}: ${objectOverview}`);\n } else {\n return {\n // There’s just one item anyway, hence `objects[0]`.\n [chainLabel]: itemPathToItemRef(false, objects[0].objectPath),\n };\n }\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n },\n );\n return [changeset, crID];\n } catch (e) {\n console.error(\"Error reading proposal data\", e);\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n } else {\n return undefined;\n }\n }, [getMapReducedData, requestFileFromFilesystem, getObjectData, stakeholder]);\n\n const [importCR, createCR] = useMemo(() => {\n if (updateObjects && setActiveChangeRequestID && !isBusy) {\n return [\n getImportedCRChangeset\n ? performOperation('importing proposal', async function () {\n const [objectChangeset, crID] = await getImportedCRChangeset(); \n await updateObjects({\n commitMessage: 'import proposal',\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n getNewEmptyCRChangeset\n ? performOperation('creating blank proposal', async function (newIdea: string) {\n const [objectChangeset, crID] = await getNewEmptyCRChangeset(newIdea);\n await updateObjects({\n commitMessage: `start new empty proposal ${newIdea}`,\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n ];\n } else {\n return [undefined, undefined];\n }\n }, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]);\n\n // Actionable proposals v2\n const proposalGroups = useMemo(\n (() => stakeholder?.role\n ? getActionableProposalGroupsForRole(stakeholder.role)\n : null),\n [stakeholder?.role]);\n\n const actionableProposalsResult = useMapReducedData({\n chains:\n (proposalGroups ?? []).\n map(([label, , queryGetter]) => {\n const query = queryGetter(stakeholder);\n const predicateFunc = `\n const objPath = key, obj = value;\n return ((${CR_BASE_QUERY}) && (${query}));\n `;\n const mapFunc = `emit(value);`;\n return { [label]: { mapFunc, predicateFunc } };\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {}),\n });\n\n const actionableProposals: [string, CR[] | undefined][] = useMemo(\n (() =>\n Object.entries(actionableProposalsResult.value).\n map(([chainID, chainResult]) =>\n [\n chainID,\n (Array.isArray(chainResult)\n ? (chainResult as CR[])\n : undefined) || undefined\n ]\n )\n ),\n [actionableProposalsResult.value]);\n\n const handleRefreshProposals = actionableProposalsResult.refresh;\n\n // TODO: Move to action bar\n // const customActions = useMemo(() => customViews.map(cv => ({\n // key: cv.id,\n // text: cv.label,\n // title: cv.description,\n // icon: cv.icon,\n // onClick: () => spawnTab(`${Protocols.CUSTOM_VIEW}:${cv.id}/index`),\n // })), [spawnTab, customViews]);\n\n const [createMode, setCreateMode] = useState(false);\n //const canStakeholderCreateCRs = stakeholder && canCreateCR(stakeholder);\n const handleSelectProposal = useMemo(() => {\n return (setActiveChangeRequestID && !isBusy\n ? function (crid: string) { setActiveChangeRequestID?.(crid) }\n : undefined);\n }, [setActiveChangeRequestID, isBusy]);\n\n const proposalBlockActions = useMemo(() => {\n const actions = [];\n if (activeCR) {\n actions.push({\n text: \"Export proposal\",\n onClick: () => void 0,\n icon: 'export',\n disabled: true,\n } as const);\n actions.push({\n text: \"Exit proposal\",\n icon: 'log-out',\n intent: 'danger',\n disabled: isBusy,\n onClick: setActiveChangeRequestID\n ? () => setActiveChangeRequestID?.(null)\n : undefined,\n } as const);\n } else {\n if (stakeholder && canCreateCR(stakeholder)) {\n actions.push({\n text: \"Create blank proposal\",\n onClick: !createMode ? (() => setCreateMode(true)) : undefined,\n disabled: !createCR,\n active: createMode,\n selected: createMode,\n icon: 'add',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n if (stakeholder && canImportCR(stakeholder)) {\n actions.push({\n text: \"Import proposal\",\n onClick: importCR,\n disabled: !importCR || createMode,\n icon: 'import',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n }\n return actions;\n }, [!activeCR, createMode, importCR, createCR, isBusy, actionableProposals.length < 1]);\n\n const handleCreate = useMemo((() =>\n createCR && createMode\n ? async function (idea: string | false) {\n if (idea && createCR) {\n await createCR(idea);\n }\n setCreateMode(false);\n }\n : undefined\n ), [createMode, createCR]);\n\n const proposalBlock = useMemo(() => {\n if (registerMetadata /*&& actionableProposals.find(p => p[1] && p[1].length > 0)*/) {\n return (\n <HomeBlock\n View={ProposalsBlock}\n key=\"proposal dashboard\"\n description=\"Actionable proposals\"\n css={css`\n height: 300px;\n flex-basis: calc(50% - 10px);\n flex-grow: 1;\n `}\n props={{\n register: registerMetadata,\n actionableProposals,\n createMode,\n onCreate: handleCreate,\n onRefreshProposals: handleRefreshProposals,\n onSelectProposal: handleSelectProposal,\n }}\n actions={proposalBlockActions}\n />\n );\n } else {\n return null;\n }\n }, [\n createMode, registerMetadata,\n proposalBlockActions,\n handleSelectProposal,\n handleCreate,\n handleRefreshProposals,\n actionableProposals,\n ]);\n\n const handleOpenProposal = useMemo(() => {\n return activeCR\n ? (async () => spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(activeCR.id)}`))\n : undefined;\n }, [spawnTab, activeCR?.id]);\n\n const activeCRBlock = useMemo(() => {\n if (activeCR && registerMetadata) {\n return <CurrentProposalBlock\n proposal={activeCR}\n stakeholder={stakeholder}\n register={registerMetadata}\n onOpen={handleOpenProposal}\n onDelete={deleteCR}\n canDelete={canDelete}\n css={css`\n height: 300px;\n flex-basis: calc(50% - ${itemGapPx}px);\n flex-grow: 1;\n `}\n />\n } else {\n return null;\n }\n }, [activeCR, registerMetadata, canDelete, deleteCR, handleOpenProposal, stakeholder]);\n\n const registerMetaBlock = useMemo(() => {\n if (!activeCRBlock && stakeholder) {\n return (\n <HomeBlock\n View={MetaSummary}\n description=\"Register summary\"\n props={registerMetadata\n ? {\n register: registerMetadata,\n style: { padding: '10px 12px 0 12px', flexGrow: 1, overflowY: 'auto' },\n }\n : registerMetadata}\n error={registerMetadata === null\n ? \"Failed to load register metadata\"\n : undefined}\n css={css`\n height: 300px;\n flex-basis: calc(50% - ${itemGapPx}px);\n flex-grow: 1;\n `}\n actions={[{\n text: \"View or edit register metadata\",\n onClick: () => spawnTab(Protocols.REGISTER_META),\n icon: 'properties',\n }]}\n />\n );\n } else {\n return null;\n }\n }, [!activeCRBlock, registerMetadata, stakeholder]);\n\n const proposedChangeBlocks = useMemo(() => {\n if (activeCR) {\n return (\n <CRProposals\n proposals={activeCR.items}\n onDeleteProposalForItemAtPath={updateItemProposal\n ? (path) => updateItemProposal(\"delete item from proposal draft\", null, path)\n : undefined}\n />\n );\n } else {\n return null;\n }\n }, [activeCR, updateItemProposal]);\n\n const [activeItemSelector, activateItemSelector] =\n useState<keyof typeof itemClasses | true | null>(null);\n\n const itemSelectorBlocks = useMemo(() => {\n return (\n <>\n {Object.entries(itemClasses).map(([clsID, cls]) => {\n const actions: MenuItemProps[] = [{\n onClick: () => activateItemSelector(clsID),\n icon: 'search',\n text: \"Find item…\",\n selected: activeItemSelector === clsID,\n }];\n if (activeCRIsEditable && proposeBlankItem) {\n actions.push({\n onClick: () => proposeBlankItem(clsID),\n icon: 'add',\n text: \"Propose new\",\n intent: 'primary',\n });\n }\n return <HomeBlockCard\n key={clsID}\n css={css`flex-basis: calc(25% - 10px*3/4); flex-shrink: 0;`}\n description={`Search items of class ${cls.meta.title}`}>\n <Tag minimal>Class</Tag>\n <div css={css`padding: 5px; flex-grow: 1;`}>\n <H5 css={css`margin: 0;`}>{cls.meta.title}</H5>\n {cls.meta.description && cls.meta.description !== cls.meta.title\n ? <p css={css`margin: 10px 0 0 0;`}>\n {cls.meta.description ?? \"(no description)\"}\n </p>\n : null}\n </div>\n <HomeBlockActions actions={actions} />\n </HomeBlockCard>\n })}\n\n <ItemDrawer\n isOpen={jumpTo && activeItemSelector ? true : false}\n onClose={() => activateItemSelector(null)}\n availableClassIDs={typeof activeItemSelector === 'string' ? [activeItemSelector] : []}\n onChooseItem={(itemRef) => jumpTo?.(`itemdetails:${itemRefToItemPath(itemRef)}`)}\n />\n </>\n );\n }, [itemClasses, activeItemSelector, activeCRIsEditable, jumpTo]);\n\n return (\n <TabContentsWithHeader\n title={registerMetadata?.name ?? 'Register'}\n layoutOptions={{ gapPx: itemGapPx, stretch: true }}\n layout=\"card-grid\">\n\n {activeCRBlock ?? registerMetaBlock}\n\n {proposalBlock}\n\n {proposedChangeBlocks\n ? <GridHeader>\n Proposed Changes: ({Object.keys(activeCR?.items ?? []).length} total)\n </GridHeader>\n : null}\n\n {proposedChangeBlocks}\n\n <GridHeader>\n Register Items:\n </GridHeader>\n\n {itemSelectorBlocks}\n\n {/* TODO: Move to action bar customActions.length > 0\n ? <HomeBlock\n description=\"Custom actions\"\n View={() => <></>}\n props={{}}\n actions={customActions}\n />\n : null*/}\n\n </TabContentsWithHeader>\n );\n}\n\nconst GridHeader = styled(H4)`\n flex: 100%;\n margin-top: 10px;\n padding-left: 10px;\n color: ${Colors.GRAY2};\n .bp4-dark & {\n color: ${Colors.GRAY2};\n }\n`;\n\nconst itemGapPx = 10;\n\nexport default RegisterHome;\n\n\nfunction getActionableProposalGroupsForRole(role: StakeholderRoleType): ActionableProposalGroup[] {\n return CR_QUERIES_FOR_ROLES.filter(([, roles]) => roles.has(role));\n}\n\n\nconst CR_BASE_QUERY = 'objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")';\ntype ActionableProposalGroup = readonly [\n label: string,\n roles: Set<StakeholderRoleType>,\n queryGetter: (stakeholder?: RegisterStakeholder) => string,\n];\nconst CR_QUERIES_FOR_ROLES: readonly ActionableProposalGroup[] =\n[\n ['My Drafts', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.DRAFT}\" || obj.state === \"${State.RETURNED_FOR_CLARIFICATION}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n ['My Rejected', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // Rejections are actionable because they can be appealed by the submitter.\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.REJECTED}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n ['Everyone’s Drafts or Returned', new Set(['manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n if (stakeholder && stakeholder.gitServerUsername) {\n const stakeholderCondition = `obj.submittingStakeholderGitServerUsername !== \"${stakeholder.gitServerUsername}\"`;\n const query = `(obj.state === \"${State.DRAFT}\" || obj.state === \"${State.RETURNED_FOR_CLARIFICATION}\") && (${stakeholderCondition})`;\n return query;\n } else {\n return 'false';\n }\n }],\n // ['latest reviewed', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // // TODO: Should filter only rejected perhaps?\n // // Approved/accepted proposals can be shown in another (public) area.\n // if (stakeholder && stakeholder.gitServerUsername) {\n // const stakeholderCondition = stakeholder?.role !== 'submitter'\n // ? 'true'\n // : `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n // // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n // const query = `(obj.state === \"${State.ACCEPTED} || obj.state === \"${State.REJECTED} || obj.state === \"${State.REJECTION_UPHELD_ON_APPEAL}\"\") && ${stakeholderCondition}`;\n // return query;\n // } else {\n // return 'false';\n // }\n // // TODO: Implement limit\n // }],\n // ['latest withdrawn', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {\n // if (stakeholder && stakeholder.gitServerUsername) {\n // const stakeholderCondition = stakeholder?.role !== 'submitter'\n // ? 'true'\n // : `obj.submittingStakeholderGitServerUsername === \"${stakeholder.gitServerUsername}\"`;\n // // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n // const query = `(obj.state === \"${State.WITHDRAWN}\" || obj.state === \"${State.APPEAL_WITHDRAWN}\") && ${stakeholderCondition}`;\n // return query;\n // } else {\n // return 'false';\n // }\n // // TODO: Implement limit\n // }],\n ['Pending Owner Appeal Review', new Set(['owner']), function ownerProposals() {\n return `obj.state === \"${State.APPEALED}\"`;\n }],\n ['Pending Control Body Review', new Set(['control-body', 'owner']), function cbProposals() {\n return `obj.state === \"${State.SUBMITTED_FOR_CONTROL_BODY_REVIEW}\"`;\n }],\n ['Pending Manager Review', new Set(['manager', 'control-body', 'owner']), function managerProposals() {\n return `obj.state === \"${State.PROPOSED}\"`;\n }],\n] as const;\n"]}
@@ -29,6 +29,8 @@ var _BrowserCtx = require("../../BrowserCtx");
29
29
 
30
30
  var _util2 = require("../../util");
31
31
 
32
+ var _util3 = require("../../change-request/util");
33
+
32
34
  var _itemPathUtils = require("../../itemPathUtils");
33
35
 
34
36
  var _objectChangeset = require("../../change-request/objectChangeset");
@@ -171,7 +173,6 @@ const ItemDetail = (0, _react.memo)(function ({
171
173
  });
172
174
  }
173
175
 
174
- console.debug("Rendering RegisterItem view");
175
176
  const [isEditingProposal, setIsEditingProposal] = (0, _react.useState)(false); //const [ diffMode, setDiffMode ] = useState<boolean>(false);
176
177
  // TODO: Implement diff mode
177
178
 
@@ -342,9 +343,9 @@ const ItemDetail = (0, _react.memo)(function ({
342
343
  });
343
344
 
344
345
  if (proposal) {
345
- classification.push({
346
- children: proposal.type === 'amendment' ? `${proposal.amendmentType} proposed` : proposal.type === 'addition' ? "addition proposed" : proposal.type === 'clarification' ? "clarification proposed" : "(unknown proposal type)",
347
- intent: proposal.type === 'amendment' ? 'warning' : proposal.type === 'addition' || proposal.type === 'clarification' ? 'primary' : undefined,
346
+ const tagProps = (0, _util3.proposalToTagProps)(proposal);
347
+ classification.push({ ...tagProps,
348
+ children: (0, _react2.jsx)(_react.default.Fragment, null, tagProps.children, " proposed"),
348
349
  icon: 'lightbulb',
349
350
  minimal: false,
350
351
  tooltip: canBeSuperseded || isBeingSuperseded ? supersedingItemsTooltip : undefined