@riboseinc/paneron-registry-kit 2.2.32 → 2.2.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/index.d.ts +2 -2
  2. package/index.js +3 -3
  3. package/index.js.map +1 -1
  4. package/item-classes/Tree.js +6 -8
  5. package/item-classes/Tree.js.map +1 -1
  6. package/package.json +4 -3
  7. package/{views/change-request → proposals}/ChangeRequestContext.d.ts +3 -2
  8. package/{views/change-request → proposals}/ChangeRequestContext.js +8 -8
  9. package/proposals/ChangeRequestContext.js.map +1 -0
  10. package/{views/ProposalHistoryDrawer.js → proposals/HistoryDrawer.js} +11 -13
  11. package/proposals/HistoryDrawer.js.map +1 -0
  12. package/proposals/ListItem.d.ts +8 -0
  13. package/proposals/ListItem.js +40 -0
  14. package/proposals/ListItem.js.map +1 -0
  15. package/{views/change-request/Summary.d.ts → proposals/MetaProperties.d.ts} +4 -3
  16. package/proposals/MetaProperties.js +94 -0
  17. package/proposals/MetaProperties.js.map +1 -0
  18. package/proposals/NewProposalMenu.d.ts +10 -0
  19. package/proposals/NewProposalMenu.js +113 -0
  20. package/proposals/NewProposalMenu.js.map +1 -0
  21. package/proposals/ProposalBrowser.d.ts +22 -0
  22. package/{views/change-request/Proposals.js → proposals/ProposalBrowser.js} +20 -258
  23. package/proposals/ProposalBrowser.js.map +1 -0
  24. package/proposals/ProposalDetail.d.ts +6 -0
  25. package/proposals/ProposalDetail.js +67 -0
  26. package/proposals/ProposalDetail.js.map +1 -0
  27. package/proposals/ProposalItem.d.ts +16 -0
  28. package/proposals/ProposalItem.js +57 -0
  29. package/proposals/ProposalItem.js.map +1 -0
  30. package/proposals/ProposalSummary.d.ts +6 -0
  31. package/proposals/ProposalSummary.js +62 -0
  32. package/proposals/ProposalSummary.js.map +1 -0
  33. package/proposals/ProposalTab.d.ts +12 -0
  34. package/proposals/ProposalTab.js +102 -0
  35. package/proposals/ProposalTab.js.map +1 -0
  36. package/proposals/ProposalType.d.ts +11 -0
  37. package/proposals/ProposalType.js +99 -0
  38. package/proposals/ProposalType.js.map +1 -0
  39. package/proposals/ProposalWorkspace.d.ts +13 -0
  40. package/proposals/ProposalWorkspace.js +132 -0
  41. package/proposals/ProposalWorkspace.js.map +1 -0
  42. package/proposals/Search.d.ts +26 -0
  43. package/proposals/Search.js +109 -0
  44. package/proposals/Search.js.map +1 -0
  45. package/{views/change-request → proposals}/TransitionHistory.d.ts +3 -2
  46. package/{views/change-request → proposals}/TransitionHistory.js +18 -14
  47. package/proposals/TransitionHistory.js.map +1 -0
  48. package/{views/change-request → proposals}/TransitionOptions.d.ts +3 -3
  49. package/{views/change-request → proposals}/TransitionOptions.js +34 -12
  50. package/proposals/TransitionOptions.js.map +1 -0
  51. package/proposals/actionableGroups/Tree.js +23 -5
  52. package/proposals/actionableGroups/Tree.js.map +1 -1
  53. package/proposals/actionableGroups/queries.d.ts +0 -1
  54. package/proposals/actionableGroups/queries.js +7 -10
  55. package/proposals/actionableGroups/queries.js.map +1 -1
  56. package/proposals/actionableGroups/treeNodes.d.ts +2 -1
  57. package/proposals/actionableGroups/treeNodes.js +42 -10
  58. package/proposals/actionableGroups/treeNodes.js.map +1 -1
  59. package/proposals/index.d.ts +6 -0
  60. package/proposals/index.js +83 -0
  61. package/proposals/index.js.map +1 -0
  62. package/{views/change-request → proposals}/objectChangeset.d.ts +4 -4
  63. package/{views/change-request → proposals}/objectChangeset.js +6 -6
  64. package/proposals/objectChangeset.js.map +1 -0
  65. package/proposals/queries.d.ts +4 -0
  66. package/proposals/queries.js +14 -0
  67. package/proposals/queries.js.map +1 -0
  68. package/{types/cr.d.ts → proposals/types.d.ts} +80 -5
  69. package/{types/cr.js → proposals/types.js} +72 -3
  70. package/proposals/types.js.map +1 -0
  71. package/types/index.d.ts +0 -1
  72. package/types/index.js +0 -13
  73. package/types/index.js.map +1 -1
  74. package/types/util.d.ts +1 -1
  75. package/types/util.js.map +1 -1
  76. package/types/views.d.ts +1 -1
  77. package/types/views.js.map +1 -1
  78. package/views/FilterCriteria/models.d.ts +2 -0
  79. package/views/FilterCriteria/models.js +12 -2
  80. package/views/FilterCriteria/models.js.map +1 -1
  81. package/views/GenericRelatedItemView.js +4 -4
  82. package/views/GenericRelatedItemView.js.map +1 -1
  83. package/views/RegisterStakeholder.d.ts +4 -1
  84. package/views/RegisterStakeholder.js +19 -13
  85. package/views/RegisterStakeholder.js.map +1 -1
  86. package/views/detail/ChangeRequest/index.js +12 -160
  87. package/views/detail/ChangeRequest/index.js.map +1 -1
  88. package/views/detail/ProposalWork.d.ts +8 -0
  89. package/views/detail/ProposalWork.js +213 -0
  90. package/views/detail/ProposalWork.js.map +1 -0
  91. package/views/detail/RegisterHome/ActiveProposalDetails.d.ts +1 -1
  92. package/views/detail/RegisterHome/ActiveProposalDetails.js +4 -4
  93. package/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -1
  94. package/views/detail/RegisterHome/Proposal.d.ts +1 -1
  95. package/views/detail/RegisterHome/Proposal.js +2 -6
  96. package/views/detail/RegisterHome/Proposal.js.map +1 -1
  97. package/views/detail/RegisterHome/index.js +12 -16
  98. package/views/detail/RegisterHome/index.js.map +1 -1
  99. package/views/detail/RegisterHome2/index.d.ts +5 -0
  100. package/views/detail/RegisterHome2/index.js +58 -0
  101. package/views/detail/RegisterHome2/index.js.map +1 -0
  102. package/views/detail/RegisterItem/index.d.ts +2 -1
  103. package/views/detail/RegisterItem/index.js +62 -21
  104. package/views/detail/RegisterItem/index.js.map +1 -1
  105. package/views/detail/RegisterItemClass.js +1 -1
  106. package/views/detail/RegisterItemClass.js.map +1 -1
  107. package/views/detail/RegisterMeta/RegisterMetaForm.js +1 -46
  108. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
  109. package/views/hooks/useLatestAcceptedProposal.d.ts +2 -0
  110. package/views/hooks/useLatestAcceptedProposal.js +48 -0
  111. package/views/hooks/useLatestAcceptedProposal.js.map +1 -0
  112. package/views/hooks/useRegisterVersion.d.ts +5 -0
  113. package/views/hooks/useRegisterVersion.js +47 -0
  114. package/views/hooks/useRegisterVersion.js.map +1 -0
  115. package/views/hooks/useSingleRegisterItemData.js.map +1 -1
  116. package/views/index.js +38 -16
  117. package/views/index.js.map +1 -1
  118. package/views/itemQueryUtils.d.ts +1 -1
  119. package/views/itemQueryUtils.js +12 -7
  120. package/views/itemQueryUtils.js.map +1 -1
  121. package/views/protocolRegistry.d.ts +1 -0
  122. package/views/protocolRegistry.js +4 -0
  123. package/views/protocolRegistry.js.map +1 -1
  124. package/views/sidebar/Browse/index.js +2 -2
  125. package/views/sidebar/Browse/index.js.map +1 -1
  126. package/views/sidebar/Registration/index.d.ts +0 -1
  127. package/views/sidebar/Registration/index.js +9 -37
  128. package/views/sidebar/Registration/index.js.map +1 -1
  129. package/views/sidebar/Search/index.d.ts +3 -0
  130. package/views/sidebar/Search/index.js +12 -11
  131. package/views/sidebar/Search/index.js.map +1 -1
  132. package/views/sidebar/index.js +40 -10
  133. package/views/sidebar/index.js.map +1 -1
  134. package/views/util.d.ts +6 -1
  135. package/views/util.js +30 -7
  136. package/views/util.js.map +1 -1
  137. package/types/cr.js.map +0 -1
  138. package/types/proposal.d.ts +0 -90
  139. package/types/proposal.js +0 -71
  140. package/types/proposal.js.map +0 -1
  141. package/views/ProposalHistoryDrawer.js.map +0 -1
  142. package/views/change-request/ChangeRequestContext.js.map +0 -1
  143. package/views/change-request/Proposals.d.ts +0 -40
  144. package/views/change-request/Proposals.js.map +0 -1
  145. package/views/change-request/Summary.js +0 -59
  146. package/views/change-request/Summary.js.map +0 -1
  147. package/views/change-request/TransitionHistory.js.map +0 -1
  148. package/views/change-request/TransitionOptions.js.map +0 -1
  149. package/views/change-request/objectChangeset.js.map +0 -1
  150. package/views/change-request/util.d.ts +0 -4
  151. package/views/change-request/util.js +0 -14
  152. package/views/change-request/util.js.map +0 -1
  153. /package/{views/ProposalHistoryDrawer.d.ts → proposals/HistoryDrawer.d.ts} +0 -0
