@riboseinc/paneron-registry-kit 2.2.30 → 2.2.32

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 (74) hide show
  1. package/index.js +1 -0
  2. package/index.js.map +1 -1
  3. package/item-classes/Tree.d.ts +5 -0
  4. package/item-classes/Tree.js +115 -0
  5. package/item-classes/Tree.js.map +1 -0
  6. package/item-classes/treeNodes.d.ts +12 -0
  7. package/item-classes/treeNodes.js +68 -0
  8. package/item-classes/treeNodes.js.map +1 -0
  9. package/package.json +2 -2
  10. package/proposals/actionableGroups/Tree.d.ts +7 -0
  11. package/proposals/actionableGroups/Tree.js +179 -0
  12. package/proposals/actionableGroups/Tree.js.map +1 -0
  13. package/proposals/actionableGroups/queries.d.ts +5 -0
  14. package/proposals/actionableGroups/queries.js +81 -0
  15. package/proposals/actionableGroups/queries.js.map +1 -0
  16. package/proposals/actionableGroups/treeNodes.d.ts +26 -0
  17. package/proposals/actionableGroups/treeNodes.js +96 -0
  18. package/proposals/actionableGroups/treeNodes.js.map +1 -0
  19. package/proposals/actionableGroups/types.d.ts +6 -0
  20. package/proposals/actionableGroups/types.js +5 -0
  21. package/proposals/actionableGroups/types.js.map +1 -0
  22. package/types/cr.d.ts +1 -0
  23. package/types/cr.js.map +1 -1
  24. package/types/register.d.ts +4 -1
  25. package/types/register.js.map +1 -1
  26. package/types/stakeholder.d.ts +22 -41
  27. package/types/stakeholder.js +34 -16
  28. package/types/stakeholder.js.map +1 -1
  29. package/types/views.d.ts +2 -0
  30. package/types/views.js.map +1 -1
  31. package/views/BrowserCtx.d.ts +1 -1
  32. package/views/BrowserCtx.js.map +1 -1
  33. package/views/GenericRelatedItemView.js +21 -8
  34. package/views/GenericRelatedItemView.js.map +1 -1
  35. package/views/ItemDetailsDrawer.d.ts +1 -0
  36. package/views/ItemDetailsDrawer.js +4 -2
  37. package/views/ItemDetailsDrawer.js.map +1 -1
  38. package/views/ItemSearchDrawer.js +1 -1
  39. package/views/ItemSearchDrawer.js.map +1 -1
  40. package/views/RegisterStakeholder.js +2 -2
  41. package/views/RegisterStakeholder.js.map +1 -1
  42. package/views/StatefulTree.d.ts +28 -0
  43. package/views/StatefulTree.js +131 -0
  44. package/views/StatefulTree.js.map +1 -0
  45. package/views/change-request/TransitionHistory.js +6 -3
  46. package/views/change-request/TransitionHistory.js.map +1 -1
  47. package/views/change-request/TransitionOptions.js +37 -13
  48. package/views/change-request/TransitionOptions.js.map +1 -1
  49. package/views/detail/RegisterHome/index.js +20 -79
  50. package/views/detail/RegisterHome/index.js.map +1 -1
  51. package/views/detail/RegisterItem/index.d.ts +2 -2
  52. package/views/detail/RegisterItem/index.js +7 -2
  53. package/views/detail/RegisterItem/index.js.map +1 -1
  54. package/views/detail/RegisterItemClass.d.ts +12 -0
  55. package/views/detail/RegisterItemClass.js +98 -0
  56. package/views/detail/RegisterItemClass.js.map +1 -0
  57. package/views/detail/RegisterMeta/RegisterMetaForm.js +272 -114
  58. package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
  59. package/views/detail/RegisterMeta/index.js +1 -1
  60. package/views/detail/RegisterMeta/index.js.map +1 -1
  61. package/views/index.js +63 -6
  62. package/views/index.js.map +1 -1
  63. package/views/protocolRegistry.d.ts +1 -0
  64. package/views/protocolRegistry.js +4 -0
  65. package/views/protocolRegistry.js.map +1 -1
  66. package/views/sidebar/Browse/index.js +8 -44
  67. package/views/sidebar/Browse/index.js.map +1 -1
  68. package/views/sidebar/Registration/index.js.map +1 -1
  69. package/views/sidebar/index.d.ts +2 -1
  70. package/views/sidebar/index.js +77 -62
  71. package/views/sidebar/index.js.map +1 -1
  72. package/views/util.d.ts +5 -0
  73. package/views/util.js +42 -4
  74. package/views/util.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterMeta/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAiB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAGlD,MAAM,YAAY,GAAmC;;IACnD,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,CAAE,cAAc,EAAE,iBAAiB,CAAE,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,SAAS,GAAG,gBAAgB,IAAI,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE5H,MAAM,KAAK,GAAG,CAAC,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACnF,MAAM,kBAAkB,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,SAAS,WAAW;QAClB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;SACtE;QACD,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QACD,MAAM,gBAAgB,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;YAC5D,aAAa,EAAE,0BAA0B;YACzC,eAAe,EAAE;gBACf,CAAC,0BAA0B,CAAC,EAAE;oBAC5B,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE,cAAc;iBACzB;aACF;SACF,CAAC,CAAC;QACH,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,gBAAgB,EAAE;QACpB,OAAO,CACL,IAAC,qBAAqB,IACpB,KAAK,EAAC,mBAAmB,EACzB,MAAM,EAAC,WAAW,EAClB,OAAO,EAAE,CAAC,CAAC;wBACT,OAAO,EAAE,UAAU;wBACnB,QAAQ,EAAE,CAAC,SAAS,IAAI,CAAC,SAAS;wBAClC,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;wBACtD,QAAQ,EAAE,MAAM;qBACjB,EAAE;wBACD,OAAO,EAAE,WAAW;wBACpB,QAAQ,EAAE,CAAC,SAAS,IAAI,CAAC,SAAS;wBAClC,QAAQ,EAAE,eAAe;qBAC1B,CAAC,CAAC;YAEH,IAAC,gBAAgB,IACf,KAAK,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,gBAAgB,EACzC,QAAQ,EAAE,CAAC,aAAa,IAAI,kBAAkB,CAAC;oBAC7C,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,SAAS,GACb,CACoB,CACzB,CAAC;KACH;SAAM,IAAI,gBAAgB,KAAK,SAAS,EAAE;QACzC,OAAO,IAAC,aAAa,IAAC,IAAI,EAAE,IAAC,OAAO,OAAG,GAAI,CAAC;KAC7C;SAAM;QACL,OAAO,IAAC,aAAa,IAAC,IAAI,EAAC,cAAc,EAAC,WAAW,EAAC,mCAAmC,GAAG,CAAA;KAC7F;AACH,CAAC,CAAC;AAEF,eAAe;IACb,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,GAAG,EAAE,CAAC,8CAAsB;IACnC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,mBAAmB;CAC5C,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useState, useContext } from 'react';\nimport { jsx } from '@emotion/react';\nimport { NonIdealState, Spinner } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { isRegisterMetadata, type Register } from '../../../types';\nimport { isOwner } from '../../../types/stakeholder';\nimport { REGISTER_METADATA_FILENAME } from '../../../common';\nimport { TabContentsWithHeader } from '../../util';\nimport RegisterMetaForm from './RegisterMetaForm';\n\n\nconst RegisterMeta: React.FC<Record<never, never>> = function () {\n const { updateObjects, performOperation } = useContext(DatasetContext);\n const { registerMetadata, stakeholder } = useContext(BrowserCtx);\n\n const [ editedMetadata, setEditedMetadata ] = useState<Register | null>(null);\n\n const canChange = updateObjects ? true : false;\n const didChange = registerMetadata && editedMetadata && JSON.stringify(editedMetadata) !== JSON.stringify(registerMetadata);\n\n const owner = (registerMetadata?.stakeholders ?? []).find(s => s.role === 'owner');\n const stakeholderCanEdit = !owner || (stakeholder && isOwner(stakeholder));\n\n function handleClear() {\n setEditedMetadata(null);\n }\n async function handleSave() {\n if (!updateObjects) {\n throw new Error(\"Dataset is read-only\");\n }\n if (!stakeholder || !isOwner(stakeholder)) {\n throw new Error(\"Register meta is only meant to be edited by owner\");\n }\n if (!isRegisterMetadata(editedMetadata)) {\n throw new Error(\"Invalid register metadata\");\n }\n await performOperation('saving register meta', updateObjects)({\n commitMessage: \"edited register metadata\",\n objectChangeset: {\n [REGISTER_METADATA_FILENAME]: {\n oldValue: registerMetadata,\n newValue: editedMetadata,\n },\n },\n });\n setEditedMetadata(null);\n }\n\n if (registerMetadata) {\n return (\n <TabContentsWithHeader\n title=\"Register metadata\"\n layout=\"card-grid\"\n actions={[[{\n onClick: handleSave,\n disabled: !didChange || !canChange,\n intent: didChange && canChange ? \"primary\" : undefined,\n children: \"Save\",\n }, {\n onClick: handleClear,\n disabled: !didChange || !canChange,\n children: \"Clear changes\",\n }]]}\n >\n <RegisterMetaForm\n value={editedMetadata ?? registerMetadata}\n onChange={(updateObjects && stakeholderCanEdit)\n ? setEditedMetadata\n : undefined}\n />\n </TabContentsWithHeader>\n );\n } else if (registerMetadata === undefined) {\n return <NonIdealState icon={<Spinner />} />;\n } else {\n return <NonIdealState icon=\"heart-broken\" description=\"Failed to read registry metadata.\" />\n }\n};\n\nexport default {\n main: RegisterMeta,\n title: () => <>Register Metadata</>,\n plainTitle: async () => \"register metadata\",\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterMeta/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useState, useContext } from 'react';\nimport { jsx } from '@emotion/react';\nimport { NonIdealState, Spinner } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { isRegisterMetadata, type Register } from '../../../types';\nimport { isOwner } from '../../../types/stakeholder';\nimport { REGISTER_METADATA_FILENAME } from '../../../common';\nimport { TabContentsWithHeader } from '../../util';\nimport RegisterMetaForm from './RegisterMetaForm';\n\n\nconst RegisterMeta: React.FC<Record<never, never>> = function () {\n const { updateObjects, performOperation } = useContext(DatasetContext);\n const { registerMetadata, stakeholder } = useContext(BrowserCtx);\n\n const [ editedMetadata, setEditedMetadata ] = useState<Register | null>(null);\n\n const canChange = updateObjects ? true : false;\n const didChange = registerMetadata && editedMetadata && JSON.stringify(editedMetadata) !== JSON.stringify(registerMetadata);\n\n const owner = (registerMetadata?.stakeholders ?? []).find(isOwner);\n const stakeholderCanEdit = !owner || (stakeholder && isOwner(stakeholder));\n\n function handleClear() {\n setEditedMetadata(null);\n }\n async function handleSave() {\n if (!updateObjects) {\n throw new Error(\"Dataset is read-only\");\n }\n if (!stakeholder || !isOwner(stakeholder)) {\n throw new Error(\"Register meta is only meant to be edited by owner\");\n }\n if (!isRegisterMetadata(editedMetadata)) {\n throw new Error(\"Invalid register metadata\");\n }\n await performOperation('saving register meta', updateObjects)({\n commitMessage: \"edited register metadata\",\n objectChangeset: {\n [REGISTER_METADATA_FILENAME]: {\n oldValue: registerMetadata,\n newValue: editedMetadata,\n },\n },\n });\n setEditedMetadata(null);\n }\n\n if (registerMetadata) {\n return (\n <TabContentsWithHeader\n title=\"Register metadata\"\n layout=\"card-grid\"\n actions={[[{\n onClick: handleSave,\n disabled: !didChange || !canChange,\n intent: didChange && canChange ? \"primary\" : undefined,\n children: \"Save\",\n }, {\n onClick: handleClear,\n disabled: !didChange || !canChange,\n children: \"Clear changes\",\n }]]}\n >\n <RegisterMetaForm\n value={editedMetadata ?? registerMetadata}\n onChange={(updateObjects && stakeholderCanEdit)\n ? setEditedMetadata\n : undefined}\n />\n </TabContentsWithHeader>\n );\n } else if (registerMetadata === undefined) {\n return <NonIdealState icon={<Spinner />} />;\n } else {\n return <NonIdealState icon=\"heart-broken\" description=\"Failed to read registry metadata.\" />\n }\n};\n\nexport default {\n main: RegisterMeta,\n title: () => <>Register Metadata</>,\n plainTitle: async () => \"register metadata\",\n};\n"]}
package/views/index.js CHANGED
@@ -17,6 +17,8 @@ var _useDebounce = require("use-debounce");
17
17
 
18
18
  var _react2 = require("@emotion/react");
19
19
 
20
+ var _core = require("@blueprintjs/core");
21
+
20
22
  var _context = require("@riboseinc/paneron-extension-kit/context");
21
23
 
22
24
  var _TabbedWorkspace = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace"));
@@ -39,6 +41,8 @@ var _protocolRegistry = _interopRequireWildcard(require("./protocolRegistry"));
39
41
 
40
42
  var _ChangeRequestContext = require("./change-request/ChangeRequestContext");
41
43
 
44
+ var _sidebar = require("./sidebar");
45
+
42
46
  var _itemPathUtils = require("./itemPathUtils");
43
47
 
44
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -69,22 +73,39 @@ const SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels';
69
73
  exports.SIDEBAR_WIDTH_SETTING_NAME = SIDEBAR_WIDTH_SETTING_NAME;
70
74
 
71
75
  const RegistryWorkspace = function RegistryWorkspace() {
76
+ var _a, _b;
77
+
72
78
  const {
73
79
  changeRequest: activeChangeRequest
74
80
  } = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
75
81
  const {
76
82
  spawnTab
77
83
  } = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
84
+ const {
85
+ registerMetadata,
86
+ stakeholder
87
+ } = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
78
88
  const {
79
89
  useSettings,
80
90
  updateSetting,
81
91
  useGlobalSettings
82
92
  } = (0, _react.useContext)(_context.DatasetContext);
93
+ const {
94
+ id: vID,
95
+ timestamp: vDate
96
+ } = (_a = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.version) !== null && _a !== void 0 ? _a : {
97
+ id: null,
98
+ timestamp: null
99
+ };
83
100
  const globalMode = (0, _react.useMemo)(() => activeChangeRequest ? {
84
101
  content: (0, _react2.jsx)(_react.default.Fragment, null, "Viewing register as proposed\u2009\u2014\u2009contents shown may differ from version in effect"),
85
102
  intent: 'danger',
86
103
  onClick: () => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`)
87
- } : undefined, [activeChangeRequest === null || activeChangeRequest === void 0 ? void 0 : activeChangeRequest.id, spawnTab]);
104
+ } : {
105
+ content: (0, _react2.jsx)(_react.default.Fragment, null, "Viewing register at version ", vID !== null && vID !== void 0 ? vID : 'N/A', ", published ", vDate ? (0, _util.formatDate)(vDate) : 'N/A'),
106
+ intent: 'none',
107
+ minimal: true
108
+ }, [activeChangeRequest === null || activeChangeRequest === void 0 ? void 0 : activeChangeRequest.id, JSON.stringify(registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.version), spawnTab]);
88
109
  const {
89
110
  value: {
90
111
  settings
@@ -97,12 +118,44 @@ const RegistryWorkspace = function RegistryWorkspace() {
97
118
  } = useGlobalSettings();
98
119
  const stored = settings[SIDEBAR_WIDTH_SETTING_NAME];
99
120
  const sidebarWidth = stored && typeof stored === 'number' ? stored : undefined;
100
- return (0, _react2.jsx)(_TabbedWorkspace.default, {
121
+ const activeSidebarConfig = (0, _react.useMemo)(() => stakeholder ? _sidebar.sidebarConfigForStakeholder : _sidebar.sidebarConfig, [stakeholder]);
122
+ return (0, _react2.jsx)("div", {
123
+ css: (0, _react2.css)`flex: 1 1 auto; display: flex; flex-flow: column nowrap; overflow: hidden;`
124
+ }, (0, _react2.jsx)("header", {
125
+ css: (0, _react2.css)`
126
+ min-height: 2em;
127
+ flex: 0;
128
+ line-height: 1;
129
+ font-size: 200%;
130
+ background: ${_core.Colors.LIGHT_GRAY2};
131
+ padding: .5em 20px;
132
+ .bp4-dark & {
133
+ background: ${_core.Colors.DARK_GRAY2};
134
+ }
135
+ display: flex;
136
+ flex-flow: row nowrap;
137
+ `
138
+ }, (0, _react2.jsx)("h1", {
139
+ css: (0, _react2.css)`
140
+ line-height: unset !important;
141
+ font-size: unset !important;
142
+ font-weight: bold;
143
+ color: ${_core.Colors.DARK_GRAY5};
144
+ .bp4-dark & {
145
+ color: ${_core.Colors.LIGHT_GRAY3};
146
+ }
147
+ margin: 0;
148
+ flex: 1;
149
+ letter-spacing: -.025em;
150
+ `
151
+ }, (_b = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.name) !== null && _b !== void 0 ? _b : 'Register'), (0, _react2.jsx)("span", {
152
+ css: (0, _react2.css)`font-size: 50%; display: flex; gap: 10px; align-self: flex-end;`
153
+ }, (0, _react2.jsx)("a", null, "Documentation"), "\u2022", (0, _react2.jsx)("a", null, "Feedback"))), (0, _react2.jsx)(_TabbedWorkspace.default, {
101
154
  css: (0, _react2.css)`flex: 1 1 auto;`,
102
- sidebarConfig: undefined,
155
+ sidebarConfig: activeSidebarConfig,
103
156
  sidebarPosition: globalSettings.sidebarPosition,
104
- sidebarIDs: [],
105
- newTabPrompt: (0, _react2.jsx)(_RegisterHome.default, null),
157
+ sidebarIDs: (0, _react.useMemo)(() => ['Browse'], []),
158
+ newTabPrompt: newTabPrompt,
106
159
  globalMode: globalMode,
107
160
  sidebarWidth: sidebarWidth,
108
161
  onSidebarResize: (0, _react.useCallback)(width => {
@@ -111,11 +164,14 @@ const RegistryWorkspace = function RegistryWorkspace() {
111
164
  value: width
112
165
  });
113
166
  }, [updateSetting])
114
- });
167
+ }));
115
168
  };
116
169
 
170
+ const newTabPrompt = (0, _react2.jsx)(_RegisterHome.default, null);
171
+
117
172
  const BrowserCtxProvider = function BrowserCtxProvider({
118
173
  itemClassConfiguration,
174
+ itemClassGroups,
119
175
  subregisters,
120
176
  keyExpression,
121
177
  defaultSearchCriteria,
@@ -234,6 +290,7 @@ const BrowserCtxProvider = function BrowserCtxProvider({
234
290
  subregisters,
235
291
  alterApprovedCR,
236
292
  itemClasses: itemClassConfiguration,
293
+ itemClassGroups,
237
294
  jumpTo: spawnTab,
238
295
  selectedRegisterItem,
239
296
  activeChangeRequestID: activeChangeRequestIDDebounced,
@@ -1 +1 @@
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, useCallback, useState, useMemo } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { jsx, css } from '@emotion/react';\n\nimport type { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { type 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 type InternalItemReference,\n isRegisterItem,\n isRegisterMetadata,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\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 { useItemRef, itemPathInCR } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, []>(\n undefined,\n [],\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> =\nfunction RegistryView (props) {\n const Workspace = useMemo(() => props.CustomWorkspace ?? RegistryWorkspace, []);\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <Workspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nexport const SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels'\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> =\nfunction RegistryWorkspace () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\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, spawnTab],\n );\n\n const { value: { settings } } = useSettings();\n const { value: { settings: globalSettings } } = useGlobalSettings();\n\n const stored = settings[SIDEBAR_WIDTH_SETTING_NAME];\n const sidebarWidth: number | undefined = stored && typeof stored === 'number'\n ? stored as number\n : undefined;\n\n return <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={undefined as any} // no sidebarIDs allwos this, but wrapping in memo() loses generic typing.\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={[]}\n newTabPrompt={<RegisterHome />}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={useCallback((width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }, [updateSetting])}\n />\n};\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function BrowserCtxProvider ({\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n alterApprovedCR,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n\n // Active item\n\n const selectedItemPath: string | null = useMemo((() =>\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null\n ), [focusedTabURI]);\n\n const selectedItemRef: InternalItemReference | null = useItemRef(\n subregisters !== undefined,\n selectedItemPath);\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] = useMemo((() =>\n selectedItemRef\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null\n ), [selectedItemRef, maybeSelectedRegisterItemData]);\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\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 = useCallback((opts) => {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\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 = useMemo(() => {\n const pathsToRequest: Record<string, string> = {};\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 return pathsToRequest;\n }, [activeChangeRequest?.id, opts.itemPaths.sort().toString()]);\n\n const objectPaths = Object.keys(pathsToRequest).sort();\n\n const result = useObjectData({\n objectPaths,\n //nounLabel: 'register item(s)',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData = useMemo(() => {\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 return itemData;\n }, [pathsToRequest, result.value.data]);\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 }, [useObjectData, activeChangeRequestID]);\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n nounLabel: 'register meta',\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 = useMemo((() => remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined\n ), [remoteUsername, registerMetadata]);\n\n const getRelatedItemClassConfiguration = useMemo(\n (() => _getRelatedClass(itemClassConfiguration)),\n [itemClassConfiguration]);\n\n const [activeChangeRequestIDDebounced] = useDebounce(activeChangeRequestID, 200);\n const customViewsMemoized = useMemo((() => customViews ?? []), [customViews]); \n\n return (\n <BrowserCtx.Provider\n value={useMemo((() => ({\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n alterApprovedCR,\n itemClasses: itemClassConfiguration,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID: activeChangeRequestIDDebounced,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration,\n customViews: customViewsMemoized,\n\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n })), [\n selectedRegisterItem,\n activeChangeRequestIDDebounced,\n stakeholder,\n registerMetadata,\n remoteUsername,\n subregisters,\n spawnTab,\n useRegisterItemData,\n customViewsMemoized,\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n ])}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestIDDebounced}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\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, useCallback, useState, useMemo } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { jsx, css } from '@emotion/react';\n\nimport { Colors } from '@blueprintjs/core';\nimport type { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { type 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 type InternalItemReference,\n isRegisterItem,\n isRegisterMetadata,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nimport { BrowserCtx } from './BrowserCtx';\nimport { formatDate, _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 { sidebarConfig, sidebarConfigForStakeholder } from './sidebar';\nimport { useItemRef, itemPathInCR } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, []>(\n undefined,\n [],\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> =\nfunction RegistryView (props) {\n const Workspace = useMemo(() => props.CustomWorkspace ?? RegistryWorkspace, []);\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <Workspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nexport const SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels'\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> =\nfunction RegistryWorkspace () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { registerMetadata, stakeholder } = useContext(BrowserCtx);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n const { id: vID, timestamp: vDate } = registerMetadata?.version ?? { id: null, timestamp: null };\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 : {\n content: <>\n Viewing register at version {vID ?? 'N/A'},\n published {vDate ? formatDate(vDate) : 'N/A'}\n </>,\n intent: 'none',\n minimal: true,\n }),\n [activeChangeRequest?.id, JSON.stringify(registerMetadata?.version), spawnTab],\n );\n\n const { value: { settings } } = useSettings();\n const { value: { settings: globalSettings } } = useGlobalSettings();\n\n const stored = settings[SIDEBAR_WIDTH_SETTING_NAME];\n const sidebarWidth: number | undefined = stored && typeof stored === 'number'\n ? stored as number\n : undefined;\n\n const activeSidebarConfig = useMemo(\n (() => stakeholder ? sidebarConfigForStakeholder : sidebarConfig),\n [stakeholder]);\n\n return (\n <div css={css`flex: 1 1 auto; display: flex; flex-flow: column nowrap; overflow: hidden;`}>\n <header css={css`\n min-height: 2em;\n flex: 0;\n line-height: 1;\n font-size: 200%;\n background: ${Colors.LIGHT_GRAY2};\n padding: .5em 20px;\n .bp4-dark & {\n background: ${Colors.DARK_GRAY2};\n }\n display: flex;\n flex-flow: row nowrap;\n `}>\n <h1 css={css`\n line-height: unset !important;\n font-size: unset !important;\n font-weight: bold;\n color: ${Colors.DARK_GRAY5};\n .bp4-dark & {\n color: ${Colors.LIGHT_GRAY3};\n }\n margin: 0;\n flex: 1;\n letter-spacing: -.025em;\n `}>\n {registerMetadata?.name ?? 'Register'}\n </h1>\n <span css={css`font-size: 50%; display: flex; gap: 10px; align-self: flex-end;`}>\n <a>Documentation</a>\n •\n <a>Feedback</a>\n </span>\n </header>\n <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={activeSidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={useMemo(() => ['Browse'], [])}\n newTabPrompt={newTabPrompt}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={useCallback((width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }, [updateSetting])}\n />\n </div>\n );\n};\n\n\nconst newTabPrompt = <RegisterHome />;\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function BrowserCtxProvider ({\n itemClassConfiguration,\n itemClassGroups,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n alterApprovedCR,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n\n // Active item\n\n const selectedItemPath: string | null = useMemo((() =>\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null\n ), [focusedTabURI]);\n\n const selectedItemRef: InternalItemReference | null = useItemRef(\n subregisters !== undefined,\n selectedItemPath);\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] = useMemo((() =>\n selectedItemRef\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null\n ), [selectedItemRef, maybeSelectedRegisterItemData]);\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\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 = useCallback((opts) => {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\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 = useMemo(() => {\n const pathsToRequest: Record<string, string> = {};\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 return pathsToRequest;\n }, [activeChangeRequest?.id, opts.itemPaths.sort().toString()]);\n\n const objectPaths = Object.keys(pathsToRequest).sort();\n\n const result = useObjectData({\n objectPaths,\n //nounLabel: 'register item(s)',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData = useMemo(() => {\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 return itemData;\n }, [pathsToRequest, result.value.data]);\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 }, [useObjectData, activeChangeRequestID]);\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n nounLabel: 'register meta',\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 = useMemo((() => remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined\n ), [remoteUsername, registerMetadata]);\n\n const getRelatedItemClassConfiguration = useMemo(\n (() => _getRelatedClass(itemClassConfiguration)),\n [itemClassConfiguration]);\n\n const [activeChangeRequestIDDebounced] = useDebounce(activeChangeRequestID, 200);\n const customViewsMemoized = useMemo((() => customViews ?? []), [customViews]); \n\n return (\n <BrowserCtx.Provider\n value={useMemo((() => ({\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n alterApprovedCR,\n itemClasses: itemClassConfiguration,\n itemClassGroups,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID: activeChangeRequestIDDebounced,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration,\n customViews: customViewsMemoized,\n\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n })), [\n selectedRegisterItem,\n activeChangeRequestIDDebounced,\n stakeholder,\n registerMetadata,\n remoteUsername,\n subregisters,\n spawnTab,\n useRegisterItemData,\n customViewsMemoized,\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n ])}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestIDDebounced}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { ProtocolRegistry } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/types';
2
2
  export declare const Protocols: {
3
3
  readonly ITEM_DETAILS: "itemdetails";
4
+ readonly ITEM_CLASS: "itemclass";
4
5
  readonly REGISTER_META: "registermeta";
5
6
  readonly CHANGE_REQUEST: "changerequest";
6
7
  readonly CUSTOM_VIEW: "customview";
@@ -8,6 +8,8 @@ exports.default = exports.protocols = exports.Protocols = void 0;
8
8
 
9
9
  var _RegisterItem = _interopRequireDefault(require("./detail/RegisterItem"));
10
10
 
11
+ var _RegisterItemClass = _interopRequireDefault(require("./detail/RegisterItemClass"));
12
+
11
13
  var _RegisterMeta = _interopRequireDefault(require("./detail/RegisterMeta"));
12
14
 
13
15
  var _ChangeRequest = _interopRequireDefault(require("./detail/ChangeRequest"));
@@ -18,6 +20,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
18
20
 
19
21
  const Protocols = {
20
22
  ITEM_DETAILS: 'itemdetails',
23
+ ITEM_CLASS: 'itemclass',
21
24
  REGISTER_META: 'registermeta',
22
25
  CHANGE_REQUEST: 'changerequest',
23
26
  CUSTOM_VIEW: 'customview'
@@ -34,6 +37,7 @@ function isValidProtocol(val) {
34
37
 
35
38
  const protocolRegistry = {
36
39
  [Protocols.ITEM_DETAILS]: _RegisterItem.default,
40
+ [Protocols.ITEM_CLASS]: _RegisterItemClass.default,
37
41
  [Protocols.REGISTER_META]: _RegisterMeta.default,
38
42
  [Protocols.CHANGE_REQUEST]: _ChangeRequest.default,
39
43
  [Protocols.CUSTOM_VIEW]: _CustomView.default
@@ -1 +1 @@
1
- {"version":3,"file":"protocolRegistry.js","sourceRoot":"","sources":["../../src/views/protocolRegistry.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,aAAa;IAC3B,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,eAAe;IAC/B,WAAW,EAAE,YAAY;CACjB,CAAC;AAIX,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAe,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,SAAS,CAAC,OAAO,CAAC,GAAe,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,sEAAsE;AACtE,iCAAiC;AACjC,MAAM,gBAAgB,GAA+B;IACnD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY;IACtC,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,YAAY;IACvC,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa;IACzC,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU;CACpC,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import type { ProtocolRegistry } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/types';\nimport RegisterItem from './detail/RegisterItem';\nimport RegisterMeta from './detail/RegisterMeta';\nimport ChangeRequest from './detail/ChangeRequest';\nimport CustomView from './detail/CustomView';\n\nexport const Protocols = {\n ITEM_DETAILS: 'itemdetails',\n REGISTER_META: 'registermeta',\n CHANGE_REQUEST: 'changerequest',\n CUSTOM_VIEW: 'customview',\n} as const;\n\nexport type Protocol = typeof Protocols[keyof typeof Protocols];\n\nexport const protocols = Object.values(Protocols) as Protocol[];\n\nexport function isValidProtocol(val: string): val is Protocol {\n return protocols.indexOf(val as Protocol) >= 0;\n}\n\n// TODO: Implement proper registration pattern rather than registering\n// these in a centralized manner.\nconst protocolRegistry: ProtocolRegistry<Protocol> = {\n [Protocols.ITEM_DETAILS]: RegisterItem,\n [Protocols.REGISTER_META]: RegisterMeta,\n [Protocols.CHANGE_REQUEST]: ChangeRequest,\n [Protocols.CUSTOM_VIEW]: CustomView,\n};\n\nexport default protocolRegistry;\n"]}
1
+ {"version":3,"file":"protocolRegistry.js","sourceRoot":"","sources":["../../src/views/protocolRegistry.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,iBAAiB,MAAM,4BAA4B,CAAC;AAC3D,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,eAAe;IAC/B,WAAW,EAAE,YAAY;CACjB,CAAC;AAIX,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAe,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,SAAS,CAAC,OAAO,CAAC,GAAe,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,sEAAsE;AACtE,iCAAiC;AACjC,MAAM,gBAAgB,GAA+B;IACnD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY;IACtC,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,iBAAiB;IACzC,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,YAAY;IACvC,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa;IACzC,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU;CACpC,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import type { ProtocolRegistry } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/types';\nimport RegisterItem from './detail/RegisterItem';\nimport RegisterItemClass from './detail/RegisterItemClass';\nimport RegisterMeta from './detail/RegisterMeta';\nimport ChangeRequest from './detail/ChangeRequest';\nimport CustomView from './detail/CustomView';\n\nexport const Protocols = {\n ITEM_DETAILS: 'itemdetails',\n ITEM_CLASS: 'itemclass',\n REGISTER_META: 'registermeta',\n CHANGE_REQUEST: 'changerequest',\n CUSTOM_VIEW: 'customview',\n} as const;\n\nexport type Protocol = typeof Protocols[keyof typeof Protocols];\n\nexport const protocols = Object.values(Protocols) as Protocol[];\n\nexport function isValidProtocol(val: string): val is Protocol {\n return protocols.indexOf(val as Protocol) >= 0;\n}\n\n// TODO: Implement proper registration pattern rather than registering\n// these in a centralized manner.\nconst protocolRegistry: ProtocolRegistry<Protocol> = {\n [Protocols.ITEM_DETAILS]: RegisterItem,\n [Protocols.ITEM_CLASS]: RegisterItemClass,\n [Protocols.REGISTER_META]: RegisterMeta,\n [Protocols.CHANGE_REQUEST]: ChangeRequest,\n [Protocols.CUSTOM_VIEW]: CustomView,\n};\n\nexport default protocolRegistry;\n"]}
@@ -5,14 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = require("react");
9
9
 
10
10
  var _react2 = require("@emotion/react");
11
11
 
12
12
  var _core = require("@blueprintjs/core");
13
13
 
14
- var _popover = require("@blueprintjs/popover2");
15
-
16
14
  var _context = require("@riboseinc/paneron-extension-kit/context");
17
15
 
18
16
  var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
@@ -23,6 +21,8 @@ var _criteriaGroupToQueryExpression = _interopRequireDefault(require("../../Filt
23
21
 
24
22
  var _CRITERIA_CONFIGURATION = _interopRequireDefault(require("../../FilterCriteria/CRITERIA_CONFIGURATION"));
25
23
 
24
+ var _util = require("../../util");
25
+
26
26
  var _itemPathUtils = require("../../itemPathUtils");
27
27
 
28
28
  var _itemQueryUtils = require("../../itemQueryUtils");
@@ -39,10 +39,6 @@ var _protocolRegistry = require("../../protocolRegistry");
39
39
 
40
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
41
41
 
42
- 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); }
43
-
44
- 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; }
45
-
46
42
  /** @jsx jsx */
47
43
 
48
44
  /** @jsxFrag React.Fragment */
@@ -224,7 +220,7 @@ const Browse = (0, _react.memo)(function ({
224
220
  const clsConfig = itemClasses[classID];
225
221
  folderInfo = {
226
222
  title: (_b = (_a = clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.meta) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : classID,
227
- moreMenu: clsConfig ? (0, _react2.jsx)(ItemClassMenu, {
223
+ moreMenu: clsConfig ? (0, _react2.jsx)(_util.ItemClassMenu, {
228
224
  cfg: itemClasses[classID],
229
225
  onCreate: handleAdd ? () => handleAdd(classID) : undefined
230
226
  }) : undefined
@@ -292,7 +288,7 @@ const Browse = (0, _react.memo)(function ({
292
288
  hasCaret: true,
293
289
  icon: 'folder-open',
294
290
  label: folderInfo.title,
295
- secondaryLabel: folderInfo.moreMenu ? (0, _react2.jsx)(MoreMenu, null, folderInfo.moreMenu) : undefined
291
+ secondaryLabel: folderInfo.moreMenu ? (0, _react2.jsx)(_util.MoreMenu, null, folderInfo.moreMenu) : undefined
296
292
  }]
297
293
  }), (0, _react2.jsx)("div", {
298
294
  css: (0, _react2.css)`flex: 1;`
@@ -326,7 +322,7 @@ const Browse = (0, _react.memo)(function ({
326
322
  nodeData: {
327
323
  folderID: `by-item-class/${classID}`
328
324
  },
329
- secondaryLabel: (0, _react2.jsx)(MoreMenu, null, (0, _react2.jsx)(ItemClassMenu, {
325
+ secondaryLabel: (0, _react2.jsx)(_util.MoreMenu, null, (0, _react2.jsx)(_util.ItemClassMenu, {
330
326
  cfg: classConfig,
331
327
  onCreate: handleAdd ? () => handleAdd(classID) : undefined
332
328
  }))
@@ -350,7 +346,7 @@ const Browse = (0, _react.memo)(function ({
350
346
  nodeData: {
351
347
  folderID: `by-subregister/${subregisterID}`
352
348
  },
353
- secondaryLabel: (0, _react2.jsx)(MoreMenu, null, (0, _react2.jsx)(SubregisterMenu, {
349
+ secondaryLabel: (0, _react2.jsx)(_util.MoreMenu, null, (0, _react2.jsx)(SubregisterMenu, {
354
350
  cfg: subregisterConfig,
355
351
  itemClasses: itemClasses,
356
352
  onCreate: handleAddInSubregister ? clsID => handleAddInSubregister(clsID, subregisterID) : undefined
@@ -398,18 +394,6 @@ const Browse = (0, _react.memo)(function ({
398
394
  });
399
395
  }
400
396
  });
401
- const MoreMenu = (0, _react.memo)(function ({
402
- children
403
- }) {
404
- return (0, _react2.jsx)(_popover.Popover2, {
405
- minimal: true,
406
- content: (0, _react2.jsx)(_react.default.Fragment, null, children)
407
- }, (0, _react2.jsx)(_core.Button, {
408
- icon: "more",
409
- small: true,
410
- minimal: true
411
- }));
412
- });
413
397
  const SubregisterMenu = (0, _react.memo)(function ({
414
398
  cfg,
415
399
  itemClasses,
@@ -423,32 +407,12 @@ const SubregisterMenu = (0, _react.memo)(function ({
423
407
  return (0, _react2.jsx)(_core.MenuItem, {
424
408
  text: (_c = (_b = (_a = itemClasses[classID]) === null || _a === void 0 ? void 0 : _a.meta) === null || _b === void 0 ? void 0 : _b.title) !== null && _c !== void 0 ? _c : classID,
425
409
  key: classID
426
- }, (0, _react2.jsx)(ItemClassMenu, {
410
+ }, (0, _react2.jsx)(_util.ItemClassMenu, {
427
411
  cfg: itemClasses[classID],
428
412
  onCreate: onCreate ? () => onCreate(classID) : undefined
429
413
  }));
430
414
  }));
431
415
  });
432
- const ItemClassMenu = (0, _react.memo)(function ({
433
- cfg,
434
- onCreate
435
- }) {
436
- return (0, _react2.jsx)(_core.Menu, null, (0, _react2.jsx)(_core.MenuDivider, {
437
- title: "About this class"
438
- }), (0, _react2.jsx)(_core.MenuItem, {
439
- multiline: true,
440
- disabled: true,
441
- css: (0, _react2.css)`max-width: 400px`,
442
- text: cfg.meta.description
443
- }), onCreate ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_core.MenuDivider, {
444
- title: "Quick actions"
445
- }), (0, _react2.jsx)(_core.MenuItem, {
446
- text: "Propose new",
447
- intent: "primary",
448
- onClick: onCreate,
449
- icon: "plus"
450
- })) : null);
451
- });
452
416
  const SearchResultList = (0, _SearchResultList.default)(_ListItem.default, objPath => ({
453
417
  name: 'reg. item',
454
418
  iconProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Browse/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useMemo, useCallback, useContext, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, IconName, Menu, MenuItem, MenuDivider, Tree, TreeNodeInfo } from '@blueprintjs/core';\nimport { Popover2 } from '@blueprintjs/popover2';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\n\nimport type { CriteriaGroup } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport CRITERIA_CONFIGURATION from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { updateCRObjectChangeset } from '../../change-request/objectChangeset';\nimport type { RegisterItem, InternalItemReference } from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\ninterface BaseState {\n selectedFolderID: string | null\n selectedItemPath: string | null\n enteredFolderID: string | null\n}\ninterface FolderListState extends BaseState {\n enteredFolderID: null\n selectedItemPath: null\n}\ninterface ItemListState extends BaseState {\n enteredFolderID: string\n selectedFolderID: string\n}\ntype State = FolderListState | ItemListState\n\ntype Action =\n | { type: 'select-folder'; payload: { id: string | null; }; }\n | { type: 'enter-folder'; payload: { id: string; }; }\n | { type: 'exit-folder'; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n selectedFolderID: null,\n enteredFolderID: null,\n selectedItemPath: null,\n};\nfunction validateState(loadedValue: any): loadedValue is State {\n return (\n _validateFolderID(loadedValue.enteredFolderID) &&\n _validateFolderID(loadedValue.selectedFolderID) &&\n loadedValue.selectedItemPath !== undefined\n );\n};\nfunction _validateFolderID(foldID: string) {\n return foldID !== undefined &&\n (\n foldID === null || (\n foldID.startsWith('by-item-class/') ||\n foldID.startsWith('by-subregister/')\n )\n )\n}\n\nconst Browse: React.FC<{\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n stateName?: string\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ stateName, onOpenItem, className, style }) {\n const { performOperation, updateObjects, makeRandomID, usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters } = useContext(BrowserCtx);\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'browse-sidebar',\n undefined,\n validateState,\n (prevState, action) => {\n switch (action.type) {\n case 'select-folder':\n if (prevState.enteredFolderID !== null) {\n return prevState;\n } else {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n };\n }\n case 'enter-folder':\n if (prevState.enteredFolderID === null) {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n enteredFolderID: action.payload.id,\n };\n } else {\n return prevState;\n }\n case 'exit-folder':\n if (prevState.enteredFolderID !== null) {\n return {\n ...prevState,\n enteredFolderID: null,\n selectedItemPath: null,\n };\n } else {\n return prevState;\n }\n case 'select-item':\n if (prevState.enteredFolderID && prevState.selectedFolderID) {\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n } else {\n return prevState;\n }\n default:\n throw new Error(\"Unexpected browse state\");\n }\n },\n initialState,\n null);\n\n // If currently focused tab changed, select corresponding item in view\n useEffect(() => {\n if (focusedTabURI) {\n const [proto, itemPath] = focusedTabURI.split(':');\n // TODO: also check entered folder?\n if (proto === Protocols.ITEM_DETAILS) {\n dispatch({ type: 'select-item', payload: { itemPath } });\n }\n }\n }, [focusedTabURI, dispatch]);\n\n const createItem = useCallback(async function _createItem(classID: string, subregisterID?: string) {\n if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {\n throw new Error(\"Unable to create item: likely current proposal is not editable or dataset is read-only\");\n }\n if (subregisters && !subregisterID) {\n throw new Error(\"Unable to create item: register uses subregisters, but subregister ID was not provided\");\n }\n const clsConfig = itemClasses[classID];\n if (!clsConfig) {\n throw new Error(\"Unable to generate new item data: item class configuration is missing\");\n }\n const initialItemData = clsConfig?.defaults ?? {};\n const itemID = await makeRandomID();\n const ref: InternalItemReference = { classID, itemID, subregisterID };\n const registerItem: RegisterItem<any> = {\n id: itemID,\n dateAccepted: new Date(),\n status: 'valid',\n data: initialItemData,\n };\n const itemPath = itemRefToItemPath(ref);\n await updateObjects({\n commitMessage: `propose to add new ${ref.classID}`,\n objectChangeset: updateCRObjectChangeset(\n activeCR as any,\n { [itemPath]: { type: 'addition' } },\n { [itemPath]: registerItem },\n ),\n _dangerouslySkipValidation: true,\n });\n spawnTab(`${Protocols.ITEM_DETAILS}:${itemRefToItemPath(ref, activeCR.id)}`);\n }, [activeCR, activeCRIsEditable, subregisters === undefined, spawnTab, updateObjects, makeRandomID]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n const handleDeselectItem = useCallback(\n (() => dispatch({ type: 'select-item', payload: { itemPath: null } })),\n [dispatch]);\n const handleOpenItem = useCallback(\n ((itemPath) =>\n (onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)))\n (itemPath)),\n [onOpenItem, spawnTab]);\n const handleExitFolder = useCallback(\n (() => dispatch({ type: 'exit-folder' })),\n [dispatch]);\n\n const handleAdd: undefined | ((clsID: string) => Promise<void>) = useMemo((() =>\n !subregisters && activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', createItem)(clsID)\n : undefined\n ), [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);\n\n const handleAddInSubregister: undefined | ((clsID: string, subregID: string) => Promise<void>) = useMemo((() =>\n subregisters && activeCRIsEditable && performOperation\n ? (clsID, subregID) => performOperation('generating new item', createItem)(clsID, subregID)\n : undefined\n ), [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);\n\n if (state.enteredFolderID !== null) {\n // If we are in a folder, show a tree with a single element\n // indicating currently entered folder\n // followed by windowed search result list\n // with query according to the folder (item class, subregister)\n\n let criteria: CriteriaGroup;\n let folderInfo: { title: string; moreMenu?: JSX.Element };\n\n if (state.enteredFolderID.startsWith('by-item-class/')) {\n const classID = state.enteredFolderID.split('/')[1];\n const clsConfig = itemClasses[classID];\n folderInfo = {\n title: clsConfig?.meta?.title ?? classID,\n moreMenu: clsConfig\n ? <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={handleAdd ? () => handleAdd(classID) : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'item-class',\n query: CRITERIA_CONFIGURATION['item-class'].toQuery(\n { classID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else if (subregisters && state.enteredFolderID.startsWith('by-subregister/')) {\n const subregisterID = state.enteredFolderID.split('/')[1];\n const subregConfig = subregisters[subregisterID];\n folderInfo = {\n title: subregConfig?.title ?? subregisterID,\n moreMenu: subregConfig\n ? <SubregisterMenu\n cfg={subregConfig}\n itemClasses={itemClasses}\n onCreate={handleAddInSubregister\n ? (clsID) => handleAddInSubregister(clsID, subregisterID)\n : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'subregister',\n query: CRITERIA_CONFIGURATION['subregister'].toQuery(\n { subregisterID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else {\n folderInfo = { title: '' };\n criteria = { require: 'all', criteria: [] };\n }\n\n\n const queryExpression = criteriaGroupToQueryExpression(criteria);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <Tree\n css={css`flex: 0;`}\n // This click handler deselects any items in results, meaning.\n onNodeClick={handleDeselectItem}\n onNodeCollapse={handleExitFolder}\n onNodeDoubleClick={handleExitFolder}\n contents={[{\n id: 'opened-class',\n isSelected: state.selectedItemPath === null,\n isExpanded: true,\n hasCaret: true,\n icon: 'folder-open',\n label: folderInfo.title,\n secondaryLabel: folderInfo.moreMenu\n ? <MoreMenu>{folderInfo.moreMenu}</MoreMenu>\n : undefined,\n }]}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={getRegisterItemQuery(queryExpression, activeCR ?? undefined)}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\n </div>\n </div>\n );\n } else {\n // If we are *not* in a folder, show a list of available folders/views\n // (item classes, subregisters)\n\n const contents: TreeNodeInfo<{ folderID: string | null }>[] = [{\n id: 'by-item-class',\n isExpanded: true,\n hasCaret: false,\n icon: 'filter',\n label: \"By item class\",\n disabled: true,\n nodeData: { folderID: null },\n }, ...Object.entries(itemClasses).map(([classID, classConfig]) => ({\n isSelected: state.selectedFolderID === `by-item-class/${classID}`,\n id: classID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: classConfig.meta.title,\n nodeData: { folderID: `by-item-class/${classID}` },\n secondaryLabel:\n <MoreMenu>\n <ItemClassMenu\n cfg={classConfig}\n onCreate={handleAdd ? () => handleAdd(classID) : undefined}\n />\n </MoreMenu>,\n })), ...(subregisters\n ? [{\n id: 'by-subregister',\n isExpanded: true,\n hasCaret: false,\n disabled: true,\n icon: 'filter' as IconName,\n label: \"By subregister\",\n nodeData: { folderID: null },\n }, ...Object.entries(subregisters).map(([subregisterID, subregisterConfig]) => ({\n isSelected: state.selectedFolderID === `by-subregister/${subregisterID}`,\n id: subregisterID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: subregisterConfig.title,\n nodeData: { folderID: `by-subregister/${subregisterID}` },\n secondaryLabel:\n <MoreMenu>\n <SubregisterMenu\n cfg={subregisterConfig}\n itemClasses={itemClasses}\n onCreate={handleAddInSubregister\n ? (clsID) => handleAddInSubregister(clsID, subregisterID)\n : undefined}\n />\n </MoreMenu>,\n }))]\n : [])\n ];\n if (subregisters) {\n contents.push()\n }\n return (\n <Tree\n css={css`flex: 1;`}\n className={className}\n onNodeClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'select-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeExpand={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeDoubleClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n contents={contents}\n />\n );\n }\n});\n\n\nconst MoreMenu: React.FC<Record<never, never>> = memo(function ({ children }) {\n return (\n <Popover2 minimal content={<>{children}</>}>\n <Button icon=\"more\" small minimal />\n </Popover2>\n );\n});\n\n\nconst SubregisterMenu: React.FC<{\n cfg: { title: string, itemClasses: string[] };\n itemClasses: BrowserCtx[\"itemClasses\"];\n onCreate?: (classID: string) => void;\n}> = memo(function ({ cfg, itemClasses, onCreate }) {\n return (\n <Menu>\n <MenuDivider title={`Item classes in ${cfg.title}`} />\n {cfg.itemClasses.map(classID =>\n <MenuItem\n text={itemClasses[classID]?.meta?.title ?? classID}\n key={classID}>\n <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={onCreate ? () => onCreate(classID) : undefined}\n />\n </MenuItem>\n )}\n </Menu>\n );\n});\n\n\nconst ItemClassMenu: React.FC<{\n cfg: BrowserCtx[\"itemClasses\"][string];\n onCreate?: () => void;\n}> = memo(function ({ cfg, onCreate }) {\n return (\n <Menu>\n <MenuDivider title=\"About this class\" />\n <MenuItem multiline disabled css={css`max-width: 400px`} text={cfg.meta.description} />\n {onCreate\n ? <>\n <MenuDivider title=\"Quick actions\" />\n <MenuItem\n text=\"Propose new\"\n intent=\"primary\"\n onClick={onCreate} icon=\"plus\"\n />\n </>\n : null}\n </Menu>\n );\n});\n\n\nconst SearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`\n }\n}));\n\n\nexport default Browse;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Browse/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useMemo, useCallback, useContext, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { IconName, Menu, MenuItem, MenuDivider, Tree, type TreeNodeInfo } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\n\nimport type { CriteriaGroup } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport CRITERIA_CONFIGURATION from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { MoreMenu, ItemClassMenu } from '../../util';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { updateCRObjectChangeset } from '../../change-request/objectChangeset';\nimport type { RegisterItem, InternalItemReference } from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\ninterface BaseState {\n selectedFolderID: string | null\n selectedItemPath: string | null\n enteredFolderID: string | null\n}\ninterface FolderListState extends BaseState {\n enteredFolderID: null\n selectedItemPath: null\n}\ninterface ItemListState extends BaseState {\n enteredFolderID: string\n selectedFolderID: string\n}\ntype State = FolderListState | ItemListState\n\ntype Action =\n | { type: 'select-folder'; payload: { id: string | null; }; }\n | { type: 'enter-folder'; payload: { id: string; }; }\n | { type: 'exit-folder'; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n selectedFolderID: null,\n enteredFolderID: null,\n selectedItemPath: null,\n};\nfunction validateState(loadedValue: any): loadedValue is State {\n return (\n _validateFolderID(loadedValue.enteredFolderID) &&\n _validateFolderID(loadedValue.selectedFolderID) &&\n loadedValue.selectedItemPath !== undefined\n );\n};\nfunction _validateFolderID(foldID: string) {\n return foldID !== undefined &&\n (\n foldID === null || (\n foldID.startsWith('by-item-class/') ||\n foldID.startsWith('by-subregister/')\n )\n )\n}\n\nconst Browse: React.FC<{\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n stateName?: string\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ stateName, onOpenItem, className, style }) {\n const { performOperation, updateObjects, makeRandomID, usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters } = useContext(BrowserCtx);\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'browse-sidebar',\n undefined,\n validateState,\n (prevState, action) => {\n switch (action.type) {\n case 'select-folder':\n if (prevState.enteredFolderID !== null) {\n return prevState;\n } else {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n };\n }\n case 'enter-folder':\n if (prevState.enteredFolderID === null) {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n enteredFolderID: action.payload.id,\n };\n } else {\n return prevState;\n }\n case 'exit-folder':\n if (prevState.enteredFolderID !== null) {\n return {\n ...prevState,\n enteredFolderID: null,\n selectedItemPath: null,\n };\n } else {\n return prevState;\n }\n case 'select-item':\n if (prevState.enteredFolderID && prevState.selectedFolderID) {\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n } else {\n return prevState;\n }\n default:\n throw new Error(\"Unexpected browse state\");\n }\n },\n initialState,\n null);\n\n // If currently focused tab changed, select corresponding item in view\n useEffect(() => {\n if (focusedTabURI) {\n const [proto, itemPath] = focusedTabURI.split(':');\n // TODO: also check entered folder?\n if (proto === Protocols.ITEM_DETAILS) {\n dispatch({ type: 'select-item', payload: { itemPath } });\n }\n }\n }, [focusedTabURI, dispatch]);\n\n const createItem = useCallback(async function _createItem(classID: string, subregisterID?: string) {\n if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {\n throw new Error(\"Unable to create item: likely current proposal is not editable or dataset is read-only\");\n }\n if (subregisters && !subregisterID) {\n throw new Error(\"Unable to create item: register uses subregisters, but subregister ID was not provided\");\n }\n const clsConfig = itemClasses[classID];\n if (!clsConfig) {\n throw new Error(\"Unable to generate new item data: item class configuration is missing\");\n }\n const initialItemData = clsConfig?.defaults ?? {};\n const itemID = await makeRandomID();\n const ref: InternalItemReference = { classID, itemID, subregisterID };\n const registerItem: RegisterItem<any> = {\n id: itemID,\n dateAccepted: new Date(),\n status: 'valid',\n data: initialItemData,\n };\n const itemPath = itemRefToItemPath(ref);\n await updateObjects({\n commitMessage: `propose to add new ${ref.classID}`,\n objectChangeset: updateCRObjectChangeset(\n activeCR as any,\n { [itemPath]: { type: 'addition' } },\n { [itemPath]: registerItem },\n ),\n _dangerouslySkipValidation: true,\n });\n spawnTab(`${Protocols.ITEM_DETAILS}:${itemRefToItemPath(ref, activeCR.id)}`);\n }, [activeCR, activeCRIsEditable, subregisters === undefined, spawnTab, updateObjects, makeRandomID]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n const handleDeselectItem = useCallback(\n (() => dispatch({ type: 'select-item', payload: { itemPath: null } })),\n [dispatch]);\n const handleOpenItem = useCallback(\n ((itemPath) =>\n (onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)))\n (itemPath)),\n [onOpenItem, spawnTab]);\n const handleExitFolder = useCallback(\n (() => dispatch({ type: 'exit-folder' })),\n [dispatch]);\n\n const handleAdd: undefined | ((clsID: string) => Promise<void>) = useMemo((() =>\n !subregisters && activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', createItem)(clsID)\n : undefined\n ), [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);\n\n const handleAddInSubregister: undefined | ((clsID: string, subregID: string) => Promise<void>) = useMemo((() =>\n subregisters && activeCRIsEditable && performOperation\n ? (clsID, subregID) => performOperation('generating new item', createItem)(clsID, subregID)\n : undefined\n ), [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);\n\n if (state.enteredFolderID !== null) {\n // If we are in a folder, show a tree with a single element\n // indicating currently entered folder\n // followed by windowed search result list\n // with query according to the folder (item class, subregister)\n\n let criteria: CriteriaGroup;\n let folderInfo: { title: string; moreMenu?: JSX.Element };\n\n if (state.enteredFolderID.startsWith('by-item-class/')) {\n const classID = state.enteredFolderID.split('/')[1];\n const clsConfig = itemClasses[classID];\n folderInfo = {\n title: clsConfig?.meta?.title ?? classID,\n moreMenu: clsConfig\n ? <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={handleAdd ? () => handleAdd(classID) : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'item-class',\n query: CRITERIA_CONFIGURATION['item-class'].toQuery(\n { classID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else if (subregisters && state.enteredFolderID.startsWith('by-subregister/')) {\n const subregisterID = state.enteredFolderID.split('/')[1];\n const subregConfig = subregisters[subregisterID];\n folderInfo = {\n title: subregConfig?.title ?? subregisterID,\n moreMenu: subregConfig\n ? <SubregisterMenu\n cfg={subregConfig}\n itemClasses={itemClasses}\n onCreate={handleAddInSubregister\n ? (clsID) => handleAddInSubregister(clsID, subregisterID)\n : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'subregister',\n query: CRITERIA_CONFIGURATION['subregister'].toQuery(\n { subregisterID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else {\n folderInfo = { title: '' };\n criteria = { require: 'all', criteria: [] };\n }\n\n\n const queryExpression = criteriaGroupToQueryExpression(criteria);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <Tree\n css={css`flex: 0;`}\n // This click handler deselects any items in results, meaning.\n onNodeClick={handleDeselectItem}\n onNodeCollapse={handleExitFolder}\n onNodeDoubleClick={handleExitFolder}\n contents={[{\n id: 'opened-class',\n isSelected: state.selectedItemPath === null,\n isExpanded: true,\n hasCaret: true,\n icon: 'folder-open',\n label: folderInfo.title,\n secondaryLabel: folderInfo.moreMenu\n ? <MoreMenu>{folderInfo.moreMenu}</MoreMenu>\n : undefined,\n }]}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={getRegisterItemQuery(queryExpression, activeCR ?? undefined)}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\n </div>\n </div>\n );\n } else {\n // If we are *not* in a folder, show a list of available folders/views\n // (item classes, subregisters)\n\n const contents: TreeNodeInfo<{ folderID: string | null }>[] = [{\n id: 'by-item-class',\n isExpanded: true,\n hasCaret: false,\n icon: 'filter',\n label: \"By item class\",\n disabled: true,\n nodeData: { folderID: null },\n }, ...Object.entries(itemClasses).map(([classID, classConfig]) => ({\n isSelected: state.selectedFolderID === `by-item-class/${classID}`,\n id: classID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: classConfig.meta.title,\n nodeData: { folderID: `by-item-class/${classID}` },\n secondaryLabel:\n <MoreMenu>\n <ItemClassMenu\n cfg={classConfig}\n onCreate={handleAdd ? () => handleAdd(classID) : undefined}\n />\n </MoreMenu>,\n })), ...(subregisters\n ? [{\n id: 'by-subregister',\n isExpanded: true,\n hasCaret: false,\n disabled: true,\n icon: 'filter' as IconName,\n label: \"By subregister\",\n nodeData: { folderID: null },\n }, ...Object.entries(subregisters).map(([subregisterID, subregisterConfig]) => ({\n isSelected: state.selectedFolderID === `by-subregister/${subregisterID}`,\n id: subregisterID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: subregisterConfig.title,\n nodeData: { folderID: `by-subregister/${subregisterID}` },\n secondaryLabel:\n <MoreMenu>\n <SubregisterMenu\n cfg={subregisterConfig}\n itemClasses={itemClasses}\n onCreate={handleAddInSubregister\n ? (clsID) => handleAddInSubregister(clsID, subregisterID)\n : undefined}\n />\n </MoreMenu>,\n }))]\n : [])\n ];\n if (subregisters) {\n contents.push()\n }\n return (\n <Tree\n css={css`flex: 1;`}\n className={className}\n onNodeClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'select-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeExpand={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeDoubleClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n contents={contents}\n />\n );\n }\n});\n\n\nconst SubregisterMenu: React.FC<{\n cfg: { title: string, itemClasses: string[] };\n itemClasses: BrowserCtx[\"itemClasses\"];\n onCreate?: (classID: string) => void;\n}> = memo(function ({ cfg, itemClasses, onCreate }) {\n return (\n <Menu>\n <MenuDivider title={`Item classes in ${cfg.title}`} />\n {cfg.itemClasses.map(classID =>\n <MenuItem\n text={itemClasses[classID]?.meta?.title ?? classID}\n key={classID}>\n <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={onCreate ? () => onCreate(classID) : undefined}\n />\n </MenuItem>\n )}\n </Menu>\n );\n});\n\n\nconst SearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`\n }\n}));\n\n\nexport default Browse;\n"]}