@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.
Files changed (179) 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 -19
  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 +13 -1
  38. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +178 -85
  39. package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -1
  40. package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +4 -0
  41. package/views/FilterCriteria/criteriaGroupToQueryExpression.js +10 -3
  42. package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
  43. package/views/FilterCriteria/criteriaGroupToSummary.js +7 -7
  44. package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -1
  45. package/views/FilterCriteria/criteriaToNodes.d.ts +9 -0
  46. package/views/FilterCriteria/criteriaToNodes.js +42 -28
  47. package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
  48. package/views/FilterCriteria/index.d.ts +1 -0
  49. package/views/FilterCriteria/index.js +29 -21
  50. package/views/FilterCriteria/index.js.map +1 -1
  51. package/views/FilterCriteria/models.d.ts +29 -2
  52. package/views/FilterCriteria/models.js +17 -10
  53. package/views/FilterCriteria/models.js.map +1 -1
  54. package/views/FilterCriteria/mutateGroup.d.ts +4 -1
  55. package/views/FilterCriteria/mutateGroup.js +4 -3
  56. package/views/FilterCriteria/mutateGroup.js.map +1 -1
  57. package/views/GenericRelatedItemView.d.ts +1 -1
  58. package/views/GenericRelatedItemView.js +142 -102
  59. package/views/GenericRelatedItemView.js.map +1 -1
  60. package/views/RegisterStakeholder.d.ts +9 -0
  61. package/views/RegisterStakeholder.js +40 -0
  62. package/views/RegisterStakeholder.js.map +1 -0
  63. package/views/RegisterVersion.d.ts +9 -0
  64. package/views/RegisterVersion.js +41 -0
  65. package/views/RegisterVersion.js.map +1 -0
  66. package/views/SearchQuery.d.ts +13 -0
  67. package/views/SearchQuery.js +137 -0
  68. package/views/SearchQuery.js.map +1 -0
  69. package/views/change-request/ChangeRequestContext.d.ts +20 -0
  70. package/views/change-request/ChangeRequestContext.js +56 -0
  71. package/views/change-request/ChangeRequestContext.js.map +1 -0
  72. package/views/change-request/Proposals.d.ts +21 -0
  73. package/views/change-request/Proposals.js +331 -0
  74. package/views/change-request/Proposals.js.map +1 -0
  75. package/views/change-request/objectChangeset.d.ts +31 -0
  76. package/views/change-request/objectChangeset.js +229 -0
  77. package/views/change-request/objectChangeset.js.map +1 -0
  78. package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
  79. package/views/detail/ChangeRequest/Proposal.js +142 -0
  80. package/views/detail/ChangeRequest/Proposal.js.map +1 -0
  81. package/views/detail/ChangeRequest/index.d.ts +13 -0
  82. package/views/detail/ChangeRequest/index.js +207 -0
  83. package/views/detail/ChangeRequest/index.js.map +1 -0
  84. package/views/detail/ChangeRequest/transitions.d.ts +28 -0
  85. package/views/detail/ChangeRequest/transitions.js +530 -0
  86. package/views/detail/ChangeRequest/transitions.js.map +1 -0
  87. package/views/detail/CustomView/index.d.ts +13 -0
  88. package/views/detail/CustomView/index.js +68 -0
  89. package/views/detail/CustomView/index.js.map +1 -0
  90. package/views/detail/RegisterHome/index.d.ts +5 -0
  91. package/views/detail/RegisterHome/index.js +128 -0
  92. package/views/detail/RegisterHome/index.js.map +1 -0
  93. package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
  94. package/views/detail/RegisterItem/RelatedItems.js +61 -0
  95. package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
  96. package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
  97. package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
  98. package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
  99. package/views/detail/RegisterItem/index.d.ts +13 -0
  100. package/views/detail/RegisterItem/index.js +356 -0
  101. package/views/detail/RegisterItem/index.js.map +1 -0
  102. package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
  103. package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
  104. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
  105. package/views/detail/RegisterMeta/index.d.ts +10 -0
  106. package/views/detail/RegisterMeta/index.js +111 -0
  107. package/views/detail/RegisterMeta/index.js.map +1 -0
  108. package/views/detail/index.d.ts +1 -0
  109. package/views/detail/index.js +24 -0
  110. package/views/detail/index.js.map +1 -0
  111. package/views/diffing/InlineDiff.d.ts +12 -0
  112. package/views/diffing/InlineDiff.js +58 -0
  113. package/views/diffing/InlineDiff.js.map +1 -0
  114. package/views/diffing/StructuredDiff.d.ts +11 -0
  115. package/views/diffing/StructuredDiff.js +65 -0
  116. package/views/diffing/StructuredDiff.js.map +1 -0
  117. package/views/hooks/useCustomView.d.ts +3 -0
  118. package/views/hooks/useCustomView.js +24 -0
  119. package/views/hooks/useCustomView.js.map +1 -0
  120. package/views/hooks/useItemClassConfig.d.ts +3 -0
  121. package/views/hooks/useItemClassConfig.js +24 -0
  122. package/views/hooks/useItemClassConfig.js.map +1 -0
  123. package/views/hooks/useItemRef.d.ts +3 -0
  124. package/views/hooks/useItemRef.js +39 -0
  125. package/views/hooks/useItemRef.js.map +1 -0
  126. package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
  127. package/views/hooks/useSingleRegisterItemData.js +32 -0
  128. package/views/hooks/useSingleRegisterItemData.js.map +1 -0
  129. package/views/index.d.ts +2 -2
  130. package/views/index.js +161 -130
  131. package/views/index.js.map +1 -1
  132. package/views/itemPathUtils.d.ts +45 -2
  133. package/views/itemPathUtils.js +101 -14
  134. package/views/itemPathUtils.js.map +1 -1
  135. package/views/itemQueryUtils.d.ts +11 -0
  136. package/views/itemQueryUtils.js +48 -0
  137. package/views/itemQueryUtils.js.map +1 -0
  138. package/views/protocolRegistry.d.ts +12 -0
  139. package/views/protocolRegistry.js +42 -0
  140. package/views/protocolRegistry.js.map +1 -0
  141. package/views/sidebar/Browse/index.d.ts +11 -0
  142. package/views/sidebar/Browse/index.js +453 -0
  143. package/views/sidebar/Browse/index.js.map +1 -0
  144. package/views/sidebar/Export/index.d.ts +5 -0
  145. package/views/sidebar/Export/index.js +94 -0
  146. package/views/sidebar/Export/index.js.map +1 -0
  147. package/views/sidebar/ListItem.d.ts +10 -0
  148. package/views/sidebar/ListItem.js +43 -0
  149. package/views/sidebar/ListItem.js.map +1 -0
  150. package/views/sidebar/Registration/index.d.ts +5 -0
  151. package/views/sidebar/Registration/index.js +163 -0
  152. package/views/sidebar/Registration/index.js.map +1 -0
  153. package/views/sidebar/Search/index.d.ts +18 -0
  154. package/views/sidebar/Search/index.js +177 -0
  155. package/views/sidebar/Search/index.js.map +1 -0
  156. package/views/sidebar/index.d.ts +6 -0
  157. package/views/sidebar/index.js +104 -0
  158. package/views/sidebar/index.js.map +1 -0
  159. package/views/util.d.ts +29 -5
  160. package/views/util.js +92 -6
  161. package/views/util.js.map +1 -1
  162. package/views/ChangeRequest.d.ts +0 -12
  163. package/views/ChangeRequest.js +0 -689
  164. package/views/ChangeRequest.js.map +0 -1
  165. package/views/ItemBrowser.d.ts +0 -12
  166. package/views/ItemBrowser.js +0 -258
  167. package/views/ItemBrowser.js.map +0 -1
  168. package/views/ItemDetails.d.ts +0 -14
  169. package/views/ItemDetails.js +0 -128
  170. package/views/ItemDetails.js.map +0 -1
  171. package/views/MainView.d.ts +0 -8
  172. package/views/MainView.js +0 -34
  173. package/views/MainView.js.map +0 -1
  174. package/views/RegisterInformation.d.ts +0 -7
  175. package/views/RegisterInformation.js +0 -264
  176. package/views/RegisterInformation.js.map +0 -1
  177. package/views/RegisterItemGrid.d.ts +0 -25
  178. package/views/RegisterItemGrid.js +0 -276
  179. package/views/RegisterItemGrid.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _jsondiffpatch = require("jsondiffpatch");