@@ -15,29 +15,17 @@ var _context = require("@riboseinc/paneron-extension-kit/context");
15
15
 
16
16
  var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
17
17
 
18
- var _util = require("@riboseinc/paneron-extension-kit/util");
19
-
20
- var _DL = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/DL"));
21
-
22
18
  var _BrowserCtx = require("../../BrowserCtx");
23
19
 
24
20
  var _itemPathUtils = require("../../itemPathUtils");
25
21
 
26
- var _ChangeRequestContext = require("../../change-request/ChangeRequestContext");
27
-
28
- var _Proposals = _interopRequireDefault(require("../../change-request/Proposals"));
29
-
30
- var _TransitionOptions = _interopRequireWildcard(require("../../change-request/TransitionOptions"));
31
-
32
- var _TransitionHistory = _interopRequireWildcard(require("../../change-request/TransitionHistory"));
33
-
34
- var _Summary = _interopRequireDefault(require("../../change-request/Summary"));
22
+ var _ChangeRequestContext = require("../../../proposals/ChangeRequestContext");
35
23
 
36
- var _cr = require("../../../types/cr");
24
+ var _ProposalTab = _interopRequireDefault(require("../../../proposals/ProposalTab"));
37
25
 
38
26
  var _protocolRegistry = require("../../protocolRegistry");
39
27
 
40
- var _util2 = require("../../util");
28
+ var _util = require("../../util");
41
29
 
42
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
31
 
