@riboseinc/paneron-registry-kit 2.2.35 → 2.2.37
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/package.json +2 -2
- package/proposals/ListItem.d.ts +1 -0
- package/proposals/ListItem.js +4 -1
- package/proposals/ListItem.js.map +1 -1
- package/proposals/MetaProperties.d.ts +4 -3
- package/proposals/MetaProperties.js +26 -19
- package/proposals/MetaProperties.js.map +1 -1
- package/proposals/ProposalBrowser.d.ts +8 -1
- package/proposals/ProposalBrowser.js +2 -1
- package/proposals/ProposalBrowser.js.map +1 -1
- package/proposals/ProposalTab.d.ts +2 -0
- package/proposals/ProposalTab.js +13 -1
- package/proposals/ProposalTab.js.map +1 -1
- package/proposals/ProposalWorkspace.d.ts +3 -1
- package/proposals/ProposalWorkspace.js +9 -7
- package/proposals/ProposalWorkspace.js.map +1 -1
- package/proposals/TransitionHistory.js +10 -4
- package/proposals/TransitionHistory.js.map +1 -1
- package/proposals/actionableGroups/Tree.js +15 -0
- package/proposals/actionableGroups/Tree.js.map +1 -1
- package/proposals/actionableGroups/treeNodes.js +9 -5
- package/proposals/actionableGroups/treeNodes.js.map +1 -1
- package/proposals/types.d.ts +1 -0
- package/proposals/types.js +5 -0
- package/proposals/types.js.map +1 -1
- package/views/detail/AllItems.d.ts +8 -0
- package/views/detail/AllItems.js +45 -0
- package/views/detail/AllItems.js.map +1 -0
- package/views/detail/ProposalWork.js +3 -1
- package/views/detail/ProposalWork.js.map +1 -1
- package/views/detail/RegisterHome/ActiveProposalDetails.js +6 -1
- package/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -1
- package/views/detail/RegisterHome2/index.js +11 -2
- package/views/detail/RegisterHome2/index.js.map +1 -1
- package/views/sidebar/Search/index.d.ts +2 -0
- package/views/sidebar/Search/index.js +14 -2
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/sidebar/index.js +9 -3
- package/views/sidebar/index.js.map +1 -1
- package/views/util.d.ts +8 -0
- package/views/util.js +10 -3
- package/views/util.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riboseinc/paneron-registry-kit",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.37",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Ribose Inc. <open.source@ribose.com>",
|
|
6
6
|
"scripts": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@blueprintjs/select": "~4.9.10",
|
|
29
29
|
"@emotion/react": "^11.10.6",
|
|
30
30
|
"@emotion/styled": "^11.10.6",
|
|
31
|
-
"@riboseinc/paneron-extension-kit": "2.2.
|
|
31
|
+
"@riboseinc/paneron-extension-kit": "2.2.25",
|
|
32
32
|
"@types/react": "17.0.53",
|
|
33
33
|
"@types/react-dom": "^17.0.2",
|
|
34
34
|
"@types/react-helmet": "^6.1.2",
|
package/proposals/ListItem.d.ts
CHANGED
package/proposals/ListItem.js
CHANGED
|
@@ -19,17 +19,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
19
19
|
|
|
20
20
|
/** @jsxFrag React.Fragment */
|
|
21
21
|
const ProposalAsListItem = function ({
|
|
22
|
-
proposal
|
|
22
|
+
proposal,
|
|
23
|
+
showTime
|
|
23
24
|
}) {
|
|
24
25
|
const justification = (0, _types.hasSubmitterInput)(proposal) ? proposal.justification : 'N/A';
|
|
25
26
|
return (0, _react2.jsx)("span", {
|
|
26
27
|
title: `${justification} (proposal ID: ${proposal.id})`
|
|
27
28
|
}, (0, _types.isDisposed)(proposal) ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_util.Datestamp, {
|
|
28
29
|
useUTC: true,
|
|
30
|
+
showTimeIfNonZero: showTime,
|
|
29
31
|
date: proposal.timeDisposed,
|
|
30
32
|
title: "Disposed"
|
|
31
33
|
}), ": ") : (0, _types.hadBeenProposed)(proposal) ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_util.Datestamp, {
|
|
32
34
|
useUTC: true,
|
|
35
|
+
showTimeIfNonZero: showTime,
|
|
33
36
|
date: proposal.timeProposed,
|
|
34
37
|
title: "Proposed"
|
|
35
38
|
}), ": ") : null, justification);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../src/proposals/ListItem.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAe,MAAM,SAAS,CAAC;AAItF,MAAM,CAAC,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../src/proposals/ListItem.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAe,MAAM,SAAS,CAAC;AAItF,MAAM,CAAC,MAAM,kBAAkB,GAG1B,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACnC,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;IAEnF,OAAO,cAAM,KAAK,EAAE,GAAG,aAAa,kBAAkB,QAAQ,CAAC,EAAE,GAAG;QACjE,UAAU,CAAC,QAAQ,CAAC;YACnB,CAAC,CAAC;gBAAE,IAAC,SAAS,IAAC,MAAM,QAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAC,UAAU,GAAG;qBAAK;YACxG,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACzB,CAAC,CAAC;oBAAE,IAAC,SAAS,IAAC,MAAM,QAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAC,UAAU,GAAG;yBAAK;gBACxG,CAAC,CAAC,IAAI;QACT,aAAa,CACT,CAAC;AACV,CAAC,CAAC;AAGF,eAAe,kBAAkB,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React from 'react';\nimport { jsx } from '@emotion/react';\nimport { Datestamp } from '../views/util';\nimport { isDisposed, hadBeenProposed, hasSubmitterInput, type SomeCR } from './types';\n\n\n\nexport const ProposalAsListItem: React.FC<{\n proposal: SomeCR\n showTime?: boolean\n}> = function ({ proposal, showTime }) {\n const justification = hasSubmitterInput(proposal) ? proposal.justification : 'N/A';\n\n return <span title={`${justification} (proposal ID: ${proposal.id})`}>\n {isDisposed(proposal)\n ? <><Datestamp useUTC showTimeIfNonZero={showTime} date={proposal.timeDisposed} title=\"Disposed\" />: </>\n : hadBeenProposed(proposal)\n ? <><Datestamp useUTC showTimeIfNonZero={showTime} date={proposal.timeProposed} title=\"Proposed\" />: </>\n : null}\n {justification}\n </span>;\n};\n\n\nexport default ProposalAsListItem;\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import type { Register } from '../types
|
|
5
|
-
import type { RegisterStakeholder } from '../types/stakeholder';
|
|
4
|
+
import type { Register, RegisterStakeholder } from '../types';
|
|
6
5
|
import { type SomeCR } from './types';
|
|
7
6
|
/** Proposal meta properties, must be nested within a DL. */
|
|
8
7
|
declare const Summary: React.FC<{
|
|
9
8
|
cr: SomeCR;
|
|
9
|
+
register?: Register;
|
|
10
10
|
currentStakeholder?: RegisterStakeholder;
|
|
11
|
-
|
|
11
|
+
submittingStakeholder?: RegisterStakeholder;
|
|
12
|
+
compareRegisterVersion?: boolean;
|
|
12
13
|
}>;
|
|
13
14
|
export default Summary;
|
|
@@ -39,31 +39,38 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
39
39
|
const Summary = function ({
|
|
40
40
|
cr,
|
|
41
41
|
currentStakeholder,
|
|
42
|
-
|
|
42
|
+
register,
|
|
43
|
+
compareRegisterVersion
|
|
43
44
|
}) {
|
|
44
|
-
var _a, _b, _c, _d, _e
|
|
45
|
+
var _a, _b, _c, _d, _e;
|
|
45
46
|
|
|
46
|
-
const crStakeholder = ((_a = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.stakeholders) !== null && _a !== void 0 ? _a : []).find(s => s.gitServerUsername === cr.submittingStakeholderGitServerUsername);
|
|
47
47
|
const {
|
|
48
48
|
useObjectData
|
|
49
49
|
} = (0, _react.useContext)(_context.DatasetContext);
|
|
50
|
-
|
|
50
|
+
const crPath = (0, _itemPathUtils.crIDToCRPath)(cr.registerVersion);
|
|
51
|
+
const previousProposal = (_b = (_a = useObjectData({
|
|
52
|
+
objectPaths: crPath ? [crPath] : [],
|
|
53
|
+
nounLabel: 'proposal(s)'
|
|
54
|
+
}).value) === null || _a === void 0 ? void 0 : _a.data[crPath !== null && crPath !== void 0 ? crPath : '']) !== null && _b !== void 0 ? _b : crPath ? undefined : null;
|
|
55
|
+
const registerVersion = previousProposal && (0, _types.hasSubmitterInput)(previousProposal) ? (0, _react2.jsx)(_ListItem.default, {
|
|
56
|
+
showTime: true,
|
|
57
|
+
proposal: previousProposal
|
|
58
|
+
}) : (_c = cr.registerVersion) !== null && _c !== void 0 ? _c : 'N/A';
|
|
59
|
+
let currentVersion;
|
|
51
60
|
|
|
52
61
|
try {
|
|
53
|
-
|
|
62
|
+
currentVersion = (_e = (_d = (0, _useLatestAcceptedProposal.default)()) === null || _d === void 0 ? void 0 : _d.id) !== null && _e !== void 0 ? _e : undefined;
|
|
54
63
|
} catch (e) {
|
|
55
64
|
console.error("Failed to obtain latest accepted proposal");
|
|
56
|
-
|
|
65
|
+
currentVersion = undefined;
|
|
57
66
|
}
|
|
58
67
|
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
const
|
|
65
|
-
proposal: previousProposal
|
|
66
|
-
}), latestAcceptedProposalID ? (0, _react2.jsx)(_react.default.Fragment, null, "\u2002", cr.registerVersion === latestAcceptedProposalID ? (0, _react2.jsx)(_core.Tag, {
|
|
68
|
+
const submittingStakeholder = (0, _react.useMemo)(() => {
|
|
69
|
+
var _a;
|
|
70
|
+
|
|
71
|
+
return ((_a = register === null || register === void 0 ? void 0 : register.stakeholders) !== null && _a !== void 0 ? _a : []).find(s => (0, _types.isCreatedBy)(s, cr));
|
|
72
|
+
}, [register, cr]);
|
|
73
|
+
const isCurrentMarker = cr.registerVersion && compareRegisterVersion ? cr.registerVersion === currentVersion ? (0, _react2.jsx)(_core.Tag, {
|
|
67
74
|
css: (0, _react2.css)`display: inline;`,
|
|
68
75
|
intent: 'success',
|
|
69
76
|
minimal: true,
|
|
@@ -79,13 +86,13 @@ const Summary = function ({
|
|
|
79
86
|
}, "not current", " ", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
80
87
|
intent: 'warning',
|
|
81
88
|
icon: 'warning-sign',
|
|
82
|
-
content: (0, _react2.jsx)(_react.default.Fragment, null, "Register is currently at version ", (0, _react2.jsx)("strong", null,
|
|
83
|
-
}))
|
|
84
|
-
return (0, _react2.jsx)(_react.default.Fragment, null,
|
|
85
|
-
stakeholder:
|
|
89
|
+
content: (0, _react2.jsx)(_react.default.Fragment, null, "Register is currently at version ", (0, _react2.jsx)("strong", null, currentVersion), ",", " ", "which is different from version proposal author may have had in mind.", " ", "It is recommended that proposed changes are reviewed to avoid unintentionally", " ", "undoing a prior change.")
|
|
90
|
+
})) : null;
|
|
91
|
+
return (0, _react2.jsx)(_react.default.Fragment, null, submittingStakeholder ? (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Author:"), (0, _react2.jsx)("dd", null, (0, _react2.jsx)(_RegisterStakeholder.RegisterStakeholderListItem, {
|
|
92
|
+
stakeholder: submittingStakeholder,
|
|
86
93
|
showRole: true,
|
|
87
94
|
isCurrentUser: (currentStakeholder ? (0, _types.isCreatedBy)(currentStakeholder, cr) : false) || undefined
|
|
88
|
-
}))) : null, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Register\u00A0version before\u00A0proposal:"), (0, _react2.jsx)("dd", null,
|
|
95
|
+
}))) : null, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Register\u00A0version before\u00A0proposal:"), (0, _react2.jsx)("dd", null, registerVersion, isCurrentMarker ? (0, _react2.jsx)(_react.default.Fragment, null, "\u2002", isCurrentMarker) : null)), (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Proposal\u00A0ID:"), (0, _react2.jsx)("dd", null, (0, _react2.jsx)("code", {
|
|
89
96
|
css: (0, _react2.css)`white-space: nowrap;`
|
|
90
97
|
}, cr.id))));
|
|
91
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetaProperties.js","sourceRoot":"","sources":["../../src/proposals/MetaProperties.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MetaProperties.js","sourceRoot":"","sources":["../../src/proposals/MetaProperties.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Tag } from '@blueprintjs/core';\n\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\n\nimport { RegisterStakeholderListItem } from '../views/RegisterStakeholder';\nimport type { Register, RegisterStakeholder } from '../types';\nimport { crIDToCRPath } from '../views/itemPathUtils';\nimport useLatestAcceptedProposal from '../views/hooks/useLatestAcceptedProposal';\n\nimport ProposalAsListItem from './ListItem';\nimport { hasSubmitterInput, isCreatedBy, type SomeCR } from './types';\n\n\n/** Proposal meta properties, must be nested within a DL. */\nconst Summary: React.FC<{\n cr: SomeCR\n register?: Register\n currentStakeholder?: RegisterStakeholder\n submittingStakeholder?: RegisterStakeholder\n compareRegisterVersion?: boolean\n}> = function ({ cr, currentStakeholder, register, compareRegisterVersion }) {\n const { useObjectData } = useContext(DatasetContext);\n\n const crPath = crIDToCRPath(cr.registerVersion);\n const previousProposal = useObjectData({\n objectPaths: crPath ? [crPath] : [],\n nounLabel: 'proposal(s)',\n }).value?.data[crPath ?? ''] as unknown ?? (crPath ? undefined : null);\n\n const registerVersion = previousProposal && hasSubmitterInput(previousProposal)\n ? <ProposalAsListItem showTime proposal={previousProposal as SomeCR} />\n : cr.registerVersion ?? 'N/A';\n\n let currentVersion: string | undefined;\n try {\n currentVersion = useLatestAcceptedProposal()?.id ?? undefined;\n } catch (e) {\n console.error(\"Failed to obtain latest accepted proposal\");\n currentVersion = undefined;\n }\n\n const submittingStakeholder = useMemo(\n (() => (register?.stakeholders ?? []).find(s => isCreatedBy(s, cr))),\n [register, cr]);\n\n const isCurrentMarker = cr.registerVersion && compareRegisterVersion\n ? cr.registerVersion === currentVersion\n ? <Tag css={css`display: inline;`} intent='success' minimal round>\n current\n {\" \"}\n <HelpTooltip intent='success' content={<>\n Published version of the register\n {\" \"}\n had not changed since this proposal started.\n </>} />\n </Tag>\n : <Tag css={css`display: inline;`} intent='warning' minimal round>\n not current\n {\" \"}\n <HelpTooltip intent='warning' icon='warning-sign' content={<>\n Register is currently at version <strong>{currentVersion}</strong>,\n {\" \"}\n which is different from version proposal author may have had in mind.\n {\" \"}\n It is recommended that proposed changes are reviewed to avoid unintentionally\n {\" \"}\n undoing a prior change.\n </>} />\n </Tag>\n : null;\n\n return (\n <>\n {submittingStakeholder\n ? <div>\n <dt>Author:</dt>\n <dd>\n <RegisterStakeholderListItem\n stakeholder={submittingStakeholder}\n showRole\n isCurrentUser={(currentStakeholder\n ? isCreatedBy(currentStakeholder, cr)\n : false) || undefined}\n />\n </dd>\n </div>\n : null}\n\n <div>\n <dt>\n Register version before proposal:\n </dt>\n <dd>\n {registerVersion}\n {isCurrentMarker ? <> {isCurrentMarker}</> : null}\n </dd>\n </div>\n\n <div>\n <dt>Proposal ID:</dt>\n <dd><code css={css`white-space: nowrap;`}>{cr.id}</code></dd>\n </div>\n </>\n );\n};\n\nexport default Summary;\n"]}
|
|
@@ -4,6 +4,13 @@ import { jsx } from '@emotion/react';
|
|
|
4
4
|
import type { Drafted } from './types';
|
|
5
5
|
interface ProposalBrowserProps<CR extends Drafted> {
|
|
6
6
|
proposals: CR['items'];
|
|
7
|
+
/**
|
|
8
|
+
* Whether the proposal had been accepted.
|
|
9
|
+
* Influences the jump to current version of the item behavior
|
|
10
|
+
* (for non-accepted proposals, jumping to additions is not allowed
|
|
11
|
+
* since they would not be present in the registry).
|
|
12
|
+
*/
|
|
13
|
+
hadBeenAccepted?: boolean;
|
|
7
14
|
selectedItem?: (string & keyof CR['items']) | null;
|
|
8
15
|
onSelectItem: (selectedItem: (string & keyof CR['items']) | null) => void;
|
|
9
16
|
/**
|
|
@@ -18,5 +25,5 @@ interface ProposalBrowserProps<CR extends Drafted> {
|
|
|
18
25
|
*
|
|
19
26
|
* If no proposals exist, returns null.
|
|
20
27
|
*/
|
|
21
|
-
export declare function ProposalBrowser<CR extends Drafted>({ proposals, onDeleteProposalForItemAtPath, selectedItem, onSelectItem: selectProposal }: ProposalBrowserProps<CR>): jsx.JSX.Element;
|
|
28
|
+
export declare function ProposalBrowser<CR extends Drafted>({ proposals, hadBeenAccepted, onDeleteProposalForItemAtPath, selectedItem, onSelectItem: selectProposal }: ProposalBrowserProps<CR>): jsx.JSX.Element;
|
|
22
29
|
export default ProposalBrowser;
|
|
@@ -46,6 +46,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
46
46
|
*/
|
|
47
47
|
function ProposalBrowser({
|
|
48
48
|
proposals,
|
|
49
|
+
hadBeenAccepted,
|
|
49
50
|
onDeleteProposalForItemAtPath,
|
|
50
51
|
selectedItem,
|
|
51
52
|
onSelectItem: selectProposal
|
|
@@ -168,7 +169,7 @@ function ProposalBrowser({
|
|
|
168
169
|
size: _core.DrawerSize.LARGE,
|
|
169
170
|
enforceFocus: false
|
|
170
171
|
}, proposalCount > 0 && haveSelectedItem ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_core.ButtonGroup, null, (0, _react2.jsx)(_core.Button, {
|
|
171
|
-
disabled: !jumpTo || ((_a = proposals[selectedProposal]) === null || _a === void 0 ? void 0 : _a.type) === 'addition',
|
|
172
|
+
disabled: !jumpTo || ((_a = proposals[selectedProposal]) === null || _a === void 0 ? void 0 : _a.type) === 'addition' && !hadBeenAccepted,
|
|
172
173
|
icon: 'open-application',
|
|
173
174
|
onClick: () => jumpTo === null || jumpTo === void 0 ? void 0 : jumpTo(`${_protocolRegistry.Protocols.ITEM_DETAILS}:${selectedProposal}`),
|
|
174
175
|
title: "Open selected item in a new tab (not applicable to proposed additions)"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProposalBrowser.js","sourceRoot":"","sources":["../../src/proposals/ProposalBrowser.tsx"],"names":[],"mappings":"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","sourcesContent":["\n/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useCallback, useMemo } from 'react';\nimport { ClassNames, jsx, css } from '@emotion/react';\nimport { Select2 as Select } from '@blueprintjs/select';\nimport { ButtonGroup, Button, Drawer, DrawerSize } from '@blueprintjs/core';\n\nimport ErrorBoundary from '@riboseinc/paneron-extension-kit/widgets/ErrorBoundary';\n\nimport { useItemRef, itemPathToItemRef } from '../views/itemPathUtils';\nimport { BrowserCtx, type BrowserCtx as BrowserCtxType } from '../views/BrowserCtx';\nimport { Protocols, type Protocol } from '../views/protocolRegistry';\n\nimport type { Drafted } from './types';\nimport { type ChangeProposalItem, ChangeProposalItemView, getProposalIcon } from './ProposalItem';\nimport ProposalSummary from './ProposalSummary';\nimport ProposalDetail from './ProposalDetail';\n\n\ninterface ProposalBrowserProps<CR extends Drafted> {\n proposals: CR['items']\n\n selectedItem?: (string & keyof CR['items']) | null\n onSelectItem: (selectedItem: (string & keyof CR['items']) | null) => void\n\n /**\n * If provided, button to delete each proposed change\n * is shown in change card list mode.\n */\n onDeleteProposalForItemAtPath?: (itemPath: string) => void\n}\n/**\n * Shows a list of individual proposed changes as cards by default,\n * allowing to expand a proposal and view item details.\n *\n * If no proposals exist, returns null.\n */\nexport function ProposalBrowser<CR extends Drafted>\n({ proposals, onDeleteProposalForItemAtPath, selectedItem, onSelectItem: selectProposal }:\nProposalBrowserProps<CR>) {\n const selectedProposal = selectedItem ?? null;\n\n // TODO: Temporarily unsupported\n // (limitations of current change annotation implementation)\n //const [ showOnlyChanged, setShowOnlyChanged ] = useState(true);\n\n const outerBrowserCtx = useContext(BrowserCtx);\n const { jumpTo, subregisters, useRegisterItemData } = outerBrowserCtx;\n\n /**\n * When jumping to an item affected by current CR,\n * jump in-CR instead of spawning tab.\n */\n const handleCRJump = useCallback(function _handleCRJump(uri: `${Protocol}:${string}`): void {\n if (uri.startsWith(Protocols.ITEM_DETAILS)) {\n const itemPath = uri.split(':')[1];\n if (proposals[itemPath]) {\n selectProposal(itemPath);\n } else {\n jumpTo?.(uri);\n }\n }\n }, [Object.keys(proposals), jumpTo]);\n\n const proposalBrowserCtx: BrowserCtxType = useMemo((() => ({\n ...outerBrowserCtx,\n jumpTo: handleCRJump,\n })), [handleCRJump, outerBrowserCtx]);\n\n /** Paths of register items in proposal. */\n const proposedItemPaths = Object.entries(proposals).map(([itemPath, proposal]) => {\n if (proposal.type === 'clarification' || proposal.type === 'addition') {\n return itemPath;\n } else {\n return undefined;\n }\n }).filter(s => s !== undefined) as string[];\n\n /** Proposed data of register items in proposal. */\n const proposedItemDataReq = useRegisterItemData({\n itemPaths: proposedItemPaths,\n });\n\n /** Pre-existing data of register items in proposal. */\n const currentItemDataReq = useRegisterItemData({\n itemPaths: Object.keys(proposals),\n ignoreActiveCR: true,\n });\n\n const getCurrentItem = useCallback(\n ((itemPath: string) => currentItemDataReq.value[itemPath] ?? null),\n [currentItemDataReq.value]);\n const getProposedItem = useCallback(\n ((itemPath: string) => proposedItemDataReq.value[itemPath] ?? null),\n [proposedItemDataReq.value]);\n\n /** Current register item (if any) corresponding to selected proposal. */\n const selectedItemCurrent = selectedProposal ? getCurrentItem(selectedProposal) : null;\n\n /** Proposed register item corresponding to selected proposal. */\n const selectedItemProposed = selectedProposal ? getProposedItem(selectedProposal) : null;\n\n const selectedItemRef = useItemRef(subregisters !== undefined, selectedProposal);\n\n const handleItemSelect = useCallback(\n ((item: ChangeProposalItem) => selectProposal(item.itemPath)),\n [selectProposal]);\n\n const activeItem: ChangeProposalItem | null = useMemo((() =>\n selectedProposal\n ? ({\n itemPath: selectedProposal,\n proposal: proposals[selectedProposal],\n item: (selectedItemProposed ?? selectedItemCurrent)!,\n itemBefore: selectedItemCurrent ?? undefined,\n itemRef: itemPathToItemRef(subregisters !== undefined, selectedProposal),\n })\n : null\n ), [selectedProposal, proposals, subregisters]);\n\n const allItems: ChangeProposalItem[] = useMemo((() =>\n Object.entries(proposals).map(([itemPath, proposal]) => ({\n itemPath,\n proposal,\n item: (getProposedItem(itemPath) ?? getCurrentItem(itemPath))! ?? null,\n itemBefore: undefined,\n itemRef: itemPathToItemRef(subregisters !== undefined, itemPath),\n }))\n ), [proposals, getCurrentItem, getProposedItem, subregisters !== undefined]);\n\n const haveSelectedItem =\n selectedProposal\n && selectedItemRef\n && proposals[selectedProposal]\n && (selectedItemProposed || selectedItemCurrent);\n\n const proposalCount = Object.keys(proposals).length;\n\n //useEffect(() => {\n // // if (!selectedProposal) {\n // // const firstProposal = Object.keys(proposals)[0];\n // // if (firstProposal) {\n // // if (getCurrentItem(firstProposal) || getProposedItem(firstProposal)) {\n // // selectProposal(firstProposal);\n // // }\n // // }\n // // }\n // if (selectedProposal) {\n // if (selectedProposalDetailRef.current) {\n // selectedProposalDetailRef.current.scrollIntoView({ block: 'center' });\n // }\n // }\n //}, [selectedProposal === null]);\n\n const selectedItemSummary = haveSelectedItem\n ? <ProposalSummary\n itemRef={selectedItemRef}\n item={(selectedItemProposed ?? selectedItemCurrent)!}\n itemBefore={selectedItemCurrent ?? undefined}\n proposal={proposals[selectedProposal]}\n />\n : <>Select item…</>;\n const icon = haveSelectedItem\n ? getProposalIcon(proposals[selectedProposal])\n : undefined;\n\n const selectedItemDrawer = useMemo((() =>\n <Drawer\n isOpen={proposalCount > 0 && haveSelectedItem ? true : false}\n onClose={() => selectProposal(null)}\n size={DrawerSize.LARGE}\n enforceFocus={false}>\n {proposalCount > 0 && haveSelectedItem\n ? <>\n <ButtonGroup>\n <Button\n disabled={!jumpTo || proposals[selectedProposal]?.type === 'addition'}\n icon='open-application'\n onClick={() => jumpTo?.(`${Protocols.ITEM_DETAILS}:${selectedProposal}`)}\n title=\"Open selected item in a new tab (not applicable to proposed additions)\"\n />\n <ClassNames>\n {(({ css: css2 }) =>\n <Select<ChangeProposalItem>\n filterable={false}\n itemsEqual={stringifiedJSONEqual}\n menuProps={{ className: css2(`max-height: 50vh; overflow-y: auto;`) }}\n activeItem={activeItem}\n items={allItems}\n popoverProps={{ minimal: true, matchTargetWidth: true }}\n fill\n itemRenderer={ChangeProposalItemView}\n onItemSelect={handleItemSelect}>\n <Button\n fill\n rightIcon=\"chevron-down\"\n icon={icon}\n title=\"Switch between items in this proposal\"\n css={css`white-space: nowrap;`}>\n {selectedItemSummary}\n </Button>\n </Select>\n )}\n </ClassNames>\n <Button\n onClick={() => selectProposal(null)}\n icon=\"minimize\"\n title=\"Minimize proposed change view\"\n text=\"Minimize\"\n />\n </ButtonGroup>\n <div css={css`position: relative; flex: 1;`}>\n <BrowserCtx.Provider value={proposalBrowserCtx}>\n <ErrorBoundary viewName=\"Proposal detail\">\n <ProposalDetail\n itemRef={selectedItemRef}\n //showOnlyChanged={showOnlyChanged}\n item={(selectedItemProposed ?? selectedItemCurrent)!}\n itemBefore={selectedItemCurrent ?? undefined}\n proposal={proposals[selectedProposal]}\n />\n </ErrorBoundary>\n </BrowserCtx.Provider>\n </div>\n </>\n : null}\n </Drawer>\n ), [proposalCount > 0, haveSelectedItem, selectedItemProposed, selectedItemCurrent, jumpTo, handleItemSelect, selectedProposal && proposals[selectedProposal]]);\n\n return (\n <>\n {selectedItemDrawer}\n </>\n );\n};\n\nfunction stringifiedJSONEqual(i1: any, i2: any): boolean {\n return JSON.stringify(i1) === JSON.stringify(i2);\n}\n\nexport default ProposalBrowser;\n"]}
|
|
1
|
+
{"version":3,"file":"ProposalBrowser.js","sourceRoot":"","sources":["../../src/proposals/ProposalBrowser.tsx"],"names":[],"mappings":"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","sourcesContent":["\n/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useCallback, useMemo } from 'react';\nimport { ClassNames, jsx, css } from '@emotion/react';\nimport { Select2 as Select } from '@blueprintjs/select';\nimport { ButtonGroup, Button, Drawer, DrawerSize } from '@blueprintjs/core';\n\nimport ErrorBoundary from '@riboseinc/paneron-extension-kit/widgets/ErrorBoundary';\n\nimport { useItemRef, itemPathToItemRef } from '../views/itemPathUtils';\nimport { BrowserCtx, type BrowserCtx as BrowserCtxType } from '../views/BrowserCtx';\nimport { Protocols, type Protocol } from '../views/protocolRegistry';\n\nimport type { Drafted } from './types';\nimport { type ChangeProposalItem, ChangeProposalItemView, getProposalIcon } from './ProposalItem';\nimport ProposalSummary from './ProposalSummary';\nimport ProposalDetail from './ProposalDetail';\n\n\ninterface ProposalBrowserProps<CR extends Drafted> {\n proposals: CR['items']\n\n /**\n * Whether the proposal had been accepted.\n * Influences the jump to current version of the item behavior\n * (for non-accepted proposals, jumping to additions is not allowed\n * since they would not be present in the registry).\n */\n hadBeenAccepted?: boolean\n\n selectedItem?: (string & keyof CR['items']) | null\n onSelectItem: (selectedItem: (string & keyof CR['items']) | null) => void\n\n /**\n * If provided, button to delete each proposed change\n * is shown in change card list mode.\n */\n onDeleteProposalForItemAtPath?: (itemPath: string) => void\n}\n/**\n * Shows a list of individual proposed changes as cards by default,\n * allowing to expand a proposal and view item details.\n *\n * If no proposals exist, returns null.\n */\nexport function ProposalBrowser<CR extends Drafted>\n({ proposals, hadBeenAccepted, onDeleteProposalForItemAtPath, selectedItem, onSelectItem: selectProposal }:\nProposalBrowserProps<CR>) {\n const selectedProposal = selectedItem ?? null;\n\n // TODO: Temporarily unsupported\n // (limitations of current change annotation implementation)\n //const [ showOnlyChanged, setShowOnlyChanged ] = useState(true);\n\n const outerBrowserCtx = useContext(BrowserCtx);\n const { jumpTo, subregisters, useRegisterItemData } = outerBrowserCtx;\n\n /**\n * When jumping to an item affected by current CR,\n * jump in-CR instead of spawning tab.\n */\n const handleCRJump = useCallback(function _handleCRJump(uri: `${Protocol}:${string}`): void {\n if (uri.startsWith(Protocols.ITEM_DETAILS)) {\n const itemPath = uri.split(':')[1];\n if (proposals[itemPath]) {\n selectProposal(itemPath);\n } else {\n jumpTo?.(uri);\n }\n }\n }, [Object.keys(proposals), jumpTo]);\n\n const proposalBrowserCtx: BrowserCtxType = useMemo((() => ({\n ...outerBrowserCtx,\n jumpTo: handleCRJump,\n })), [handleCRJump, outerBrowserCtx]);\n\n /** Paths of register items in proposal. */\n const proposedItemPaths = Object.entries(proposals).map(([itemPath, proposal]) => {\n if (proposal.type === 'clarification' || proposal.type === 'addition') {\n return itemPath;\n } else {\n return undefined;\n }\n }).filter(s => s !== undefined) as string[];\n\n /** Proposed data of register items in proposal. */\n const proposedItemDataReq = useRegisterItemData({\n itemPaths: proposedItemPaths,\n });\n\n /** Pre-existing data of register items in proposal. */\n const currentItemDataReq = useRegisterItemData({\n itemPaths: Object.keys(proposals),\n ignoreActiveCR: true,\n });\n\n const getCurrentItem = useCallback(\n ((itemPath: string) => currentItemDataReq.value[itemPath] ?? null),\n [currentItemDataReq.value]);\n const getProposedItem = useCallback(\n ((itemPath: string) => proposedItemDataReq.value[itemPath] ?? null),\n [proposedItemDataReq.value]);\n\n /** Current register item (if any) corresponding to selected proposal. */\n const selectedItemCurrent = selectedProposal ? getCurrentItem(selectedProposal) : null;\n\n /** Proposed register item corresponding to selected proposal. */\n const selectedItemProposed = selectedProposal ? getProposedItem(selectedProposal) : null;\n\n const selectedItemRef = useItemRef(subregisters !== undefined, selectedProposal);\n\n const handleItemSelect = useCallback(\n ((item: ChangeProposalItem) => selectProposal(item.itemPath)),\n [selectProposal]);\n\n const activeItem: ChangeProposalItem | null = useMemo((() =>\n selectedProposal\n ? ({\n itemPath: selectedProposal,\n proposal: proposals[selectedProposal],\n item: (selectedItemProposed ?? selectedItemCurrent)!,\n itemBefore: selectedItemCurrent ?? undefined,\n itemRef: itemPathToItemRef(subregisters !== undefined, selectedProposal),\n })\n : null\n ), [selectedProposal, proposals, subregisters]);\n\n const allItems: ChangeProposalItem[] = useMemo((() =>\n Object.entries(proposals).map(([itemPath, proposal]) => ({\n itemPath,\n proposal,\n item: (getProposedItem(itemPath) ?? getCurrentItem(itemPath))! ?? null,\n itemBefore: undefined,\n itemRef: itemPathToItemRef(subregisters !== undefined, itemPath),\n }))\n ), [proposals, getCurrentItem, getProposedItem, subregisters !== undefined]);\n\n const haveSelectedItem =\n selectedProposal\n && selectedItemRef\n && proposals[selectedProposal]\n && (selectedItemProposed || selectedItemCurrent);\n\n const proposalCount = Object.keys(proposals).length;\n\n //useEffect(() => {\n // // if (!selectedProposal) {\n // // const firstProposal = Object.keys(proposals)[0];\n // // if (firstProposal) {\n // // if (getCurrentItem(firstProposal) || getProposedItem(firstProposal)) {\n // // selectProposal(firstProposal);\n // // }\n // // }\n // // }\n // if (selectedProposal) {\n // if (selectedProposalDetailRef.current) {\n // selectedProposalDetailRef.current.scrollIntoView({ block: 'center' });\n // }\n // }\n //}, [selectedProposal === null]);\n\n const selectedItemSummary = haveSelectedItem\n ? <ProposalSummary\n itemRef={selectedItemRef}\n item={(selectedItemProposed ?? selectedItemCurrent)!}\n itemBefore={selectedItemCurrent ?? undefined}\n proposal={proposals[selectedProposal]}\n />\n : <>Select item…</>;\n const icon = haveSelectedItem\n ? getProposalIcon(proposals[selectedProposal])\n : undefined;\n\n const selectedItemDrawer = useMemo((() =>\n <Drawer\n isOpen={proposalCount > 0 && haveSelectedItem ? true : false}\n onClose={() => selectProposal(null)}\n size={DrawerSize.LARGE}\n enforceFocus={false}>\n {proposalCount > 0 && haveSelectedItem\n ? <>\n <ButtonGroup>\n <Button\n disabled={!jumpTo || (proposals[selectedProposal]?.type === 'addition' && !hadBeenAccepted)}\n icon='open-application'\n onClick={() => jumpTo?.(`${Protocols.ITEM_DETAILS}:${selectedProposal}`)}\n title=\"Open selected item in a new tab (not applicable to proposed additions)\"\n />\n <ClassNames>\n {(({ css: css2 }) =>\n <Select<ChangeProposalItem>\n filterable={false}\n itemsEqual={stringifiedJSONEqual}\n menuProps={{ className: css2(`max-height: 50vh; overflow-y: auto;`) }}\n activeItem={activeItem}\n items={allItems}\n popoverProps={{ minimal: true, matchTargetWidth: true }}\n fill\n itemRenderer={ChangeProposalItemView}\n onItemSelect={handleItemSelect}>\n <Button\n fill\n rightIcon=\"chevron-down\"\n icon={icon}\n title=\"Switch between items in this proposal\"\n css={css`white-space: nowrap;`}>\n {selectedItemSummary}\n </Button>\n </Select>\n )}\n </ClassNames>\n <Button\n onClick={() => selectProposal(null)}\n icon=\"minimize\"\n title=\"Minimize proposed change view\"\n text=\"Minimize\"\n />\n </ButtonGroup>\n <div css={css`position: relative; flex: 1;`}>\n <BrowserCtx.Provider value={proposalBrowserCtx}>\n <ErrorBoundary viewName=\"Proposal detail\">\n <ProposalDetail\n itemRef={selectedItemRef}\n //showOnlyChanged={showOnlyChanged}\n item={(selectedItemProposed ?? selectedItemCurrent)!}\n itemBefore={selectedItemCurrent ?? undefined}\n proposal={proposals[selectedProposal]}\n />\n </ErrorBoundary>\n </BrowserCtx.Provider>\n </div>\n </>\n : null}\n </Drawer>\n ), [proposalCount > 0, haveSelectedItem, selectedItemProposed, selectedItemCurrent, jumpTo, handleItemSelect, selectedProposal && proposals[selectedProposal]]);\n\n return (\n <>\n {selectedItemDrawer}\n </>\n );\n};\n\nfunction stringifiedJSONEqual(i1: any, i2: any): boolean {\n return JSON.stringify(i1) === JSON.stringify(i2);\n}\n\nexport default ProposalBrowser;\n"]}
|
|
@@ -5,8 +5,10 @@ import type { Register, RegisterStakeholder } from '../types';
|
|
|
5
5
|
import { type SomeCR as CR } from './types';
|
|
6
6
|
declare const ProposalTab: React.VoidFunctionComponent<{
|
|
7
7
|
proposal: CR;
|
|
8
|
+
onDeactivate?: () => void;
|
|
8
9
|
onDelete?: () => void;
|
|
9
10
|
register: Register;
|
|
11
|
+
/** Currently active stakeholder. */
|
|
10
12
|
stakeholder?: RegisterStakeholder;
|
|
11
13
|
}>;
|
|
12
14
|
export default ProposalTab;
|
package/proposals/ProposalTab.js
CHANGED
|
@@ -30,6 +30,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
30
30
|
/** @jsxFrag React.Fragment */
|
|
31
31
|
const ProposalTab = function ({
|
|
32
32
|
proposal,
|
|
33
|
+
onDeactivate,
|
|
33
34
|
onDelete,
|
|
34
35
|
register,
|
|
35
36
|
stakeholder
|
|
@@ -80,18 +81,29 @@ const ProposalTab = function ({
|
|
|
80
81
|
});
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
if (onDeactivate) {
|
|
85
|
+
actions.push({
|
|
86
|
+
text: "Exit proposal",
|
|
87
|
+
title: "Click to deactivate this proposal and leave it as is for now.",
|
|
88
|
+
intent: "primary",
|
|
89
|
+
onClick: onDeactivate
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
83
93
|
return actions;
|
|
84
|
-
}, [onDelete]);
|
|
94
|
+
}, [onDelete, onDeactivate]);
|
|
85
95
|
return (0, _react2.jsx)(_util.TabContentsWithHeader, {
|
|
86
96
|
title: (0, _react2.jsx)(_react.default.Fragment, null, proposal.justification),
|
|
87
97
|
classification: classification,
|
|
88
98
|
actions: actions
|
|
89
99
|
}, (0, _react2.jsx)(_ProposalWorkspace.default, {
|
|
90
100
|
proposal: proposal,
|
|
101
|
+
compareRegisterVersion: !(0, _types.hadBeenAccepted)(proposal),
|
|
91
102
|
register: register,
|
|
92
103
|
stakeholder: stakeholder,
|
|
93
104
|
onOpenItem: selectItem
|
|
94
105
|
}), (0, _react2.jsx)(_ProposalBrowser.default, {
|
|
106
|
+
hadBeenAccepted: (0, _types.hadBeenAccepted)(proposal),
|
|
95
107
|
proposals: proposal.items,
|
|
96
108
|
onSelectItem: selectItem,
|
|
97
109
|
selectedItem: selectedItem
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProposalTab.js","sourceRoot":"","sources":["../../src/proposals/ProposalTab.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,EAAE,GAGH,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ProposalTab.js","sourceRoot":"","sources":["../../src/proposals/ProposalTab.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useMemo, useState } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n UL,\n type Intent,\n type IconName,\n} from '@blueprintjs/core';\n\nimport type { Register, RegisterStakeholder } from '../types';\nimport { TabContentsWithHeader, Datestamp } from '../views/util';\n\nimport { type SomeCR as CR, isDisposed, hadBeenProposed, hadBeenAccepted } from './types';\nimport Workspace from './ProposalWorkspace';\nimport ProposalBrowser from './ProposalBrowser';\n\n\nconst ProposalTab: React.VoidFunctionComponent<{\n proposal: CR\n onDeactivate?: () => void\n onDelete?: () => void\n register: Register\n /** Currently active stakeholder. */\n stakeholder?: RegisterStakeholder\n}> = function ({ proposal, onDeactivate, onDelete, register, stakeholder }) {\n const pending = !isDisposed(proposal);\n const proposedMarker = <>\n Proposed: {hadBeenProposed(proposal)\n ? <Datestamp date={proposal.timeProposed} />\n : 'not yet'}\n </>;\n const disposedMarker = <>\n Disposed: {!pending\n ? <Datestamp date={proposal.timeDisposed} />\n : 'not yet'}\n </>;\n const editedMarker = <>\n Edited: <Datestamp date={proposal.timeEdited} />\n </>;\n const classification = useMemo(() => {\n return [{\n icon: 'lightbulb' as IconName,\n children: \"Proposal\",\n tooltip: {\n icon: 'info-sign' as IconName,\n content: <UL css={css`margin: 0;`}>\n <li>Proposal ID: {proposal.id}</li>\n </UL>,\n },\n }, {\n children: pending\n ? <>pending</>\n : <>disposed</>,\n }, {\n children: proposal.state?.replaceAll('-', ' ') || 'N/A',\n tooltip: {\n icon: 'history' as IconName,\n content: <UL css={css`margin: 0;`}>\n <li>{editedMarker}</li>\n <li>{proposedMarker}</li>\n <li>{disposedMarker}</li>\n </UL>,\n },\n intent: proposal.state === 'accepted'\n ? 'success'\n : proposal.state === 'returned-for-clarification'\n ? 'warning'\n : proposal.state === 'withdrawn' || proposal.state === 'rejected'\n ? 'danger'\n : proposal.state === 'draft'\n ? undefined\n : 'primary' as Intent,\n }];\n }, [\n proposal.state,\n pending,\n editedMarker, proposedMarker, disposedMarker,\n ]);\n\n const [selectedItem, selectItem] = useState<string | null>(null);\n\n const actions = useMemo(() => {\n const actions = [];\n if (onDelete) {\n actions.push({\n text: \"Delete this proposal\",\n onClick: onDelete,\n });\n }\n if (onDeactivate) {\n actions.push({\n text: \"Exit proposal\",\n title: \"Click to deactivate this proposal and leave it as is for now.\",\n intent: \"primary\" as Intent,\n onClick: onDeactivate,\n });\n }\n return actions;\n }, [onDelete, onDeactivate]);\n\n return (\n <TabContentsWithHeader\n title={<>{proposal.justification}</>}\n classification={classification}\n actions={actions}>\n <Workspace\n proposal={proposal}\n compareRegisterVersion={!hadBeenAccepted(proposal)}\n register={register}\n stakeholder={stakeholder}\n onOpenItem={selectItem}\n />\n <ProposalBrowser\n hadBeenAccepted={hadBeenAccepted(proposal)}\n proposals={proposal.items}\n onSelectItem={selectItem}\n selectedItem={selectedItem}\n />\n </TabContentsWithHeader>\n );\n\n};\n\nexport default ProposalTab;\n"]}
|
|
@@ -5,7 +5,9 @@ import type { Register, RegisterStakeholder } from '../types';
|
|
|
5
5
|
import { type SomeCR as CR } from './types';
|
|
6
6
|
declare const ProposalWorkspace: React.VoidFunctionComponent<{
|
|
7
7
|
proposal: CR;
|
|
8
|
-
|
|
8
|
+
compareRegisterVersion?: boolean;
|
|
9
|
+
register?: Register;
|
|
10
|
+
/** Current stakeholder. */
|
|
9
11
|
stakeholder?: RegisterStakeholder;
|
|
10
12
|
/** If not specified, opening an item will spawn its tab. */
|
|
11
13
|
onOpenItem?: (itemPath: string | null) => void;
|
|
@@ -17,15 +17,15 @@ var _Workspace = _interopRequireDefault(require("@riboseinc/paneron-extension-ki
|
|
|
17
17
|
|
|
18
18
|
var _SuperSidebar = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/SuperSidebar"));
|
|
19
19
|
|
|
20
|
+
var _Search = _interopRequireDefault(require("../views/sidebar/Search"));
|
|
21
|
+
|
|
20
22
|
var _util = require("../views/util");
|
|
21
23
|
|
|
22
24
|
var _models = require("../views/FilterCriteria/models");
|
|
23
25
|
|
|
24
26
|
var _MetaProperties = _interopRequireDefault(require("./MetaProperties"));
|
|
25
27
|
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
var _Search2 = _interopRequireDefault(require("../views/sidebar/Search"));
|
|
28
|
+
var _Search2 = _interopRequireDefault(require("./Search"));
|
|
29
29
|
|
|
30
30
|
var _TransitionOptions = _interopRequireWildcard(require("./TransitionOptions"));
|
|
31
31
|
|
|
@@ -44,6 +44,7 @@ const SIDEBAR_IDS = ['meta'];
|
|
|
44
44
|
|
|
45
45
|
const ProposalWorkspace = function ({
|
|
46
46
|
proposal,
|
|
47
|
+
compareRegisterVersion,
|
|
47
48
|
register,
|
|
48
49
|
stakeholder,
|
|
49
50
|
onOpenItem
|
|
@@ -65,7 +66,8 @@ const ProposalWorkspace = function ({
|
|
|
65
66
|
}, "\u201C", (_a = proposal.justification) === null || _a === void 0 ? void 0 : _a.trim(), "\u201D", (0, _react2.jsx)("br", null), (0, _react2.jsx)(_DL.WrappableDL, null, (0, _react2.jsx)(_MetaProperties.default, {
|
|
66
67
|
cr: proposal,
|
|
67
68
|
currentStakeholder: stakeholder,
|
|
68
|
-
|
|
69
|
+
register: register,
|
|
70
|
+
compareRegisterVersion: compareRegisterVersion
|
|
69
71
|
})))
|
|
70
72
|
}, {
|
|
71
73
|
key: 'transitions',
|
|
@@ -77,7 +79,7 @@ const ProposalWorkspace = function ({
|
|
|
77
79
|
}]
|
|
78
80
|
}
|
|
79
81
|
};
|
|
80
|
-
}, [register, stakeholder, proposal]);
|
|
82
|
+
}, [compareRegisterVersion, register, stakeholder, proposal]);
|
|
81
83
|
return (0, _react2.jsx)(_Workspace.default, {
|
|
82
84
|
sidebarPosition: "right",
|
|
83
85
|
sidebar: (0, _react2.jsx)(_SuperSidebar.default, {
|
|
@@ -88,12 +90,12 @@ const ProposalWorkspace = function ({
|
|
|
88
90
|
})
|
|
89
91
|
}, (0, _react2.jsx)(_util.RegisterHelmet, null, (0, _react2.jsx)("title", null, "Working on proposal ", proposal.justification)), (0, _react2.jsx)("div", {
|
|
90
92
|
css: (0, _react2.css)`padding: 10px; flex: 1; display: flex; flex-flow: column nowrap; overflow: hidden;`
|
|
91
|
-
}, (0, _react2.jsx)(
|
|
93
|
+
}, (0, _react2.jsx)(_Search.default, {
|
|
92
94
|
css: (0, _react2.css)`flex: 1;`,
|
|
93
95
|
//style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}
|
|
94
96
|
implicitCriteria: _models.MATCHES_ANY_CRITERIA,
|
|
95
97
|
stateName: `proposal-${proposal.id}-search`,
|
|
96
|
-
List:
|
|
98
|
+
List: _Search2.default,
|
|
97
99
|
extraData: {
|
|
98
100
|
proposal
|
|
99
101
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProposalWorkspace.js","sourceRoot":"","sources":["../../src/proposals/ProposalWorkspace.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,IAAI,EACJ,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,IAAI,EAAE,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,SAAS,MAAM,oDAAoD,CAAC;AAC3E,OAAO,YAAY,MAAM,uEAAuE,CAAC;AAGjG,OAAO,EAAE,cAAc,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,cAAc,MAAM,UAAU,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"ProposalWorkspace.js","sourceRoot":"","sources":["../../src/proposals/ProposalWorkspace.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useMemo, useState } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Icon,\n Checkbox,\n} from '@blueprintjs/core';\n\nimport { WrappableDL as DL } from '@riboseinc/paneron-extension-kit/widgets/DL';\nimport Workspace from '@riboseinc/paneron-extension-kit/widgets/Workspace';\nimport SuperSidebar from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/SuperSidebar';\n\nimport type { Register, RegisterStakeholder } from '../types';\nimport Search from '../views/sidebar/Search';\nimport { RegisterHelmet as Helmet } from '../views/util';\nimport { MATCHES_ANY_CRITERIA } from '../views/FilterCriteria/models';\nimport { type SomeCR as CR } from './types';\nimport MetaProperties from './MetaProperties';\nimport ProposalSearch from './Search';\nimport TransitionOptions, { getTransitions, isFinalState } from './TransitionOptions';\nimport TransitionsAndStatus, { getTransitionHistory } from './TransitionHistory';\n\n\nconst SIDEBAR_IDS = ['meta'] as const;\n\n\nconst ProposalWorkspace: React.VoidFunctionComponent<{\n proposal: CR\n compareRegisterVersion?: boolean\n register?: Register\n\n /** Current stakeholder. */\n stakeholder?: RegisterStakeholder\n\n /** If not specified, opening an item will spawn its tab. */\n onOpenItem?: (itemPath: string | null) => void\n}> = function ({ proposal, compareRegisterVersion, register, stakeholder, onOpenItem }) {\n\n const sidebarConfig = useMemo(() => {\n return {\n meta: {\n icon: () => <Icon icon=\"document\" />,\n title: \"Meta\",\n blocks: [{\n key: 'summary',\n title: \"Summary\",\n content: <div css={css`padding: 0 5px;`}>\n “{proposal.justification?.trim()}”\n <br />\n <DL>\n <MetaProperties\n cr={proposal}\n currentStakeholder={stakeholder}\n register={register}\n compareRegisterVersion={compareRegisterVersion}\n />\n </DL>\n </div>,\n }, {\n key: 'transitions',\n title: \"Transitions\",\n content: <TransitionBlockContents\n proposal={proposal}\n stakeholder={stakeholder}\n />,\n }],\n },\n };\n }, [compareRegisterVersion, register, stakeholder, proposal]);\n\n return (\n <Workspace sidebarPosition=\"right\" sidebar={\n <SuperSidebar\n sidebarIDs={SIDEBAR_IDS}\n css={css`width: 30% !important; min-width: 300px;`}\n selectedSidebarID='meta'\n config={sidebarConfig}\n />\n }>\n <Helmet><title>Working on proposal {proposal.justification}</title></Helmet>\n <div css={css`padding: 10px; flex: 1; display: flex; flex-flow: column nowrap; overflow: hidden;`}>\n <Search\n css={css`flex: 1;`}\n //style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}\n implicitCriteria={MATCHES_ANY_CRITERIA}\n stateName={`proposal-${proposal.id}-search`}\n List={ProposalSearch as any}\n extraData={{ proposal }}\n onOpenItem={onOpenItem}\n />\n </div>\n </Workspace>\n );\n};\n\nexport default ProposalWorkspace;\n\n\nconst TransitionBlockContents: React.VoidFunctionComponent<{\n proposal: CR\n stakeholder?: RegisterStakeholder\n}> = function ({ proposal, stakeholder }) {\n const transitions = useMemo(\n (() => stakeholder\n ? getTransitions(proposal, stakeholder)\n : []),\n [proposal, stakeholder]);\n\n const [showDetailedHistory, setShowDetailedHistory] = useState(false);\n\n const transitionsBlock = useMemo(\n (() =>\n <div css={css`overflow-y: auto; max-height: 300px;`}>\n <Checkbox\n // NOTE: left margin aligns with transition history bullets…\n css={css`margin: 5px 15px;`}\n checked={showDetailedHistory}\n onChange={(evt) => setShowDetailedHistory(evt.currentTarget.checked)}>\n Show detailed history\n </Checkbox>\n <TransitionsAndStatus\n pastTransitions={getTransitionHistory(proposal)}\n isFinal={isFinalState(proposal.state)}\n detailed={showDetailedHistory}\n />\n {!showDetailedHistory && transitions.length > 0\n ? <TransitionOptions\n stakeholder={stakeholder}\n transitions={transitions}\n cr={proposal}\n css={css`padding: 12px;`}\n />\n : null}\n </div>),\n [proposal, transitions, setShowDetailedHistory, showDetailedHistory]);\n\n return transitionsBlock;\n}\n"]}
|
|
@@ -20,6 +20,8 @@ var _HelpTooltip = _interopRequireDefault(require("@riboseinc/paneron-extension-
|
|
|
20
20
|
|
|
21
21
|
var _InlineDiff = require("../views/diffing/InlineDiff");
|
|
22
22
|
|
|
23
|
+
var _util2 = require("../views/util");
|
|
24
|
+
|
|
23
25
|
var _RegisterStakeholder = require("../views/RegisterStakeholder");
|
|
24
26
|
|
|
25
27
|
var CR = _interopRequireWildcard(require("./types"));
|
|
@@ -173,7 +175,7 @@ const TransitionsAndStatus = function ({
|
|
|
173
175
|
detailed
|
|
174
176
|
}) {
|
|
175
177
|
return (0, _react.jsx)(_react2.default.Fragment, null, pastTransitions.map((entry, idx) => {
|
|
176
|
-
var _a, _b
|
|
178
|
+
var _a, _b;
|
|
177
179
|
|
|
178
180
|
if (entry) {
|
|
179
181
|
const {
|
|
@@ -190,14 +192,18 @@ const TransitionsAndStatus = function ({
|
|
|
190
192
|
val: (0, _util.normalizeObjectRecursively)(input)
|
|
191
193
|
})) : null, (0, _react.jsx)("small", {
|
|
192
194
|
css: (0, _react.css)`display: block;`
|
|
193
|
-
}, stakeholder ? (0, _react.jsx)("span", null, (0, _RegisterStakeholder.registerStakeholderPlain)(stakeholder)) : 'unknown stakeholder', (0, _react.jsx)("br", null), "at ", timestamp ? (
|
|
195
|
+
}, stakeholder ? (0, _react.jsx)("span", null, (0, _RegisterStakeholder.registerStakeholderPlain)(stakeholder)) : 'unknown stakeholder', (0, _react.jsx)("br", null), "at ", timestamp ? (0, _react.jsx)(_util2.Datestamp, {
|
|
196
|
+
useUTC: true,
|
|
197
|
+
showTime: true,
|
|
198
|
+
date: timestamp
|
|
199
|
+
}) : "unknown time")) : null;
|
|
194
200
|
return (0, _react.jsx)(TransitionEntryWrapper, {
|
|
195
201
|
title: `Transition ${fromState ? `from ${fromState} ` : ''}to ${toState}`,
|
|
196
202
|
css: (0, _react.css)`
|
|
197
203
|
background: linear-gradient(
|
|
198
204
|
345deg,
|
|
199
|
-
${(
|
|
200
|
-
${(
|
|
205
|
+
${(_a = _TransitionOptions.STATE_COLOR[toState]) !== null && _a !== void 0 ? _a : _core.Colors.GRAY1}aa,
|
|
206
|
+
${(_b = _TransitionOptions.STATE_COLOR[toState]) !== null && _b !== void 0 ? _b : _core.Colors.GRAY1} 50%);
|
|
201
207
|
position: sticky;
|
|
202
208
|
top: ${idx * 3}px;
|
|
203
209
|
z-index: 1;
|