@riboseinc/paneron-registry-kit 2.0.0-dev8 → 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.
Files changed (183) hide show
  1. package/common.d.ts +1 -1
  2. package/common.js +1 -1
  3. package/common.js.map +1 -1
  4. package/index.d.ts +3 -3
  5. package/index.js +3 -3
  6. package/index.js.map +1 -1
  7. package/package.json +26 -18
  8. package/types/cr.d.ts +216 -0
  9. package/types/cr.js +175 -0
  10. package/types/cr.js.map +1 -0
  11. package/types/index.d.ts +1 -0
  12. package/types/index.js +19 -0
  13. package/types/index.js.map +1 -1
  14. package/types/item.d.ts +13 -3
  15. package/types/item.js +11 -1
  16. package/types/item.js.map +1 -1
  17. package/types/proposal.d.ts +31 -14
  18. package/types/proposal.js +1 -1
  19. package/types/proposal.js.map +1 -1
  20. package/types/register.d.ts +6 -5
  21. package/types/register.js +19 -1
  22. package/types/register.js.map +1 -1
  23. package/types/registry.d.ts +8 -3
  24. package/types/registry.js +8 -1
  25. package/types/registry.js.map +1 -1
  26. package/types/stakeholder.d.ts +40 -16
  27. package/types/stakeholder.js +47 -3
  28. package/types/stakeholder.js.map +1 -1
  29. package/types/views.d.ts +98 -24
  30. package/types/views.js.map +1 -1
  31. package/views/AnnotatedChange.d.ts +7 -0
  32. package/views/AnnotatedChange.js +91 -0
  33. package/views/AnnotatedChange.js.map +1 -0
  34. package/views/BrowserCtx.d.ts +66 -2
  35. package/views/BrowserCtx.js +13 -2
  36. package/views/BrowserCtx.js.map +1 -1
  37. package/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +17 -0
  38. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +202 -0
  39. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -0
  40. package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +6 -0
  41. package/views/FilterCriteria/criteriaGroupToQueryExpression.js +50 -0
  42. package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -0
  43. package/views/FilterCriteria/criteriaGroupToSummary.d.ts +5 -0
  44. package/views/FilterCriteria/criteriaGroupToSummary.js +62 -0
  45. package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -0
  46. package/views/FilterCriteria/criteriaToNodes.d.ts +24 -0
  47. package/views/FilterCriteria/criteriaToNodes.js +159 -0
  48. package/views/FilterCriteria/criteriaToNodes.js.map +1 -0
  49. package/views/FilterCriteria/index.d.ts +23 -0
  50. package/views/FilterCriteria/index.js +130 -0
  51. package/views/FilterCriteria/index.js.map +1 -0
  52. package/views/FilterCriteria/models.d.ts +68 -0
  53. package/views/FilterCriteria/models.js +34 -0
  54. package/views/FilterCriteria/models.js.map +1 -0
  55. package/views/FilterCriteria/mutateGroup.d.ts +17 -0
  56. package/views/FilterCriteria/mutateGroup.js +59 -0
  57. package/views/FilterCriteria/mutateGroup.js.map +1 -0
  58. package/views/GenericRelatedItemView.d.ts +1 -1
  59. package/views/GenericRelatedItemView.js +143 -101
  60. package/views/GenericRelatedItemView.js.map +1 -1
  61. package/views/RegisterStakeholder.d.ts +9 -0
  62. package/views/RegisterStakeholder.js +40 -0
  63. package/views/RegisterStakeholder.js.map +1 -0
  64. package/views/RegisterVersion.d.ts +9 -0
  65. package/views/RegisterVersion.js +41 -0
  66. package/views/RegisterVersion.js.map +1 -0
  67. package/views/SearchQuery.d.ts +13 -0
  68. package/views/SearchQuery.js +137 -0
  69. package/views/SearchQuery.js.map +1 -0
  70. package/views/change-request/ChangeRequestContext.d.ts +20 -0
  71. package/views/change-request/ChangeRequestContext.js +56 -0
  72. package/views/change-request/ChangeRequestContext.js.map +1 -0
  73. package/views/change-request/Proposals.d.ts +21 -0
  74. package/views/change-request/Proposals.js +331 -0
  75. package/views/change-request/Proposals.js.map +1 -0
  76. package/views/change-request/objectChangeset.d.ts +31 -0
  77. package/views/change-request/objectChangeset.js +229 -0
  78. package/views/change-request/objectChangeset.js.map +1 -0
  79. package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
  80. package/views/detail/ChangeRequest/Proposal.js +142 -0
  81. package/views/detail/ChangeRequest/Proposal.js.map +1 -0
  82. package/views/detail/ChangeRequest/index.d.ts +13 -0
  83. package/views/detail/ChangeRequest/index.js +207 -0
  84. package/views/detail/ChangeRequest/index.js.map +1 -0
  85. package/views/detail/ChangeRequest/transitions.d.ts +28 -0
  86. package/views/detail/ChangeRequest/transitions.js +530 -0
  87. package/views/detail/ChangeRequest/transitions.js.map +1 -0
  88. package/views/detail/CustomView/index.d.ts +13 -0
  89. package/views/detail/CustomView/index.js +68 -0
  90. package/views/detail/CustomView/index.js.map +1 -0
  91. package/views/detail/RegisterHome/index.d.ts +5 -0
  92. package/views/detail/RegisterHome/index.js +128 -0
  93. package/views/detail/RegisterHome/index.js.map +1 -0
  94. package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
  95. package/views/detail/RegisterItem/RelatedItems.js +61 -0
  96. package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
  97. package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
  98. package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
  99. package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
  100. package/views/detail/RegisterItem/index.d.ts +13 -0
  101. package/views/detail/RegisterItem/index.js +356 -0
  102. package/views/detail/RegisterItem/index.js.map +1 -0
  103. package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
  104. package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
  105. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
  106. package/views/detail/RegisterMeta/index.d.ts +10 -0
  107. package/views/detail/RegisterMeta/index.js +111 -0
  108. package/views/detail/RegisterMeta/index.js.map +1 -0
  109. package/views/detail/index.d.ts +1 -0
  110. package/views/detail/index.js +24 -0
  111. package/views/detail/index.js.map +1 -0
  112. package/views/diffing/InlineDiff.d.ts +12 -0
  113. package/views/diffing/InlineDiff.js +58 -0
  114. package/views/diffing/InlineDiff.js.map +1 -0
  115. package/views/diffing/StructuredDiff.d.ts +11 -0
  116. package/views/diffing/StructuredDiff.js +65 -0
  117. package/views/diffing/StructuredDiff.js.map +1 -0
  118. package/views/hooks/useCustomView.d.ts +3 -0
  119. package/views/hooks/useCustomView.js +24 -0
  120. package/views/hooks/useCustomView.js.map +1 -0
  121. package/views/hooks/useItemClassConfig.d.ts +3 -0
  122. package/views/hooks/useItemClassConfig.js +24 -0
  123. package/views/hooks/useItemClassConfig.js.map +1 -0
  124. package/views/hooks/useItemRef.d.ts +3 -0
  125. package/views/hooks/useItemRef.js +39 -0
  126. package/views/hooks/useItemRef.js.map +1 -0
  127. package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
  128. package/views/hooks/useSingleRegisterItemData.js +32 -0
  129. package/views/hooks/useSingleRegisterItemData.js.map +1 -0
  130. package/views/index.d.ts +2 -2
  131. package/views/index.js +161 -130
  132. package/views/index.js.map +1 -1
  133. package/views/itemPathUtils.d.ts +45 -2
  134. package/views/itemPathUtils.js +101 -14
  135. package/views/itemPathUtils.js.map +1 -1
  136. package/views/itemQueryUtils.d.ts +11 -0
  137. package/views/itemQueryUtils.js +48 -0
  138. package/views/itemQueryUtils.js.map +1 -0
  139. package/views/protocolRegistry.d.ts +12 -0
  140. package/views/protocolRegistry.js +42 -0
  141. package/views/protocolRegistry.js.map +1 -0
  142. package/views/sidebar/Browse/index.d.ts +11 -0
  143. package/views/sidebar/Browse/index.js +453 -0
  144. package/views/sidebar/Browse/index.js.map +1 -0
  145. package/views/sidebar/Export/index.d.ts +5 -0
  146. package/views/sidebar/Export/index.js +94 -0
  147. package/views/sidebar/Export/index.js.map +1 -0
  148. package/views/sidebar/ListItem.d.ts +10 -0
  149. package/views/sidebar/ListItem.js +43 -0
  150. package/views/sidebar/ListItem.js.map +1 -0
  151. package/views/sidebar/Registration/index.d.ts +5 -0
  152. package/views/sidebar/Registration/index.js +163 -0
  153. package/views/sidebar/Registration/index.js.map +1 -0
  154. package/views/sidebar/Search/index.d.ts +18 -0
  155. package/views/sidebar/Search/index.js +177 -0
  156. package/views/sidebar/Search/index.js.map +1 -0
  157. package/views/sidebar/index.d.ts +6 -0
  158. package/views/sidebar/index.js +104 -0
  159. package/views/sidebar/index.js.map +1 -0
  160. package/views/util.d.ts +29 -5
  161. package/views/util.js +92 -6
  162. package/views/util.js.map +1 -1
  163. package/views/ChangeRequest.d.ts +0 -12
  164. package/views/ChangeRequest.js +0 -689
  165. package/views/ChangeRequest.js.map +0 -1
  166. package/views/FilterCriteria.d.ts +0 -27
  167. package/views/FilterCriteria.js +0 -410
  168. package/views/FilterCriteria.js.map +0 -1
  169. package/views/ItemBrowser.d.ts +0 -12
  170. package/views/ItemBrowser.js +0 -255
  171. package/views/ItemBrowser.js.map +0 -1
  172. package/views/ItemDetails.d.ts +0 -14
  173. package/views/ItemDetails.js +0 -128
  174. package/views/ItemDetails.js.map +0 -1
  175. package/views/MainView.d.ts +0 -8
  176. package/views/MainView.js +0 -34
  177. package/views/MainView.js.map +0 -1
  178. package/views/RegisterInformation.d.ts +0 -7
  179. package/views/RegisterInformation.js +0 -264
  180. package/views/RegisterInformation.js.map +0 -1
  181. package/views/RegisterItemGrid.d.ts +0 -25
  182. package/views/RegisterItemGrid.js +0 -248
  183. 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":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,8BAA8B,MAAM,iDAAiD,CAAC;AAC7F,+EAA+E;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,MAAM,WAAW,GASZ,UAAU,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,SAAS,GACV;IACG,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE7D,MAAM,CAAE,eAAe,EAAE,qBAAqB,CAAE,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAE1D,SAAS,mBAAmB;QAC1B,IAAI,iBAAiB,EAAE;YACrB,OAAO;gBACL,GAAG,EAAE,eAAe;gBACpB,KAAK,EAAE,aAAa,CAAC,OAAO,CAC1B,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAChC,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;aACF,CAAA;SACF;aAAM;YACL,OAAO;gBACL,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAC7B,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;aACF,CAAA;SACF;IACH,CAAC;IAED,OAAO,CACL,IAAC,YAAY,IAAC,IAAI,QAAC,QAAQ,QAAC,SAAS,EAAE,SAAS;QAC9C,IAAC,UAAU,IACT,IAAI,QACJ,KAAK,QACL,QAAQ,EAAE,CAAC,yBAAyB,IAAI,gBAAgB,EACxD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAChD,QAAQ,EAAC,QAAQ,EACjB,WAAW,EAAC,cAAc,EAC1B,KAAK,EAAE,CAAC,gBAAgB;gBACtB,CAAC,CAAC,wEAAwE;gBAC1E,CAAC,CAAC,wCAAwC,EAC5C,GAAG,EAAE,GAAG,CAAA,iBAAiB,iBAAiB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,EAAE,EAC9G,YAAY,EAAE,IAAC,MAAM,IACnB,QAAQ,EAAE,CAAC,yBAAyB,IAAI,iBAAiB,KAAK,EAAE,IAAI,gBAAgB,EACpF,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,EAC9C,KAAK,QACL,OAAO,QACP,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,oBAAoB,GAAG,EAC/B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAI;QAC3E,IAAC,WAAW,IAAC,IAAI;YACf,IAAC,MAAM,IACL,IAAI,QACJ,KAAK,QACL,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,CAAC,gBAAgB;oBACxB,CAAC,CAAC,CAAC,GAAG,EAAE;wBACJ,gBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;wBACzE,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC,CAAC;oBACJ,CAAC,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACxC,MAAM,EAAE,eAAe,IAAI,gBAAgB,EAC3C,QAAQ,EAAE,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,EAChD,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACzC,CAAC,CAAC,IAAC,GAAG,IAAC,MAAM,EAAC,SAAS,EAAC,KAAK,eAAS;oBACtC,CAAC,CAAC,IAAC,GAAG,IAAC,KAAK,gBAAU,eAEjB,CACG;QACb,gBAAgB,IAAI,eAAe;YAClC,CAAC,CAAC;gBACE,IAAC,YAAY,IACX,GAAG,EAAC,MAAM,EACV,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,QAAQ,EAC3B,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,GAAG,CAAA,qCAAqC,GAAI;gBACnD,aACI,GAAG,EAAC,OAAO,EACX,GAAG,EAAE,GAAG,CAAA;;;6BAGG,MAAM,CAAC,KAAK;;;mBAGtB;;oBACS,kBAAO,8BAA8B,CAAC,YAAY,CAAC,CAAQ,CACnE,CACL;YACL,CAAC,CAAC,IAAI,CACK,CAChB,CAAC;AACJ,CAAC,CAAC;AAEJ,eAAe,WAAW,CAAC","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"]}