@@ -66,29 +54,21 @@ const MaybeChangeRequest = (0, _react.memo)(function ({
66
54
  } = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
67
55
  const {
68
56
  changeRequest: cr,
69
- canTransition,
70
- deleteCR,
71
- updateItemProposal
57
+ deleteCR
72
58
  } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
59
+ const {
60
+ registerMetadata
61
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
73
62
  const handleDelete = (0, _react.useCallback)(async () => {
74
63
  if (deleteCR) {
75
64
  await deleteCR();
76
65
  closeTabWithURI(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:${uri}`);
77
66
  }
78
67
  }, [deleteCR, closeTabWithURI]);
79
- const handleDeleteProposalAtItemPath = (0, _react.useCallback)(async function handleDeleteProposalAtItemPath(itemPath) {
80
- return await (updateItemProposal === null || updateItemProposal === void 0 ? void 0 : updateItemProposal("remove proposed change from proposal draft", null, itemPath));
81
- }, [updateItemProposal]);
82
- return cr ? (0, _react2.jsx)(ChangeRequestDetails, {
83
- cr: cr,
84
- canTransition: canTransition,
85
- onDelete: deleteCR ? handleDelete : undefined,
86
- onDeleteProposalForItemAtPath: updateItemProposal ? handleDeleteProposalAtItemPath : undefined,
87
- css: (0, _react2.css)`
88
- position: absolute;
89
- inset: 0;
90
- overflow-y: auto;
91
- `
68
+ return cr && registerMetadata ? (0, _react2.jsx)(_ProposalTab.default, {
69
+ proposal: cr,
70
+ register: registerMetadata,
71
+ onDelete: deleteCR ? handleDelete : undefined
92
72
  }) : (0, _react2.jsx)(_core.NonIdealState, {
93
73
  icon: (0, _react2.jsx)(_core.Spinner, null),
94
74
  css: (0, _react2.css)`
@@ -99,134 +79,6 @@ const MaybeChangeRequest = (0, _react.memo)(function ({
99
79
  description: "Unable to load proposal"
100
80
  });
101
81
  });
102
- const ChangeRequestDetails = (0, _react.memo)(function ({
103
- cr,
104
- canTransition,
105
- onDelete,
106
- onDeleteProposalForItemAtPath,
107
- className
108
- }) {
109
- const {
110
- activeChangeRequestID,
111
- setActiveChangeRequestID,
112
- stakeholder,
113
- registerMetadata
114
- } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
115
- const helmet = (0, _react.useMemo)(() => {
116
- var _a;
117
-
118
- return (0, _react2.jsx)(_util2.RegisterHelmet, null, (0, _react2.jsx)("title", null, "Viewing proposal: ", (_a = cr.justification) !== null && _a !== void 0 ? _a : "N/A"));
119
- }, [cr.justification]);
120
- const isActive = activeChangeRequestID === cr.id;
121
- const anotherIsActive = activeChangeRequestID && activeChangeRequestID !== cr.id;
122
- const crItemEntries = Object.entries(cr.items).map(i => JSON.stringify(i));
123
- const hasItems = crItemEntries.length > 0;
124
- const [selectedProposal, selectProposal] = (0, _react.useState)(null);
125
- const proposals = (0, _react.useMemo)(() => hasItems ? (0, _react2.jsx)(_Proposals.default, {
126
- proposals: cr.items,
127
- selectedItem: selectedProposal,
128
- onSelectItem: selectProposal,
129
- onDeleteProposalForItemAtPath: onDeleteProposalForItemAtPath
130
- }) : (0, _react2.jsx)(_core.NonIdealState, {
131
- icon: "clean",
132
- title: "Nothing is proposed here yet.",
133
- description: onDelete ? (0, _react2.jsx)(_core.Button, {
134
- onClick: onDelete
135
- }, "Delete this CR draft") : undefined
136
- }), [onDelete, onDeleteProposalForItemAtPath, selectedProposal, selectProposal, hasItems]);
137
- const classification = (0, _react.useMemo)(() => {
138
- var _a;
139
-
140
- const classification = [];
141
- classification.push({
142
- icon: 'lightbulb',
143
- children: "Proposal",
144
- tooltip: {
145
- icon: 'info-sign',
146
- content: (0, _react2.jsx)(_core.UL, {
147
- css: (0, _react2.css)`margin: 0;`
148
- }, (0, _react2.jsx)("li", null, "Proposal ID: ", cr.id))
149
- }
150
- });
151
- classification.push({
152
- children: ((_a = cr.state) === null || _a === void 0 ? void 0 : _a.replaceAll('-', ' ')) || 'N/A',
153
- tooltip: {
154
- icon: 'history',
155
- content: (0, _react2.jsx)(_core.UL, {
156
- css: (0, _react2.css)`margin: 0;`
157
- }, (0, _react2.jsx)("li", null, "Edited: ", (0, _react2.jsx)(_util2.Datestamp, {
158
- date: cr.timeEdited
159
- })), (0, _react2.jsx)("li", null, "Proposed: ", (0, _cr.hadBeenProposed)(cr) ? (0, _react2.jsx)(_util2.Datestamp, {
160
- date: cr.timeProposed
161
- }) : 'not yet'), (0, _react2.jsx)("li", null, "Disposed: ", (0, _cr.isDisposed)(cr) ? (0, _react2.jsx)(_util2.Datestamp, {
162
- date: cr.timeDisposed
163
- }) : 'not yet'))
164
- },
165
- intent: cr.state === 'accepted' ? 'success' : cr.state === 'returned-for-clarification' ? 'warning' : cr.state === 'withdrawn' || cr.state === 'rejected' ? 'danger' : cr.state === 'draft' ? undefined : 'primary'
166
- });
167
- return classification;
168
- }, [(0, _util.toJSONNormalized)(cr)]);
169
- const actions = (0, _react.useMemo)(() => {
170
- const actions = [];
171
- const handleChangeActiveStatus = !anotherIsActive && setActiveChangeRequestID ? active => active ? setActiveChangeRequestID === null || setActiveChangeRequestID === void 0 ? void 0 : setActiveChangeRequestID(cr.id) : setActiveChangeRequestID === null || setActiveChangeRequestID === void 0 ? void 0 : setActiveChangeRequestID(null) : undefined; //const htmlTitle = anotherIsActive
172
- // ? "You are in another proposal so you can’t enter this one. "
173
- // : canEdit && !isActive
174
- // ? "Enter proposal to preview or add to proposed changes. "
175
- // : !isActive
176
- // ? "Enter proposal to preview the register as proposed."
177
- // : "You’re previewing the register with this proposal applied."
178
-
179
- if (handleChangeActiveStatus && isActive) {
180
- actions.push({
181
- children: "Exit proposal",
182
- intent: 'warning',
183
- disabled: !handleChangeActiveStatus,
184
- onClick: () => handleChangeActiveStatus === null || handleChangeActiveStatus === void 0 ? void 0 : handleChangeActiveStatus(false) //title: htmlTitle,
185
-
186
- });
187
- } else {
188
- actions.push({
189
- children: "Work on this proposal",
190
- intent: 'primary',
191
- disabled: !handleChangeActiveStatus,
192
- onClick: () => handleChangeActiveStatus === null || handleChangeActiveStatus === void 0 ? void 0 : handleChangeActiveStatus(true) //title: htmlTitle,
193
-
194
- });
195
- }
196
-
197
- return actions;
198
- }, [isActive, anotherIsActive]);
199
- return (0, _react2.jsx)(_util2.TabContentsWithHeader, {
200
- className: className,
201
- title: (0, _util2.maybeEllipsizeString)(cr.justification, 70),
202
- classification: classification,
203
- layout: "card-grid",
204
- layoutOptions: {
205
- stretch: true
206
- },
207
- actions: actions
208
- }, helmet, proposals, (0, _react2.jsx)(_core.Card, {
209
- elevation: 1,
210
- css: (0, _react2.css)`flex: 100%; padding: 11px;`
211
- }, (0, _react2.jsx)(_DL.default, null, (0, _react2.jsx)(_Summary.default, {
212
- cr: cr,
213
- currentStakeholder: stakeholder,
214
- registerMetadata: registerMetadata !== null && registerMetadata !== void 0 ? registerMetadata : undefined
215
- }))), (0, _react2.jsx)(_core.Card, {
216
- elevation: 1,
217
- css: (0, _react2.css)`flex: calc(50% - 10px); flex-grow: 1; padding: 11px;`
218
- }, (0, _react2.jsx)(_TransitionHistory.default, {
219
- pastTransitions: (0, _TransitionHistory.getTransitionHistory)(cr),
220
- isFinal: (0, _TransitionOptions.isFinalState)(cr.state)
221
- })), canTransition ? (0, _react2.jsx)(_core.Card, {
222
- elevation: 3,
223
- css: (0, _react2.css)`flex: calc(50% - 10px); flex-grow: 1; padding: 11px;`
224
- }, (0, _react2.jsx)(_TransitionOptions.default, {
225
- transitions: stakeholder ? (0, _TransitionOptions.getTransitions)(cr, stakeholder) : [],
226
- stakeholder: stakeholder,
227
- cr: cr
228
- })) : null);
229
- });
230
82
  const CRTitle = (0, _react.memo)(function ({
231
83
  uri
232
84
  }) {
@@ -238,7 +90,7 @@ const CRTitle = (0, _react.memo)(function ({
238
90
  const justification = (_b = (_a = useObjectData({
239
91
  objectPaths: [uri]
240
92
  }).value.data) === null || _a === void 0 ? void 0 : _a[uri]) === null || _b === void 0 ? void 0 : _b.justification;
241
- return (0, _react2.jsx)(_react.default.Fragment, null, "Proposal \u201C", (0, _util2.maybeEllipsizeString)(justification !== null && justification !== void 0 ? justification : uri), "\u201D");
93
+ return (0, _react2.jsx)(_react.default.Fragment, null, "Proposal \u201C", (0, _util.maybeEllipsizeString)(justification !== null && justification !== void 0 ? justification : uri), "\u201D");
242
94
  });
243
95
  var _default = {
244
96
  main: View,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/ChangeRequest/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useState, useContext, useMemo, memo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Button,\n Card,\n NonIdealState,\n Spinner,\n UL,\n} from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { toJSONNormalized } from '@riboseinc/paneron-extension-kit/util';\nimport DL from '@riboseinc/paneron-extension-kit/widgets/DL';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { crPathToCRID } from '../../itemPathUtils';\nimport {\n ChangeRequestContextProvider,\n ChangeRequestContext,\n} from '../../change-request/ChangeRequestContext';\nimport Proposals from '../../change-request/Proposals';\nimport TransitionOptions, { isFinalState, getTransitions } from '../../change-request/TransitionOptions';\nimport TransitionsAndStatus, { getTransitionHistory } from '../../change-request/TransitionHistory';\nimport Summary from '../../change-request/Summary';\nimport { type SomeCR, hadBeenProposed, isDisposed } from '../../../types/cr';\nimport { Protocols } from '../../protocolRegistry';\nimport {\n TabContentsWithHeader,\n type TabContentsWithHeaderProps,\n RegisterHelmet as Helmet,\n maybeEllipsizeString,\n Datestamp,\n} from '../../util';\n\n\nconst View: React.VoidFunctionComponent<{ uri: string }> =\nmemo(function ({ uri }) {\n const crID = crPathToCRID(uri);\n return (\n <ChangeRequestContextProvider changeRequestID={crID}>\n <MaybeChangeRequest uri={uri} />\n </ChangeRequestContextProvider>\n );\n});\n\n\nconst MaybeChangeRequest: React.VoidFunctionComponent<{ uri: string }> =\nmemo(function ({ uri }) {\n const { closeTabWithURI } = useContext(TabbedWorkspaceContext);\n const {\n changeRequest: cr,\n canTransition,\n deleteCR,\n updateItemProposal,\n } = useContext(ChangeRequestContext);\n\n const handleDelete = useCallback(\n (async () => {\n if (deleteCR) {\n await deleteCR();\n closeTabWithURI(`${Protocols.CHANGE_REQUEST}:${uri}`);\n }\n }),\n [deleteCR, closeTabWithURI]);\n\n const handleDeleteProposalAtItemPath = useCallback(\n async function handleDeleteProposalAtItemPath(itemPath: string) {\n return await updateItemProposal?.(\"remove proposed change from proposal draft\", null, itemPath);\n },\n [updateItemProposal],\n );\n\n return (cr\n ? <ChangeRequestDetails\n cr={cr}\n canTransition={canTransition}\n onDelete={deleteCR\n ? handleDelete\n : undefined}\n onDeleteProposalForItemAtPath={updateItemProposal\n ? handleDeleteProposalAtItemPath\n : undefined}\n css={css`\n position: absolute;\n inset: 0;\n overflow-y: auto;\n `}\n />\n : <NonIdealState\n icon={<Spinner />}\n css={css`\n position: absolute;\n inset: 0;\n overflow-y: auto;\n `}\n description={\"Unable to load proposal\"}\n />\n );\n});\n\n\nconst ChangeRequestDetails: React.VoidFunctionComponent<{\n cr: SomeCR,\n canTransition: boolean,\n onDelete?: () => void,\n onDeleteProposalForItemAtPath?: (itemPath: string) => void,\n className?: string,\n}> = memo(function ({ cr, canTransition, onDelete, onDeleteProposalForItemAtPath, className }) {\n const {\n activeChangeRequestID,\n setActiveChangeRequestID,\n stakeholder,\n registerMetadata,\n } = useContext(BrowserCtx);\n\n const helmet = useMemo((() =>\n <Helmet>\n <title>Viewing proposal: {cr.justification ?? \"N/A\"}</title>\n </Helmet>\n ), [cr.justification]);\n\n const isActive = activeChangeRequestID === cr.id;\n const anotherIsActive = activeChangeRequestID && activeChangeRequestID !== cr.id;\n\n const crItemEntries = Object.entries(cr.items).map(i => JSON.stringify(i));\n const hasItems = crItemEntries.length > 0;\n\n const [selectedProposal, selectProposal] = useState<string | null>(null);\n const proposals = useMemo((() =>\n hasItems\n ? <Proposals\n proposals={cr.items}\n selectedItem={selectedProposal}\n onSelectItem={selectProposal}\n onDeleteProposalForItemAtPath={onDeleteProposalForItemAtPath}\n />\n : <NonIdealState\n icon=\"clean\"\n title=\"Nothing is proposed here yet.\"\n description={onDelete\n ? <Button onClick={onDelete}>\n Delete this CR draft\n </Button>\n : undefined}\n />\n ), [onDelete, onDeleteProposalForItemAtPath, selectedProposal, selectProposal, hasItems]);\n\n const classification = useMemo(() => {\n const classification: TabContentsWithHeaderProps[\"classification\"] = [];\n classification.push({\n icon: 'lightbulb',\n children: \"Proposal\",\n tooltip: {\n icon: 'info-sign',\n content: <UL css={css`margin: 0;`}><li>Proposal ID: {cr.id}</li></UL>,\n },\n });\n classification.push({\n children: cr.state?.replaceAll('-', ' ') || 'N/A',\n tooltip: {\n icon: 'history',\n content: <UL css={css`margin: 0;`}>\n <li>Edited: <Datestamp date={cr.timeEdited} /></li>\n <li>Proposed: {hadBeenProposed(cr) ? <Datestamp date={cr.timeProposed} /> : 'not yet'}</li>\n <li>Disposed: {isDisposed(cr) ? <Datestamp date={cr.timeDisposed} /> : 'not yet'}</li>\n </UL>,\n },\n intent: cr.state === 'accepted'\n ? 'success'\n : cr.state === 'returned-for-clarification'\n ? 'warning'\n : cr.state === 'withdrawn' || cr.state === 'rejected'\n ? 'danger'\n : cr.state === 'draft'\n ? undefined\n : 'primary',\n });\n return classification;\n }, [toJSONNormalized(cr)]);\n\n const actions = useMemo(() => {\n const actions: TabContentsWithHeaderProps[\"actions\"] = [];\n const handleChangeActiveStatus = !anotherIsActive && setActiveChangeRequestID\n ? ((active: boolean) => active\n ? setActiveChangeRequestID?.(cr.id)\n : setActiveChangeRequestID?.(null)\n )\n : undefined;\n //const htmlTitle = anotherIsActive\n // ? \"You are in another proposal so you can’t enter this one. \"\n // : canEdit && !isActive\n // ? \"Enter proposal to preview or add to proposed changes. \"\n // : !isActive\n // ? \"Enter proposal to preview the register as proposed.\"\n // : \"You’re previewing the register with this proposal applied.\"\n if (handleChangeActiveStatus && isActive) {\n actions.push({\n children: \"Exit proposal\",\n intent: 'warning',\n disabled: !handleChangeActiveStatus,\n onClick: () => handleChangeActiveStatus?.(false)\n //title: htmlTitle,\n });\n } else {\n actions.push({\n children: \"Work on this proposal\",\n intent: 'primary',\n disabled: !handleChangeActiveStatus,\n onClick: () => handleChangeActiveStatus?.(true)\n //title: htmlTitle,\n });\n }\n return actions;\n }, [isActive, anotherIsActive]);\n\n return (\n <TabContentsWithHeader\n className={className}\n title={maybeEllipsizeString(cr.justification, 70)}\n classification={classification}\n layout=\"card-grid\"\n layoutOptions={{ stretch: true }}\n actions={actions}>\n\n {helmet}\n\n {proposals}\n\n <Card elevation={1} css={css`flex: 100%; padding: 11px;`}>\n <DL>\n <Summary\n cr={cr}\n currentStakeholder={stakeholder}\n registerMetadata={registerMetadata ?? undefined}\n />\n </DL>\n </Card>\n\n <Card elevation={1} css={css`flex: calc(50% - 10px); flex-grow: 1; padding: 11px;`}>\n <TransitionsAndStatus\n pastTransitions={getTransitionHistory(cr)}\n isFinal={isFinalState(cr.state)}\n />\n </Card>\n\n {canTransition\n ? <Card elevation={3} css={css`flex: calc(50% - 10px); flex-grow: 1; padding: 11px;`}>\n <TransitionOptions\n transitions={stakeholder ? getTransitions(cr, stakeholder) : []}\n stakeholder={stakeholder}\n cr={cr}\n />\n </Card>\n : null}\n </TabContentsWithHeader>\n );\n});\n\n\nconst CRTitle: React.FC<{ uri: string }> = memo(function ({ uri }) {\n const { useObjectData } = useContext(DatasetContext);\n const justification = useObjectData({ objectPaths: [uri] }).value.data?.[uri]?.justification;\n return <>Proposal “{maybeEllipsizeString(justification ?? uri)}”</>;\n});\n\nexport default { main: View, title: CRTitle };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/ChangeRequest/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,aAAa,EACb,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,yCAAyC,CAAC;AACjD,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,IAAI,GACV,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;IACpB,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CACL,IAAC,4BAA4B,IAAC,eAAe,EAAE,IAAI;QACjD,IAAC,kBAAkB,IAAC,GAAG,EAAE,GAAG,GAAI,CACH,CAChC,CAAC;AACJ,CAAC,CAAC,CAAC;AAGH,MAAM,kBAAkB,GACxB,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;IACpB,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAC/D,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACzE,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,EAAE,CAAC;YACjB,eAAe,CAAC,GAAG,SAAS,CAAC,cAAc,IAAI,GAAG,EAAE,CAAC,CAAC;SACvD;IACH,CAAC,CAAC,EACF,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAE/B,OAAO,CAAC,EAAE,IAAI,gBAAgB;QAC5B,CAAC,CAAC,IAAC,WAAW,IACV,QAAQ,EAAE,EAAE,EACZ,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,SAAS,GACb;QACJ,CAAC,CAAC,IAAC,aAAa,IACZ,IAAI,EAAE,IAAC,OAAO,OAAG,EACjB,GAAG,EAAE,GAAG,CAAA;;;;SAIP,EACD,WAAW,EAAE,yBAAyB,GACtC,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAGH,MAAM,OAAO,GAA8B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;;IAC/D,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,MAAA,MAAA,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,0CAAG,GAAG,CAAC,0CAAE,aAAa,CAAC;IAC7F,OAAO;;QAAa,oBAAoB,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,GAAG,CAAC;iBAAK,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, memo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n NonIdealState,\n Spinner,\n} from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { crPathToCRID } from '../../itemPathUtils';\nimport {\n ChangeRequestContextProvider,\n ChangeRequestContext,\n} from '../../../proposals/ChangeRequestContext';\nimport ProposalTab from '../../../proposals/ProposalTab';\nimport { Protocols } from '../../protocolRegistry';\nimport { maybeEllipsizeString } from '../../util';\n\n\nconst View: React.VoidFunctionComponent<{ uri: string }> =\nmemo(function ({ uri }) {\n const crID = crPathToCRID(uri);\n return (\n <ChangeRequestContextProvider changeRequestID={crID}>\n <MaybeChangeRequest uri={uri} />\n </ChangeRequestContextProvider>\n );\n});\n\n\nconst MaybeChangeRequest: React.VoidFunctionComponent<{ uri: string }> =\nmemo(function ({ uri }) {\n const { closeTabWithURI } = useContext(TabbedWorkspaceContext);\n const { changeRequest: cr, deleteCR } = useContext(ChangeRequestContext);\n const { registerMetadata } = useContext(BrowserCtx);\n\n const handleDelete = useCallback(\n (async () => {\n if (deleteCR) {\n await deleteCR();\n closeTabWithURI(`${Protocols.CHANGE_REQUEST}:${uri}`);\n }\n }),\n [deleteCR, closeTabWithURI]);\n\n return (cr && registerMetadata\n ? <ProposalTab\n proposal={cr}\n register={registerMetadata}\n onDelete={deleteCR\n ? handleDelete\n : undefined}\n />\n : <NonIdealState\n icon={<Spinner />}\n css={css`\n position: absolute;\n inset: 0;\n overflow-y: auto;\n `}\n description={\"Unable to load proposal\"}\n />\n );\n});\n\n\nconst CRTitle: React.FC<{ uri: string }> = memo(function ({ uri }) {\n const { useObjectData } = useContext(DatasetContext);\n const justification = useObjectData({ objectPaths: [uri] }).value.data?.[uri]?.justification;\n return <>Proposal “{maybeEllipsizeString(justification ?? uri)}”</>;\n});\n\nexport default { main: View, title: CRTitle };\n"]}
@@ -0,0 +1,8 @@
1
+ /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
3
+ import React from 'react';
4
+ declare const _default: {
5
+ readonly main: React.VoidFunctionComponent<Record<never, never>>;
6
+ readonly title: React.VoidFunctionComponent<Record<never, never>>;
7
+ };
8
+ export default _default;
@@ -0,0 +1,213 @@
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 _core = require("@blueprintjs/core");
13
+
14
+ var _context = require("@riboseinc/paneron-extension-kit/context");
15
+
16
+ var _BrowserCtx = require("../BrowserCtx");
17
+
18
+ var _stakeholder = require("../../types/stakeholder");
19
+
20
+ var _ChangeRequestContext = require("../../proposals/ChangeRequestContext");
21
+
22
+ var _ProposalTab = _interopRequireDefault(require("../../proposals/ProposalTab"));
23
+
24
+ var _NewProposalMenu = _interopRequireDefault(require("../../proposals/NewProposalMenu"));
25
+
26
+ var _types = require("../../proposals/types");
27
+
28
+ var _itemPathUtils = require("../itemPathUtils");
29
+
30
+ var _util = require("../util");
31
+
32
+ var _useLatestAcceptedProposal = _interopRequireDefault(require("../../views/hooks/useLatestAcceptedProposal"));
33
+
34
+ var _proposals = require("../../proposals");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
38
+ 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); }
39
+
40
+ 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; }
41
+
42
+ /** @jsx jsx */
43
+
44
+ /** @jsxFrag React.Fragment */
45
+ const ProposalWork = (0, _react.memo)(function () {
46
+ const {
47
+ changeRequest: activeCR,
48
+ deleteCR
49
+ } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
50
+ const {
51
+ registerMetadata: register,
52
+ stakeholder,
53
+ setActiveChangeRequestID,
54
+ itemClasses
55
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
56
+ const {
57
+ getMapReducedData,
58
+ requestFileFromFilesystem,
59
+ updateObjects,
60
+ performOperation,
61
+ getObjectData,
62
+ isBusy
63
+ } = (0, _react.useContext)(_context.DatasetContext);
64
+ const handleDelete = (0, _react.useCallback)(async () => {
65
+ if (deleteCR && activeCR && setActiveChangeRequestID) {
66
+ await deleteCR();
67
+ setActiveChangeRequestID(null);
68
+ }
69
+ }, [deleteCR, setActiveChangeRequestID]);
70
+ let latestAcceptedProposal;
71
+
72
+ try {
73
+ latestAcceptedProposal = (0, _useLatestAcceptedProposal.default)();
74
+ } catch (e) {
75
+ console.error("Failed to obtain latest accepted proposal");
76
+ latestAcceptedProposal = undefined;
77
+ }
78
+
79
+ const getNewEmptyCRChangeset = (0, _react.useMemo)(() => {
80
+ if (stakeholder && (0, _stakeholder.canCreateCR)(stakeholder) && latestAcceptedProposal !== undefined) {
81
+ return async function getNewEmptyCRChangeset(newIdea) {
82
+ var _a;
83
+
84
+ const crID = crypto.randomUUID();
85
+ return [(0, _proposals.newCRObjectChangeset)(crID, newIdea, (_a = latestAcceptedProposal === null || latestAcceptedProposal === void 0 ? void 0 : latestAcceptedProposal.id) !== null && _a !== void 0 ? _a : 'initial', stakeholder.gitServerUsername), crID];
86
+ };
87
+ } else {
88
+ return undefined;
89
+ }
90
+ }, [stakeholder, latestAcceptedProposal === null || latestAcceptedProposal === void 0 ? void 0 : latestAcceptedProposal.id]);
91
+ const getImportedCRChangeset = (0, _react.useMemo)(() => {
92
+ if (requestFileFromFilesystem && stakeholder && (0, _stakeholder.canImportCR)(stakeholder)) {
93
+ return async function getImportedCRChangeset() {
94
+ const data = await requestFileFromFilesystem({
95
+ prompt: "Select one register proposal JSON file",
96
+ filters: [{
97
+ name: "JSON files",
98
+ extensions: ['.json']
99
+ }]
100
+ });
101
+ const fileData = Object.values(data)[0];
102
+
103
+ if (!fileData) {
104
+ throw new Error("No file was selected");
105
+ }
106
+
107
+ if ((0, _types.isImportableCR)(fileData)) {
108
+ try {
109
+ const [changeset, crID] = await (0, _proposals.importedProposalToCRObjectChangeset)(fileData, itemClasses, stakeholder.gitServerUsername, getObjectData, async function resolvePredicates(predicates) {
110
+ const mapReduceChains = [...predicates.values()].map(predicate => ({
111
+ [predicate]: {
112
+ mapFunc: `
113
+ const data = value.data;
114
+ if (!key.startsWith('/proposals/') && data && (${predicate})) {
115
+ emit({ objectPath: key, objectData: value });
116
+ }
117
+ `
118
+ }
119
+ })).reduce((prev, curr) => ({ ...prev,
120
+ ...curr
121
+ }), {});
122
+ const result = await getMapReducedData({
123
+ chains: mapReduceChains
124
+ });
125
+ return Object.entries(result).map(([chainLabel, chainResult]) => {
126
+ const objects = Array.isArray(chainResult) ? chainResult : [];
127
+
128
+ if (objects.length < 1) {
129
+ throw new Error(`Unable to resolve predicate to item UUID: no item found matching predicate ${chainLabel}`);
130
+ } else if (objects.length > 1) {
131
+ const objectOverview = objects.map(o => JSON.stringify(o)).join(', ');
132
+ throw new Error(`Unable to resolve predicate to item UUID: more than one item matches predicate ${chainLabel}: ${objectOverview}`);
133
+ } else {
134
+ return {
135
+ // There’s just one item anyway, hence `objects[0]`.
136
+ [chainLabel]: (0, _itemPathUtils.itemPathToItemRef)(false, objects[0].objectPath)
137
+ };
138
+ }
139
+ }).reduce((prev, curr) => ({ ...prev,
140
+ ...curr
141
+ }), {});
142
+ });
143
+ return [changeset, crID];
144
+ } catch (e) {
145
+ console.error("Error reading proposal data", e);
146
+ throw new Error("Error reading proposal data");
147
+ }
148
+ } else {
149
+ throw new Error("Invalid proposal format");
150
+ }
151
+ };
152
+ } else {
153
+ return undefined;
154
+ }
155
+ }, [getMapReducedData, requestFileFromFilesystem, getObjectData, stakeholder]);
156
+ const [importCR, createCR] = (0, _react.useMemo)(() => {
157
+ if (updateObjects && setActiveChangeRequestID && !isBusy) {
158
+ return [getImportedCRChangeset ? performOperation('importing proposal', async function () {
159
+ const [objectChangeset, crID] = await getImportedCRChangeset();
160
+ await updateObjects({
161
+ commitMessage: 'import proposal',
162
+ objectChangeset
163
+ });
164
+ setActiveChangeRequestID(crID);
165
+ }) : undefined, getNewEmptyCRChangeset ? performOperation('creating blank proposal', async function (newIdea) {
166
+ const [objectChangeset, crID] = await getNewEmptyCRChangeset(newIdea);
167
+ await updateObjects({
168
+ commitMessage: `start new empty proposal ${newIdea}`,
169
+ objectChangeset
170
+ });
171
+ setActiveChangeRequestID(crID);
172
+ }) : undefined];
173
+ } else {
174
+ return [undefined, undefined];
175
+ }
176
+ }, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]);
177
+
178
+ if (!activeCR || !register || !stakeholder) {
179
+ return (0, _react2.jsx)(_core.NonIdealState, {
180
+ icon: "clean",
181
+ title: "Not working on any proposal",
182
+ description: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)("p", null, "Choose an actionable proposal from the sidebar to the left and activate it by double-clicking"), register && stakeholder && (0, _stakeholder.canCreateCR)(stakeholder) && latestAcceptedProposal !== undefined ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)("p", null, "\u2014or\u2014"), (0, _react2.jsx)(_NewProposalMenu.default, {
183
+ css: (0, _react2.css)`height: 200px;`,
184
+ previousVersion: (latestAcceptedProposal === null || latestAcceptedProposal === void 0 ? void 0 : latestAcceptedProposal.timeDisposed) ? (0, _util.formatDate)(latestAcceptedProposal.timeDisposed, {
185
+ showTime: true,
186
+ useUTC: true
187
+ }) : null,
188
+ onImport: importCR,
189
+ onCreateBlank: createCR
190
+ })) : null)
191
+ });
192
+ } else {
193
+ return (0, _react2.jsx)(_ProposalTab.default, {
194
+ proposal: activeCR,
195
+ register: register,
196
+ stakeholder: stakeholder,
197
+ onDelete: deleteCR ? handleDelete : undefined
198
+ });
199
+ }
200
+ });
201
+
202
+ const ProposalWorkTitle = function () {
203
+ const {
204
+ changeRequest: activeCR
205
+ } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
206
+ return (0, _react2.jsx)(_react.default.Fragment, null, activeCR ? (0, _react2.jsx)("strong", null, "Active proposal") : (0, _react2.jsx)(_react.default.Fragment, null, "Proposal dashboard"));
207
+ };
208
+
209
+ var _default = {
210
+ main: ProposalWork,
211
+ title: ProposalWorkTitle
212
+ };
213
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProposalWork.js","sourceRoot":"","sources":["../../../src/views/detail/ProposalWork.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useMemo, useContext, useCallback, memo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { NonIdealState } from '@blueprintjs/core';\n\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\n\nimport { BrowserCtx } from '../BrowserCtx';\nimport { canImportCR, canCreateCR } from '../../types/stakeholder';\nimport { ChangeRequestContext } from '../../proposals/ChangeRequestContext';\nimport ProposalTab from '../../proposals/ProposalTab';\nimport NewProposalMenu from '../../proposals/NewProposalMenu';\nimport { isImportableCR } from '../../proposals/types';\nimport { itemPathToItemRef } from '../itemPathUtils';\nimport { formatDate } from '../util';\nimport useLatestAcceptedProposal from '../../views/hooks/useLatestAcceptedProposal';\nimport {\n newCRObjectChangeset,\n importedProposalToCRObjectChangeset,\n} from '../../proposals';\n\n\nconst ProposalWork: React.VoidFunctionComponent<Record<never, never>> =\nmemo(function () {\n const { changeRequest: activeCR, deleteCR } = useContext(ChangeRequestContext);\n const {\n registerMetadata: register,\n stakeholder,\n setActiveChangeRequestID,\n itemClasses,\n } = useContext(BrowserCtx);\n const {\n getMapReducedData,\n requestFileFromFilesystem,\n updateObjects,\n performOperation,\n getObjectData,\n isBusy,\n } = useContext(DatasetContext);\n\n const handleDelete = useCallback(async () => {\n if (deleteCR && activeCR && setActiveChangeRequestID) {\n await deleteCR();\n setActiveChangeRequestID(null);\n }\n }, [deleteCR, setActiveChangeRequestID]);\n\n let latestAcceptedProposal: ReturnType<typeof useLatestAcceptedProposal> | undefined;\n try {\n latestAcceptedProposal = useLatestAcceptedProposal();\n } catch (e) {\n console.error(\"Failed to obtain latest accepted proposal\");\n latestAcceptedProposal = undefined;\n }\n const getNewEmptyCRChangeset:\n undefined | ((idea: string) => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (stakeholder && canCreateCR(stakeholder) && latestAcceptedProposal !== undefined) {\n return async function getNewEmptyCRChangeset (newIdea: string) {\n const crID = crypto.randomUUID();\n return [newCRObjectChangeset(\n crID,\n newIdea,\n latestAcceptedProposal?.id ?? 'initial',\n stakeholder!.gitServerUsername!,\n ), crID];\n };\n } else {\n return undefined;\n }\n }, [stakeholder, latestAcceptedProposal?.id]);\n\n const getImportedCRChangeset:\n undefined | (() => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (requestFileFromFilesystem && stakeholder && canImportCR(stakeholder)) {\n return async function getImportedCRChangeset() {\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n try {\n const [changeset, crID] = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n stakeholder!.gitServerUsername!,\n getObjectData,\n async function resolvePredicates(predicates) {\n const mapReduceChains = [...predicates.values()].map(predicate => ({\n [predicate]: {\n mapFunc: `\n const data = value.data;\n if (!key.startsWith('/proposals/') && data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n })).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n\n const result:\n Record<string, { objectPath: string, objectData: any }[] | {}> =\n await getMapReducedData({\n chains: mapReduceChains,\n });\n\n return Object.entries(result).map(([chainLabel, chainResult]) => {\n const objects =\n // Map returns an empty object if there’re no items,\n // but we promise to return a list.\n (Array.isArray(chainResult) ? chainResult : []);\n if (objects.length < 1) {\n throw new Error(`Unable to resolve predicate to item UUID: no item found matching predicate ${chainLabel}`);\n } else if (objects.length > 1) {\n const objectOverview = objects.map((o: any) => JSON.stringify(o)).join(', ')\n throw new Error(`Unable to resolve predicate to item UUID: more than one item matches predicate ${chainLabel}: ${objectOverview}`);\n } else {\n return {\n // There’s just one item anyway, hence `objects[0]`.\n [chainLabel]: itemPathToItemRef(false, objects[0].objectPath),\n };\n }\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n },\n );\n return [changeset, crID];\n } catch (e) {\n console.error(\"Error reading proposal data\", e);\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n } else {\n return undefined;\n }\n }, [getMapReducedData, requestFileFromFilesystem, getObjectData, stakeholder]);\n\n const [importCR, createCR] = useMemo(() => {\n if (updateObjects && setActiveChangeRequestID && !isBusy) {\n return [\n getImportedCRChangeset\n ? performOperation('importing proposal', async function () {\n const [objectChangeset, crID] = await getImportedCRChangeset(); \n await updateObjects({\n commitMessage: 'import proposal',\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n getNewEmptyCRChangeset\n ? performOperation('creating blank proposal', async function (newIdea: string) {\n const [objectChangeset, crID] = await getNewEmptyCRChangeset(newIdea);\n await updateObjects({\n commitMessage: `start new empty proposal ${newIdea}`,\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n ];\n } else {\n return [undefined, undefined];\n }\n }, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]);\n\n if (!activeCR || !register || !stakeholder) {\n return <NonIdealState\n icon=\"clean\"\n title=\"Not working on any proposal\"\n description={<>\n <p>\n Choose an actionable proposal from the sidebar to the left\n and activate it by double-clicking\n </p>\n {register && stakeholder && canCreateCR(stakeholder) && latestAcceptedProposal !== undefined\n ? <>\n <p>—or—</p>\n <NewProposalMenu\n css={css`height: 200px;`}\n previousVersion={\n latestAcceptedProposal?.timeDisposed\n ? formatDate(\n latestAcceptedProposal.timeDisposed,\n { showTime: true, useUTC: true })\n : null}\n onImport={importCR}\n onCreateBlank={createCR}\n />\n </>\n : null}\n </>}\n />;\n } else {\n return <ProposalTab\n proposal={activeCR}\n register={register}\n stakeholder={stakeholder}\n onDelete={deleteCR ? handleDelete : undefined}\n />;\n }\n});\n\n\nconst ProposalWorkTitle: React.VoidFunctionComponent<Record<never, never>> = function () {\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n return <>{activeCR\n ? <strong>Active proposal</strong>\n : <>Proposal dashboard</>}</>;\n};\n\n\nexport default {\n main: ProposalWork,\n title: ProposalWorkTitle,\n} as const;\n"]}
@@ -2,7 +2,7 @@
2
2
  /** @jsxFrag React.Fragment */
3
3
  import React from 'react';
4
4
  import type { Register, RegisterStakeholder } from '../../../types';
5
- import { type SomeCR as CR } from '../../../types/cr';
5
+ import { type SomeCR as CR } from '../../../proposals/types';
6
6
  declare const CurrentProposalBlock: React.VoidFunctionComponent<{
7
7
  proposal: CR;
8
8
  register: Register;
@@ -11,11 +11,11 @@ var _react2 = require("@emotion/react");
11
11
 
12
12
  var _DL = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/DL"));
13
13
 
14
- var _Summary = _interopRequireDefault(require("../../change-request/Summary"));
14
+ var _MetaProperties = _interopRequireDefault(require("../../../proposals/MetaProperties"));
15
15
 
16
- var _TransitionOptions = _interopRequireWildcard(require("../../change-request/TransitionOptions"));
16
+ var _TransitionOptions = _interopRequireWildcard(require("../../../proposals/TransitionOptions"));
17
17
 
18
- var _TransitionHistory = _interopRequireWildcard(require("../../change-request/TransitionHistory"));
18
+ var _TransitionHistory = _interopRequireWildcard(require("../../../proposals/TransitionHistory"));
19
19
 
20
20
  var _Block = _interopRequireDefault(require("./Block"));
21
21
 
@@ -92,7 +92,7 @@ const CurrentProposal = function ({
92
92
  css: (0, _react2.css)`padding: 10px 12px 10px 12px; flex-grow: 1; flex-basis: max-content;`
93
93
  }, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Viewing\u00A0proposal:"), (0, _react2.jsx)("dd", {
94
94
  css: (0, _react2.css)`max-height: 40px; overflow-y: auto;`
95
- }, "\u201C", proposal.justification.trim() || '(justification N/A)', "\u201D")), (0, _react2.jsx)(_Summary.default, {
95
+ }, "\u201C", proposal.justification.trim() || '(justification N/A)', "\u201D")), (0, _react2.jsx)(_MetaProperties.default, {
96
96
  cr: proposal,
97
97
  currentStakeholder: stakeholder,
98
98
  registerMetadata: register
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveProposalDetails.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/ActiveProposalDetails.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,MAAM,6CAA6C,CAAC;AAE7D,OAAO,OAAO,MAAM,8BAA8B,CAAC;AAGnD,OAAO,iBAAiB,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC9H,OAAO,oBAAoB,EAAE,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACpG,OAAO,SAAS,MAAM,SAAS,CAAC;AAGhC,MAAM,oBAAoB,GAQrB,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,MAAM,OAAO,GAAoB,WAAW,IAAI,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC;YACxF,CAAC,CAAC,EAAC;;;;;;iBAME,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,4BAA4B;gBAClC,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,CAAC,QAAQ;gBACnB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;SACJ;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,4BAA4B;YAClC,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,CAAC,MAAM;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzD,OAAO,CACL,IAAC,SAAS,IACR,IAAI,EAAE,eAAe,EACrB,WAAW,EAAC,iBAAiB,EAC7B,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAC1C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC;AAGpC,MAAM,eAAe,GAIhB,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAChD,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,CACL;QACE,IAAC,EAAE,IAAC,GAAG,EAAE,GAAG,CAAA,sEAAsE;YAChF;gBACE,yCAA+B;gBAC/B,YAAI,GAAG,EAAE,GAAG,CAAA,qCAAqC;;oBAC7C,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,qBAAqB;6BACrD,CACD;YACN,IAAC,OAAO,IACN,EAAE,EAAE,QAAQ,EACZ,kBAAkB,EAAE,WAAW,EAC/B,gBAAgB,EAAE,QAAQ,GAC1B,CACC;QACL,aAAK,GAAG,EAAE,GAAG,CAAA,4CAA4C;YACvD,IAAC,oBAAoB,IACnB,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAC/C,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,GACrC;YACD,WAAW,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,IAAC,iBAAiB,IAChB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,GAAG,CAAA,gBAAgB,GACxB;gBACJ,CAAC,CAAC,IAAI,CACJ,CACL,CACJ,CAAC;AACJ,CAAC,CAAC","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 : [];\n\n if (canDelete) {\n actions.push({\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&nbsp;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"]}
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 MetaProperties from '../../../proposals/MetaProperties';\nimport type { Register, RegisterStakeholder } from '../../../types';\nimport { type SomeCR as CR } from '../../../proposals/types';\nimport TransitionOptions, { isFinalState, getTransitions, canBeTransitionedBy } from '../../../proposals/TransitionOptions';\nimport TransitionsAndStatus, { getTransitionHistory } from '../../../proposals/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 : [];\n\n if (canDelete) {\n actions.push({\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&nbsp;proposal:</dt>\n <dd css={css`max-height: 40px; overflow-y: auto;`}>\n “{proposal.justification.trim() || '(justification N/A)'}”\n </dd>\n </div>\n <MetaProperties\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"]}
@@ -2,7 +2,7 @@
2
2
  /** @jsxFrag React.Fragment */
3
3
  import React from 'react';
4
4
  import type { Register } from '../../../types';
5
- import { type SomeCR as CR } from '../../../types/cr';
5
+ import { type SomeCR as CR } from '../../../proposals/types';
6
6
  export declare const Proposals: React.VoidFunctionComponent<{
7
7
  register: Register;
8
8
  actionableProposals?: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][];
@@ -11,7 +11,7 @@ var _react2 = require("@emotion/react");
11
11
 
12
12
  var _core = require("@blueprintjs/core");
13
13
 
14
- var _ChangeRequestContext = require("../../change-request/ChangeRequestContext");
14
+ var _ChangeRequestContext = require("../../../proposals/ChangeRequestContext");
15
15
 
16
16
  var _util = require("../../util");
17
17
 
@@ -135,17 +135,13 @@ const Proposals = function ({
135
135
  onRefreshProposals,
136
136
  className
137
137
  }) {
138
- //const [creating, setCreating] = useState(false);
139
138
  const hasActionable = actionableProposals && actionableProposals.find(p => p[1] && p[1].length > 0);
140
139
  const proposalMenuItems = (0, _react.useMemo)(() => {
141
140
  return hasActionable || onCreate ? (0, _react2.jsx)(ActionableProposalItems, {
142
141
  actionableProposals: actionableProposals !== null && actionableProposals !== void 0 ? actionableProposals : [],
143
142
  onSelect: onSelectProposal
144
143
  }) : null;
145
- }, [onSelectProposal, onCreate, hasActionable, actionableProposals]); // return <Menu css={css`overflow-y: auto; background: none !important`} className={className}>
146
- // {proposalMenuItems}
147
- // </Menu>
148
-
144
+ }, [onSelectProposal, onCreate, hasActionable, actionableProposals]);
149
145
  const stack = (0, _react.useMemo)(() => {
150
146
  const stack = [];
151
147
  const proposalMenu = proposalMenuItems ? (0, _react2.jsx)(_core.Menu, {