@riboseinc/paneron-registry-kit 2.2.11 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +2 -4
- package/package.json +2 -2
- package/types/cr.d.ts +5 -1
- package/types/cr.js +6 -2
- package/types/cr.js.map +1 -1
- package/types/util.d.ts +2 -0
- package/types/util.js.map +1 -1
- package/types/views.d.ts +22 -0
- package/types/views.js.map +1 -1
- package/views/BrowserCtx.d.ts +3 -11
- package/views/BrowserCtx.js +1 -0
- package/views/BrowserCtx.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
- package/views/FilterCriteria/models.d.ts +1 -1
- package/views/FilterCriteria/models.js.map +1 -1
- package/views/GenericRelatedItemView.js +7 -4
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/SearchQuery.js +34 -15
- package/views/SearchQuery.js.map +1 -1
- package/views/change-request/ChangeRequestContext.d.ts +13 -6
- package/views/change-request/ChangeRequestContext.js +84 -4
- package/views/change-request/ChangeRequestContext.js.map +1 -1
- package/views/change-request/Proposals.d.ts +16 -3
- package/views/change-request/Proposals.js +175 -79
- package/views/change-request/Proposals.js.map +1 -1
- package/views/change-request/objectChangeset.d.ts +7 -4
- package/views/change-request/objectChangeset.js +59 -22
- package/views/change-request/objectChangeset.js.map +1 -1
- package/views/change-request/util.d.ts +4 -0
- package/views/change-request/util.js +14 -0
- package/views/change-request/util.js.map +1 -0
- package/views/detail/ChangeRequest/index.js +16 -16
- package/views/detail/ChangeRequest/index.js.map +1 -1
- package/views/detail/RegisterHome/ActiveProposalDetails.d.ts +15 -0
- package/views/detail/RegisterHome/ActiveProposalDetails.js +105 -0
- package/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -0
- package/views/detail/RegisterHome/Block.d.ts +29 -0
- package/views/detail/RegisterHome/Block.js +75 -0
- package/views/detail/RegisterHome/Block.js.map +1 -0
- package/views/detail/RegisterHome/MetaSummary.js +7 -3
- package/views/detail/RegisterHome/MetaSummary.js.map +1 -1
- package/views/detail/RegisterHome/Proposal.d.ts +1 -11
- package/views/detail/RegisterHome/Proposal.js +113 -45
- package/views/detail/RegisterHome/Proposal.js.map +1 -1
- package/views/detail/RegisterHome/index.js +145 -148
- package/views/detail/RegisterHome/index.js.map +1 -1
- package/views/detail/RegisterItem/index.js +5 -4
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/hooks/useCustomView.js +1 -1
- package/views/hooks/useCustomView.js.map +1 -1
- package/views/index.js +5 -3
- package/views/index.js.map +1 -1
- package/views/sidebar/Search/index.js +12 -2
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/util.d.ts +26 -17
- package/views/util.js +50 -50
- package/views/util.js.map +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import type { Register, RegisterStakeholder } from '../../../types';
|
|
5
|
+
import { type SomeCR as CR } from '../../../types/cr';
|
|
6
|
+
declare const CurrentProposalBlock: React.VoidFunctionComponent<{
|
|
7
|
+
proposal: CR;
|
|
8
|
+
register: Register;
|
|
9
|
+
stakeholder?: RegisterStakeholder;
|
|
10
|
+
canDelete?: boolean;
|
|
11
|
+
onDelete?: () => (void | Promise<void>);
|
|
12
|
+
onOpen?: () => void;
|
|
13
|
+
className?: string;
|
|
14
|
+
}>;
|
|
15
|
+
export default CurrentProposalBlock;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
|
|
12
|
+
var _DL = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/DL"));
|
|
13
|
+
|
|
14
|
+
var _Summary = _interopRequireDefault(require("../../change-request/Summary"));
|
|
15
|
+
|
|
16
|
+
var _TransitionOptions = _interopRequireWildcard(require("../../change-request/TransitionOptions"));
|
|
17
|
+
|
|
18
|
+
var _TransitionHistory = _interopRequireWildcard(require("../../change-request/TransitionHistory"));
|
|
19
|
+
|
|
20
|
+
var _Block = _interopRequireDefault(require("./Block"));
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
+
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
+
|
|
28
|
+
/** @jsx jsx */
|
|
29
|
+
|
|
30
|
+
/** @jsxFrag React.Fragment */
|
|
31
|
+
const CurrentProposalBlock = function ({
|
|
32
|
+
proposal,
|
|
33
|
+
stakeholder,
|
|
34
|
+
register,
|
|
35
|
+
onDelete,
|
|
36
|
+
onOpen,
|
|
37
|
+
canDelete,
|
|
38
|
+
className
|
|
39
|
+
}) {
|
|
40
|
+
const actions = (0, _react.useMemo)(() => {
|
|
41
|
+
const actions = stakeholder && (0, _TransitionOptions.canBeTransitionedBy)(stakeholder, proposal) ? [
|
|
42
|
+
/*{
|
|
43
|
+
// Action is taken from within the widget.
|
|
44
|
+
text: "Take action",
|
|
45
|
+
onClick: () => void 0,
|
|
46
|
+
icon: 'take-action',
|
|
47
|
+
intent: 'primary',
|
|
48
|
+
}*/
|
|
49
|
+
] : canDelete ? [{
|
|
50
|
+
text: "Delete this proposal draft",
|
|
51
|
+
onClick: onDelete,
|
|
52
|
+
disabled: !onDelete,
|
|
53
|
+
icon: 'delete',
|
|
54
|
+
intent: 'danger'
|
|
55
|
+
}] : [];
|
|
56
|
+
actions.push({
|
|
57
|
+
text: "View proposal in a new tab",
|
|
58
|
+
icon: 'open-application',
|
|
59
|
+
disabled: !onOpen,
|
|
60
|
+
onClick: onOpen
|
|
61
|
+
});
|
|
62
|
+
return actions;
|
|
63
|
+
}, [onDelete, onOpen, stakeholder, proposal, canDelete]);
|
|
64
|
+
return (0, _react2.jsx)(_Block.default, {
|
|
65
|
+
View: CurrentProposal,
|
|
66
|
+
description: "Active proposal",
|
|
67
|
+
props: {
|
|
68
|
+
proposal,
|
|
69
|
+
stakeholder,
|
|
70
|
+
register
|
|
71
|
+
},
|
|
72
|
+
className: className,
|
|
73
|
+
actions: actions
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
var _default = CurrentProposalBlock;
|
|
78
|
+
exports.default = _default;
|
|
79
|
+
|
|
80
|
+
const CurrentProposal = function ({
|
|
81
|
+
stakeholder,
|
|
82
|
+
register,
|
|
83
|
+
proposal
|
|
84
|
+
}) {
|
|
85
|
+
const transitions = stakeholder ? (0, _TransitionOptions.getTransitions)(proposal, stakeholder) : [];
|
|
86
|
+
return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_DL.default, {
|
|
87
|
+
css: (0, _react2.css)`padding: 10px 12px 10px 12px; flex-grow: 1; flex-basis: max-content;`
|
|
88
|
+
}, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Viewing\u00A0proposal:"), (0, _react2.jsx)("dd", {
|
|
89
|
+
css: (0, _react2.css)`max-height: 40px; overflow-y: auto;`
|
|
90
|
+
}, "\u201C", proposal.justification.trim() || '(justification N/A)', "\u201D")), (0, _react2.jsx)(_Summary.default, {
|
|
91
|
+
cr: proposal,
|
|
92
|
+
currentStakeholder: stakeholder,
|
|
93
|
+
registerMetadata: register
|
|
94
|
+
})), (0, _react2.jsx)("div", {
|
|
95
|
+
css: (0, _react2.css)`overflow-y: auto; flex-basis: min-content;`
|
|
96
|
+
}, (0, _react2.jsx)(_TransitionHistory.default, {
|
|
97
|
+
pastTransitions: (0, _TransitionHistory.getTransitionHistory)(proposal),
|
|
98
|
+
isFinal: (0, _TransitionOptions.isFinalState)(proposal.state)
|
|
99
|
+
}), transitions.length > 0 ? (0, _react2.jsx)(_TransitionOptions.default, {
|
|
100
|
+
stakeholder: stakeholder,
|
|
101
|
+
transitions: transitions,
|
|
102
|
+
cr: proposal,
|
|
103
|
+
css: (0, _react2.css)`padding: 12px;`
|
|
104
|
+
}) : null));
|
|
105
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActiveProposalDetails.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/ActiveProposalDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { type MenuItemProps } from '@blueprintjs/core';\n\nimport DL from '@riboseinc/paneron-extension-kit/widgets/DL';\n\nimport Summary from '../../change-request/Summary';\nimport type { Register, RegisterStakeholder } from '../../../types';\nimport { type SomeCR as CR } from '../../../types/cr';\nimport TransitionOptions, { isFinalState, getTransitions, canBeTransitionedBy } from '../../change-request/TransitionOptions';\nimport TransitionsAndStatus, { getTransitionHistory } from '../../change-request/TransitionHistory';\nimport HomeBlock from './Block';\n\n\nconst CurrentProposalBlock: React.VoidFunctionComponent<{\n proposal: CR\n register: Register\n stakeholder?: RegisterStakeholder\n canDelete?: boolean\n onDelete?: () => (void | Promise<void>)\n onOpen?: () => void\n className?: string\n}> = function ({ proposal, stakeholder, register, onDelete, onOpen, canDelete, className }) {\n const actions = useMemo(() => {\n const actions: MenuItemProps[] = stakeholder && canBeTransitionedBy(stakeholder, proposal)\n ? [/*{\n // Action is taken from within the widget.\n text: \"Take action\",\n onClick: () => void 0,\n icon: 'take-action',\n intent: 'primary',\n }*/]\n : canDelete\n ? [{\n text: \"Delete this proposal draft\",\n onClick: onDelete,\n disabled: !onDelete,\n icon: 'delete',\n intent: 'danger',\n }]\n : [];\n\n actions.push({\n text: \"View proposal in a new tab\",\n icon: 'open-application',\n disabled: !onOpen,\n onClick: onOpen,\n });\n\n return actions;\n }, [onDelete, onOpen, stakeholder, proposal, canDelete]);\n\n return (\n <HomeBlock\n View={CurrentProposal}\n description=\"Active proposal\"\n props={{ proposal, stakeholder, register }}\n className={className}\n actions={actions}\n />\n );\n};\n\nexport default CurrentProposalBlock;\n\n\nconst CurrentProposal: React.VoidFunctionComponent<{\n proposal: CR\n register: Register\n stakeholder?: RegisterStakeholder\n}> = function ({ stakeholder, register, proposal }) {\n const transitions = stakeholder\n ? getTransitions(proposal, stakeholder)\n : [];\n\n return (\n <>\n <DL css={css`padding: 10px 12px 10px 12px; flex-grow: 1; flex-basis: max-content;`}>\n <div>\n <dt>Viewing proposal:</dt>\n <dd css={css`max-height: 40px; overflow-y: auto;`}>\n “{proposal.justification.trim() || '(justification N/A)'}”\n </dd>\n </div>\n <Summary\n cr={proposal}\n currentStakeholder={stakeholder}\n registerMetadata={register}\n />\n </DL>\n <div css={css`overflow-y: auto; flex-basis: min-content;`}>\n <TransitionsAndStatus\n pastTransitions={getTransitionHistory(proposal)}\n isFinal={isFinalState(proposal.state)}\n />\n {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 </>\n );\n};\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { jsx } from '@emotion/react';
|
|
5
|
+
import { type MenuItemProps, type MenuDividerProps } from '@blueprintjs/core';
|
|
6
|
+
interface HomeBlockProps<P extends Record<string, any>> {
|
|
7
|
+
description: string;
|
|
8
|
+
View: React.VoidFunctionComponent<P>;
|
|
9
|
+
/** Props to pass the `View`. */
|
|
10
|
+
props: P | null | undefined;
|
|
11
|
+
/** Shown if `props` is `null`. */
|
|
12
|
+
error?: string | JSX.Element;
|
|
13
|
+
/** Shown beneath `View`. */
|
|
14
|
+
actions?: (MenuItemProps | MenuDividerProps)[];
|
|
15
|
+
/** Applies to wrapper card div. */
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
export default function HomeBlock<P extends Record<string, any>>({ View, description, props, error, actions, className }: HomeBlockProps<P>): jsx.JSX.Element;
|
|
19
|
+
export declare function HomeBlockActions({ actions }: {
|
|
20
|
+
actions?: (MenuItemProps | MenuDividerProps)[];
|
|
21
|
+
}): jsx.JSX.Element;
|
|
22
|
+
export declare const HomeBlockCard: import("@emotion/styled").StyledComponent<{
|
|
23
|
+
description: string;
|
|
24
|
+
} & import("@blueprintjs/core").ICardProps & {
|
|
25
|
+
children?: React.ReactNode;
|
|
26
|
+
} & {
|
|
27
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
28
|
+
}, {}, {}>;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = HomeBlock;
|
|
7
|
+
exports.HomeBlockActions = HomeBlockActions;
|
|
8
|
+
exports.HomeBlockCard = void 0;
|
|
9
|
+
|
|
10
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
11
|
+
|
|
12
|
+
var _react = require("@emotion/react");
|
|
13
|
+
|
|
14
|
+
var _core = require("@blueprintjs/core");
|
|
15
|
+
|
|
16
|
+
var _util = require("../../util");
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
//import { Helmet } from 'react-helmet';
|
|
21
|
+
function HomeBlock({
|
|
22
|
+
View,
|
|
23
|
+
description,
|
|
24
|
+
props,
|
|
25
|
+
error,
|
|
26
|
+
actions,
|
|
27
|
+
className
|
|
28
|
+
}) {
|
|
29
|
+
var _a;
|
|
30
|
+
|
|
31
|
+
return (0, _react.jsx)(HomeBlockCard, {
|
|
32
|
+
description: description,
|
|
33
|
+
className: className
|
|
34
|
+
}, props ? (0, _react.jsx)(View, { ...props
|
|
35
|
+
}) : props === undefined ? (0, _react.jsx)(_core.NonIdealState, {
|
|
36
|
+
icon: (0, _react.jsx)(_core.Spinner, null)
|
|
37
|
+
}) : (0, _react.jsx)(_core.NonIdealState, {
|
|
38
|
+
icon: "heart-broken",
|
|
39
|
+
title: "Failed to load",
|
|
40
|
+
description: error
|
|
41
|
+
}), ((_a = actions === null || actions === void 0 ? void 0 : actions.length) !== null && _a !== void 0 ? _a : 0) > 0 ? (0, _react.jsx)(HomeBlockActions, {
|
|
42
|
+
actions: actions
|
|
43
|
+
}) : null);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function HomeBlockActions({
|
|
47
|
+
actions
|
|
48
|
+
}) {
|
|
49
|
+
return (0, _react.jsx)(HomeBlockActionMenu, null, actions.map((mip, idx) => isMenuItemProps(mip) ? (0, _react.jsx)(_core.MenuItem, {
|
|
50
|
+
key: idx,
|
|
51
|
+
...mip
|
|
52
|
+
}) : (0, _react.jsx)(_core.MenuDivider, {
|
|
53
|
+
key: idx,
|
|
54
|
+
...mip
|
|
55
|
+
})));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function isMenuItemProps(val) {
|
|
59
|
+
const p = val;
|
|
60
|
+
return p.onClick || p.disabled || p.icon || p.selected || p.active ? true : false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const HomeBlockActionMenu = (0, _styled.default)(_core.Menu)`
|
|
64
|
+
background: none !important;
|
|
65
|
+
flex-shrink: 0;
|
|
66
|
+
`;
|
|
67
|
+
const HomeBlockCard = (0, _styled.default)(_util.CardInGrid)`
|
|
68
|
+
padding: 5px;
|
|
69
|
+
display: flex; flex-flow: column nowrap;
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
transition:
|
|
72
|
+
width .5s linear,
|
|
73
|
+
height .5s linear;
|
|
74
|
+
`;
|
|
75
|
+
exports.HomeBlockCard = HomeBlockCard;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Block.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/Block.tsx"],"names":[],"mappings":"AAGA,wCAAwC;AACxC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EACL,IAAI,EACJ,QAAQ,EAAE,WAAW,EAErB,aAAa,EACb,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmBxC,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAqB;;IAE1E,OAAO,CACL,IAAC,aAAa,IACV,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS;QACrB,KAAK;YACJ,CAAC,CAAC,IAAC,IAAI,OAAK,KAAK,GAAI;YACrB,CAAC,CAAC,KAAK,KAAK,SAAS;gBACnB,CAAC,CAAC,IAAC,aAAa,IAAC,IAAI,EAAE,IAAC,OAAO,OAAG,GAAI;gBACtC,CAAC,CAAC,IAAC,aAAa,IAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,gBAAgB,EAAC,WAAW,EAAE,KAAK,GAAI;QACrF,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,CAAC,CAAC,GAAG,CAAC;YACzB,CAAC,CAAC,IAAC,gBAAgB,IAAC,OAAO,EAAE,OAAO,GAAI;YACxC,CAAC,CAAC,IAAI,CACM,CACjB,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAsD;IAC9F,OAAO,IAAC,mBAAmB,QACxB,OAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACzB,eAAe,CAAC,GAAG,CAAC;QAClB,CAAC,CAAC,IAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,KAAO,GAAqB,GAAK;QACrD,CAAC,CAAC,IAAC,WAAW,IAAC,GAAG,EAAE,GAAG,KAAM,GAAG,GAAK,CACxC,CACmB,CAAA;AACxB,CAAC;AAGD,SAAS,eAAe,CAAC,GAAqC;IAC5D,MAAM,CAAC,GAAG,GAAU,CAAC;IACrB,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACpF,CAAC;AAGD,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;;;CAGvC,CAAC;AAGF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;;;;;;;CAO9C,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\nimport React from 'react';\n//import { Helmet } from 'react-helmet';\nimport styled from '@emotion/styled';\nimport { jsx } from '@emotion/react';\nimport {\n Menu,\n MenuItem, MenuDivider,\n type MenuItemProps, type MenuDividerProps,\n NonIdealState,\n Spinner,\n} from '@blueprintjs/core';\nimport { CardInGrid } from '../../util';\n\n\ninterface HomeBlockProps<P extends Record<string, any>> {\n description: string,\n View: React.VoidFunctionComponent<P>,\n\n /** Props to pass the `View`. */\n props: P | null | undefined,\n\n /** Shown if `props` is `null`. */\n error?: string | JSX.Element,\n\n /** Shown beneath `View`. */\n actions?: (MenuItemProps | MenuDividerProps)[],\n\n /** Applies to wrapper card div. */\n className?: string,\n}\nexport default function HomeBlock<P extends Record<string, any>>(\n { View, description, props, error, actions, className }: HomeBlockProps<P>\n) {\n return (\n <HomeBlockCard\n description={description}\n className={className}>\n {props\n ? <View {...props} />\n : props === undefined\n ? <NonIdealState icon={<Spinner />} />\n : <NonIdealState icon=\"heart-broken\" title=\"Failed to load\" description={error} />}\n {(actions?.length ?? 0) > 0\n ? <HomeBlockActions actions={actions} />\n : null}\n </HomeBlockCard>\n );\n}\n\n\nexport function HomeBlockActions({ actions }: { actions?: (MenuItemProps | MenuDividerProps)[] }) {\n return <HomeBlockActionMenu>\n {actions!.map((mip, idx) =>\n isMenuItemProps(mip)\n ? <MenuItem key={idx} {...(mip as MenuItemProps) } />\n : <MenuDivider key={idx} {...mip } />\n )}\n </HomeBlockActionMenu>\n}\n\n\nfunction isMenuItemProps(val: MenuItemProps | MenuDividerProps): val is MenuItemProps {\n const p = val as any;\n return p.onClick || p.disabled || p.icon || p.selected || p.active ? true : false;\n}\n\n\nconst HomeBlockActionMenu = styled(Menu)`\n background: none !important;\n flex-shrink: 0;\n`;\n\n\nexport const HomeBlockCard = styled(CardInGrid)`\n padding: 5px;\n display: flex; flex-flow: column nowrap;\n overflow: hidden;\n transition:\n width .5s linear,\n height .5s linear;\n`;\n"]}
|
|
@@ -22,13 +22,17 @@ const MetaSummary = function ({
|
|
|
22
22
|
register,
|
|
23
23
|
style
|
|
24
24
|
}) {
|
|
25
|
-
var _a
|
|
25
|
+
var _a;
|
|
26
26
|
|
|
27
27
|
return (0, _react.jsx)(_DL.default, {
|
|
28
28
|
style: style
|
|
29
|
-
}, (0, _react.jsx)("div", null, (0, _react.jsx)("dt", null, "Viewing\u00A0version:"), (0, _react.jsx)("dd", null, (
|
|
29
|
+
}, (0, _react.jsx)("div", null, (0, _react.jsx)("dt", null, "Viewing\u00A0version:"), (0, _react.jsx)("dd", null, ((_a = register.version) === null || _a === void 0 ? void 0 : _a.id) || 'N/A')), (0, _react.jsx)("div", null, (0, _react.jsx)("dt", null, "Register\u00A0name:"), (0, _react.jsx)("dd", null, register.name)), register.operatingLanguage ? (0, _react.jsx)("div", null, (0, _react.jsx)("dt", null, "Operating\u00A0language:"), (0, _react.jsx)("dd", null, (0, _react.jsx)(_InlineDiff.Val, {
|
|
30
30
|
val: (0, _util.normalizeObjectRecursively)(register.operatingLanguage)
|
|
31
|
-
}))) : null)
|
|
31
|
+
}))) : null, (0, _react.jsx)("div", null, (0, _react.jsx)("dt", null, "Content\u00A0summary:"), (0, _react.jsx)("dd", {
|
|
32
|
+
dangerouslySetInnerHTML: {
|
|
33
|
+
__html: register.contentSummary || 'N/A'
|
|
34
|
+
}
|
|
35
|
+
})));
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
var _default = MetaSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetaSummary.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/MetaSummary.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAG9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,6CAA6C,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAIxD,MAAM,WAAW,GAGZ,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;;IAChC,OAAO,CACL,IAAC,EAAE,IAAC,KAAK,EAAE,KAAK;QACd;YACE,wCAA8B;YAC9B,gBAAK,
|
|
1
|
+
{"version":3,"file":"MetaSummary.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/MetaSummary.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAG9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,6CAA6C,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAIxD,MAAM,WAAW,GAGZ,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;;IAChC,OAAO,CACL,IAAC,EAAE,IAAC,KAAK,EAAE,KAAK;QACd;YACE,wCAA8B;YAC9B,gBAAK,CAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,KAAI,KAAK,CAAM,CACpC;QACN;YACE,sCAA4B;YAC5B,gBAAK,QAAQ,CAAC,IAAI,CAAM,CACpB;QACL,QAAQ,CAAC,iBAAiB;YACzB,CAAC,CAAC;gBACE,2CAAiC;gBACjC;oBACE,IAAC,GAAG,IAAC,GAAG,EAAE,0BAA0B,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAI,CACjE,CACD;YACR,CAAC,CAAC,IAAI;QACR;YACE,wCAA8B;YAC9B,YAAI,uBAAuB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,IAAI,KAAK,EAAE,GAAO,CAC5E,CACH,CACN,CAAC;AACJ,CAAC,CAAC;AAGF,eAAe,WAAW,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React from 'react';\nimport { jsx } from '@emotion/react';\nimport DL from '@riboseinc/paneron-extension-kit/widgets/DL';\nimport { normalizeObjectRecursively } from '@riboseinc/paneron-extension-kit/util';\nimport { Val } from '../../../views/diffing/InlineDiff';\nimport type { Register } from '../../../types';\n\n\nconst MetaSummary: React.VoidFunctionComponent<{\n register: Register\n style?: React.CSSProperties\n}> = function ({ register, style }) {\n return (\n <DL style={style}>\n <div>\n <dt>Viewing version:</dt>\n <dd>{register.version?.id || 'N/A'}</dd>\n </div>\n <div>\n <dt>Register name:</dt>\n <dd>{register.name}</dd>\n </div>\n {register.operatingLanguage\n ? <div>\n <dt>Operating language:</dt>\n <dd>\n <Val val={normalizeObjectRecursively(register.operatingLanguage)} />\n </dd>\n </div>\n : null}\n <div>\n <dt>Content summary:</dt>\n <dd dangerouslySetInnerHTML={{ __html: register.contentSummary || 'N/A' }}></dd>\n </div>\n </DL>\n );\n};\n\n\nexport default MetaSummary;\n"]}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import type { Register
|
|
4
|
+
import type { Register } from '../../../types';
|
|
5
5
|
import { type SomeCR as CR } from '../../../types/cr';
|
|
6
|
-
export declare const CurrentProposal: React.VoidFunctionComponent<{
|
|
7
|
-
proposal: CR;
|
|
8
|
-
register: Register;
|
|
9
|
-
stakeholder?: RegisterStakeholder;
|
|
10
|
-
}>;
|
|
11
|
-
export declare const NewProposal: React.VoidFunctionComponent<{
|
|
12
|
-
register: Register;
|
|
13
|
-
onCreateBlank?: (idea: string) => Promise<void>;
|
|
14
|
-
className?: string;
|
|
15
|
-
}>;
|
|
16
6
|
export declare const Proposals: React.VoidFunctionComponent<{
|
|
17
7
|
register: Register;
|
|
18
8
|
actionableProposals?: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][];
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Proposals =
|
|
6
|
+
exports.Proposals = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
@@ -11,20 +11,10 @@ var _react2 = require("@emotion/react");
|
|
|
11
11
|
|
|
12
12
|
var _core = require("@blueprintjs/core");
|
|
13
13
|
|
|
14
|
-
var _DL = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/DL"));
|
|
15
|
-
|
|
16
14
|
var _ChangeRequestContext = require("../../change-request/ChangeRequestContext");
|
|
17
15
|
|
|
18
16
|
var _util = require("../../util");
|
|
19
17
|
|
|
20
|
-
var _TransitionOptions = _interopRequireWildcard(require("../../change-request/TransitionOptions"));
|
|
21
|
-
|
|
22
|
-
var _Summary = _interopRequireDefault(require("../../change-request/Summary"));
|
|
23
|
-
|
|
24
|
-
var _TransitionHistory = _interopRequireWildcard(require("../../change-request/TransitionHistory"));
|
|
25
|
-
|
|
26
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
-
|
|
28
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
19
|
|
|
30
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -32,35 +22,6 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
32
22
|
/** @jsx jsx */
|
|
33
23
|
|
|
34
24
|
/** @jsxFrag React.Fragment */
|
|
35
|
-
const CurrentProposal = function ({
|
|
36
|
-
stakeholder,
|
|
37
|
-
register,
|
|
38
|
-
proposal
|
|
39
|
-
}) {
|
|
40
|
-
const transitions = stakeholder ? (0, _TransitionOptions.getTransitions)(proposal, stakeholder) : [];
|
|
41
|
-
return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_DL.default, {
|
|
42
|
-
css: (0, _react2.css)`padding: 10px 12px 10px 12px; flex-grow: 1; flex-basis: max-content;`
|
|
43
|
-
}, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Viewing\u00A0proposal:"), (0, _react2.jsx)("dd", {
|
|
44
|
-
css: (0, _react2.css)`max-height: 40px; overflow-y: auto;`
|
|
45
|
-
}, "\u201C", proposal.justification.trim() || '(justification N/A)', "\u201D")), (0, _react2.jsx)(_Summary.default, {
|
|
46
|
-
cr: proposal,
|
|
47
|
-
currentStakeholder: stakeholder,
|
|
48
|
-
registerMetadata: register
|
|
49
|
-
})), (0, _react2.jsx)("div", {
|
|
50
|
-
css: (0, _react2.css)`overflow-y: auto; flex-basis: min-content;`
|
|
51
|
-
}, (0, _react2.jsx)(_TransitionHistory.default, {
|
|
52
|
-
pastTransitions: (0, _TransitionHistory.getTransitionHistory)(proposal),
|
|
53
|
-
isFinal: (0, _TransitionOptions.isFinalState)(proposal.state)
|
|
54
|
-
}), transitions.length > 0 ? (0, _react2.jsx)(_TransitionOptions.default, {
|
|
55
|
-
stakeholder: stakeholder,
|
|
56
|
-
transitions: transitions,
|
|
57
|
-
cr: proposal,
|
|
58
|
-
css: (0, _react2.css)`padding: 12px;`
|
|
59
|
-
}) : null));
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
exports.CurrentProposal = CurrentProposal;
|
|
63
|
-
|
|
64
25
|
const NewProposal = function ({
|
|
65
26
|
register,
|
|
66
27
|
onCreateBlank,
|
|
@@ -103,8 +64,6 @@ const NewProposal = function ({
|
|
|
103
64
|
*/
|
|
104
65
|
|
|
105
66
|
|
|
106
|
-
exports.NewProposal = NewProposal;
|
|
107
|
-
|
|
108
67
|
const ActionableProposalItems = function ActionableProposalItems({
|
|
109
68
|
actionableProposals,
|
|
110
69
|
onSelect
|
|
@@ -114,6 +73,7 @@ const ActionableProposalItems = function ActionableProposalItems({
|
|
|
114
73
|
}, (0, _react2.jsx)(_core.MenuDivider, {
|
|
115
74
|
title: groupLabel
|
|
116
75
|
}), proposals !== undefined && proposals.length > 0 ? proposals.map(cr => (0, _react2.jsx)(ActionableProposalItem, {
|
|
76
|
+
key: cr.id,
|
|
117
77
|
cr: cr,
|
|
118
78
|
onClick: onSelect
|
|
119
79
|
})) : proposals === undefined ? (0, _react2.jsx)(_core.MenuItem, {
|
|
@@ -131,7 +91,13 @@ const ActionableProposalItem = function ({
|
|
|
131
91
|
cr,
|
|
132
92
|
onClick
|
|
133
93
|
}) {
|
|
134
|
-
var _a;
|
|
94
|
+
var _a; // TODO: Try to avoid useContext here.
|
|
95
|
+
// Originally activeCR was passed via prop, need to try again.
|
|
96
|
+
// Switch to context was done to avoid rerendering the entire list
|
|
97
|
+
// & losing scroll position.
|
|
98
|
+
// We want(?) active CR to determine if this item is active
|
|
99
|
+
// and keep it in viewport after user switches back.
|
|
100
|
+
|
|
135
101
|
|
|
136
102
|
const {
|
|
137
103
|
changeRequest: activeCR
|
|
@@ -176,7 +142,7 @@ const Proposals = function ({
|
|
|
176
142
|
actionableProposals: actionableProposals !== null && actionableProposals !== void 0 ? actionableProposals : [],
|
|
177
143
|
onSelect: onSelectProposal
|
|
178
144
|
}) : null;
|
|
179
|
-
}, [onSelectProposal, hasActionable, actionableProposals
|
|
145
|
+
}, [onSelectProposal, hasActionable, actionableProposals]); // return <Menu css={css`overflow-y: auto; background: none !important`} className={className}>
|
|
180
146
|
// {proposalMenuItems}
|
|
181
147
|
// </Menu>
|
|
182
148
|
|
|
@@ -223,6 +189,108 @@ const Proposals = function ({
|
|
|
223
189
|
})
|
|
224
190
|
}]
|
|
225
191
|
});
|
|
226
|
-
};
|
|
192
|
+
}; //1const ProposalsBlock: React.VoidFunctionComponent<{
|
|
193
|
+
//1 proposal: CR
|
|
194
|
+
//1 register: Register
|
|
195
|
+
//1 stakeholder?: RegisterStakeholder
|
|
196
|
+
//1 canDelete?: boolean
|
|
197
|
+
//1 onDelete?: () => (void | Promise<void>)
|
|
198
|
+
//1 onOpen?: () => void
|
|
199
|
+
//1 className?: string
|
|
200
|
+
//1}> = function ({ proposal, stakeholder, register, onDelete, onOpen, canDelete, className }) {
|
|
201
|
+
//1 const actions: MenuItemProps[] = stakeholder && canBeTransitionedBy(stakeholder, proposal)
|
|
202
|
+
//1 ? [/*{
|
|
203
|
+
//1 // Action is taken from within the widget.
|
|
204
|
+
//1 text: "Take action",
|
|
205
|
+
//1 onClick: () => void 0,
|
|
206
|
+
//1 icon: 'take-action',
|
|
207
|
+
//1 intent: 'primary',
|
|
208
|
+
//1 }*/]
|
|
209
|
+
//1 : canDelete
|
|
210
|
+
//1 ? [{
|
|
211
|
+
//1 text: "Delete this proposal draft",
|
|
212
|
+
//1 onClick: onDelete,
|
|
213
|
+
//1 disabled: !onDelete,
|
|
214
|
+
//1 icon: 'delete',
|
|
215
|
+
//1 intent: 'danger',
|
|
216
|
+
//1 }]
|
|
217
|
+
//1 : [];
|
|
218
|
+
//1
|
|
219
|
+
//1 actions.push({
|
|
220
|
+
//1 text: "Open in new window",
|
|
221
|
+
//1 disabled: !onOpen,
|
|
222
|
+
//1 onClick: onOpen,
|
|
223
|
+
//1 });
|
|
224
|
+
//1 const proposalBlockActions = useMemo(() => {
|
|
225
|
+
//1 const actions = [];
|
|
226
|
+
//1 if (activeCR) {
|
|
227
|
+
//1 actions.push({
|
|
228
|
+
//1 text: "Export proposal",
|
|
229
|
+
//1 onClick: () => void 0,
|
|
230
|
+
//1 icon: 'export',
|
|
231
|
+
//1 disabled: true,
|
|
232
|
+
//1 } as const);
|
|
233
|
+
//1 actions.push({
|
|
234
|
+
//1 text: "Exit proposal",
|
|
235
|
+
//1 icon: 'log-out',
|
|
236
|
+
//1 intent: 'danger',
|
|
237
|
+
//1 disabled: isBusy,
|
|
238
|
+
//1 onClick: setActiveChangeRequestID
|
|
239
|
+
//1 ? () => setActiveChangeRequestID?.(null)
|
|
240
|
+
//1 : undefined,
|
|
241
|
+
//1 } as const);
|
|
242
|
+
//1 } else {
|
|
243
|
+
//1 if (stakeholder && canCreateCR(stakeholder)) {
|
|
244
|
+
//1 actions.push({
|
|
245
|
+
//1 text: "Create blank proposal",
|
|
246
|
+
//1 onClick: !createMode ? (() => setCreateMode(true)) : undefined,
|
|
247
|
+
//1 disabled: !createCR,
|
|
248
|
+
//1 active: createMode,
|
|
249
|
+
//1 selected: createMode,
|
|
250
|
+
//1 icon: 'add',
|
|
251
|
+
//1 intent: actionableProposals.length < 1
|
|
252
|
+
//1 ? 'primary'
|
|
253
|
+
//1 : undefined,
|
|
254
|
+
//1 } as const);
|
|
255
|
+
//1 }
|
|
256
|
+
//1 if (stakeholder && canImportCR(stakeholder)) {
|
|
257
|
+
//1 actions.push({
|
|
258
|
+
//1 text: "Import proposal",
|
|
259
|
+
//1 onClick: importCR,
|
|
260
|
+
//1 disabled: !importCR || createMode,
|
|
261
|
+
//1 icon: 'import',
|
|
262
|
+
//1 intent: actionableProposals.length < 1
|
|
263
|
+
//1 ? 'primary'
|
|
264
|
+
//1 : undefined,
|
|
265
|
+
//1 } as const);
|
|
266
|
+
//1 }
|
|
267
|
+
//1 }
|
|
268
|
+
//1 return actions;
|
|
269
|
+
//1 }, [!activeCR, createMode, importCR, createCR, isBusy, actionableProposals.length < 1]);
|
|
270
|
+
//1
|
|
271
|
+
//1 return (
|
|
272
|
+
//1 <HomeBlock
|
|
273
|
+
//1 View={Proposals}
|
|
274
|
+
//1 key="proposal dashboard"
|
|
275
|
+
//1 description="Actionable proposals"
|
|
276
|
+
//1 css={css`
|
|
277
|
+
//1 height: 300px;
|
|
278
|
+
//1 flex-basis: calc(50% - 10px);
|
|
279
|
+
//1 flex-grow: 1;
|
|
280
|
+
//1 `}
|
|
281
|
+
//1 props={{
|
|
282
|
+
//1 register,
|
|
283
|
+
//1 actionableProposals,
|
|
284
|
+
//1 createMode,
|
|
285
|
+
//1 onCreate: handleCreate,
|
|
286
|
+
//1 onRefreshProposals: handleRefreshProposals,
|
|
287
|
+
//1 onSelectProposal: handleSelectProposal,
|
|
288
|
+
//1 }}
|
|
289
|
+
//1 actions={proposalBlockActions}
|
|
290
|
+
//1 />
|
|
291
|
+
//1 );
|
|
292
|
+
//1};
|
|
293
|
+
//1export default ProposalsBlock;
|
|
294
|
+
|
|
227
295
|
|
|
228
296
|
exports.Proposals = Proposals;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Proposal.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/Proposal.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useState,\n useContext,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Button,\n FormGroup,\n ControlGroup,\n TextArea,\n PanelStack2 as PanelStack, type Panel,\n Menu, MenuDivider, MenuItem,\n Spinner,\n NonIdealState,\n} from '@blueprintjs/core';\n\nimport DL from '@riboseinc/paneron-extension-kit/widgets/DL';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { maybeEllipsizeString } from '../../util';\nimport type { Register, RegisterStakeholder } from '../../../types';\nimport { type SomeCR as CR } from '../../../types/cr';\nimport TransitionOptions, { isFinalState, getTransitions } from '../../change-request/TransitionOptions';\nimport Summary from '../../change-request/Summary';\nimport TransitionsAndStatus, { getTransitionHistory } from '../../change-request/TransitionHistory';\n\n\nexport const CurrentProposal: React.VoidFunctionComponent<{\n proposal: CR\n register: Register\n stakeholder?: RegisterStakeholder\n}> = function ({ stakeholder, register, proposal }) {\n const transitions = stakeholder\n ? getTransitions(proposal, stakeholder)\n : [];\n\n return (\n <>\n <DL css={css`padding: 10px 12px 10px 12px; flex-grow: 1; flex-basis: max-content;`}>\n <div>\n <dt>Viewing proposal:</dt>\n <dd css={css`max-height: 40px; overflow-y: auto;`}>\n “{proposal.justification.trim() || '(justification N/A)'}”\n </dd>\n </div>\n <Summary\n cr={proposal}\n currentStakeholder={stakeholder}\n registerMetadata={register}\n />\n </DL>\n <div css={css`overflow-y: auto; flex-basis: min-content;`}>\n <TransitionsAndStatus\n pastTransitions={getTransitionHistory(proposal)}\n isFinal={isFinalState(proposal.state)}\n />\n {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 </>\n );\n};\n\n\nexport const NewProposal: React.VoidFunctionComponent<{\n register: Register\n onCreateBlank?: (idea: string) => Promise<void>\n className?: string\n}> = function ({ register, onCreateBlank, className }) {\n const [ newProposalIdea, setNewProposalIdea ] = useState('');\n\n const handleNewProposal = useCallback(async function handleNewProposal () {\n if (newProposalIdea.trim()) {\n await onCreateBlank?.(newProposalIdea);\n setNewProposalIdea('');\n } else {\n throw new Error(\"Cannot create proposal: need some initial motivation for the change\");\n }\n }, [newProposalIdea, onCreateBlank]);\n\n return (\n <FormGroup\n className={className}\n css={css`overflow-y: auto;`}\n label={<>Propose a change to version {register.version?.id ?? '(N/A)'}:</>}>\n <ControlGroup vertical>\n <TextArea\n value={newProposalIdea ?? ''}\n placeholder=\"Your idea…\"\n title=\"Justification draft (you can change this later)\"\n onChange={evt => setNewProposalIdea(evt.currentTarget.value)}\n />\n <Button\n fill\n intent={newProposalIdea ? 'primary': undefined}\n disabled={!newProposalIdea.trim() || !onCreateBlank}\n title=\"A blank proposal will be created and opened in a new tab.\"\n onClick={handleNewProposal}\n icon=\"tick\">\n Create\n </Button>\n </ControlGroup>\n </FormGroup>\n );\n};\n\n\n/**\n * A list of menu items for given actionable proposals,\n * grouped by label.\n */\nconst ActionableProposalItems: React.VoidFunctionComponent<{\n actionableProposals: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onSelect?: (proposalID: string) => void\n}> = function ActionableProposalItems ({ actionableProposals, onSelect }) {\n return <>{\n actionableProposals?.\n filter(([, proposals]) => proposals && proposals.length > 0).\n map(([groupLabel, proposals], idx) =>\n <React.Fragment key={idx}>\n <MenuDivider title={groupLabel} />\n {proposals !== undefined && proposals.length > 0\n ? proposals.map(cr =>\n <ActionableProposalItem\n cr={cr}\n onClick={onSelect}\n />)\n : proposals === undefined\n ? <MenuItem disabled text=\"Loading…\" icon={<Spinner />} />\n : <MenuItem disabled text=\"No pending proposals\" icon=\"clean\" />}\n </React.Fragment>)\n }</>;\n};\n\n\nconst ActionableProposalItem: React.VoidFunctionComponent<{\n cr: CR\n onClick?: (crID: string) => void\n}> = function ({ cr, onClick }) {\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const selectedMenuItem = useRef<HTMLLIElement | null>(null);\n const isActive = activeCR && cr.id === activeCR?.id\n ? true\n : false;\n useEffect(() => {\n selectedMenuItem.current?.scrollIntoView?.({ block: 'nearest' });\n }, [isActive]);\n const handleClick = useCallback(() => {\n return onClick?.(cr.id);\n }, [onClick, cr.id]);\n return (\n <MenuItem\n key={cr.id}\n elementRef={isActive ? selectedMenuItem : undefined}\n selected={isActive}\n active={isActive}\n text={maybeEllipsizeString(cr.justification?.trim() || cr.id, 120)}\n htmlTitle={cr.justification}\n disabled={!onClick}\n onClick={onClick ? handleClick : undefined}\n />\n );\n};\n\n\nexport const Proposals: React.VoidFunctionComponent<{\n register: Register\n actionableProposals?: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onCreate?: (idea: string | false) => Promise<void>\n createMode?: boolean\n onSelectProposal?: (id: string) => void\n onRefreshProposals?: () => void\n className?: string\n}> = function ({\n register,\n actionableProposals,\n onCreate,\n createMode,\n onSelectProposal,\n onRefreshProposals,\n className,\n}) {\n //const [creating, setCreating] = useState(false);\n const hasActionable = (actionableProposals && actionableProposals.find(p => p[1] && p[1].length > 0));\n const proposalMenuItems = useMemo(() => {\n return hasActionable\n ? <ActionableProposalItems\n actionableProposals={actionableProposals ?? []}\n onSelect={onSelectProposal}\n />\n : null;\n }, [onSelectProposal, hasActionable, actionableProposals?.length]);\n\n // return <Menu css={css`overflow-y: auto; background: none !important`} className={className}>\n // {proposalMenuItems}\n // </Menu>\n\n const stack: Panel<any>[] = useMemo(() => {\n const stack = [];\n const proposalMenu = proposalMenuItems\n ? <Menu css={css`overflow-y: auto; background: none !important;`}>\n {proposalMenuItems}\n </Menu>\n : null;\n if (proposalMenu) {\n stack.push({\n title: createMode\n ? \"Proposals\"\n : <>\n Proposals\n {hasActionable\n ? <>\n \n <Button\n minimal\n small\n onClick={onRefreshProposals}\n disabled={!onRefreshProposals}\n icon=\"refresh\"\n />\n </>\n : null}\n </>,\n renderPanel: () => proposalMenu,\n });\n }\n if (createMode) {\n stack.push({\n title: \"Start proposal\",\n renderPanel: () =>\n <NewProposal\n onCreateBlank={onCreate}\n register={register}\n css={css`padding: 5px;`}\n />,\n });\n }\n return stack;\n }, [\n onCreate, createMode,\n onRefreshProposals,\n register, proposalMenuItems,\n ]);\n\n return <PanelStack\n css={css`flex: 1; .bp4-panel-stack-view { background: none; }`}\n className={className}\n onClose={() => onCreate?.(false)}\n stack={stack.length > 0\n ? stack\n : [{ title: '', renderPanel: () => <NonIdealState title=\"Nothing to show\" /> }]}\n />;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Proposal.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/Proposal.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,UAAU,EACV,MAAM,EACN,SAAS,EACT,WAAW,EACX,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,WAAW,IAAI,UAAU,EACzB,IAAI,EAAE,WAAW,EAAE,QAAQ,EAC3B,OAAO,EACP,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKlD,MAAM,WAAW,GAIZ,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE;;IACnD,MAAM,CAAE,eAAe,EAAE,kBAAkB,CAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,UAAU,iBAAiB;QACpE,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,eAAe,CAAC,CAAA,CAAC;YACvC,kBAAkB,CAAC,EAAE,CAAC,CAAC;SACxB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAErC,OAAO,CACL,IAAC,SAAS,IACN,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,CAAA,mBAAmB,EAC3B,KAAK,EAAE;4CAA+B,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,mCAAI,OAAO;gBAAK;QAC5E,IAAC,YAAY,IAAC,QAAQ;YACpB,IAAC,QAAQ,IACP,KAAK,EAAE,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE,EAC5B,WAAW,EAAC,iBAAY,EACxB,KAAK,EAAC,iDAAiD,EACvD,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAC5D;YACF,IAAC,MAAM,IACH,IAAI,QACJ,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA,CAAC,CAAC,SAAS,EAC9C,QAAQ,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EACnD,KAAK,EAAC,2DAA2D,EACjE,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAC,MAAM,aAEN,CACI,CACL,CACb,CAAC;AACJ,CAAC,CAAC;AAGF;;;GAGG;AACH,MAAM,uBAAuB,GAGxB,SAAS,uBAAuB,CAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE;IACtE,OAAO,0BACL,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CACnB,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAC3D,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,CACnC,IAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,GAAG;QACtB,IAAC,WAAW,IAAC,KAAK,EAAE,UAAU,GAAI;QACjC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CACjB,IAAC,sBAAsB,IACrB,GAAG,EAAE,EAAE,CAAC,EAAE,EACV,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,QAAQ,GACjB,CAAC;YACP,CAAC,CAAC,SAAS,KAAK,SAAS;gBACvB,CAAC,CAAC,IAAC,QAAQ,IAAC,QAAQ,QAAC,IAAI,EAAC,eAAU,EAAC,IAAI,EAAE,IAAC,OAAO,OAAG,GAAI;gBAC1D,CAAC,CAAC,IAAC,QAAQ,IAAC,QAAQ,QAAC,IAAI,EAAC,sBAAsB,EAAC,IAAI,EAAC,OAAO,GAAG,CACrD,CAAC,CAClB,CAAC;AACP,CAAC,CAAC;AAGF,MAAM,sBAAsB,GAGvB,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE;;IAC5B,sCAAsC;IACtC,8DAA8D;IAC9D,kEAAkE;IAClE,4BAA4B;IAC5B,2DAA2D;IAC3D,oDAAoD;IACpD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC,EAAE,MAAK,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA;QACjD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC;IACV,SAAS,CAAC,GAAG,EAAE;;QACb,MAAA,MAAA,gBAAgB,CAAC,OAAO,0CAAE,cAAc,mDAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACf,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,CACL,IAAC,QAAQ,IACP,GAAG,EAAE,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EACnD,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,oBAAoB,CAAC,CAAA,MAAA,EAAE,CAAC,aAAa,0CAAE,IAAI,EAAE,KAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAClE,SAAS,EAAE,EAAE,CAAC,aAAa,EAC3B,QAAQ,EAAE,CAAC,OAAO,EAClB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,GAC1C,CACH,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,SAAS,GAQjB,UAAU,EACb,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,GACV;IACC,kDAAkD;IAClD,MAAM,aAAa,GAAG,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE;QACrC,OAAO,aAAa;YAClB,CAAC,CAAC,IAAC,uBAAuB,IACtB,mBAAmB,EAAE,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,EAAE,EAC9C,QAAQ,EAAE,gBAAgB,GAC1B;YACJ,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE3D,+FAA+F;IAC/F,wBAAwB;IACxB,UAAU;IAEV,MAAM,KAAK,GAAiB,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,iBAAiB;YACpC,CAAC,CAAC,IAAC,IAAI,IAAC,GAAG,EAAE,GAAG,CAAA,gDAAgD,IAC3D,iBAAiB,CACb;YACT,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,YAAY,EAAE;YAChB,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,UAAU;oBACf,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC;;wBAEG,aAAa;4BACZ,CAAC,CAAC;;gCAEE,IAAC,MAAM,IACL,OAAO,QACP,KAAK,QACL,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,CAAC,kBAAkB,EAC7B,IAAI,EAAC,SAAS,GACd,CACD;4BACL,CAAC,CAAC,IAAI,CACP;gBACP,WAAW,EAAE,GAAG,EAAE,CAAC,YAAY;aAChC,CAAC,CAAC;SACJ;QACD,IAAI,UAAU,EAAE;YACd,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,GAAG,EAAE,CAChB,IAAC,WAAW,IACV,aAAa,EAAE,QAAQ,EACvB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,CAAA,eAAe,GACvB;aACL,CAAC,CAAC;SACJ;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE;QACD,QAAQ,EAAE,UAAU;QACpB,kBAAkB;QAClB,QAAQ,EAAE,iBAAiB;KAC5B,CAAC,CAAC;IAEH,OAAO,IAAC,UAAU,IAChB,GAAG,EAAE,GAAG,CAAA,sDAAsD,EAC9D,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,KAAK,CAAC,EAChC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAC,aAAa,IAAC,KAAK,EAAC,iBAAiB,GAAG,EAAE,CAAC,GACjF,CAAC;AACL,CAAC,CAAC;AAGF,sDAAsD;AACtD,iBAAiB;AACjB,uBAAuB;AACvB,sCAAsC;AACtC,wBAAwB;AACxB,4CAA4C;AAC5C,wBAAwB;AACxB,uBAAuB;AACvB,gGAAgG;AAChG,+FAA+F;AAC/F,aAAa;AACb,qDAAqD;AACrD,+BAA+B;AAC/B,iCAAiC;AACjC,+BAA+B;AAC/B,6BAA6B;AAC7B,aAAa;AACb,kBAAkB;AAClB,aAAa;AACb,gDAAgD;AAChD,+BAA+B;AAC/B,iCAAiC;AACjC,4BAA4B;AAC5B,8BAA8B;AAC9B,aAAa;AACb,cAAc;AACd,GAAG;AACH,mBAAmB;AACnB,kCAAkC;AAClC,yBAAyB;AACzB,uBAAuB;AACvB,QAAQ;AACR,iDAAiD;AACjD,0BAA0B;AAC1B,sBAAsB;AACtB,uBAAuB;AACvB,mCAAmC;AACnC,iCAAiC;AACjC,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB,uBAAuB;AACvB,iCAAiC;AACjC,2BAA2B;AAC3B,4BAA4B;AAC5B,4BAA4B;AAC5B,4CAA4C;AAC5C,qDAAqD;AACrD,yBAAyB;AACzB,qBAAqB;AACrB,eAAe;AACf,uDAAuD;AACvD,yBAAyB;AACzB,2CAA2C;AAC3C,4EAA4E;AAC5E,iCAAiC;AACjC,gCAAgC;AAChC,kCAAkC;AAClC,yBAAyB;AACzB,mDAAmD;AACnD,0BAA0B;AAC1B,2BAA2B;AAC3B,uBAAuB;AACvB,UAAU;AACV,uDAAuD;AACvD,yBAAyB;AACzB,qCAAqC;AACrC,+BAA+B;AAC/B,+CAA+C;AAC/C,4BAA4B;AAC5B,mDAAmD;AACnD,0BAA0B;AAC1B,2BAA2B;AAC3B,uBAAuB;AACvB,UAAU;AACV,QAAQ;AACR,sBAAsB;AACtB,6FAA6F;AAC7F,GAAG;AACH,aAAa;AACb,iBAAiB;AACjB,yBAAyB;AACzB,iCAAiC;AACjC,2CAA2C;AAC3C,kBAAkB;AAClB,yBAAyB;AACzB,wCAAwC;AACxC,wBAAwB;AACxB,WAAW;AACX,iBAAiB;AACjB,oBAAoB;AACpB,+BAA+B;AAC/B,sBAAsB;AACtB,kCAAkC;AAClC,sDAAsD;AACtD,kDAAkD;AAClD,WAAW;AACX,uCAAuC;AACvC,SAAS;AACT,OAAO;AACP,KAAK;AACL,iCAAiC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useState,\n useContext,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Button,\n FormGroup,\n ControlGroup,\n TextArea,\n PanelStack2 as PanelStack, type Panel,\n Menu, MenuDivider, MenuItem,\n Spinner,\n NonIdealState,\n} from '@blueprintjs/core';\n\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { maybeEllipsizeString } from '../../util';\nimport type { Register } from '../../../types';\nimport { type SomeCR as CR } from '../../../types/cr';\n\n\nconst NewProposal: React.VoidFunctionComponent<{\n register: Register\n onCreateBlank?: (idea: string) => Promise<void>\n className?: string\n}> = function ({ register, onCreateBlank, className }) {\n const [ newProposalIdea, setNewProposalIdea ] = useState('');\n\n const handleNewProposal = useCallback(async function handleNewProposal () {\n if (newProposalIdea.trim()) {\n await onCreateBlank?.(newProposalIdea);\n setNewProposalIdea('');\n } else {\n throw new Error(\"Cannot create proposal: need some initial motivation for the change\");\n }\n }, [newProposalIdea, onCreateBlank]);\n\n return (\n <FormGroup\n className={className}\n css={css`overflow-y: auto;`}\n label={<>Propose a change to version {register.version?.id ?? '(N/A)'}:</>}>\n <ControlGroup vertical>\n <TextArea\n value={newProposalIdea ?? ''}\n placeholder=\"Your idea…\"\n title=\"Justification draft (you can change this later)\"\n onChange={evt => setNewProposalIdea(evt.currentTarget.value)}\n />\n <Button\n fill\n intent={newProposalIdea ? 'primary': undefined}\n disabled={!newProposalIdea.trim() || !onCreateBlank}\n title=\"A blank proposal will be created and opened in a new tab.\"\n onClick={handleNewProposal}\n icon=\"tick\">\n Create\n </Button>\n </ControlGroup>\n </FormGroup>\n );\n};\n\n\n/**\n * A list of menu items for given actionable proposals,\n * grouped by label.\n */\nconst ActionableProposalItems: React.VoidFunctionComponent<{\n actionableProposals: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onSelect?: (proposalID: string) => void\n}> = function ActionableProposalItems ({ actionableProposals, onSelect }) {\n return <>{\n actionableProposals?.\n filter(([, proposals]) => proposals && proposals.length > 0).\n map(([groupLabel, proposals], idx) =>\n <React.Fragment key={idx}>\n <MenuDivider title={groupLabel} />\n {proposals !== undefined && proposals.length > 0\n ? proposals.map(cr =>\n <ActionableProposalItem\n key={cr.id}\n cr={cr}\n onClick={onSelect}\n />)\n : proposals === undefined\n ? <MenuItem disabled text=\"Loading…\" icon={<Spinner />} />\n : <MenuItem disabled text=\"No pending proposals\" icon=\"clean\" />}\n </React.Fragment>)\n }</>;\n};\n\n\nconst ActionableProposalItem: React.VoidFunctionComponent<{\n cr: CR\n onClick?: (crID: string) => void\n}> = function ({ cr, onClick }) {\n // TODO: Try to avoid useContext here.\n // Originally activeCR was passed via prop, need to try again.\n // Switch to context was done to avoid rerendering the entire list\n // & losing scroll position.\n // We want(?) active CR to determine if this item is active\n // and keep it in viewport after user switches back.\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const selectedMenuItem = useRef<HTMLLIElement | null>(null);\n const isActive = activeCR && cr.id === activeCR?.id\n ? true\n : false;\n useEffect(() => {\n selectedMenuItem.current?.scrollIntoView?.({ block: 'nearest' });\n }, [isActive]);\n const handleClick = useCallback(() => {\n return onClick?.(cr.id);\n }, [onClick, cr.id]);\n return (\n <MenuItem\n key={cr.id}\n elementRef={isActive ? selectedMenuItem : undefined}\n selected={isActive}\n active={isActive}\n text={maybeEllipsizeString(cr.justification?.trim() || cr.id, 120)}\n htmlTitle={cr.justification}\n disabled={!onClick}\n onClick={onClick ? handleClick : undefined}\n />\n );\n};\n\n\nexport const Proposals: React.VoidFunctionComponent<{\n register: Register\n actionableProposals?: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onCreate?: (idea: string | false) => Promise<void>\n createMode?: boolean\n onSelectProposal?: (id: string) => void\n onRefreshProposals?: () => void\n className?: string\n}> = function ({\n register,\n actionableProposals,\n onCreate,\n createMode,\n onSelectProposal,\n onRefreshProposals,\n className,\n}) {\n //const [creating, setCreating] = useState(false);\n const hasActionable = (actionableProposals && actionableProposals.find(p => p[1] && p[1].length > 0));\n const proposalMenuItems = useMemo(() => {\n return hasActionable\n ? <ActionableProposalItems\n actionableProposals={actionableProposals ?? []}\n onSelect={onSelectProposal}\n />\n : null;\n }, [onSelectProposal, hasActionable, actionableProposals]);\n\n // return <Menu css={css`overflow-y: auto; background: none !important`} className={className}>\n // {proposalMenuItems}\n // </Menu>\n\n const stack: Panel<any>[] = useMemo(() => {\n const stack = [];\n const proposalMenu = proposalMenuItems\n ? <Menu css={css`overflow-y: auto; background: none !important;`}>\n {proposalMenuItems}\n </Menu>\n : null;\n if (proposalMenu) {\n stack.push({\n title: createMode\n ? \"Proposals\"\n : <>\n Proposals\n {hasActionable\n ? <>\n \n <Button\n minimal\n small\n onClick={onRefreshProposals}\n disabled={!onRefreshProposals}\n icon=\"refresh\"\n />\n </>\n : null}\n </>,\n renderPanel: () => proposalMenu,\n });\n }\n if (createMode) {\n stack.push({\n title: \"Start proposal\",\n renderPanel: () =>\n <NewProposal\n onCreateBlank={onCreate}\n register={register}\n css={css`padding: 5px;`}\n />,\n });\n }\n return stack;\n }, [\n onCreate, createMode,\n onRefreshProposals,\n register, proposalMenuItems,\n ]);\n\n return <PanelStack\n css={css`flex: 1; .bp4-panel-stack-view { background: none; }`}\n className={className}\n onClose={() => onCreate?.(false)}\n stack={stack.length > 0\n ? stack\n : [{ title: '', renderPanel: () => <NonIdealState title=\"Nothing to show\" /> }]}\n />;\n};\n\n\n//1const ProposalsBlock: React.VoidFunctionComponent<{\n//1 proposal: CR\n//1 register: Register\n//1 stakeholder?: RegisterStakeholder\n//1 canDelete?: boolean\n//1 onDelete?: () => (void | Promise<void>)\n//1 onOpen?: () => void\n//1 className?: string\n//1}> = function ({ proposal, stakeholder, register, onDelete, onOpen, canDelete, className }) {\n//1 const actions: MenuItemProps[] = stakeholder && canBeTransitionedBy(stakeholder, proposal)\n//1 ? [/*{\n//1 // Action is taken from within the widget.\n//1 text: \"Take action\",\n//1 onClick: () => void 0,\n//1 icon: 'take-action',\n//1 intent: 'primary',\n//1 }*/]\n//1 : canDelete\n//1 ? [{\n//1 text: \"Delete this proposal draft\",\n//1 onClick: onDelete,\n//1 disabled: !onDelete,\n//1 icon: 'delete',\n//1 intent: 'danger',\n//1 }]\n//1 : [];\n//1\n//1 actions.push({\n//1 text: \"Open in new window\",\n//1 disabled: !onOpen,\n//1 onClick: onOpen,\n//1 });\n//1 const proposalBlockActions = useMemo(() => {\n//1 const actions = [];\n//1 if (activeCR) {\n//1 actions.push({\n//1 text: \"Export proposal\",\n//1 onClick: () => void 0,\n//1 icon: 'export',\n//1 disabled: true,\n//1 } as const);\n//1 actions.push({\n//1 text: \"Exit proposal\",\n//1 icon: 'log-out',\n//1 intent: 'danger',\n//1 disabled: isBusy,\n//1 onClick: setActiveChangeRequestID\n//1 ? () => setActiveChangeRequestID?.(null)\n//1 : undefined,\n//1 } as const);\n//1 } else {\n//1 if (stakeholder && canCreateCR(stakeholder)) {\n//1 actions.push({\n//1 text: \"Create blank proposal\",\n//1 onClick: !createMode ? (() => setCreateMode(true)) : undefined,\n//1 disabled: !createCR,\n//1 active: createMode,\n//1 selected: createMode,\n//1 icon: 'add',\n//1 intent: actionableProposals.length < 1\n//1 ? 'primary'\n//1 : undefined,\n//1 } as const);\n//1 }\n//1 if (stakeholder && canImportCR(stakeholder)) {\n//1 actions.push({\n//1 text: \"Import proposal\",\n//1 onClick: importCR,\n//1 disabled: !importCR || createMode,\n//1 icon: 'import',\n//1 intent: actionableProposals.length < 1\n//1 ? 'primary'\n//1 : undefined,\n//1 } as const);\n//1 }\n//1 }\n//1 return actions;\n//1 }, [!activeCR, createMode, importCR, createCR, isBusy, actionableProposals.length < 1]);\n//1\n//1 return (\n//1 <HomeBlock\n//1 View={Proposals}\n//1 key=\"proposal dashboard\"\n//1 description=\"Actionable proposals\"\n//1 css={css`\n//1 height: 300px;\n//1 flex-basis: calc(50% - 10px);\n//1 flex-grow: 1;\n//1 `}\n//1 props={{\n//1 register,\n//1 actionableProposals,\n//1 createMode,\n//1 onCreate: handleCreate,\n//1 onRefreshProposals: handleRefreshProposals,\n//1 onSelectProposal: handleSelectProposal,\n//1 }}\n//1 actions={proposalBlockActions}\n//1 />\n//1 );\n//1};\n//1export default ProposalsBlock;\n"]}
|