@riboseinc/paneron-registry-kit 2.0.0-dev9 → 2.0.0
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/common.d.ts +1 -1
- package/common.js +1 -1
- package/common.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +26 -19
- package/types/cr.d.ts +216 -0
- package/types/cr.js +175 -0
- package/types/cr.js.map +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +19 -0
- package/types/index.js.map +1 -1
- package/types/item.d.ts +13 -3
- package/types/item.js +11 -1
- package/types/item.js.map +1 -1
- package/types/proposal.d.ts +31 -14
- package/types/proposal.js +1 -1
- package/types/proposal.js.map +1 -1
- package/types/register.d.ts +6 -5
- package/types/register.js +19 -1
- package/types/register.js.map +1 -1
- package/types/registry.d.ts +8 -3
- package/types/registry.js +8 -1
- package/types/registry.js.map +1 -1
- package/types/stakeholder.d.ts +40 -16
- package/types/stakeholder.js +47 -3
- package/types/stakeholder.js.map +1 -1
- package/types/views.d.ts +98 -24
- package/types/views.js.map +1 -1
- package/views/AnnotatedChange.d.ts +7 -0
- package/views/AnnotatedChange.js +91 -0
- package/views/AnnotatedChange.js.map +1 -0
- package/views/BrowserCtx.d.ts +66 -2
- package/views/BrowserCtx.js +13 -2
- package/views/BrowserCtx.js.map +1 -1
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +13 -1
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +178 -85
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +4 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js +10 -3
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToSummary.js +7 -7
- package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -1
- package/views/FilterCriteria/criteriaToNodes.d.ts +9 -0
- package/views/FilterCriteria/criteriaToNodes.js +42 -28
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
- package/views/FilterCriteria/index.d.ts +1 -0
- package/views/FilterCriteria/index.js +29 -21
- package/views/FilterCriteria/index.js.map +1 -1
- package/views/FilterCriteria/models.d.ts +29 -2
- package/views/FilterCriteria/models.js +17 -10
- package/views/FilterCriteria/models.js.map +1 -1
- package/views/FilterCriteria/mutateGroup.d.ts +4 -1
- package/views/FilterCriteria/mutateGroup.js +4 -3
- package/views/FilterCriteria/mutateGroup.js.map +1 -1
- package/views/GenericRelatedItemView.d.ts +1 -1
- package/views/GenericRelatedItemView.js +142 -102
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/RegisterStakeholder.d.ts +9 -0
- package/views/RegisterStakeholder.js +40 -0
- package/views/RegisterStakeholder.js.map +1 -0
- package/views/RegisterVersion.d.ts +9 -0
- package/views/RegisterVersion.js +41 -0
- package/views/RegisterVersion.js.map +1 -0
- package/views/SearchQuery.d.ts +13 -0
- package/views/SearchQuery.js +137 -0
- package/views/SearchQuery.js.map +1 -0
- package/views/change-request/ChangeRequestContext.d.ts +20 -0
- package/views/change-request/ChangeRequestContext.js +56 -0
- package/views/change-request/ChangeRequestContext.js.map +1 -0
- package/views/change-request/Proposals.d.ts +21 -0
- package/views/change-request/Proposals.js +331 -0
- package/views/change-request/Proposals.js.map +1 -0
- package/views/change-request/objectChangeset.d.ts +31 -0
- package/views/change-request/objectChangeset.js +229 -0
- package/views/change-request/objectChangeset.js.map +1 -0
- package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
- package/views/detail/ChangeRequest/Proposal.js +142 -0
- package/views/detail/ChangeRequest/Proposal.js.map +1 -0
- package/views/detail/ChangeRequest/index.d.ts +13 -0
- package/views/detail/ChangeRequest/index.js +207 -0
- package/views/detail/ChangeRequest/index.js.map +1 -0
- package/views/detail/ChangeRequest/transitions.d.ts +28 -0
- package/views/detail/ChangeRequest/transitions.js +530 -0
- package/views/detail/ChangeRequest/transitions.js.map +1 -0
- package/views/detail/CustomView/index.d.ts +13 -0
- package/views/detail/CustomView/index.js +68 -0
- package/views/detail/CustomView/index.js.map +1 -0
- package/views/detail/RegisterHome/index.d.ts +5 -0
- package/views/detail/RegisterHome/index.js +128 -0
- package/views/detail/RegisterHome/index.js.map +1 -0
- package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
- package/views/detail/RegisterItem/RelatedItems.js +61 -0
- package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
- package/views/detail/RegisterItem/index.d.ts +13 -0
- package/views/detail/RegisterItem/index.js +356 -0
- package/views/detail/RegisterItem/index.js.map +1 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
- package/views/detail/RegisterMeta/index.d.ts +10 -0
- package/views/detail/RegisterMeta/index.js +111 -0
- package/views/detail/RegisterMeta/index.js.map +1 -0
- package/views/detail/index.d.ts +1 -0
- package/views/detail/index.js +24 -0
- package/views/detail/index.js.map +1 -0
- package/views/diffing/InlineDiff.d.ts +12 -0
- package/views/diffing/InlineDiff.js +58 -0
- package/views/diffing/InlineDiff.js.map +1 -0
- package/views/diffing/StructuredDiff.d.ts +11 -0
- package/views/diffing/StructuredDiff.js +65 -0
- package/views/diffing/StructuredDiff.js.map +1 -0
- package/views/hooks/useCustomView.d.ts +3 -0
- package/views/hooks/useCustomView.js +24 -0
- package/views/hooks/useCustomView.js.map +1 -0
- package/views/hooks/useItemClassConfig.d.ts +3 -0
- package/views/hooks/useItemClassConfig.js +24 -0
- package/views/hooks/useItemClassConfig.js.map +1 -0
- package/views/hooks/useItemRef.d.ts +3 -0
- package/views/hooks/useItemRef.js +39 -0
- package/views/hooks/useItemRef.js.map +1 -0
- package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
- package/views/hooks/useSingleRegisterItemData.js +32 -0
- package/views/hooks/useSingleRegisterItemData.js.map +1 -0
- package/views/index.d.ts +2 -2
- package/views/index.js +161 -130
- package/views/index.js.map +1 -1
- package/views/itemPathUtils.d.ts +45 -2
- package/views/itemPathUtils.js +101 -14
- package/views/itemPathUtils.js.map +1 -1
- package/views/itemQueryUtils.d.ts +11 -0
- package/views/itemQueryUtils.js +48 -0
- package/views/itemQueryUtils.js.map +1 -0
- package/views/protocolRegistry.d.ts +12 -0
- package/views/protocolRegistry.js +42 -0
- package/views/protocolRegistry.js.map +1 -0
- package/views/sidebar/Browse/index.d.ts +11 -0
- package/views/sidebar/Browse/index.js +453 -0
- package/views/sidebar/Browse/index.js.map +1 -0
- package/views/sidebar/Export/index.d.ts +5 -0
- package/views/sidebar/Export/index.js +94 -0
- package/views/sidebar/Export/index.js.map +1 -0
- package/views/sidebar/ListItem.d.ts +10 -0
- package/views/sidebar/ListItem.js +43 -0
- package/views/sidebar/ListItem.js.map +1 -0
- package/views/sidebar/Registration/index.d.ts +5 -0
- package/views/sidebar/Registration/index.js +163 -0
- package/views/sidebar/Registration/index.js.map +1 -0
- package/views/sidebar/Search/index.d.ts +18 -0
- package/views/sidebar/Search/index.js +177 -0
- package/views/sidebar/Search/index.js.map +1 -0
- package/views/sidebar/index.d.ts +6 -0
- package/views/sidebar/index.js +104 -0
- package/views/sidebar/index.js.map +1 -0
- package/views/util.d.ts +29 -5
- package/views/util.js +92 -6
- package/views/util.js.map +1 -1
- package/views/ChangeRequest.d.ts +0 -12
- package/views/ChangeRequest.js +0 -689
- package/views/ChangeRequest.js.map +0 -1
- package/views/ItemBrowser.d.ts +0 -12
- package/views/ItemBrowser.js +0 -258
- package/views/ItemBrowser.js.map +0 -1
- package/views/ItemDetails.d.ts +0 -14
- package/views/ItemDetails.js +0 -128
- package/views/ItemDetails.js.map +0 -1
- package/views/MainView.d.ts +0 -8
- package/views/MainView.js +0 -34
- package/views/MainView.js.map +0 -1
- package/views/RegisterInformation.d.ts +0 -7
- package/views/RegisterInformation.js +0 -264
- package/views/RegisterInformation.js.map +0 -1
- package/views/RegisterItemGrid.d.ts +0 -25
- package/views/RegisterItemGrid.js +0 -276
- package/views/RegisterItemGrid.js.map +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
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 _FilterCriteria = _interopRequireDefault(require("./FilterCriteria"));
|
|
15
|
+
|
|
16
|
+
var _CRITERIA_CONFIGURATION = require("./FilterCriteria/CRITERIA_CONFIGURATION");
|
|
17
|
+
|
|
18
|
+
var _criteriaGroupToQueryExpression = _interopRequireDefault(require("./FilterCriteria/criteriaGroupToQueryExpression"));
|
|
19
|
+
|
|
20
|
+
var _BrowserCtx = require("./BrowserCtx");
|
|
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
|
+
//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';
|
|
32
|
+
const SearchQuery = function ({
|
|
33
|
+
rootCriteria,
|
|
34
|
+
onCriteriaChange,
|
|
35
|
+
quickSearchString,
|
|
36
|
+
onQuickSearchStringChange,
|
|
37
|
+
availableClassIDs,
|
|
38
|
+
className
|
|
39
|
+
}) {
|
|
40
|
+
const {
|
|
41
|
+
itemClasses,
|
|
42
|
+
subregisters
|
|
43
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
44
|
+
const [editingAdvanced, toggleEditingAdvanced] = (0, _react.useState)(false);
|
|
45
|
+
const classIDs = availableClassIDs ?? Object.keys(itemClasses);
|
|
46
|
+
const hasAdvancedQuery = rootCriteria.criteria.length > 0;
|
|
47
|
+
|
|
48
|
+
function makeDefaultCriteria() {
|
|
49
|
+
if (quickSearchString) {
|
|
50
|
+
return {
|
|
51
|
+
key: 'raw-substring',
|
|
52
|
+
query: _CRITERIA_CONFIGURATION.RAW_SUBSTRING.toQuery({
|
|
53
|
+
substring: quickSearchString
|
|
54
|
+
}, {
|
|
55
|
+
itemClasses,
|
|
56
|
+
subregisters
|
|
57
|
+
})
|
|
58
|
+
};
|
|
59
|
+
} else {
|
|
60
|
+
return {
|
|
61
|
+
key: 'custom',
|
|
62
|
+
query: _CRITERIA_CONFIGURATION.CUSTOM_CONDITION.toQuery({
|
|
63
|
+
customExpression: 'false'
|
|
64
|
+
}, {
|
|
65
|
+
itemClasses,
|
|
66
|
+
subregisters
|
|
67
|
+
})
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return (0, _react2.jsx)(_core.ControlGroup, {
|
|
73
|
+
fill: true,
|
|
74
|
+
vertical: true,
|
|
75
|
+
className: className
|
|
76
|
+
}, (0, _react2.jsx)(_core.InputGroup, {
|
|
77
|
+
fill: true,
|
|
78
|
+
small: true,
|
|
79
|
+
disabled: !onQuickSearchStringChange || hasAdvancedQuery,
|
|
80
|
+
value: hasAdvancedQuery ? '' : quickSearchString,
|
|
81
|
+
leftIcon: "search",
|
|
82
|
+
placeholder: "Quick search",
|
|
83
|
+
title: !hasAdvancedQuery ? "Search for a substring occurring anywhere within serialized item data." : "Advanced query overrides quick search.",
|
|
84
|
+
css: (0, _react2.css)`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`,
|
|
85
|
+
rightElement: (0, _react2.jsx)(_core.Button, {
|
|
86
|
+
disabled: !onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery,
|
|
87
|
+
onClick: () => onQuickSearchStringChange === null || onQuickSearchStringChange === void 0 ? void 0 : onQuickSearchStringChange(''),
|
|
88
|
+
small: true,
|
|
89
|
+
minimal: true,
|
|
90
|
+
icon: "cross",
|
|
91
|
+
title: "Clear quick search"
|
|
92
|
+
}),
|
|
93
|
+
onChange: evt => onQuickSearchStringChange === null || onQuickSearchStringChange === void 0 ? void 0 : onQuickSearchStringChange(evt.currentTarget.value)
|
|
94
|
+
}), (0, _react2.jsx)(_core.ButtonGroup, {
|
|
95
|
+
fill: true
|
|
96
|
+
}, (0, _react2.jsx)(_core.Button, {
|
|
97
|
+
fill: true,
|
|
98
|
+
small: true,
|
|
99
|
+
title: "Edit advanced search query",
|
|
100
|
+
icon: 'filter',
|
|
101
|
+
onClick: !hasAdvancedQuery ? () => {
|
|
102
|
+
onCriteriaChange({
|
|
103
|
+
criteria: [makeDefaultCriteria()],
|
|
104
|
+
require: 'all'
|
|
105
|
+
});
|
|
106
|
+
toggleEditingAdvanced(true);
|
|
107
|
+
} : () => toggleEditingAdvanced(v => !v),
|
|
108
|
+
active: editingAdvanced && hasAdvancedQuery,
|
|
109
|
+
disabled: !hasAdvancedQuery && !onCriteriaChange,
|
|
110
|
+
rightIcon: rootCriteria.criteria.length > 0 ? (0, _react2.jsx)(_core.Tag, {
|
|
111
|
+
intent: "success",
|
|
112
|
+
round: true
|
|
113
|
+
}, "on") : (0, _react2.jsx)(_core.Tag, {
|
|
114
|
+
round: true
|
|
115
|
+
}, "off")
|
|
116
|
+
}, "Advanced")), hasAdvancedQuery && editingAdvanced ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_FilterCriteria.default, {
|
|
117
|
+
key: "tree",
|
|
118
|
+
criteria: rootCriteria,
|
|
119
|
+
onChange: onCriteriaChange,
|
|
120
|
+
itemClasses: itemClasses,
|
|
121
|
+
availableClassIDs: classIDs,
|
|
122
|
+
subregisters: subregisters,
|
|
123
|
+
css: (0, _react2.css)`max-height: 50vh; overflow-y: auto;`
|
|
124
|
+
}), (0, _react2.jsx)("div", {
|
|
125
|
+
key: "query",
|
|
126
|
+
css: (0, _react2.css)`
|
|
127
|
+
margin-top: 5px;
|
|
128
|
+
padding: 0 10px 10px 10px;
|
|
129
|
+
color: ${_core.Colors.GRAY3};
|
|
130
|
+
font-size: 90%;
|
|
131
|
+
overflow-wrap: break-word;
|
|
132
|
+
`
|
|
133
|
+
}, "Query used: ", (0, _react2.jsx)("code", null, (0, _criteriaGroupToQueryExpression.default)(rootCriteria)))) : null);
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
var _default = SearchQuery;
|
|
137
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useState, useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, ControlGroup, Colors, InputGroup, Tag, ButtonGroup } from '@blueprintjs/core';\nimport CriteriaTree from './FilterCriteria';\nimport { CUSTOM_CONDITION, RAW_SUBSTRING } from './FilterCriteria/CRITERIA_CONFIGURATION';\nimport { CriteriaGroup, Criterion } from './FilterCriteria/models';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\n//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';\nimport { BrowserCtx } from './BrowserCtx';\n\n\n\nconst SearchQuery: React.FC<{\n rootCriteria: CriteriaGroup;\n onCriteriaChange?: (rootCriteria: CriteriaGroup) => void;\n\n quickSearchString: string;\n onQuickSearchStringChange?: (searchString: string) => void;\n\n availableClassIDs?: string[];\n className?: string;\n}> = function ({\n rootCriteria,\n onCriteriaChange,\n quickSearchString,\n onQuickSearchStringChange,\n availableClassIDs,\n className,\n}) {\n const { itemClasses, subregisters } = useContext(BrowserCtx);\n\n const [ editingAdvanced, toggleEditingAdvanced ] = useState<boolean>(false);\n\n const classIDs = availableClassIDs ?? Object.keys(itemClasses);\n\n const hasAdvancedQuery = rootCriteria.criteria.length > 0;\n\n function makeDefaultCriteria(): Criterion {\n if (quickSearchString) {\n return {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters },\n ),\n }\n } else {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: 'false' },\n { itemClasses, subregisters },\n ),\n }\n }\n }\n\n return (\n <ControlGroup fill vertical className={className}>\n <InputGroup\n fill\n small\n disabled={!onQuickSearchStringChange || hasAdvancedQuery}\n value={hasAdvancedQuery ? '' : quickSearchString}\n leftIcon=\"search\"\n placeholder=\"Quick search\"\n title={!hasAdvancedQuery\n ? \"Search for a substring occurring anywhere within serialized item data.\"\n : \"Advanced query overrides quick search.\"}\n css={css`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`}\n rightElement={<Button\n disabled={!onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery}\n onClick={() => onQuickSearchStringChange?.('')}\n small\n minimal\n icon=\"cross\"\n title=\"Clear quick search\" />}\n onChange={evt => onQuickSearchStringChange?.(evt.currentTarget.value)} />\n <ButtonGroup fill>\n <Button\n fill\n small\n title=\"Edit advanced search query\"\n icon='filter'\n onClick={!hasAdvancedQuery\n ? (() => {\n onCriteriaChange!({ criteria: [makeDefaultCriteria()], require: 'all' });\n toggleEditingAdvanced(true);\n })\n : () => toggleEditingAdvanced(v => !v)}\n active={editingAdvanced && hasAdvancedQuery}\n disabled={!hasAdvancedQuery && !onCriteriaChange}\n rightIcon={rootCriteria.criteria.length > 0\n ? <Tag intent=\"success\" round>on</Tag>\n : <Tag round>off</Tag>}>\n Advanced\n </Button>\n </ButtonGroup>\n {hasAdvancedQuery && editingAdvanced\n ? <>\n <CriteriaTree\n key=\"tree\"\n criteria={rootCriteria}\n onChange={onCriteriaChange}\n itemClasses={itemClasses}\n availableClassIDs={classIDs}\n subregisters={subregisters}\n css={css`max-height: 50vh; overflow-y: auto;`} />\n <div\n key=\"query\"\n css={css`\n margin-top: 5px;\n padding: 0 10px 10px 10px;\n color: ${Colors.GRAY3};\n font-size: 90%;\n overflow-wrap: break-word;\n `}>\n Query used: <code>{criteriaGroupToQueryExpression(rootCriteria)}</code>\n </div>\n </>\n : null}\n </ControlGroup>\n );\n };\n\nexport default SearchQuery;\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { type SomeCR as CR } from '../../types/cr';
|
|
5
|
+
export interface ChangeRequestContextSpec {
|
|
6
|
+
/**
|
|
7
|
+
* Change request object, undefined if not available/loading,
|
|
8
|
+
* null if not expected (i.e. changeRequestID is not given).
|
|
9
|
+
*/
|
|
10
|
+
changeRequest?: CR | null;
|
|
11
|
+
/**
|
|
12
|
+
* Current user can edit the contents of this CR.
|
|
13
|
+
* Always false if `changeRequest` is not defined or `null`.
|
|
14
|
+
*/
|
|
15
|
+
canEdit: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const ChangeRequestContext: React.Context<ChangeRequestContextSpec>;
|
|
18
|
+
export declare const ChangeRequestContextProvider: React.FC<{
|
|
19
|
+
changeRequestID: string | null;
|
|
20
|
+
}>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ChangeRequestContextProvider = exports.ChangeRequestContext = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
|
+
|
|
10
|
+
var _react2 = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _context = require("@riboseinc/paneron-extension-kit/context");
|
|
13
|
+
|
|
14
|
+
var _cr = require("../../types/cr");
|
|
15
|
+
|
|
16
|
+
var _BrowserCtx = require("../BrowserCtx");
|
|
17
|
+
|
|
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); }
|
|
19
|
+
|
|
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; }
|
|
21
|
+
|
|
22
|
+
/** @jsx jsx */
|
|
23
|
+
|
|
24
|
+
/** @jsxFrag React.Fragment */
|
|
25
|
+
const ChangeRequestContext = _react2.default.createContext({
|
|
26
|
+
changeRequest: null,
|
|
27
|
+
canEdit: false
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
exports.ChangeRequestContext = ChangeRequestContext;
|
|
31
|
+
|
|
32
|
+
const ChangeRequestContextProvider = function ({
|
|
33
|
+
changeRequestID,
|
|
34
|
+
children
|
|
35
|
+
}) {
|
|
36
|
+
var _useObjectData$value;
|
|
37
|
+
|
|
38
|
+
const {
|
|
39
|
+
useObjectData
|
|
40
|
+
} = (0, _react2.useContext)(_context.DatasetContext);
|
|
41
|
+
const {
|
|
42
|
+
stakeholder
|
|
43
|
+
} = (0, _react2.useContext)(_BrowserCtx.BrowserCtx);
|
|
44
|
+
const crPath = changeRequestID ? `/proposals/${changeRequestID}/main.yaml` : null;
|
|
45
|
+
const changeRequest = ((_useObjectData$value = useObjectData({
|
|
46
|
+
objectPaths: crPath ? [crPath] : []
|
|
47
|
+
}).value) === null || _useObjectData$value === void 0 ? void 0 : _useObjectData$value.data[crPath ?? '']) ?? (crPath ? undefined : null);
|
|
48
|
+
return (0, _react.jsx)(ChangeRequestContext.Provider, {
|
|
49
|
+
value: {
|
|
50
|
+
changeRequest,
|
|
51
|
+
canEdit: changeRequest && stakeholder && (0, _cr.canBeEditedBy)(stakeholder, changeRequest) ? true : false
|
|
52
|
+
}
|
|
53
|
+
}, children);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.ChangeRequestContextProvider = ChangeRequestContextProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChangeRequestContext.js","sourceRoot":"","sources":["../../../src/views/change-request/ChangeRequestContext.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAqB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAiB3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAA2B;IAChF,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAEpC,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE;IAC1C,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAErD,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,eAAe;QAC5B,CAAC,CAAC,cAAc,eAAe,YAAY;QAC3C,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,aAAa,GAAG,aAAa,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;KACpC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElE,OAAO,CACL,IAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE;YACpC,aAAa;YACb,OAAO,EACL,aAAa;mBACV,WAAW;mBACX,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC;gBAC1C,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK;SACZ,IACE,QAAQ,CACqB,CACjC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport React, { useContext } from 'react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { type SomeCR as CR, canBeEditedBy } from '../../types/cr';\nimport { BrowserCtx } from '../BrowserCtx';\n\n\nexport interface ChangeRequestContextSpec {\n /**\n * Change request object, undefined if not available/loading,\n * null if not expected (i.e. changeRequestID is not given).\n */\n changeRequest?: CR | null\n\n /**\n * Current user can edit the contents of this CR.\n * Always false if `changeRequest` is not defined or `null`.\n */\n canEdit: boolean\n}\n\nexport const ChangeRequestContext = React.createContext<ChangeRequestContextSpec>({\n changeRequest: null,\n canEdit: false,\n});\n\nexport const ChangeRequestContextProvider: React.FC<{\n changeRequestID: string | null\n}> = function ({ changeRequestID, children }) {\n const { useObjectData } = useContext(DatasetContext);\n\n const { stakeholder } = useContext(BrowserCtx);\n\n const crPath = changeRequestID\n ? `/proposals/${changeRequestID}/main.yaml`\n : null;\n\n const changeRequest = useObjectData({\n objectPaths: crPath ? [crPath] : [],\n }).value?.data[crPath ?? ''] as CR ?? (crPath ? undefined : null);\n\n return (\n <ChangeRequestContext.Provider value={{\n changeRequest,\n canEdit:\n changeRequest\n && stakeholder\n && canBeEditedBy(stakeholder, changeRequest)\n ? true\n : false,\n }}>\n {children}\n </ChangeRequestContext.Provider>\n );\n};\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import type { ChangeProposal, Clarification, InternalItemReference, Payload } from '../../types';
|
|
5
|
+
import type { Drafted } from '../../types/cr';
|
|
6
|
+
declare const Proposals: React.FC<{
|
|
7
|
+
proposals: Drafted['items'];
|
|
8
|
+
className?: string;
|
|
9
|
+
}>;
|
|
10
|
+
interface ProposalProps<P extends ChangeProposal> {
|
|
11
|
+
proposal: P;
|
|
12
|
+
showDiff?: boolean;
|
|
13
|
+
showOnlyChanged?: boolean;
|
|
14
|
+
itemRef: InternalItemReference;
|
|
15
|
+
itemData: Payload;
|
|
16
|
+
itemDataBefore: P extends Clarification ? Payload : undefined;
|
|
17
|
+
onChange?: (newProposal: P) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare const ProposalDetail: React.FC<ProposalProps<ChangeProposal>>;
|
|
20
|
+
export declare const ProposalSummary: React.FC<ProposalProps<ChangeProposal>>;
|
|
21
|
+
export default Proposals;
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.ProposalSummary = exports.ProposalDetail = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
|
|
12
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
13
|
+
|
|
14
|
+
var _core = require("@blueprintjs/core");
|
|
15
|
+
|
|
16
|
+
var _select = require("@blueprintjs/select");
|
|
17
|
+
|
|
18
|
+
var _HelpTooltip = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/HelpTooltip"));
|
|
19
|
+
|
|
20
|
+
var _protocolRegistry = require("../protocolRegistry");
|
|
21
|
+
|
|
22
|
+
var _BrowserCtx = require("../BrowserCtx");
|
|
23
|
+
|
|
24
|
+
var _itemPathUtils = require("../itemPathUtils");
|
|
25
|
+
|
|
26
|
+
var _StructuredDiff = _interopRequireDefault(require("../diffing/StructuredDiff"));
|
|
27
|
+
|
|
28
|
+
var _RegisterItem = _interopRequireDefault(require("../detail/RegisterItem"));
|
|
29
|
+
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
32
|
+
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); }
|
|
33
|
+
|
|
34
|
+
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; }
|
|
35
|
+
|
|
36
|
+
/** @jsx jsx */
|
|
37
|
+
|
|
38
|
+
/** @jsxFrag React.Fragment */
|
|
39
|
+
const Proposals = function ({
|
|
40
|
+
proposals,
|
|
41
|
+
className
|
|
42
|
+
}) {
|
|
43
|
+
const [_selectedProposal, selectProposal] = (0, _react.useState)(null);
|
|
44
|
+
const [showDiff, setShowDiff] = (0, _react.useState)(false);
|
|
45
|
+
const [showOnlyChanged, setShowOnlyChanged] = (0, _react.useState)(true);
|
|
46
|
+
const outerBrowserCtx = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
47
|
+
const {
|
|
48
|
+
jumpTo,
|
|
49
|
+
subregisters,
|
|
50
|
+
useRegisterItemData
|
|
51
|
+
} = outerBrowserCtx;
|
|
52
|
+
const proposalBrowserCtx = { ...outerBrowserCtx,
|
|
53
|
+
jumpTo: handleCRJump
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* When jumping to an item affected by current CR,
|
|
57
|
+
* jump in-CR instead of spawning tab.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
function handleCRJump(uri) {
|
|
61
|
+
if (uri.startsWith(_protocolRegistry.Protocols.ITEM_DETAILS)) {
|
|
62
|
+
const itemPath = uri.split(':')[1];
|
|
63
|
+
|
|
64
|
+
if (proposals[itemPath]) {
|
|
65
|
+
selectProposal(itemPath);
|
|
66
|
+
} else {
|
|
67
|
+
jumpTo === null || jumpTo === void 0 ? void 0 : jumpTo(uri);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const firstProposal = Object.keys(proposals)[0]; // Effective selected proposal
|
|
73
|
+
|
|
74
|
+
const selectedProposal = (_selectedProposal && proposals[_selectedProposal] ? _selectedProposal : null) ?? firstProposal ?? undefined; // Force select available proposal
|
|
75
|
+
|
|
76
|
+
(0, _react.useEffect)(() => {
|
|
77
|
+
if (firstProposal && (_selectedProposal === null || !proposals[_selectedProposal])) {
|
|
78
|
+
selectProposal(firstProposal);
|
|
79
|
+
}
|
|
80
|
+
}, [firstProposal, _selectedProposal, JSON.stringify(proposals)]);
|
|
81
|
+
const selectedItemRef = selectedProposal ? (0, _itemPathUtils.itemPathToItemRef)(subregisters !== undefined, selectedProposal) : null; // Data for proposed items
|
|
82
|
+
|
|
83
|
+
const proposedItemPaths = Object.entries(proposals).map(([itemPath, proposal]) => {
|
|
84
|
+
if (proposal.type === 'clarification' || proposal.type === 'addition') {
|
|
85
|
+
return itemPath;
|
|
86
|
+
} else {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
}).filter(s => s !== undefined);
|
|
90
|
+
const proposedItemDataReq = useRegisterItemData({
|
|
91
|
+
itemPaths: proposedItemPaths
|
|
92
|
+
}); // Data for pre-existing items
|
|
93
|
+
|
|
94
|
+
const currentItemDataReq = useRegisterItemData({
|
|
95
|
+
itemPaths: Object.keys(proposals),
|
|
96
|
+
ignoreActiveCR: true
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const getCurrentItemData = itemPath => {
|
|
100
|
+
var _currentItemDataReq$v;
|
|
101
|
+
|
|
102
|
+
return ((_currentItemDataReq$v = currentItemDataReq.value[itemPath]) === null || _currentItemDataReq$v === void 0 ? void 0 : _currentItemDataReq$v.data) ?? null;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const getProposedItemData = itemPath => {
|
|
106
|
+
var _proposedItemDataReq$;
|
|
107
|
+
|
|
108
|
+
return ((_proposedItemDataReq$ = proposedItemDataReq.value[itemPath]) === null || _proposedItemDataReq$ === void 0 ? void 0 : _proposedItemDataReq$.data) ?? null;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const selectedItemCurrentData = getCurrentItemData(selectedProposal);
|
|
112
|
+
const selectedItemProposedData = getProposedItemData(selectedProposal);
|
|
113
|
+
|
|
114
|
+
if (selectedProposal && selectedItemRef && proposals[selectedProposal] && !currentItemDataReq.isUpdating && !proposedItemDataReq.isUpdating) {
|
|
115
|
+
if (selectedItemCurrentData || selectedItemProposedData) {
|
|
116
|
+
var _proposals$selectedPr;
|
|
117
|
+
|
|
118
|
+
const selectedItemSummary = (0, _react2.jsx)(ProposalSummary, {
|
|
119
|
+
itemRef: selectedItemRef,
|
|
120
|
+
itemData: selectedItemProposedData ?? selectedItemCurrentData,
|
|
121
|
+
itemDataBefore: selectedItemCurrentData ?? undefined,
|
|
122
|
+
proposal: proposals[selectedProposal]
|
|
123
|
+
});
|
|
124
|
+
return (0, _react2.jsx)("div", {
|
|
125
|
+
css: (0, _react2.css)`display: flex; flex-flow: column nowrap;`,
|
|
126
|
+
className: className
|
|
127
|
+
}, (0, _react2.jsx)("div", null, (0, _react2.jsx)(_core.ControlGroup, null, (0, _react2.jsx)(_core.Switch, {
|
|
128
|
+
checked: showDiff,
|
|
129
|
+
onChange: evt => setShowDiff(evt.currentTarget.checked),
|
|
130
|
+
label: "View source",
|
|
131
|
+
css: (0, _react2.css)`margin-right: 1em !important`
|
|
132
|
+
}), (0, _react2.jsx)(_core.Switch, {
|
|
133
|
+
checked: showDiff && showOnlyChanged,
|
|
134
|
+
disabled: !showDiff,
|
|
135
|
+
onChange: evt => setShowOnlyChanged(evt.currentTarget.checked),
|
|
136
|
+
label: "Show clarified properties only"
|
|
137
|
+
})), (0, _react2.jsx)(_core.ButtonGroup, null, (0, _react2.jsx)(_core.Button, {
|
|
138
|
+
disabled: !jumpTo || ((_proposals$selectedPr = proposals[selectedProposal]) === null || _proposals$selectedPr === void 0 ? void 0 : _proposals$selectedPr.type) === 'addition',
|
|
139
|
+
icon: 'locate',
|
|
140
|
+
onClick: () => jumpTo === null || jumpTo === void 0 ? void 0 : jumpTo(`${_protocolRegistry.Protocols.ITEM_DETAILS}:${selectedProposal}`),
|
|
141
|
+
title: "Open selected item in a new tab (not applicable to proposed additions)"
|
|
142
|
+
}, "Reveal in registry"), Object.keys(proposals).length > 1 ? (0, _react2.jsx)(_select.Select2, {
|
|
143
|
+
filterable: false,
|
|
144
|
+
itemsEqual: (i1, i2) => JSON.stringify(i1) === JSON.stringify(i2),
|
|
145
|
+
activeItem: {
|
|
146
|
+
itemPath: selectedProposal,
|
|
147
|
+
proposal: proposals[selectedProposal],
|
|
148
|
+
itemData: selectedItemProposedData ?? selectedItemCurrentData,
|
|
149
|
+
itemDataBefore: selectedItemCurrentData ?? undefined,
|
|
150
|
+
itemRef: (0, _itemPathUtils.itemPathToItemRef)(subregisters !== undefined, selectedProposal)
|
|
151
|
+
},
|
|
152
|
+
items: Object.entries(proposals).map(([itemPath, proposal]) => ({
|
|
153
|
+
itemPath,
|
|
154
|
+
proposal,
|
|
155
|
+
itemData: getProposedItemData(itemPath) ?? getCurrentItemData(itemPath) ?? null,
|
|
156
|
+
itemDataBefore: undefined,
|
|
157
|
+
itemRef: (0, _itemPathUtils.itemPathToItemRef)(subregisters !== undefined, itemPath)
|
|
158
|
+
})).filter(item => item.itemData !== null),
|
|
159
|
+
popoverProps: {
|
|
160
|
+
minimal: true
|
|
161
|
+
},
|
|
162
|
+
fill: true,
|
|
163
|
+
itemRenderer: ChangeProposalItemView,
|
|
164
|
+
onItemSelect: item => selectProposal(item.itemPath)
|
|
165
|
+
}, (0, _react2.jsx)(_core.Button, {
|
|
166
|
+
rightIcon: "chevron-down",
|
|
167
|
+
icon: getProposalIcon(proposals[selectedProposal])
|
|
168
|
+
}, selectedItemSummary)) : (0, _react2.jsx)(_core.Button, {
|
|
169
|
+
fill: true,
|
|
170
|
+
alignText: "left",
|
|
171
|
+
icon: getProposalIcon(proposals[selectedProposal]),
|
|
172
|
+
rightIcon: "chevron-down"
|
|
173
|
+
}, selectedItemSummary))), (0, _react2.jsx)("div", {
|
|
174
|
+
css: (0, _react2.css)`position: relative; flex: 1;`
|
|
175
|
+
}, (0, _react2.jsx)(_BrowserCtx.BrowserCtx.Provider, {
|
|
176
|
+
value: proposalBrowserCtx
|
|
177
|
+
}, (0, _react2.jsx)(ProposalDetail, {
|
|
178
|
+
itemRef: selectedItemRef,
|
|
179
|
+
showDiff: showDiff,
|
|
180
|
+
showOnlyChanged: showOnlyChanged,
|
|
181
|
+
itemData: selectedItemProposedData ?? selectedItemCurrentData,
|
|
182
|
+
itemDataBefore: selectedItemCurrentData ?? undefined,
|
|
183
|
+
proposal: proposals[selectedProposal]
|
|
184
|
+
}))));
|
|
185
|
+
} else {
|
|
186
|
+
return (0, _react2.jsx)(_core.NonIdealState, {
|
|
187
|
+
icon: 'warning-sign',
|
|
188
|
+
className: className,
|
|
189
|
+
title: "Unable to retrieve proposed item data",
|
|
190
|
+
description: (0, _react2.jsx)("div", {
|
|
191
|
+
css: (0, _react2.css)`text-align: left;`
|
|
192
|
+
}, "There appears to be a data integrity issue.", (0, _react2.jsx)("br", null), "This might be caused by a problem in the application, or repository contents having been edited outside of the application.", (0, _react2.jsx)("br", null), "The data should be recoverable by inspecting version control system commit history.")
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
} else {
|
|
196
|
+
return (0, _react2.jsx)(_core.NonIdealState, {
|
|
197
|
+
icon: 'clean',
|
|
198
|
+
className: className,
|
|
199
|
+
title: "Nothing is proposed here yet."
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const ChangeProposalItemView = (item, {
|
|
205
|
+
handleClick,
|
|
206
|
+
modifiers,
|
|
207
|
+
query
|
|
208
|
+
}) => {
|
|
209
|
+
const proposalConfig = item.proposal.type === 'amendment' ? PROPOSAL_VIEWS[item.proposal.amendmentType] : PROPOSAL_VIEWS[item.proposal.type];
|
|
210
|
+
const ProposalTypeLabel = proposalConfig.summary;
|
|
211
|
+
return (0, _react2.jsx)(_core.MenuItem, {
|
|
212
|
+
active: modifiers.active,
|
|
213
|
+
disabled: modifiers.disabled,
|
|
214
|
+
labelElement: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(ProposalTypeLabel, { ...item
|
|
215
|
+
}), " ", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
216
|
+
content: (0, _react2.jsx)(_react.default.Fragment, null, "Proposed to be ", proposalConfig.hint)
|
|
217
|
+
})),
|
|
218
|
+
key: item.itemPath,
|
|
219
|
+
onClick: handleClick,
|
|
220
|
+
icon: getProposalIcon(item.proposal),
|
|
221
|
+
text: (0, _react2.jsx)(ProposalSummary, { ...item
|
|
222
|
+
})
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
const ProposalDetail = function ({
|
|
227
|
+
proposal,
|
|
228
|
+
showDiff,
|
|
229
|
+
showOnlyChanged,
|
|
230
|
+
itemRef,
|
|
231
|
+
itemData,
|
|
232
|
+
itemDataBefore,
|
|
233
|
+
onChange
|
|
234
|
+
}) {
|
|
235
|
+
const ItemView = _RegisterItem.default.main;
|
|
236
|
+
const view = showDiff ? (0, _react2.jsx)(MaximizedStructuredDiff, {
|
|
237
|
+
item1: itemDataBefore ?? {},
|
|
238
|
+
item2: itemData,
|
|
239
|
+
showUnchanged: !showOnlyChanged,
|
|
240
|
+
css: (0, _react2.css)`background: white; border-radius: 2.5px; padding: 10px 0; margin: 10px 0;`,
|
|
241
|
+
className: _core.Classes.ELEVATION_2
|
|
242
|
+
}) : (0, _react2.jsx)(ItemView, {
|
|
243
|
+
uri: (0, _itemPathUtils.itemRefToItemPath)(itemRef),
|
|
244
|
+
key: JSON.stringify(itemRef)
|
|
245
|
+
});
|
|
246
|
+
return (0, _react2.jsx)("div", {
|
|
247
|
+
css: (0, _react2.css)`position: absolute; inset: 0; display: flex; flex-flow: column;`
|
|
248
|
+
}, view);
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
exports.ProposalDetail = ProposalDetail;
|
|
252
|
+
|
|
253
|
+
const ProposalSummary = function ({
|
|
254
|
+
proposal,
|
|
255
|
+
itemRef,
|
|
256
|
+
itemData,
|
|
257
|
+
itemDataBefore,
|
|
258
|
+
onChange
|
|
259
|
+
}) {
|
|
260
|
+
const {
|
|
261
|
+
itemClasses
|
|
262
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
263
|
+
const {
|
|
264
|
+
classID
|
|
265
|
+
} = itemRef;
|
|
266
|
+
const ListItemView = itemClasses[classID].views.listItemView;
|
|
267
|
+
return (0, _react2.jsx)(ListItemView, {
|
|
268
|
+
itemRef: itemRef,
|
|
269
|
+
itemData: itemData
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
exports.ProposalSummary = ProposalSummary;
|
|
274
|
+
const clarification = {
|
|
275
|
+
hint: (0, _react2.jsx)(_react.default.Fragment, null, "altered to represent the same concept more clearly."),
|
|
276
|
+
summary: ({
|
|
277
|
+
proposal,
|
|
278
|
+
itemData,
|
|
279
|
+
itemRef
|
|
280
|
+
}) => (0, _react2.jsx)(_react.default.Fragment, null, "Clarification")
|
|
281
|
+
};
|
|
282
|
+
const addition = {
|
|
283
|
+
hint: (0, _react2.jsx)(_react.default.Fragment, null, "added to this register."),
|
|
284
|
+
summary: ({
|
|
285
|
+
proposal,
|
|
286
|
+
itemData,
|
|
287
|
+
itemRef
|
|
288
|
+
}) => (0, _react2.jsx)(_react.default.Fragment, null, "Addition")
|
|
289
|
+
};
|
|
290
|
+
const retirement = {
|
|
291
|
+
hint: (0, _react2.jsx)(_react.default.Fragment, null, "marked as no longer current. (Note that this register is append-only, so the item cannot be removed altogether.)"),
|
|
292
|
+
summary: ({
|
|
293
|
+
proposal,
|
|
294
|
+
itemRef,
|
|
295
|
+
itemData
|
|
296
|
+
}) => (0, _react2.jsx)(_react.default.Fragment, null, "Retirement")
|
|
297
|
+
};
|
|
298
|
+
const supersession = {
|
|
299
|
+
hint: (0, _react2.jsx)(_react.default.Fragment, null, "removed from the register with another item recommended for use in its place. A relation between the superseding and superseded item will be created, though the exact semantics of that relation depend on the register."),
|
|
300
|
+
summary: ({
|
|
301
|
+
proposal,
|
|
302
|
+
itemRef,
|
|
303
|
+
itemData
|
|
304
|
+
}) => (0, _react2.jsx)(_react.default.Fragment, null, "Supersession")
|
|
305
|
+
};
|
|
306
|
+
const invalidation = {
|
|
307
|
+
hint: (0, _react2.jsx)(_react.default.Fragment, null, "marked as invalid. The exact semantics of invalidation depend on the register."),
|
|
308
|
+
summary: ({
|
|
309
|
+
proposal,
|
|
310
|
+
itemRef,
|
|
311
|
+
itemData
|
|
312
|
+
}) => (0, _react2.jsx)(_react.default.Fragment, null, "Invalidation")
|
|
313
|
+
};
|
|
314
|
+
const MaximizedStructuredDiff = (0, _styled.default)(_StructuredDiff.default)`
|
|
315
|
+
position: absolute;
|
|
316
|
+
inset: 0;
|
|
317
|
+
`;
|
|
318
|
+
const PROPOSAL_VIEWS = {
|
|
319
|
+
clarification,
|
|
320
|
+
addition,
|
|
321
|
+
retirement,
|
|
322
|
+
supersession,
|
|
323
|
+
invalidation
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
function getProposalIcon(proposal) {
|
|
327
|
+
return proposal.type === 'addition' ? 'add' : proposal.type === 'clarification' ? 'edit' : 'ban-circle';
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
var _default = Proposals;
|
|
331
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Proposals.js","sourceRoot":"","sources":["../../../src/views/change-request/Proposals.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useEffect, useState } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n ControlGroup,\n ButtonGroup,\n Switch,\n Button,\n Classes,\n MenuItem,\n NonIdealState,\n IconName,\n} from '@blueprintjs/core';\nimport { ItemRenderer, Select2 as Select } from '@blueprintjs/select';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport type {\n Addition,\n ChangeProposal,\n Clarification,\n InternalItemReference,\n Retirement,\n Supersession,\n Invalidation,\n Payload,\n} from '../../types';\nimport type { Drafted } from '../../types/cr';\nimport { Protocols, type Protocol } from '../protocolRegistry';\nimport { PROPOSAL_TYPES, AMENDMENT_TYPES } from '../../types/proposal';\nimport { BrowserCtx, type BrowserCtx as BrowserCtxType } from '../BrowserCtx';\nimport { itemPathToItemRef, itemRefToItemPath } from '../itemPathUtils';\nimport StructuredDiff from '../diffing/StructuredDiff';\nimport registerItemDetailView from '../detail/RegisterItem';\n\n\ninterface ChangeProposalItem {\n itemPath: string\n itemRef: InternalItemReference\n proposal: ChangeProposal\n itemData: Payload\n itemDataBefore: Payload | undefined\n}\n\n\nconst Proposals: React.FC<{\n proposals: Drafted['items']\n className?: string\n}> = function ({ proposals, className }) {\n const [ _selectedProposal, selectProposal ] = useState<string | null>(null);\n const [ showDiff, setShowDiff ] = useState(false);\n const [ showOnlyChanged, setShowOnlyChanged ] = useState(true);\n\n const outerBrowserCtx = useContext(BrowserCtx);\n const { jumpTo, subregisters, useRegisterItemData } = outerBrowserCtx;\n const proposalBrowserCtx: BrowserCtxType = {\n ...outerBrowserCtx,\n jumpTo: handleCRJump,\n };\n\n /**\n * When jumping to an item affected by current CR,\n * jump in-CR instead of spawning tab.\n */\n function handleCRJump(uri: `${Protocol}:${string}`): void {\n if (uri.startsWith(Protocols.ITEM_DETAILS)) {\n const itemPath = uri.split(':')[1];\n if (proposals[itemPath]) {\n selectProposal(itemPath);\n } else {\n jumpTo?.(uri);\n }\n }\n }\n\n const firstProposal: string | undefined = Object.keys(proposals)[0];\n\n // Effective selected proposal\n const selectedProposal: string | undefined =\n ((_selectedProposal && proposals[_selectedProposal]) ? _selectedProposal : null)\n ?? firstProposal\n ?? undefined;\n\n // Force select available proposal\n useEffect(() => {\n if (firstProposal && (_selectedProposal === null || !proposals[_selectedProposal])) {\n selectProposal(firstProposal);\n }\n }, [firstProposal, _selectedProposal, JSON.stringify(proposals)]);\n\n const selectedItemRef = selectedProposal\n ? itemPathToItemRef(subregisters !== undefined, selectedProposal)\n : null;\n\n\n // Data for proposed items\n const proposedItemPaths = Object.entries(proposals).map(([itemPath, proposal]) => {\n if (proposal.type === 'clarification' || proposal.type === 'addition') {\n return itemPath;\n } else {\n return undefined;\n }\n }).filter(s => s !== undefined) as string[];\n const proposedItemDataReq = useRegisterItemData({\n itemPaths: proposedItemPaths,\n });\n\n // Data for pre-existing items\n const currentItemDataReq = useRegisterItemData({\n itemPaths: Object.keys(proposals),\n ignoreActiveCR: true,\n });\n\n const getCurrentItemData = (itemPath: string) => currentItemDataReq.value[itemPath]?.data ?? null;\n const getProposedItemData = (itemPath: string) => proposedItemDataReq.value[itemPath]?.data ?? null;\n\n const selectedItemCurrentData = getCurrentItemData(selectedProposal);\n const selectedItemProposedData = getProposedItemData(selectedProposal);\n\n if (\n selectedProposal\n && selectedItemRef\n && proposals[selectedProposal]\n && !currentItemDataReq.isUpdating\n && !proposedItemDataReq.isUpdating\n ) {\n if (selectedItemCurrentData || selectedItemProposedData) {\n const selectedItemSummary = <ProposalSummary\n itemRef={selectedItemRef}\n itemData={(selectedItemProposedData ?? selectedItemCurrentData)!}\n itemDataBefore={selectedItemCurrentData ?? undefined}\n proposal={proposals[selectedProposal]}\n />\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className}>\n <div>\n <ControlGroup>\n <Switch\n checked={showDiff}\n onChange={evt => setShowDiff(evt.currentTarget.checked)}\n label=\"View source\"\n css={css`margin-right: 1em !important`}\n />\n <Switch\n checked={showDiff && showOnlyChanged}\n disabled={!showDiff}\n onChange={evt => setShowOnlyChanged(evt.currentTarget.checked)}\n label=\"Show clarified properties only\"\n />\n </ControlGroup>\n <ButtonGroup>\n <Button\n disabled={!jumpTo || proposals[selectedProposal]?.type === 'addition'}\n icon='locate'\n onClick={() => jumpTo?.(`${Protocols.ITEM_DETAILS}:${selectedProposal}`)}\n title=\"Open selected item in a new tab (not applicable to proposed additions)\">\n Reveal in registry\n </Button>\n {Object.keys(proposals).length > 1\n ? <Select<ChangeProposalItem>\n filterable={false}\n itemsEqual={(i1, i2) => JSON.stringify(i1) === JSON.stringify(i2)}\n activeItem={{\n itemPath: selectedProposal,\n proposal: proposals[selectedProposal],\n itemData: (selectedItemProposedData ?? selectedItemCurrentData)!,\n itemDataBefore: selectedItemCurrentData ?? undefined,\n itemRef: itemPathToItemRef(subregisters !== undefined, selectedProposal),\n }} // TODO: First time selection is broken\n items={\n Object.entries(proposals).map(([itemPath, proposal]) => ({\n itemPath,\n proposal,\n itemData: (getProposedItemData(itemPath) ?? getCurrentItemData(itemPath))! ?? null,\n itemDataBefore: undefined,\n itemRef: itemPathToItemRef(subregisters !== undefined, itemPath),\n })).filter(item => item.itemData !== null)}\n popoverProps={{ minimal: true }}\n fill\n itemRenderer={ChangeProposalItemView}\n onItemSelect={(item) => selectProposal(item.itemPath)}>\n <Button rightIcon=\"chevron-down\" icon={getProposalIcon(proposals[selectedProposal])}>\n {selectedItemSummary}\n </Button>\n </Select>\n : <Button\n fill\n alignText=\"left\"\n icon={getProposalIcon(proposals[selectedProposal])}\n rightIcon=\"chevron-down\">\n {selectedItemSummary}\n </Button>}\n </ButtonGroup>\n </div>\n <div css={css`position: relative; flex: 1;`}>\n <BrowserCtx.Provider value={proposalBrowserCtx}>\n <ProposalDetail\n itemRef={selectedItemRef}\n showDiff={showDiff}\n showOnlyChanged={showOnlyChanged}\n itemData={(selectedItemProposedData ?? selectedItemCurrentData)!}\n itemDataBefore={selectedItemCurrentData ?? undefined}\n proposal={proposals[selectedProposal]}\n />\n </BrowserCtx.Provider>\n </div>\n </div>\n );\n } else {\n return <NonIdealState\n icon='warning-sign'\n className={className}\n title=\"Unable to retrieve proposed item data\"\n description={<div css={css`text-align: left;`}>\n There appears to be a data integrity issue.\n <br />\n This might be caused by a problem in the application, or repository contents having been edited outside of the application.\n <br />\n The data should be recoverable by inspecting version control system commit history.\n </div>}\n />;\n }\n } else {\n return <NonIdealState\n icon='clean'\n className={className}\n title=\"Nothing is proposed here yet.\"\n />;\n }\n};\n\n\nconst ChangeProposalItemView: ItemRenderer<ChangeProposalItem> =\n(item, { handleClick, modifiers, query }) => {\n const proposalConfig = \n item.proposal.type === 'amendment'\n ? PROPOSAL_VIEWS[item.proposal.amendmentType]\n : PROPOSAL_VIEWS[item.proposal.type];\n const ProposalTypeLabel: React.FC<ProposalProps<any>> = proposalConfig.summary;\n return (\n <MenuItem\n active={modifiers.active}\n disabled={modifiers.disabled}\n labelElement={<>\n <ProposalTypeLabel {...item} />\n {\" \"}\n <HelpTooltip content={<>Proposed to be {proposalConfig.hint}</>} />\n </>}\n key={item.itemPath}\n onClick={handleClick}\n icon={getProposalIcon(item.proposal)}\n text={<ProposalSummary {...item} />} />\n );\n}\n\n\ninterface ProposalProps<P extends ChangeProposal> {\n proposal: P\n showDiff?: boolean\n showOnlyChanged?: boolean\n itemRef: InternalItemReference\n itemData: Payload\n itemDataBefore: P extends Clarification ? Payload : undefined\n onChange?: (newProposal: P) => void\n}\nexport const ProposalDetail: React.FC<ProposalProps<ChangeProposal>> =\nfunction ({ proposal, showDiff, showOnlyChanged, itemRef, itemData, itemDataBefore, onChange }) {\n const ItemView = registerItemDetailView.main;\n\n const view: JSX.Element = showDiff\n ? <MaximizedStructuredDiff\n item1={itemDataBefore ?? {}}\n item2={itemData}\n showUnchanged={!showOnlyChanged}\n css={css`background: white; border-radius: 2.5px; padding: 10px 0; margin: 10px 0;`}\n className={Classes.ELEVATION_2}\n />\n : <ItemView uri={itemRefToItemPath(itemRef)} key={JSON.stringify(itemRef)} />\n\n return <div css={css`position: absolute; inset: 0; display: flex; flex-flow: column;`}>\n {view}\n </div>;\n};\nexport const ProposalSummary: React.FC<ProposalProps<ChangeProposal>> =\nfunction ({ proposal, itemRef, itemData, itemDataBefore, onChange }) {\n const { itemClasses } = useContext(BrowserCtx);\n const { classID } = itemRef;\n const ListItemView = itemClasses[classID].views.listItemView;\n\n return <ListItemView\n itemRef={itemRef}\n itemData={itemData}\n />;\n};\n\n\ninterface ProposalViewConfig<P extends ChangeProposal> {\n summary: React.FC<ProposalProps<P>>\n hint: JSX.Element | string\n}\n\n\nconst clarification: ProposalViewConfig<Clarification> = {\n hint: <>\n altered to represent the same concept more clearly.\n </>,\n summary: ({ proposal, itemData, itemRef }) => <>Clarification</>,\n};\n\n\nconst addition: ProposalViewConfig<Addition> = {\n hint: <>added to this register.</>,\n summary: ({ proposal, itemData, itemRef }) => <>Addition</>,\n};\n\n\nconst retirement: ProposalViewConfig<Retirement> = {\n hint: <>\n marked as no longer current.\n (Note that this register is append-only, so the item cannot be removed altogether.)\n </>,\n summary: ({ proposal, itemRef, itemData }) => <>Retirement</>,\n};\n\n\nconst supersession: ProposalViewConfig<Supersession> = {\n hint: <>\n removed from the register with another item recommended for use in its place.\n A relation between the superseding and superseded item will be created,\n though the exact semantics of that relation depend on the register.\n </>,\n summary: ({ proposal, itemRef, itemData }) => <>Supersession</>,\n};\n\n\nconst invalidation: ProposalViewConfig<Invalidation> = {\n hint: <>\n marked as invalid. The exact semantics of invalidation depend on the register.\n </>,\n summary: ({ proposal, itemRef, itemData }) => <>Invalidation</>,\n}\n\n\nconst MaximizedStructuredDiff = styled(StructuredDiff)`\n position: absolute;\n inset: 0;\n`;\n\n\ntype ProposalOrAmendmentType =\n | Exclude<typeof PROPOSAL_TYPES[number], 'amendment'>\n | typeof AMENDMENT_TYPES[number];\n\n\nconst PROPOSAL_VIEWS: { [type in ProposalOrAmendmentType]: ProposalViewConfig<any> } = {\n clarification,\n addition,\n retirement,\n supersession,\n invalidation,\n};\n\n\nfunction getProposalIcon(proposal: ChangeProposal): IconName {\n return proposal.type === 'addition'\n ? 'add'\n : proposal.type === 'clarification'\n ? 'edit'\n : 'ban-circle'\n}\n\n\nexport default Proposals;\n"]}
|