@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.
- package/index.d.ts +4 -1
- package/index.js +26 -0
- package/index.js.map +1 -1
- package/item-classes/Tree.d.ts +5 -0
- package/item-classes/Tree.js +115 -0
- package/item-classes/Tree.js.map +1 -0
- package/item-classes/treeNodes.d.ts +12 -0
- package/item-classes/treeNodes.js +68 -0
- package/item-classes/treeNodes.js.map +1 -0
- package/package.json +2 -2
- package/proposals/actionableGroups/Tree.d.ts +7 -0
- package/proposals/actionableGroups/Tree.js +179 -0
- package/proposals/actionableGroups/Tree.js.map +1 -0
- package/proposals/actionableGroups/queries.d.ts +5 -0
- package/proposals/actionableGroups/queries.js +81 -0
- package/proposals/actionableGroups/queries.js.map +1 -0
- package/proposals/actionableGroups/treeNodes.d.ts +26 -0
- package/proposals/actionableGroups/treeNodes.js +94 -0
- package/proposals/actionableGroups/treeNodes.js.map +1 -0
- package/proposals/actionableGroups/types.d.ts +6 -0
- package/proposals/actionableGroups/types.js +5 -0
- package/proposals/actionableGroups/types.js.map +1 -0
- package/types/cr.d.ts +2 -1
- package/types/cr.js.map +1 -1
- package/types/item.d.ts +4 -1
- package/types/item.js.map +1 -1
- package/types/register.d.ts +4 -1
- package/types/register.js.map +1 -1
- package/types/stakeholder.d.ts +24 -41
- package/types/stakeholder.js +48 -16
- package/types/stakeholder.js.map +1 -1
- package/types/views.d.ts +4 -0
- package/types/views.js.map +1 -1
- package/views/BrowserCtx.d.ts +1 -1
- package/views/BrowserCtx.js.map +1 -1
- package/views/GenericRelatedItemView.js +21 -8
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/ItemDetailsDrawer.d.ts +1 -0
- package/views/ItemDetailsDrawer.js +4 -2
- package/views/ItemDetailsDrawer.js.map +1 -1
- package/views/ItemSearchDrawer.js +1 -1
- package/views/ItemSearchDrawer.js.map +1 -1
- package/views/Party.d.ts +0 -0
- package/views/Party.js +154 -0
- package/views/Party.js.map +1 -0
- package/views/RegisterStakeholder.js +2 -2
- package/views/RegisterStakeholder.js.map +1 -1
- package/views/StatefulTree.d.ts +19 -0
- package/views/StatefulTree.js +128 -0
- package/views/StatefulTree.js.map +1 -0
- package/views/change-request/ChangeRequestContext.js.map +1 -1
- package/views/change-request/TransitionHistory.js +6 -3
- package/views/change-request/TransitionHistory.js.map +1 -1
- package/views/change-request/TransitionOptions.js +37 -13
- package/views/change-request/TransitionOptions.js.map +1 -1
- package/views/detail/RegisterHome/index.js +20 -79
- package/views/detail/RegisterHome/index.js.map +1 -1
- package/views/detail/RegisterItem/index.d.ts +2 -2
- package/views/detail/RegisterItem/index.js +21 -14
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/detail/RegisterItemClass.d.ts +12 -0
- package/views/detail/RegisterItemClass.js +98 -0
- package/views/detail/RegisterItemClass.js.map +1 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js +272 -114
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
- package/views/detail/RegisterMeta/index.js +1 -1
- package/views/detail/RegisterMeta/index.js.map +1 -1
- package/views/hooks/useStakeholder.d.ts +0 -0
- package/views/hooks/useStakeholder.js +1 -0
- package/views/hooks/useStakeholder.js.map +1 -0
- package/views/index.d.ts +1 -0
- package/views/index.js +71 -8
- package/views/index.js.map +1 -1
- package/views/protocolRegistry.d.ts +1 -0
- package/views/protocolRegistry.js +4 -0
- package/views/protocolRegistry.js.map +1 -1
- package/views/sidebar/Browse/index.js +8 -44
- package/views/sidebar/Browse/index.js.map +1 -1
- package/views/sidebar/Registration/index.js.map +1 -1
- package/views/sidebar/index.d.ts +2 -1
- package/views/sidebar/index.js +77 -62
- package/views/sidebar/index.js.map +1 -1
- package/views/util.d.ts +5 -0
- package/views/util.js +42 -4
- package/views/util.js.map +1 -1
|
@@ -29,6 +29,8 @@ var _Proposals = require("../../change-request/Proposals");
|
|
|
29
29
|
|
|
30
30
|
var _cr = require("../../../types/cr");
|
|
31
31
|
|
|
32
|
+
var _queries = require("../../../proposals/actionableGroups/queries");
|
|
33
|
+
|
|
32
34
|
var _stakeholder = require("../../../types/stakeholder");
|
|
33
35
|
|
|
34
36
|
var _protocolRegistry = require("../../protocolRegistry");
|
|
@@ -56,7 +58,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
56
58
|
/** @jsxFrag React.Fragment */
|
|
57
59
|
//import { Helmet } from 'react-helmet';
|
|
58
60
|
const RegisterHome = function () {
|
|
59
|
-
var _a
|
|
61
|
+
var _a;
|
|
60
62
|
|
|
61
63
|
const {
|
|
62
64
|
spawnTab
|
|
@@ -65,6 +67,7 @@ const RegisterHome = function () {
|
|
|
65
67
|
registerMetadata,
|
|
66
68
|
stakeholder,
|
|
67
69
|
itemClasses,
|
|
70
|
+
itemClassGroups,
|
|
68
71
|
setActiveChangeRequestID,
|
|
69
72
|
jumpTo
|
|
70
73
|
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
@@ -184,13 +187,13 @@ const RegisterHome = function () {
|
|
|
184
187
|
}
|
|
185
188
|
}, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]); // Actionable proposals v2
|
|
186
189
|
|
|
187
|
-
const proposalGroups = (0, _react.useMemo)(() => (stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.
|
|
190
|
+
const proposalGroups = (0, _react.useMemo)(() => (stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.roles[0]) ? stakeholder.roles.flatMap(_queries.getActionableProposalGroupsForRole) : null, [stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.roles.join(',')]);
|
|
188
191
|
const actionableProposalsResult = useMapReducedData({
|
|
189
192
|
chains: (proposalGroups !== null && proposalGroups !== void 0 ? proposalGroups : []).map(([label,, queryGetter]) => {
|
|
190
193
|
const query = queryGetter(stakeholder);
|
|
191
194
|
const predicateFunc = `
|
|
192
195
|
const objPath = key, obj = value;
|
|
193
|
-
return ((${CR_BASE_QUERY}) && (${query}));
|
|
196
|
+
return ((${_queries.CR_BASE_QUERY}) && (${query}));
|
|
194
197
|
`;
|
|
195
198
|
const mapFunc = `emit(value);`;
|
|
196
199
|
return {
|
|
@@ -365,11 +368,15 @@ const RegisterHome = function () {
|
|
|
365
368
|
selectProposal((0, _itemPathUtils.itemRefToItemPath)(itemRef));
|
|
366
369
|
} : null;
|
|
367
370
|
const itemSelectorBlocks = (0, _react.useMemo)(() => {
|
|
368
|
-
|
|
369
|
-
|
|
371
|
+
const groups = itemClassGroups ? itemClassGroups : {
|
|
372
|
+
'': Object.keys(itemClasses)
|
|
373
|
+
};
|
|
374
|
+
return (0, _react2.jsx)(_react.default.Fragment, null, Object.entries(groups).map(([groupLabel, clsIDs]) => (0, _react2.jsx)(_react.default.Fragment, null, groupLabel ? (0, _react2.jsx)(GridHeader, null, groupLabel, ":") : null, clsIDs.map(clsID => {
|
|
375
|
+
var _a, _b;
|
|
370
376
|
|
|
377
|
+
const cls = itemClasses[clsID];
|
|
371
378
|
const actions = [{
|
|
372
|
-
onClick: () =>
|
|
379
|
+
onClick: () => spawnTab(`${_protocolRegistry.Protocols.ITEM_CLASS}:${clsID}`),
|
|
373
380
|
icon: 'search',
|
|
374
381
|
text: "Find item…",
|
|
375
382
|
selected: activeItemSelector === clsID
|
|
@@ -387,19 +394,19 @@ const RegisterHome = function () {
|
|
|
387
394
|
return (0, _react2.jsx)(_Block.HomeBlockCard, {
|
|
388
395
|
key: clsID,
|
|
389
396
|
css: (0, _react2.css)`flex-basis: calc(25% - 10px*3/4); flex-shrink: 0;`,
|
|
390
|
-
description: `Search items of class ${cls.meta.title}`
|
|
397
|
+
description: `Search items of class ${(_a = cls === null || cls === void 0 ? void 0 : cls.meta.title) !== null && _a !== void 0 ? _a : clsID}`
|
|
391
398
|
}, (0, _react2.jsx)(_core.Tag, {
|
|
392
399
|
minimal: true
|
|
393
400
|
}, "Class"), (0, _react2.jsx)("div", {
|
|
394
401
|
css: (0, _react2.css)`padding: 5px; flex-grow: 1;`
|
|
395
402
|
}, (0, _react2.jsx)(_core.H5, {
|
|
396
403
|
css: (0, _react2.css)`margin: 0;`
|
|
397
|
-
}, cls.meta.title), cls.meta.description && cls.meta.description !== cls.meta.title ? (0, _react2.jsx)("p", {
|
|
404
|
+
}, cls.meta.title), cls ? cls.meta.description && cls.meta.description !== cls.meta.title ? (0, _react2.jsx)("p", {
|
|
398
405
|
css: (0, _react2.css)`margin: 10px 0 0 0;`
|
|
399
|
-
}, (
|
|
406
|
+
}, (_b = cls.meta.description) !== null && _b !== void 0 ? _b : "(no description)") : null : "(no class information available)"), (0, _react2.jsx)(_Block.HomeBlockActions, {
|
|
400
407
|
actions: actions
|
|
401
408
|
}));
|
|
402
|
-
}), (0, _react2.jsx)(_ItemSearchDrawer.default, {
|
|
409
|
+
}))), (0, _react2.jsx)(_ItemSearchDrawer.default, {
|
|
403
410
|
isOpen: jumpTo && activeItemSelector ? true : false,
|
|
404
411
|
onClose: () => activateItemSelector(null),
|
|
405
412
|
availableClassIDs: typeof activeItemSelector === 'string' ? [activeItemSelector] : [],
|
|
@@ -407,13 +414,13 @@ const RegisterHome = function () {
|
|
|
407
414
|
}));
|
|
408
415
|
}, [itemClasses, activeItemSelector, activeCRIsEditable, jumpTo]);
|
|
409
416
|
return (0, _react2.jsx)(_util.TabContentsWithHeader, {
|
|
410
|
-
title: (
|
|
417
|
+
title: (0, _react2.jsx)(_react.default.Fragment, null),
|
|
411
418
|
layoutOptions: {
|
|
412
419
|
gapPx: itemGapPx,
|
|
413
420
|
stretch: true
|
|
414
421
|
},
|
|
415
422
|
layout: "card-grid"
|
|
416
|
-
}, activeCRBlock !== null && activeCRBlock !== void 0 ? activeCRBlock : registerMetaBlock, proposalBlock, proposedChangeBlocks ? (0, _react2.jsx)(GridHeader, null, "Proposed Changes: (", Object.keys((
|
|
423
|
+
}, activeCRBlock !== null && activeCRBlock !== void 0 ? activeCRBlock : registerMetaBlock, proposalBlock, proposedChangeBlocks ? (0, _react2.jsx)(GridHeader, null, "Proposed Changes: (", Object.keys((_a = activeCR === null || activeCR === void 0 ? void 0 : activeCR.items) !== null && _a !== void 0 ? _a : []).length, " total)") : null, proposedChangeBlocks, !itemClassGroups ? (0, _react2.jsx)(GridHeader, null, "Register Items:") : null, itemSelectorBlocks);
|
|
417
424
|
};
|
|
418
425
|
|
|
419
426
|
const GridHeader = (0, _styled.default)(_core.H4)`
|
|
@@ -427,70 +434,4 @@ const GridHeader = (0, _styled.default)(_core.H4)`
|
|
|
427
434
|
`;
|
|
428
435
|
const itemGapPx = 10;
|
|
429
436
|
var _default = RegisterHome;
|
|
430
|
-
exports.default = _default;
|
|
431
|
-
|
|
432
|
-
function getActionableProposalGroupsForRole(role) {
|
|
433
|
-
return CR_QUERIES_FOR_ROLES.filter(([, roles]) => roles.has(role));
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
const CR_BASE_QUERY = 'objPath.indexOf("/proposals/") === 0 && objPath.endsWith("main.yaml")';
|
|
437
|
-
const CR_QUERIES_FOR_ROLES = [['My Drafts', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {
|
|
438
|
-
if (stakeholder && stakeholder.gitServerUsername) {
|
|
439
|
-
const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === "${stakeholder.gitServerUsername}"`;
|
|
440
|
-
const query = `(obj.state === "${_cr.State.DRAFT}" || obj.state === "${_cr.State.RETURNED_FOR_CLARIFICATION}") && (${stakeholderCondition})`;
|
|
441
|
-
return query;
|
|
442
|
-
} else {
|
|
443
|
-
return 'false';
|
|
444
|
-
}
|
|
445
|
-
}], ['My Rejected', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {
|
|
446
|
-
// Rejections are actionable because they can be appealed by the submitter.
|
|
447
|
-
if (stakeholder && stakeholder.gitServerUsername) {
|
|
448
|
-
const stakeholderCondition = `obj.submittingStakeholderGitServerUsername === "${stakeholder.gitServerUsername}"`;
|
|
449
|
-
const query = `(obj.state === "${_cr.State.REJECTED}") && (${stakeholderCondition})`;
|
|
450
|
-
return query;
|
|
451
|
-
} else {
|
|
452
|
-
return 'false';
|
|
453
|
-
}
|
|
454
|
-
}], ['Everyone’s Drafts or Returned', new Set(['manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {
|
|
455
|
-
if (stakeholder && stakeholder.gitServerUsername) {
|
|
456
|
-
const stakeholderCondition = `obj.submittingStakeholderGitServerUsername !== "${stakeholder.gitServerUsername}"`;
|
|
457
|
-
const query = `(obj.state === "${_cr.State.DRAFT}" || obj.state === "${_cr.State.RETURNED_FOR_CLARIFICATION}") && (${stakeholderCondition})`;
|
|
458
|
-
return query;
|
|
459
|
-
} else {
|
|
460
|
-
return 'false';
|
|
461
|
-
}
|
|
462
|
-
}], // ['latest reviewed', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {
|
|
463
|
-
// // TODO: Should filter only rejected perhaps?
|
|
464
|
-
// // Approved/accepted proposals can be shown in another (public) area.
|
|
465
|
-
// if (stakeholder && stakeholder.gitServerUsername) {
|
|
466
|
-
// const stakeholderCondition = stakeholder?.role !== 'submitter'
|
|
467
|
-
// ? 'true'
|
|
468
|
-
// : `obj.submittingStakeholderGitServerUsername === "${stakeholder.gitServerUsername}"`;
|
|
469
|
-
// // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.
|
|
470
|
-
// const query = `(obj.state === "${State.ACCEPTED} || obj.state === "${State.REJECTED} || obj.state === "${State.REJECTION_UPHELD_ON_APPEAL}"") && ${stakeholderCondition}`;
|
|
471
|
-
// return query;
|
|
472
|
-
// } else {
|
|
473
|
-
// return 'false';
|
|
474
|
-
// }
|
|
475
|
-
// // TODO: Implement limit
|
|
476
|
-
// }],
|
|
477
|
-
// ['latest withdrawn', new Set(['submitter', 'manager', 'control-body', 'owner']), function submitterProposals(stakeholder) {
|
|
478
|
-
// if (stakeholder && stakeholder.gitServerUsername) {
|
|
479
|
-
// const stakeholderCondition = stakeholder?.role !== 'submitter'
|
|
480
|
-
// ? 'true'
|
|
481
|
-
// : `obj.submittingStakeholderGitServerUsername === "${stakeholder.gitServerUsername}"`;
|
|
482
|
-
// // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.
|
|
483
|
-
// const query = `(obj.state === "${State.WITHDRAWN}" || obj.state === "${State.APPEAL_WITHDRAWN}") && ${stakeholderCondition}`;
|
|
484
|
-
// return query;
|
|
485
|
-
// } else {
|
|
486
|
-
// return 'false';
|
|
487
|
-
// }
|
|
488
|
-
// // TODO: Implement limit
|
|
489
|
-
// }],
|
|
490
|
-
['Pending Owner Appeal Review', new Set(['owner']), function ownerProposals() {
|
|
491
|
-
return `obj.state === "${_cr.State.APPEALED}"`;
|
|
492
|
-
}], ['Pending Control Body Review', new Set(['control-body', 'owner']), function cbProposals() {
|
|
493
|
-
return `obj.state === "${_cr.State.SUBMITTED_FOR_CONTROL_BODY_REVIEW}"`;
|
|
494
|
-
}], ['Pending Manager Review', new Set(['manager', 'control-body', 'owner']), function managerProposals() {
|
|
495
|
-
return `obj.state === "${_cr.State.PROPOSED}"`;
|
|
496
|
-
}]];
|
|
437
|
+
exports.default = _default;
|
|
@@ -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 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 ItemSearchDrawer from '../../ItemSearchDrawer';\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 && (createCR || (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 createCR,\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) {\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]);\n\n const [selectedProposal, selectProposal] = useState<string | null>(null);\n const proposedChangeBlocks = useMemo(() => {\n if (activeCR) {\n return (\n <CRProposals\n proposals={activeCR.items}\n selectedItem={selectedProposal}\n onSelectItem={selectProposal}\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, selectedProposal, selectProposal, updateItemProposal]);\n\n const [activeItemSelector, activateItemSelector] =\n useState<keyof typeof itemClasses | true | null>(null);\n\n const handleProposeNew = proposeBlankItem\n ? async function handleProposeNew(clsID: string) {\n const itemRef = await proposeBlankItem(clsID);\n selectProposal(itemRefToItemPath(itemRef));\n }\n : null;\n \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 && handleProposeNew) {\n actions.push({\n onClick: () => handleProposeNew(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 <ItemSearchDrawer\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"]}
|
|
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 SomeCR as CR } from '../../../types/cr';\nimport { getActionableProposalGroupsForRole, CR_BASE_QUERY } from '../../../proposals/actionableGroups/queries';\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 ItemSearchDrawer from '../../ItemSearchDrawer';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const {\n registerMetadata, stakeholder,\n itemClasses,\n itemClassGroups,\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?.roles[0]\n ? stakeholder.roles.flatMap(getActionableProposalGroupsForRole)\n : null),\n [stakeholder?.roles.join(',')]);\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 && (createCR || (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 createCR,\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) {\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]);\n\n const [selectedProposal, selectProposal] = useState<string | null>(null);\n const proposedChangeBlocks = useMemo(() => {\n if (activeCR) {\n return (\n <CRProposals\n proposals={activeCR.items}\n selectedItem={selectedProposal}\n onSelectItem={selectProposal}\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, selectedProposal, selectProposal, updateItemProposal]);\n\n const [activeItemSelector, activateItemSelector] =\n useState<keyof typeof itemClasses | true | null>(null);\n\n const handleProposeNew = proposeBlankItem\n ? async function handleProposeNew(clsID: string) {\n const itemRef = await proposeBlankItem(clsID);\n selectProposal(itemRefToItemPath(itemRef));\n }\n : null;\n \n\n const itemSelectorBlocks = useMemo(() => {\n const groups = itemClassGroups\n ? itemClassGroups\n : { '': Object.keys(itemClasses) };\n return (\n <>\n {Object.entries(groups).map(([groupLabel, clsIDs]) =>\n <>\n {groupLabel\n ? <GridHeader>{groupLabel}:</GridHeader>\n : null}\n {clsIDs.map((clsID: string) => {\n const cls = itemClasses[clsID];\n const actions: MenuItemProps[] = [{\n onClick: () => spawnTab(`${Protocols.ITEM_CLASS}:${clsID}`),\n icon: 'search',\n text: \"Find item…\",\n selected: activeItemSelector === clsID,\n }];\n if (activeCRIsEditable && handleProposeNew) {\n actions.push({\n onClick: () => handleProposeNew(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 ?? clsID}`}>\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\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 : \"(no class information available)\"}\n </div>\n <HomeBlockActions actions={actions} />\n </HomeBlockCard>\n })}\n </>\n )}\n\n <ItemSearchDrawer\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={<></>}\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 {!itemClassGroups\n ? <GridHeader>\n Register Items:\n </GridHeader>\n : null}\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"]}
|
|
@@ -10,10 +10,10 @@ export declare const ItemDetail: React.VoidFunctionComponent<{
|
|
|
10
10
|
compactHeader?: boolean;
|
|
11
11
|
}>;
|
|
12
12
|
declare const _default: {
|
|
13
|
-
main: React.VoidFunctionComponent<{
|
|
13
|
+
readonly main: React.VoidFunctionComponent<{
|
|
14
14
|
uri: string;
|
|
15
15
|
}>;
|
|
16
|
-
title: React.FC<{
|
|
16
|
+
readonly title: React.FC<{
|
|
17
17
|
uri: string;
|
|
18
18
|
}>;
|
|
19
19
|
};
|
|
@@ -137,6 +137,7 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
137
137
|
|
|
138
138
|
const {
|
|
139
139
|
subregisters,
|
|
140
|
+
useRegisterItemData,
|
|
140
141
|
activeChangeRequestID: globallyActiveCRID
|
|
141
142
|
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
142
143
|
const {
|
|
@@ -160,13 +161,17 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
160
161
|
details = (0, _react2.jsx)(EditView, {
|
|
161
162
|
itemData: editedItemData,
|
|
162
163
|
itemRef: itemRef,
|
|
163
|
-
onChange: !isBusy ? setEditedItemData : undefined
|
|
164
|
+
onChange: !isBusy ? setEditedItemData : undefined,
|
|
165
|
+
// TODO: make importing context from registry-kit work in new-style extension
|
|
166
|
+
useRegisterItemData: useRegisterItemData
|
|
164
167
|
});
|
|
165
168
|
} else {
|
|
166
169
|
const DetailView = (_a = itemClass.views.detailView) !== null && _a !== void 0 ? _a : itemClass.views.editView;
|
|
167
170
|
details = (0, _react2.jsx)(DetailView, {
|
|
168
171
|
itemRef: itemRef,
|
|
169
|
-
itemData: item.data
|
|
172
|
+
itemData: item.data,
|
|
173
|
+
// TODO: make importing context from registry-kit work in new-style extension
|
|
174
|
+
useRegisterItemData: useRegisterItemData
|
|
170
175
|
});
|
|
171
176
|
}
|
|
172
177
|
|
|
@@ -177,9 +182,20 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
177
182
|
const itemPath = (0, _itemPathUtils.itemRefToItemPath)(itemRef);
|
|
178
183
|
/** Proposal for the current item. */
|
|
179
184
|
|
|
180
|
-
const proposal = (_b = activeCR && activeCR.items[itemPath] ? activeCR.items[itemPath] : null) !== null && _b !== void 0 ? _b : null;
|
|
185
|
+
const proposal = (_b = activeCR && activeCR.items[itemPath] ? activeCR.items[itemPath] : null) !== null && _b !== void 0 ? _b : null;
|
|
186
|
+
const proposedSupersedingItemRefs = (proposal === null || proposal === void 0 ? void 0 : proposal.type) === 'amendment' && proposal.amendmentType === 'supersession' ? proposal.supersedingItemIDs.map(id => ({
|
|
187
|
+
itemID: id,
|
|
188
|
+
// Superseding items are always of the same class
|
|
189
|
+
classID: itemClass.meta.id,
|
|
190
|
+
// Superseding items are always in the same subregister
|
|
191
|
+
subregisterID: itemRef.subregisterID
|
|
192
|
+
})) : undefined;
|
|
193
|
+
const supersedingItemRefs = (_c = proposedSupersedingItemRefs !== null && proposedSupersedingItemRefs !== void 0 ? proposedSupersedingItemRefs : item.supersededBy) !== null && _c !== void 0 ? _c : [];
|
|
194
|
+
const supersedingItemRefsCacheKey = supersedingItemRefs.map(i => JSON.stringify(i)).toString(); // It’s superseded (whether in current proposal or not)
|
|
181
195
|
|
|
182
|
-
const isSuperseded =
|
|
196
|
+
const isSuperseded =
|
|
197
|
+
/* item.status === 'superseded'; nuh-uh */
|
|
198
|
+
supersedingItemRefs.length > 0; // Item is valid, proposal is editable, and no change to this item is proposed yet
|
|
183
199
|
|
|
184
200
|
const canBeSuperseded = activeCRIsEditable && !proposal && !editedItemData && item.status === 'valid'; // This item is being superseded in active proposal
|
|
185
201
|
// XXX: May be redundant with `isSuperseded`?
|
|
@@ -289,16 +305,7 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
289
305
|
} else {
|
|
290
306
|
throw new Error("Newly created item did not pass validation (this is likely a bug in RegistryKit)");
|
|
291
307
|
}
|
|
292
|
-
}, [updateObjects, activeCRIsEditable, itemPath, activeCR === null || activeCR === void 0 ? void 0 : activeCR.id, activeCR === null || activeCR === void 0 ? void 0 : activeCR.state, Object.entries((
|
|
293
|
-
const proposedSupersedingItemRefs = (proposal === null || proposal === void 0 ? void 0 : proposal.type) === 'amendment' && proposal.amendmentType === 'supersession' ? proposal.supersedingItemIDs.map(id => ({
|
|
294
|
-
itemID: id,
|
|
295
|
-
// Superseding items are always of the same class
|
|
296
|
-
classID: itemClass.meta.id,
|
|
297
|
-
// Superseding items are always in the same subregister
|
|
298
|
-
subregisterID: itemRef.subregisterID
|
|
299
|
-
})) : undefined;
|
|
300
|
-
const supersedingItemRefs = (_d = proposedSupersedingItemRefs !== null && proposedSupersedingItemRefs !== void 0 ? proposedSupersedingItemRefs : item.supersededBy) !== null && _d !== void 0 ? _d : [];
|
|
301
|
-
const supersedingItemRefsCacheKey = supersedingItemRefs.map(i => JSON.stringify(i)).toString();
|
|
308
|
+
}, [updateObjects, activeCRIsEditable, itemPath, activeCR === null || activeCR === void 0 ? void 0 : activeCR.id, activeCR === null || activeCR === void 0 ? void 0 : activeCR.state, Object.entries((_d = activeCR === null || activeCR === void 0 ? void 0 : activeCR.items) !== null && _d !== void 0 ? _d : {}).flat().map(i => JSON.stringify(i)).toString(), item ? JSON.stringify((0, _util.normalizeObject)(item)) : item]);
|
|
302
309
|
const supersedingItemsTooltip = (0, _react.useMemo)(() => ({
|
|
303
310
|
icon: 'info-sign',
|
|
304
311
|
content: (0, _react2.jsx)(_RelatedItems.RelatedItems, {
|