9
+
10
+ var _react = require("@emotion/react");
11
+
12
+ var _react2 = _interopRequireWildcard(require("react"));
13
+
14
+ var _core = require("@blueprintjs/core");
15
+
16
+ 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); }
17
+
18
+ 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; }
19
+
20
+ /** @jsx jsx */
21
+
22
+ /** @jsxFrag React.Fragment */
23
+ const StructuredDiff = _react2.default.memo(({
24
+ item1,
25
+ item2,
26
+ showUnchanged,
27
+ className
28
+ }) => {
29
+ const diffContainerRef = (0, _react2.useRef)(null); // Is ignored if managed via prop.
30
+
31
+ const [_showUnchanged, setShowUnchanged] = (0, _react2.useState)(false);
32
+ const item1json = JSON.stringify(item1);
33
+ const item2json = JSON.stringify(item2);
34
+ (0, _react2.useEffect)(() => {
35
+ if (diffContainerRef.current) {
36
+ const delta = (0, _jsondiffpatch.diff)(item1, item2);
37
+
38
+ _jsondiffpatch.formatters.html.showUnchanged(showUnchanged ?? _showUnchanged);
39
+
40
+ if (delta) {
41
+ diffContainerRef.current.innerHTML = _jsondiffpatch.formatters.html.format(delta, item1);
42
+ } else {
43
+ diffContainerRef.current.innerHTML = _jsondiffpatch.formatters.html.format({}, item1);
44
+ }
45
+ }
46
+ }, [item1json, item2json, diffContainerRef.current, showUnchanged, _showUnchanged]); // TODO: Make VisualDiff work. Currently, it doesn’t apparently when item detail views use hooks.
47
+ // Which is often. Either make item views hook-free
48
+ // (which means primarily eliminating useRegisterItemData() by inferring and pre-fetching
49
+ // related item data), or work out another way to diff two React elements.
50
+
51
+ return (0, _react.jsx)("div", {
52
+ css: (0, _react.css)`display: flex; flex-flow: column nowrap;`,
53
+ className: className
54
+ }, showUnchanged === undefined ? (0, _react.jsx)(_core.Switch, {
55
+ checked: _showUnchanged,
56
+ onChange: evt => setShowUnchanged(evt.currentTarget.checked),
57
+ label: "Show unchanged properties"
58
+ }) : null, (0, _react.jsx)("div", {
59
+ ref: diffContainerRef,
60
+ css: (0, _react.css)`flex: 1; overflow: auto;`
61
+ }));
62
+ }, (prevProps, nextProps) => JSON.stringify(prevProps.item2) === JSON.stringify(nextProps.item2) && JSON.stringify(prevProps.item1) === JSON.stringify(nextProps.item1) && prevProps.showUnchanged === nextProps.showUnchanged);
63
+
64
+ var _default = StructuredDiff;
65
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StructuredDiff.js","sourceRoot":"","sources":["../../../src/views/diffing/StructuredDiff.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,MAAM,cAAc,GAKf,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEtD,kCAAkC;IAClC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,CAAC,OAAO,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC;YAC/D,IAAI,KAAK,EAAE;gBACT,gBAAgB,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC3E;iBAAM;gBACL,gBAAgB,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aACxE;SACF;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAEpF,iGAAiG;IACjG,mDAAmD;IACnD,yFAAyF;IACzF,0EAA0E;IAE1E,OAAO,aAAK,GAAG,EAAE,GAAG,CAAA,0CAA0C,EAAE,SAAS,EAAE,SAAS;QACjF,aAAa,KAAK,SAAS;YAC1B,CAAC,CAAC,IAAC,MAAM,IACL,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,EAC5D,KAAK,EAAC,2BAA2B,GACjC;YACJ,CAAC,CAAC,IAAI;QACR,aAAK,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAA,0BAA0B,GAAQ,CAClE,CAAA;AACR,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;IACnE,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,CACpD,CAAC;AAGF,eAAe,cAAc,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { diff, formatters } from 'jsondiffpatch';\nimport { jsx, css } from '@emotion/react';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Switch } from '@blueprintjs/core';\nimport { RegisterItem } from '../../types/item';\n\n\nconst StructuredDiff: React.FC<{\n item1: RegisterItem<any>[\"data\"]\n item2: RegisterItem<any>[\"data\"]\n showUnchanged?: boolean\n className?: string\n}> = React.memo(({ item1, item2, showUnchanged, className }) => {\n const diffContainerRef = useRef<HTMLDivElement>(null);\n\n // Is ignored if managed via prop.\n const [_showUnchanged, setShowUnchanged] = useState(false);\n\n const item1json = JSON.stringify(item1);\n const item2json = JSON.stringify(item2);\n\n useEffect(() => {\n if (diffContainerRef.current) {\n const delta = diff(item1, item2);\n formatters.html.showUnchanged(showUnchanged ?? _showUnchanged);\n if (delta) {\n diffContainerRef.current.innerHTML = formatters.html.format(delta, item1);\n } else {\n diffContainerRef.current.innerHTML = formatters.html.format({}, item1);\n }\n }\n }, [item1json, item2json, diffContainerRef.current, showUnchanged, _showUnchanged]);\n\n // TODO: Make VisualDiff work. Currently, it doesn’t apparently when item detail views use hooks.\n // Which is often. Either make item views hook-free\n // (which means primarily eliminating useRegisterItemData() by inferring and pre-fetching\n // related item data), or work out another way to diff two React elements.\n\n return <div css={css`display: flex; flex-flow: column nowrap;`} className={className}>\n {showUnchanged === undefined\n ? <Switch\n checked={_showUnchanged}\n onChange={evt => setShowUnchanged(evt.currentTarget.checked)}\n label=\"Show unchanged properties\"\n />\n : null}\n <div ref={diffContainerRef} css={css`flex: 1; overflow: auto;`}></div>\n </div>\n}, (prevProps, nextProps) =>\n JSON.stringify(prevProps.item2) === JSON.stringify(nextProps.item2) &&\n JSON.stringify(prevProps.item1) === JSON.stringify(nextProps.item1) &&\n prevProps.showUnchanged === nextProps.showUnchanged\n);\n\n\nexport default StructuredDiff;\n\n"]}
@@ -0,0 +1,3 @@
1
+ import { ValueHook } from '@riboseinc/paneron-extension-kit/types';
2
+ import { CustomViewConfiguration } from '../../types';
3
+ export default function useCustomView(viewID: string): ValueHook<CustomViewConfiguration | undefined>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useCustomView;
7
+
8
+ var _react = require("react");
9
+
10
+ var _BrowserCtx = require("../BrowserCtx");
11
+
12
+ function useCustomView(viewID) {
13
+ const {
14
+ customViews
15
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
16
+ const view = customViews.find(v => v.id === viewID);
17
+ return {
18
+ value: view,
19
+ errors: [],
20
+ refresh: () => void 0,
21
+ isUpdating: false,
22
+ _reqCounter: 0
23
+ };
24
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomView.js","sourceRoot":"","sources":["../../../src/views/hooks/useCustomView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAc;IAElD,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACpD,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport { CustomViewConfiguration } from '../../types';\n\n\nexport default function useCustomView(viewID: string):\nValueHook<CustomViewConfiguration | undefined> {\n const { customViews } = useContext(BrowserCtx);\n const view = customViews.find(v => v.id === viewID);\n return {\n value: view,\n errors: [],\n refresh: () => void 0,\n isUpdating: false,\n _reqCounter: 0,\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { ValueHook } from '@riboseinc/paneron-extension-kit/types';
2
+ import { ItemClassConfiguration } from '../../types';
3
+ export default function useItemClassConfig(clsID: string): ValueHook<ItemClassConfiguration<any> | undefined>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useItemClassConfig;
7
+
8
+ var _react = require("react");
9
+
10
+ var _BrowserCtx = require("../BrowserCtx");
11
+
12
+ function useItemClassConfig(clsID) {
13
+ const {
14
+ itemClasses
15
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
16
+ const clsConfig = itemClasses[clsID];
17
+ return {
18
+ value: clsConfig,
19
+ errors: [],
20
+ refresh: () => void 0,
21
+ isUpdating: false,
22
+ _reqCounter: 0
23
+ };
24
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useItemClassConfig.js","sourceRoot":"","sources":["../../../src/views/hooks/useItemClassConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAa;IAEtD,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport { ItemClassConfiguration } from '../../types';\n\n\nexport default function useItemClassConfig(clsID: string):\nValueHook<ItemClassConfiguration<any> | undefined> {\n const { itemClasses } = useContext(BrowserCtx);\n const clsConfig = itemClasses[clsID];\n return {\n value: clsConfig,\n errors: [],\n refresh: () => void 0,\n isUpdating: false,\n _reqCounter: 0,\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { ValueHook } from '@riboseinc/paneron-extension-kit/types';
2
+ import { InternalItemReference } from '../../types';
3
+ export default function useItemRef(itemPath: string): ValueHook<InternalItemReference | undefined>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useItemRef;
7
+
8
+ var _react = require("react");
9
+
10
+ var _BrowserCtx = require("../BrowserCtx");
11
+
12
+ var _itemPathUtils = require("../itemPathUtils");
13
+
14
+ function useItemRef(itemPath) {
15
+ const {
16
+ subregisters
17
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
18
+
19
+ try {
20
+ const value = (0, _itemPathUtils.itemPathToItemRef)(subregisters !== undefined, itemPath);
21
+ return {
22
+ value,
23
+ isUpdating: false,
24
+ refresh: () => void 0,
25
+ _reqCounter: 0,
26
+ errors: []
27
+ };
28
+ } catch (e) {
29
+ var _e$toString;
30
+
31
+ return {
32
+ value: undefined,
33
+ isUpdating: false,
34
+ refresh: () => void 0,
35
+ _reqCounter: 0,
36
+ errors: [`${((_e$toString = e.toString) === null || _e$toString === void 0 ? void 0 : _e$toString.call(e)) ?? e}`]
37
+ };
38
+ }
39
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useItemRef.js","sourceRoot":"","sources":["../../../src/views/hooks/useItemRef.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,QAAgB;IAEjD,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI;QACF,MAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,KAAK,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtE,OAAO;YACL,KAAK;YACL,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,EAAE;SACX,CAAC;KACH;IAAC,OAAO,CAAM,EAAE;QACf,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;SACnC,CAAC;KACH;AACH,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport { itemPathToItemRef } from '../itemPathUtils';\nimport { InternalItemReference } from '../../types';\n\n\nexport default function useItemRef(itemPath: string):\nValueHook<InternalItemReference | undefined> {\n const { subregisters } = useContext(BrowserCtx);\n try {\n const value = itemPathToItemRef(subregisters !== undefined, itemPath);\n return {\n value,\n isUpdating: false,\n refresh: () => void 0,\n _reqCounter: 0,\n errors: [],\n };\n } catch (e: any) {\n return {\n value: undefined,\n isUpdating: false,\n refresh: () => void 0,\n _reqCounter: 0,\n errors: [`${e.toString?.() ?? e}`],\n };\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { ValueHook } from '@riboseinc/paneron-extension-kit/types';
2
+ import { InternalItemReference, RegisterItem } from '../../types';
3
+ export default function useSingleRegisterItemData(ref: InternalItemReference | undefined): ValueHook<RegisterItem<any> | null>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useSingleRegisterItemData;
7
+
8
+ var _react = require("react");
9
+
10
+ var _BrowserCtx = require("../BrowserCtx");
11
+
12
+ var _itemPathUtils = require("../itemPathUtils");
13
+
14
+ function useSingleRegisterItemData(ref) {
15
+ const {
16
+ useRegisterItemData
17
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
18
+ const itemPath = ref ? (0, _itemPathUtils.itemRefToItemPath)(ref) : 'NONEXISTENT_ITEM';
19
+ const itemResponse = useRegisterItemData({
20
+ itemPaths: [itemPath]
21
+ });
22
+ const itemResponseValue = itemResponse.value[itemPath];
23
+ const itemData = (itemResponseValue === null || itemResponseValue === void 0 ? void 0 : itemResponseValue.data) ?? null;
24
+ const errMsg = "Item data cannot be loaded";
25
+ return {
26
+ value: itemData,
27
+ errors: itemData === null ? [errMsg, ...itemResponse.errors] : itemResponse.errors,
28
+ isUpdating: itemResponse.isUpdating,
29
+ _reqCounter: itemResponse._reqCounter,
30
+ refresh: itemResponse.refresh
31
+ };
32
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSingleRegisterItemData.js","sourceRoot":"","sources":["../../../src/views/hooks/useSingleRegisterItemData.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAChD,GAAsC;IAErC,MAAM,EAAE,mBAAmB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACnE,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpE,MAAM,iBAAiB,GACrB,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,IAAI,IAAI,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,4BAA4B,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,QAAQ,KAAK,IAAI;YACvB,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,YAAY,CAAC,MAAM;QACvB,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,OAAO,EAAE,YAAY,CAAC,OAAO;KAC9B,CAAC;AACJ,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport { itemRefToItemPath } from '../itemPathUtils';\nimport { InternalItemReference, RegisterItem } from '../../types';\n\n\nexport default function useSingleRegisterItemData\n(ref: InternalItemReference | undefined):\nValueHook<RegisterItem<any> | null> {\n const { useRegisterItemData } = useContext(BrowserCtx);\n const itemPath = ref ? itemRefToItemPath(ref) : 'NONEXISTENT_ITEM';\n const itemResponse = useRegisterItemData({ itemPaths: [itemPath] });\n const itemResponseValue: RegisterItem<any> | null =\n itemResponse.value[itemPath];\n\n const itemData = itemResponseValue?.data ?? null;\n const errMsg = \"Item data cannot be loaded\";\n return {\n value: itemData,\n errors: itemData === null\n ? [errMsg, ...itemResponse.errors]\n : itemResponse.errors,\n isUpdating: itemResponse.isUpdating,\n _reqCounter: itemResponse._reqCounter,\n refresh: itemResponse.refresh,\n };\n}\n"]}
package/views/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
2
3
  import React from 'react';
3
- import { RegistryViewProps } from '../types';
4
+ import { type RegistryViewProps } from '../types';
4
5
  import GenericRelatedItemView from './GenericRelatedItemView';
5
6
  export { GenericRelatedItemView };
6
7
  export declare const RegistryView: React.FC<RegistryViewProps>;
7
- export declare const nonIdeal: JSX.Element;
package/views/index.js CHANGED
@@ -9,158 +9,189 @@ Object.defineProperty(exports, "GenericRelatedItemView", {
9
9
  return _GenericRelatedItemView.default;
10
10
  }
11
11
  });
12
- exports.nonIdeal = exports.RegistryView = void 0;
12
+ exports.RegistryView = void 0;
13
13
 
14
- var _electronLog = _interopRequireDefault(require("electron-log"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
15
 
16
- var _react = require("react");
16
+ var _react2 = require("@emotion/react");
17
17
 
18
- var _core = require("@emotion/core");
18
+ var _context = require("@riboseinc/paneron-extension-kit/context");
19
19
 
20
- var _core2 = require("@blueprintjs/core");
20
+ var _TabbedWorkspace = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace"));
21
21
 
22
- var _context = require("@riboseinc/paneron-extension-kit/context");
22
+ var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
23
23
 
24
- var _ChangeRequest = require("./ChangeRequest");
24
+ var _types = require("../types");
25
25
 
26
- var _ItemBrowser = require("./ItemBrowser");
26
+ var _common = require("../common");
27
27
 
28
28
  var _GenericRelatedItemView = _interopRequireDefault(require("./GenericRelatedItemView"));
29
29
 
30
+ var _sidebar = require("./sidebar");
31
+
32
+ var _BrowserCtx = require("./BrowserCtx");
33
+
34
+ var _util = require("./util");
35
+
36
+ var _RegisterHome = _interopRequireDefault(require("./detail/RegisterHome"));
37
+
38
+ var _protocolRegistry = _interopRequireWildcard(require("./protocolRegistry"));
39
+
40
+ var _ChangeRequestContext = require("./change-request/ChangeRequestContext");
41
+
42
+ var _itemPathUtils = require("./itemPathUtils");
43
+
30
44
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
45
 
46
+ 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); }
47
+
48
+ 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; }
49
+
32
50
  /** @jsx jsx */
33
- //import { RegisterInformation } from './RegisterInformation';
34
- //import { REGISTER_METADATA_FILENAME } from '../common';
35
- //function makeBlankCR(id: string, sponsor: RegisterStakeholder): ChangeRequest {
36
- // return {
37
- // id,
38
- // justification: '',
39
- // timeStarted: new Date(),
40
- // proposals: {},
41
- // sponsor,
42
- // status: DECISION_STATUSES[0],
43
- // };
44
- //};
45
- const RegistryView = function ({
51
+
52
+ /** @jsxFrag React.Fragment */
53
+ const TabbedWorkspaceContextProvider = (0, _context2.makeContextProvider)('Browse', _sidebar.sidebarIDs, _protocolRegistry.default);
54
+
55
+ const RegistryView = function (props) {
56
+ return (0, _react2.jsx)(TabbedWorkspaceContextProvider, {
57
+ stateKey: "main-registry-view"
58
+ }, (0, _react2.jsx)(BrowserCtxProvider, { ...props
59
+ }, (0, _react2.jsx)(RegistryWorkspace, null)));
60
+ };
61
+
62
+ exports.RegistryView = RegistryView;
63
+
64
+ const RegistryWorkspace = function () {
65
+ const {
66
+ changeRequest: activeChangeRequest
67
+ } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
68
+ const {
69
+ spawnTab
70
+ } = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
71
+ const globalMode = (0, _react.useMemo)(() => activeChangeRequest ? {
72
+ content: (0, _react2.jsx)(_react.default.Fragment, null, "Viewing register as proposed\u2009\u2014\u2009contents shown may differ from version in effect"),
73
+ intent: 'danger',
74
+ onClick: () => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`)
75
+ } : undefined, [activeChangeRequest === null || activeChangeRequest === void 0 ? void 0 : activeChangeRequest.id]);
76
+ return (0, _react2.jsx)(_TabbedWorkspace.default, {
77
+ css: (0, _react2.css)`flex: 1 1 auto;`,
78
+ sidebarConfig: _sidebar.sidebarConfig,
79
+ sidebarIDs: _sidebar.sidebarIDs,
80
+ newTabPrompt: (0, _react2.jsx)(_RegisterHome.default, null),
81
+ globalMode: globalMode
82
+ });
83
+ };
84
+
85
+ const BrowserCtxProvider = function ({
46
86
  itemClassConfiguration,
47
- subregisters
87
+ subregisters,
88
+ keyExpression,
89
+ defaultSearchCriteria,
90
+ customViews,
91
+ children
48
92
  }) {
93
+ var _registerMetadataReq$;
94
+
49
95
  const {
50
96
  useObjectData,
51
- updateObjects
52
- } = (0, _react.useContext)(_context.DatasetContext); //const [registerInfoOpen, setRegisterInfoOpen] = useState(false);
53
-
54
- const [selectedCRID, selectCR] = (0, _react.useState)(undefined);
55
- const [isBusy, setBusy] = (0, _react.useState)(false); //const remoteUsername: string | undefined = useRemoteUsername().value.username;
56
- // const registerObject = useObjectData({
57
- // objectPaths: [REGISTER_METADATA_FILENAME],
58
- // }).value.data?.[REGISTER_METADATA_FILENAME]?.value;
59
- // const registerInfo: Partial<Register> | null = registerObject
60
- // ? yaml.load(registerObject as string)
61
- // : null;
62
- // const stakeholder: RegisterStakeholder | undefined = remoteUsername
63
- // ? (registerInfo?.stakeholders || []).
64
- // find(s => s.gitServerUsername === remoteUsername)
65
- // : undefined;
97
+ useRemoteUsername
98
+ } = (0, _react.useContext)(_context.DatasetContext);
99
+ const {
100
+ focusedTabURI,
101
+ spawnTab
102
+ } = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
103
+ const selectedItemPath = focusedTabURI && focusedTabURI.startsWith(`${_protocolRegistry.Protocols.ITEM_DETAILS}:`) ? focusedTabURI.split(':')[1] : null;
104
+ const selectedItemRef = selectedItemPath ? (0, _itemPathUtils.itemPathToItemRefLike)(subregisters !== undefined, selectedItemPath) : null;
105
+ const maybeSelectedRegisterItemData = useObjectData({
106
+ objectPaths: selectedItemPath ? [selectedItemPath] : []
107
+ }).value.data[selectedItemPath ?? ''];
108
+ const selectedRegisterItem = (0, _types.isInternalItemReference)(selectedItemRef) ? maybeSelectedRegisterItemData && (0, _types.isRegisterItem)(maybeSelectedRegisterItemData) ? {
109
+ item: maybeSelectedRegisterItemData,
110
+ ref: selectedItemRef,
111
+ itemClass: itemClassConfiguration[selectedItemRef.classID]
112
+ } : undefined : null; // TODO: Confirm that end extensions using RegistryKit can’t just import hooks
113
+ // from RegistryKit and we really have to pass this to them via context
114
+ // TODO: Why not use useObjectData directly? Since register item paths
115
+ // are just object paths. The casting here is optimistic, since an item at given path
116
+ // may not be a RegisterItem.
66
117
 
67
118
  const useRegisterItemData = opts => {
68
- const result = useObjectData({
69
- objectPaths: opts.itemPaths
70
- }); //const parsedData = Object.entries(data.value).
71
- //filter(([ path, data ]) => data !== null && data.encoding === 'utf-8').
72
- //map(([ path, data ]) => {
73
- // const item: RegisterItem<any> = yaml.load(data!.value as string);
74
- // return { [path.replace('.yaml', '')]: item };
75
- //}).
76
- //reduce((p, c) => ({ ...p, ...c }), {});
77
-
78
- return {
79
- isUpdating: false,
80
- errors: [],
81
- value: result.value.data,
82
- refresh: () => void 0,
83
- _reqCounter: 0
84
- };
85
- }; // async function handleSaveRegisterInfo(value: Partial<Register>, oldValue: Partial<Register> | null) {
86
- // if (!isBusy && updateObjects) {
87
- // setBusy(true);
88
- // try {
89
- // await updateObjects({
90
- // commitMessage: "Edit register metadata",
91
- // objectChangeset: {
92
- // [REGISTER_METADATA_FILENAME]: {
93
- // oldValue: oldValue ? oldValue : null,
94
- // newValue: value,
95
- // },
96
- // },
97
- // });
98
- // } finally {
99
- // setBusy(false);
100
- // }
101
- // }
102
- // }
103
-
104
-
105
- async function handleSaveCR(crID, value, oldValue) {
106
- if (!isBusy && crID === selectedCRID && updateObjects) {
107
- setBusy(true);
108
-
109
- try {
110
- await updateObjects({
111
- commitMessage: `CR: ${value === null ? 'delete' : 'update'} ${crID}`,
112
- objectChangeset: {
113
- [`change-requests/${crID}.yaml`]: {
114
- oldValue: oldValue,
115
- newValue: value !== null && value !== void 0 ? value : null
116
- }
117
- }
118
- });
119
-
120
- if (value === null) {
121
- selectCR(undefined);
122
- }
123
- } catch (e) {
124
- _electronLog.default.error("Failed to update or delete CR!", e);
125
- } finally {
126
- setBusy(false);
119
+ // Original item path mapped to its potential alternative path in current CR,
120
+ // if the item is clarified or added in it.
121
+ // TODO(perf): Access CR data and check whether the item is affected instead of blindly trying CR paths
122
+ const pathsToRequest = {};
123
+ const {
124
+ changeRequest: activeChangeRequest
125
+ } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
126
+
127
+ for (const givenItemPath of opts.itemPaths) {
128
+ pathsToRequest[givenItemPath] = givenItemPath; // Don’t use CR alternative path for any path that is already explicitly in-CR.
129
+ // TODO(perf): move out of the loop what’s possible, use map-reduce maybe too
130
+
131
+ if (!opts.ignoreActiveCR && !givenItemPath.startsWith('/proposals') && activeChangeRequest !== null && activeChangeRequest !== void 0 && activeChangeRequest.id) {
132
+ pathsToRequest[(0, _itemPathUtils.itemPathInCR)(givenItemPath, activeChangeRequest.id)] = givenItemPath;
127
133
  }
128
134
  }
129
- }
130
135
 
131
- let mainViewEl;
132
- /*if (registerInfoOpen) {
133
- mainViewEl = <RegisterInformation
134
- register={registerInfo}
135
- onSave={(!isBusy && updateObjects !== undefined)
136
- ? handleSaveRegisterInfo
137
- : undefined}
138
- />;
139
- } else */
140
-
141
- if (selectedCRID) {
142
- mainViewEl = (0, _core.jsx)(_ChangeRequest.ChangeRequestView, {
143
- id: selectedCRID,
144
- itemClassConfiguration: itemClassConfiguration,
145
- useRegisterItemData: useRegisterItemData,
146
- onDelete: !isBusy && updateObjects !== undefined ? (crID, oldValue) => handleSaveCR(crID, null, oldValue) : undefined,
147
- onSave: !isBusy && updateObjects !== undefined ? handleSaveCR : undefined
148
- });
149
- } else {
150
- mainViewEl = (0, _core.jsx)(_ItemBrowser.RegisterItemBrowser, {
151
- itemClassConfiguration: itemClassConfiguration,
152
- subregisters: subregisters,
153
- useRegisterItemData: useRegisterItemData
136
+ const result = useObjectData({
137
+ objectPaths: Object.keys(pathsToRequest)
154
138
  });
155
- }
139
+ const itemData = {};
156
140
 
157
- return mainViewEl;
158
- };
141
+ for (const [alternativePath, itemPath] of Object.entries(pathsToRequest)) {
142
+ const data = result.value.data[alternativePath] ?? result.value.data[itemPath] ?? null;
159
143
 
160
- exports.RegistryView = RegistryView;
161
- const nonIdeal = (0, _core.jsx)(_core2.NonIdealState, {
162
- icon: "time",
163
- title: "Check back in a bit!",
164
- description: "This view is coming soon"
165
- });
166
- exports.nonIdeal = nonIdeal;
144
+ if ((0, _types.isRegisterItem)(data) || data === null) {
145
+ itemData[itemPath] = data;
146
+ }
147
+ } // Convert dates
148
+ // const parsedData: Record<string, RegisterItem<any> | null> = Object.entries(result.value.data).
149
+ // map(([ path, data ]) => {
150
+ // return {
151
+ // [path]: data !== null
152
+ // ? {
153
+ // ...data,
154
+ // dateAccepted: parseISO(data!.dateAccepted as unknown as string),
155
+ // }
156
+ // : null,
157
+ // };
158
+ // }).
159
+ // reduce((p, c) => ({ ...p, ...c }), {});
160
+
161
+
162
+ return { ...result,
163
+ value: itemData
164
+ };
165
+ }; // Register data
166
+
167
+
168
+ const registerMetadataReq = useObjectData({
169
+ objectPaths: [_common.REGISTER_METADATA_FILENAME]
170
+ });
171
+ const maybeRegisterMetadata = ((_registerMetadataReq$ = registerMetadataReq.value.data) === null || _registerMetadataReq$ === void 0 ? void 0 : _registerMetadataReq$[_common.REGISTER_METADATA_FILENAME]) ?? (registerMetadataReq.isUpdating ? undefined : null);
172
+ const registerMetadata = !maybeRegisterMetadata || (0, _types.isRegisterMetadata)(maybeRegisterMetadata) ? maybeRegisterMetadata : null;
173
+ const remoteUsername = useRemoteUsername().value.username;
174
+ const stakeholder = remoteUsername ? ((registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.stakeholders) ?? []).find(s => s.gitServerUsername === remoteUsername) : undefined; // Active CR
175
+
176
+ const [activeChangeRequestID, setActiveChangeRequestID] = (0, _react.useState)(null);
177
+ const getRelatedClass = (0, _util._getRelatedClass)(itemClassConfiguration);
178
+ return (0, _react2.jsx)(_BrowserCtx.BrowserCtx.Provider, {
179
+ value: {
180
+ stakeholder,
181
+ registerMetadata,
182
+ subregisters,
183
+ itemClasses: itemClassConfiguration,
184
+ jumpTo: spawnTab,
185
+ selectedRegisterItem,
186
+ activeChangeRequestID,
187
+ setActiveChangeRequestID,
188
+ useRegisterItemData,
189
+ getRelatedItemClassConfiguration: getRelatedClass,
190
+ customViews: customViews ?? [],
191
+ keyExpression,
192
+ defaultSearchCriteria
193
+ }
194
+ }, (0, _react2.jsx)(_ChangeRequestContext.ChangeRequestContextProvider, {
195
+ changeRequestID: activeChangeRequestID
196
+ }, children));
197
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n\nimport log from 'electron-log';\n\nimport React, { useContext, useState } from 'react';\nimport { jsx } from '@emotion/core';\nimport { NonIdealState, } from '@blueprintjs/core';\n\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport {\n ChangeRequest,\n //Register,\n RegisterItem,\n RegisterItemDataHook,\n RegistryViewProps,\n} from '../types';\n//import { RegisterInformation } from './RegisterInformation';\nimport { ChangeRequestView } from './ChangeRequest';\nimport { RegisterItemBrowser } from './ItemBrowser';\n//import { REGISTER_METADATA_FILENAME } from '../common';\n\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nexport { GenericRelatedItemView };\n\n\n//function makeBlankCR(id: string, sponsor: RegisterStakeholder): ChangeRequest {\n// return {\n// id,\n// justification: '',\n// timeStarted: new Date(),\n// proposals: {},\n// sponsor,\n// status: DECISION_STATUSES[0],\n// };\n//};\n\n\nexport const RegistryView: React.FC<RegistryViewProps> = function ({ itemClassConfiguration, subregisters }) {\n\n const {\n useObjectData,\n updateObjects,\n } = useContext(DatasetContext);\n\n //const [registerInfoOpen, setRegisterInfoOpen] = useState(false);\n const [selectedCRID, selectCR] = useState<string | undefined>(undefined);\n const [isBusy, setBusy] = useState(false);\n\n //const remoteUsername: string | undefined = useRemoteUsername().value.username;\n\n // const registerObject = useObjectData({\n // objectPaths: [REGISTER_METADATA_FILENAME],\n // }).value.data?.[REGISTER_METADATA_FILENAME]?.value;\n\n // const registerInfo: Partial<Register> | null = registerObject\n // ? yaml.load(registerObject as string)\n // : null;\n\n // const stakeholder: RegisterStakeholder | undefined = remoteUsername\n // ? (registerInfo?.stakeholders || []).\n // find(s => s.gitServerUsername === remoteUsername)\n // : undefined;\n\n const useRegisterItemData: RegisterItemDataHook = (opts) => {\n const result = useObjectData({\n objectPaths: opts.itemPaths,\n }) as ValueHook<{ data: Record<string, RegisterItem<any> | null> }>;\n\n //const parsedData = Object.entries(data.value).\n //filter(([ path, data ]) => data !== null && data.encoding === 'utf-8').\n //map(([ path, data ]) => {\n // const item: RegisterItem<any> = yaml.load(data!.value as string);\n // return { [path.replace('.yaml', '')]: item };\n //}).\n //reduce((p, c) => ({ ...p, ...c }), {});\n\n return {\n isUpdating: false,\n errors: [],\n value: result.value.data,\n refresh: () => void 0,\n _reqCounter: 0,\n };\n };\n\n // async function handleSaveRegisterInfo(value: Partial<Register>, oldValue: Partial<Register> | null) {\n // if (!isBusy && updateObjects) {\n // setBusy(true);\n // try {\n // await updateObjects({\n // commitMessage: \"Edit register metadata\",\n // objectChangeset: {\n // [REGISTER_METADATA_FILENAME]: {\n // oldValue: oldValue ? oldValue : null,\n // newValue: value,\n // },\n // },\n // });\n // } finally {\n // setBusy(false);\n // }\n // }\n // }\n\n async function handleSaveCR(crID: string, value: ChangeRequest | null, oldValue: ChangeRequest) {\n if (!isBusy && crID === selectedCRID && updateObjects) {\n setBusy(true);\n try {\n await updateObjects({\n commitMessage: `CR: ${value === null ? 'delete' : 'update'} ${crID}`,\n objectChangeset: {\n [`change-requests/${crID}.yaml`]: {\n oldValue: oldValue,\n newValue: value ?? null,\n },\n },\n }, );\n if (value === null) {\n selectCR(undefined);\n }\n } catch (e) {\n log.error(\"Failed to update or delete CR!\", e);\n } finally {\n setBusy(false);\n }\n }\n }\n\n let mainViewEl: JSX.Element;\n\n /*if (registerInfoOpen) {\n mainViewEl = <RegisterInformation\n register={registerInfo}\n onSave={(!isBusy && updateObjects !== undefined)\n ? handleSaveRegisterInfo\n : undefined}\n />;\n\n } else */ if (selectedCRID) {\n mainViewEl = <ChangeRequestView\n id={selectedCRID}\n itemClassConfiguration={itemClassConfiguration}\n useRegisterItemData={useRegisterItemData}\n\n onDelete={(!isBusy && updateObjects !== undefined)\n ? (crID, oldValue) => handleSaveCR(crID, null, oldValue)\n : undefined}\n onSave={(!isBusy && updateObjects !== undefined)\n ? handleSaveCR\n : undefined}\n />;\n\n } else {\n mainViewEl = <RegisterItemBrowser\n itemClassConfiguration={itemClassConfiguration}\n subregisters={subregisters}\n useRegisterItemData={useRegisterItemData}\n />;\n }\n\n return mainViewEl;\n};\n\n\nexport const nonIdeal = <NonIdealState\n icon=\"time\"\n title=\"Check back in a bit!\"\n description=\"This view is coming soon\" />;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\n\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { TabbedWorkspaceProps } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace';\nimport {\n makeContextProvider as makeTabbedWorkspaceContextProvider,\n TabbedWorkspaceContext,\n} from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport {\n type RegisterItem,\n type RegisterItemDataHook,\n type RegisterStakeholder,\n type RegistryViewProps,\n isRegisterItem,\n isRegisterMetadata,\n isInternalItemReference,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nimport { sidebarConfig, SidebarID, sidebarIDs } from './sidebar';\nimport { BrowserCtx } from './BrowserCtx';\nimport { _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from './change-request/ChangeRequestContext';\nimport { itemPathInCR, itemPathToItemRefLike } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, SidebarID>(\n 'Browse',\n sidebarIDs,\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> = function (props) {\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <RegistryWorkspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> = function () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed — contents shown may differ from version in effect\n </>,\n intent: 'danger',\n onClick: () => spawnTab(`${Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`),\n }\n : undefined),\n [activeChangeRequest?.id],\n );\n\n return <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={sidebarConfig}\n sidebarIDs={sidebarIDs}\n newTabPrompt={<RegisterHome />}\n globalMode={globalMode}\n />\n};\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function ({\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n const selectedItemPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n\n const selectedItemRef: Record<string, string> | null =\n selectedItemPath\n ? itemPathToItemRefLike(subregisters !== undefined, selectedItemPath)\n : null;\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] =\n isInternalItemReference(selectedItemRef)\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null;\n\n // TODO: Confirm that end extensions using RegistryKit can’t just import hooks\n // from RegistryKit and we really have to pass this to them via context\n // TODO: Why not use useObjectData directly? Since register item paths\n // are just object paths. The casting here is optimistic, since an item at given path\n // may not be a RegisterItem.\n const useRegisterItemData: RegisterItemDataHook = (opts) => {\n // Original item path mapped to its potential alternative path in current CR,\n // if the item is clarified or added in it.\n // TODO(perf): Access CR data and check whether the item is affected instead of blindly trying CR paths\n const pathsToRequest: Record<string, string> = {};\n\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\n\n for (const givenItemPath of opts.itemPaths) {\n pathsToRequest[givenItemPath] = givenItemPath;\n\n // Don’t use CR alternative path for any path that is already explicitly in-CR.\n // TODO(perf): move out of the loop what’s possible, use map-reduce maybe too\n if (!opts.ignoreActiveCR && !givenItemPath.startsWith('/proposals') && activeChangeRequest?.id) {\n pathsToRequest[itemPathInCR(givenItemPath, activeChangeRequest.id)] = givenItemPath;\n }\n }\n\n const result = useObjectData({\n objectPaths: Object.keys(pathsToRequest),\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData: Record<string, RegisterItem<any> | null> = {};\n for (const [alternativePath, itemPath] of Object.entries(pathsToRequest)) {\n const data = result.value.data[alternativePath]\n ?? result.value.data[itemPath]\n ?? null;\n if (isRegisterItem(data) || data === null) {\n itemData[itemPath] = data;\n }\n }\n\n // Convert dates\n // const parsedData: Record<string, RegisterItem<any> | null> = Object.entries(result.value.data).\n // map(([ path, data ]) => {\n // return {\n // [path]: data !== null\n // ? {\n // ...data,\n // dateAccepted: parseISO(data!.dateAccepted as unknown as string),\n // }\n // : null,\n // };\n // }).\n // reduce((p, c) => ({ ...p, ...c }), {});\n\n return {\n ...result,\n value: itemData,\n };\n };\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n const maybeRegisterMetadata =\n registerMetadataReq.value.data?.[REGISTER_METADATA_FILENAME] ??\n (registerMetadataReq.isUpdating ? undefined : null);\n const registerMetadata = !maybeRegisterMetadata || isRegisterMetadata(maybeRegisterMetadata)\n ? maybeRegisterMetadata\n : null;\n\n const remoteUsername: string | undefined = useRemoteUsername().value.username;\n\n const stakeholder: RegisterStakeholder | undefined = remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined;\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\n const getRelatedClass = _getRelatedClass(itemClassConfiguration);\n\n return (\n <BrowserCtx.Provider\n value={{\n stakeholder,\n registerMetadata,\n\n subregisters,\n itemClasses: itemClassConfiguration,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration: getRelatedClass,\n customViews: customViews ?? [],\n\n keyExpression,\n defaultSearchCriteria,\n }}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestID}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\n"]}