@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,7 @@
1
+ /** @jsx jsx */
2
+ /** @jsxFrag React.Fragment */
3
+ import React from 'react';
4
+ declare const AnnotatedChange: React.FC<{
5
+ type: 'added' | 'removed';
6
+ }>;
7
+ export default AnnotatedChange;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = require("@emotion/react");
9
+
10
+ var _react2 = _interopRequireWildcard(require("react"));
11
+
12
+ var _core = require("@blueprintjs/core");
13
+
14
+ var _roughNotation = require("rough-notation");
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
+ function annotateChange(type, wrappingEl, childIsBoxy) {
24
+ const highlightConfig = {
25
+ type: 'highlight',
26
+ animate: false,
27
+ color: _core.Colors.GOLD5,
28
+ iterations: 3
29
+ };
30
+ let changeConfig;
31
+
32
+ if (type === 'added') {
33
+ changeConfig = {
34
+ type: childIsBoxy ? 'bracket' : 'underline',
35
+ iterations: 1,
36
+ color: _core.Colors.BLUE4
37
+ };
38
+ } else {
39
+ changeConfig = {
40
+ type: 'crossed-off',
41
+ iterations: 1,
42
+ color: _core.Colors.RED3
43
+ };
44
+ }
45
+
46
+ const highlightAnnotation = (0, _roughNotation.annotate)(wrappingEl, highlightConfig);
47
+ const changeAnnotation = (0, _roughNotation.annotate)(wrappingEl, changeConfig);
48
+ return [highlightAnnotation, changeAnnotation];
49
+ }
50
+
51
+ const AnnotatedChange = ({
52
+ type,
53
+ children
54
+ }) => {
55
+ const elRef = (0, _react2.useRef)(null);
56
+
57
+ const firstChild = _react2.default.Children.toArray(children)[0];
58
+
59
+ const childType = _react2.default.isValidElement(firstChild) ? firstChild.type : undefined;
60
+ const childIsBoxy = childType === 'div'; // Could it bring more accuracy to block/inline detection?
61
+ //const childCount = React.isValidElement(firstChild) ? React.Children.count(firstChild.props.children) : undefined;
62
+
63
+ (0, _react2.useEffect)(() => {
64
+ if (elRef.current) {
65
+ const annotations = annotateChange(type, elRef.current, childIsBoxy);
66
+
67
+ for (const a of annotations) {
68
+ a.show();
69
+ }
70
+
71
+ return function cleanup() {
72
+ for (const a of annotations) {
73
+ a.remove();
74
+ }
75
+ };
76
+ }
77
+
78
+ return;
79
+ }, [elRef.current]);
80
+ return (0, _react.jsx)("mark", {
81
+ style: {
82
+ display: childIsBoxy ? 'block' : 'inline',
83
+ background: 'none'
84
+ },
85
+ ref: elRef,
86
+ title: `(${type} in this proposal)`
87
+ }, children);
88
+ };
89
+
90
+ var _default = AnnotatedChange;
91
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotatedChange.js","sourceRoot":"","sources":["../../src/views/AnnotatedChange.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,SAAS,cAAc,CACrB,IAAyB,EACzB,UAA2B,EAC3B,WAAgC;IAEhC,MAAM,eAAe,GAA0B;QAC7C,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,CAAC;KACd,CAAC;IACF,IAAI,YAAmC,CAAC;IACxC,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,YAAY,GAAG;YACb,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YAC3C,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;KACH;SAAM;QACL,YAAY,GAAG;YACb,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,MAAM,CAAC,IAAI;SACnB,CAAC;KACH;IACD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE5D,OAAO,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AACjD,CAAC;AAGD,MAAM,eAAe,GAA4C,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtF,MAAM,KAAK,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,WAAW,GAAG,SAAS,KAAK,KAAK,CAAC;IAExC,0DAA0D;IAC1D,oHAAoH;IAEpH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE;gBAC3B,CAAC,CAAC,IAAI,EAAE,CAAC;aACV;YACD,OAAO,SAAS,OAAO;gBACrB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE;oBAC3B,CAAC,CAAC,MAAM,EAAE,CAAC;iBACZ;YACH,CAAC,CAAA;SACF;QACD,OAAO;IACT,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,cACI,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EACxE,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,IAAI,IAAI,oBAAoB,IACpC,QAAQ,CACJ,CACR,CAAC;AACJ,CAAC,CAAC;AAGF,eAAe,eAAe,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport React, { useRef, useEffect } from 'react';\nimport { Colors } from '@blueprintjs/core'\nimport { annotate } from 'rough-notation';\nimport { RoughAnnotation, RoughAnnotationConfig } from 'rough-notation/lib/model';\n\n\nfunction annotateChange(\n type: 'added' | 'removed',\n wrappingEl: HTMLSpanElement,\n childIsBoxy: boolean | undefined):\nRoughAnnotation[] {\n const highlightConfig: RoughAnnotationConfig = {\n type: 'highlight',\n animate: false,\n color: Colors.GOLD5,\n iterations: 3,\n };\n let changeConfig: RoughAnnotationConfig;\n if (type === 'added') {\n changeConfig = {\n type: childIsBoxy ? 'bracket' : 'underline',\n iterations: 1,\n color: Colors.BLUE4,\n };\n } else {\n changeConfig = {\n type: 'crossed-off',\n iterations: 1,\n color: Colors.RED3,\n };\n }\n const highlightAnnotation = annotate(wrappingEl, highlightConfig);\n const changeAnnotation = annotate(wrappingEl, changeConfig);\n\n return [highlightAnnotation, changeAnnotation];\n}\n\n\nconst AnnotatedChange: React.FC<{ type: 'added' | 'removed' }> = ({ type, children }) => {\n const elRef = useRef<HTMLSpanElement | null>(null);\n\n const firstChild = React.Children.toArray(children)[0];\n\n const childType = React.isValidElement(firstChild) ? firstChild.type : undefined;\n const childIsBoxy = childType === 'div';\n\n // Could it bring more accuracy to block/inline detection?\n //const childCount = React.isValidElement(firstChild) ? React.Children.count(firstChild.props.children) : undefined;\n\n useEffect(() => {\n if (elRef.current) {\n const annotations = annotateChange(type, elRef.current, childIsBoxy);\n for (const a of annotations) {\n a.show();\n }\n return function cleanup() {\n for (const a of annotations) {\n a.remove();\n }\n }\n }\n return;\n }, [elRef.current]);\n\n return (\n <mark\n style={{ display: childIsBoxy ? 'block' : 'inline', background: 'none' }}\n ref={elRef}\n title={`(${type} in this proposal)`}>\n {children}\n </mark>\n );\n};\n\n\nexport default AnnotatedChange;\n"]}
@@ -1,9 +1,73 @@
1
+ /** @jsx jsx */
1
2
  /// <reference types="react" />
2
- import { ItemClassConfigurationSet, RegisterItemDataHook, Subregisters } from '../types';
3
+ import type { CustomViewConfiguration, ItemClassConfigurationSet, ItemClassConfiguration, RegisterItem, RegisterItemDataHook, Register, RegisterStakeholder, RelatedItemClassConfiguration, Subregisters, InternalItemReference } from '../types';
4
+ import { type CriteriaGroup } from './FilterCriteria/models';
5
+ import { type Protocol } from './protocolRegistry';
3
6
  export declare type BrowserCtx = {
4
7
  itemClasses: ItemClassConfigurationSet;
5
8
  subregisters?: Subregisters;
9
+ /**
10
+ * Stakeholder corresponding to the current user.
11
+ * If current user is not a stakeholder, undefined.
12
+ */
13
+ stakeholder?: RegisterStakeholder;
14
+ /**
15
+ * Common “key expression” (used for sorting) across the register.
16
+ * Should contain the expression itself, no “return” statement.
17
+ */
18
+ keyExpression?: string;
19
+ /** Default search criteria to be used by the Search sidebar */
20
+ defaultSearchCriteria?: CriteriaGroup;
21
+ /**
22
+ * Allows to access register metadata
23
+ * (e.g., version, stakeholders).
24
+ *
25
+ * `undefined` if loading, `null` if unspecified.
26
+ */
27
+ registerMetadata?: Register | null;
28
+ /** Hook for getting register item data. */
6
29
  useRegisterItemData: RegisterItemDataHook;
7
- jumpToItem?: (classID: string, itemID: string, subregisterID?: string) => void;
30
+ /**
31
+ * Invoked to navigate to an item.
32
+ * In SPA tabbed context, could translate to `spawnTab()`;
33
+ * in static web context, could translate to navigating browser location.
34
+ */
35
+ jumpTo?: (uri: `${Protocol}:${string}`) => void;
36
+ /**
37
+ * If a register item is selected, provide its data here.
38
+ *
39
+ * If item data is still loading or invalid, `undefined`.
40
+ * If item is not selected, `null`.
41
+ */
42
+ selectedRegisterItem?: {
43
+ item: RegisterItem<any>;
44
+ ref: InternalItemReference;
45
+ itemClass: ItemClassConfiguration<any>;
46
+ } | null;
47
+ /**
48
+ * Change request being drafted or reviewed.
49
+ * `undefined` if loading, `null` if there is no active change request.
50
+ */
51
+ activeChangeRequestID?: string | null;
52
+ /**
53
+ * Setter for `activeChangeRequest()`. Set to `null` to unset.
54
+ */
55
+ setActiveChangeRequestID?: (id: string | null) => void;
56
+ /**
57
+ * An async function for retrieving data of register items
58
+ * at given paths. For cases where the hook doesn’t work.
59
+ *
60
+ * If a path contains nothing or contains not a register item,
61
+ * the result will be null.
62
+ */
63
+ /**
64
+ * Extension-provided additional views that don’t correspond
65
+ * to entities like register item, change request, etc. handled by RegistryKit.
66
+ */
67
+ customViews: CustomViewConfiguration[];
68
+ /**
69
+ * Given item class ID, returns a small subset of relevant class configuration data.
70
+ */
71
+ getRelatedItemClassConfiguration: (clsID: string) => RelatedItemClassConfiguration;
8
72
  };
9
73
  export declare const BrowserCtx: import("react").Context<BrowserCtx>;
@@ -5,16 +5,27 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.BrowserCtx = void 0;
7
7
 
8
- var _react = require("react");
8
+ var _react = require("@emotion/react");
9
9
 
10
- const BrowserCtx = (0, _react.createContext)({
10
+ var _react2 = require("react");
11
+
12
+ /** @jsx jsx */
13
+ const BrowserCtx = (0, _react2.createContext)({
11
14
  itemClasses: {},
15
+ customViews: [],
16
+ // getRegisterItemData: async () => ({}),
17
+ selectedRegisterItem: null,
18
+ registerMetadata: undefined,
12
19
  useRegisterItemData: () => ({
13
20
  value: {},
14
21
  _reqCounter: -1,
15
22
  errors: [],
16
23
  isUpdating: true,
17
24
  refresh: () => void 0
25
+ }),
26
+ getRelatedItemClassConfiguration: () => ({
27
+ title: 'N/A',
28
+ itemView: () => (0, _react.jsx)("span", null, "Loading\u2026")
18
29
  })
19
30
  });
20
31
  exports.BrowserCtx = BrowserCtx;
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserCtx.js","sourceRoot":"","sources":["../../src/views/BrowserCtx.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAWtC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAa;IAClD,WAAW,EAAE,EAAE;IACf,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;KACtB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import { createContext } from 'react';\nimport { ItemClassConfigurationSet, RegisterItemDataHook, Subregisters } from '../types';\n\n\nexport type BrowserCtx = {\n itemClasses: ItemClassConfigurationSet\n subregisters?: Subregisters\n useRegisterItemData: RegisterItemDataHook\n jumpToItem?: (classID: string, itemID: string, subregisterID?: string) => void;\n};\n\nexport const BrowserCtx = createContext<BrowserCtx>({\n itemClasses: {},\n useRegisterItemData: () => ({\n value: {},\n _reqCounter: -1,\n errors: [],\n isUpdating: true,\n refresh: () => void 0,\n }),\n});\n"]}
1
+ {"version":3,"file":"BrowserCtx.js","sourceRoot":"","sources":["../../src/views/BrowserCtx.tsx"],"names":[],"mappings":"AAAA,eAAe;AAEf,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAyGtC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAa;IAClD,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,yCAAyC;IACzC,oBAAoB,EAAE,IAAI;IAC1B,gBAAgB,EAAE,SAAS;IAC3B,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;KACtB,CAAC;IACF,gCAAgC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,kCAAqB,EAAE,CAAC;CAClG,CAAC,CAAC","sourcesContent":["/** @jsx jsx */\n\nimport { jsx } from '@emotion/react';\nimport { createContext } from 'react';\nimport type {\n CustomViewConfiguration,\n ItemClassConfigurationSet,\n ItemClassConfiguration,\n RegisterItem,\n RegisterItemDataHook,\n Register,\n RegisterStakeholder,\n RelatedItemClassConfiguration,\n // SaveProposalHandler,\n Subregisters,\n InternalItemReference,\n} from '../types';\nimport { type CriteriaGroup } from './FilterCriteria/models';\nimport { type Protocol } from './protocolRegistry';\n\n\n// TODO(perf): split into smaller contexts\nexport type BrowserCtx = {\n itemClasses: ItemClassConfigurationSet\n subregisters?: Subregisters\n\n /**\n * Stakeholder corresponding to the current user.\n * If current user is not a stakeholder, undefined.\n */\n stakeholder?: RegisterStakeholder\n\n /**\n * Common “key expression” (used for sorting) across the register.\n * Should contain the expression itself, no “return” statement.\n */\n keyExpression?: string\n\n /** Default search criteria to be used by the Search sidebar */\n defaultSearchCriteria?: CriteriaGroup\n\n /**\n * Allows to access register metadata\n * (e.g., version, stakeholders).\n *\n * `undefined` if loading, `null` if unspecified.\n */\n registerMetadata?: Register | null\n\n /** Hook for getting register item data. */\n useRegisterItemData: RegisterItemDataHook\n\n /**\n * Invoked to navigate to an item.\n * In SPA tabbed context, could translate to `spawnTab()`;\n * in static web context, could translate to navigating browser location.\n */\n jumpTo?: (uri: `${Protocol}:${string}`) => void\n\n /**\n * If a register item is selected, provide its data here.\n *\n * If item data is still loading or invalid, `undefined`.\n * If item is not selected, `null`.\n */\n selectedRegisterItem?: {\n item: RegisterItem<any>\n ref: InternalItemReference\n itemClass: ItemClassConfiguration<any>\n } | null\n\n /**\n * Change request being drafted or reviewed.\n * `undefined` if loading, `null` if there is no active change request.\n */\n activeChangeRequestID?: string | null\n\n /**\n * Setter for `activeChangeRequest()`. Set to `null` to unset.\n */\n setActiveChangeRequestID?: (id: string | null) => void\n\n /**\n * An async function for retrieving data of register items\n * at given paths. For cases where the hook doesn’t work.\n *\n * If a path contains nothing or contains not a register item,\n * the result will be null.\n */\n // getRegisterItemData: (opts: { itemPaths: string[] }) => Promise<Record<string, RegisterItem<any> | null>>\n\n /**\n * Extension-provided additional views that don’t correspond\n * to entities like register item, change request, etc. handled by RegistryKit.\n */\n customViews: CustomViewConfiguration[]\n\n // onPropose?: SaveProposalHandler\n\n //selectedItemPath?: string\n\n /**\n * Given item class ID, returns a small subset of relevant class configuration data.\n */\n getRelatedItemClassConfiguration: (clsID: string) => RelatedItemClassConfiguration\n // TODO: Rename to just “get class config”\n};\n\nexport const BrowserCtx = createContext<BrowserCtx>({\n itemClasses: {},\n customViews: [],\n // getRegisterItemData: async () => ({}),\n selectedRegisterItem: null,\n registerMetadata: undefined,\n useRegisterItemData: () => ({\n value: {},\n _reqCounter: -1,\n errors: [],\n isUpdating: true,\n refresh: () => void 0,\n }),\n getRelatedItemClassConfiguration: () => ({ title: 'N/A', itemView: () => <span>Loading…</span> }),\n});\n"]}
@@ -1,5 +1,17 @@
1
1
  /** @jsx jsx */
2
2
  /** @jsxFrag React.Fragment */
3
- import { CriteriaConfiguration } from './models';
3
+ import { CriteriaConfiguration, CriterionConfiguration } from './models';
4
+ export declare const ITEM_CLASS: CriterionConfiguration<{
5
+ classID?: string;
6
+ }>;
7
+ export declare const SUBREGISTER: CriterionConfiguration<{
8
+ subregisterID?: string;
9
+ }>;
10
+ export declare const RAW_SUBSTRING: CriterionConfiguration<{
11
+ substring?: string;
12
+ }>;
13
+ export declare const CUSTOM_CONDITION: CriterionConfiguration<{
14
+ customExpression?: string;
15
+ }>;
4
16
  export declare const CRITERIA_CONFIGURATION: CriteriaConfiguration;
5
17
  export default CRITERIA_CONFIGURATION;
@@ -3,107 +3,200 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.CRITERIA_CONFIGURATION = void 0;
6
+ exports.default = exports.CRITERIA_CONFIGURATION = exports.CUSTOM_CONDITION = exports.RAW_SUBSTRING = exports.SUBREGISTER = exports.ITEM_CLASS = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = require("@emotion/react");
9
9
 
10
- var _core = require("@emotion/core");
11
-
12
- var _core2 = require("@blueprintjs/core");
10
+ var _PropertyView = require("@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView");
13
11
 
14
12
  var _index = require("./index");
15
13
 
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
14
  /** @jsx jsx */
19
15
 
20
16
  /** @jsxFrag React.Fragment */
21
- const CRITERIA_CONFIGURATION = {
22
- 'item-class': {
23
- label: "item class is",
24
- toQuery: ({
25
- classID
26
- }, {
27
- subregisters
28
- }) => `objPath.indexOf("/${classID}/") === ${subregisters ? _index.SUBREGISTER_PATH_PREFIX.length : 0}`,
29
- fromQuery: query => ({
30
- classID: query.split('/')[1]
31
- }),
32
- toSummary: ({
33
- classID
34
- }, {
35
- itemClasses
36
- }) => {
37
- var _a, _b;
38
-
39
- if (classID) {
40
- return (_b = (_a = itemClasses[classID]) === null || _a === void 0 ? void 0 : _a.meta.title) !== null && _b !== void 0 ? _b : classID;
41
- } else {
42
- return "(N/A)";
43
- }
44
- },
45
- widget: ({
46
- data,
47
- onChange,
48
- itemClasses,
49
- className,
50
- style
51
- }) => {
52
- var _a;
17
+ const ITEM_CLASS = {
18
+ label: "item class is",
19
+ icon: 'cube',
20
+ toQuery: ({
21
+ classID
22
+ }, {
23
+ subregisters
24
+ }) => `objPath.indexOf("/${classID}/") >= ${subregisters ? _index.SUBREGISTER_PATH_PREFIX.length - 1 : 0}`,
25
+ fromQuery: query => ({
26
+ classID: query.split('/')[1]
27
+ }),
28
+ toSummary: ({
29
+ classID
30
+ }, {
31
+ itemClasses
32
+ }) => {
33
+ if (classID) {
34
+ var _itemClasses$classID;
53
35
 
54
- const itemClassChoices = [...Object.entries(itemClasses).map(([classID, classData]) => {
55
- var _a, _b;
36
+ return ((_itemClasses$classID = itemClasses[classID]) === null || _itemClasses$classID === void 0 ? void 0 : _itemClasses$classID.meta.title) ?? classID;
37
+ } else {
38
+ return "(N/A)";
39
+ }
40
+ },
41
+ widget: ({
42
+ data,
43
+ onChange,
44
+ itemClasses,
45
+ availableClassIDs,
46
+ className,
47
+ style
48
+ }) => {
49
+ const itemClassChoices = [...Object.entries(itemClasses).filter(([clsID]) => availableClassIDs.indexOf(clsID) >= 0).map(([classID, classData]) => {
50
+ var _classData$meta;
56
51
 
57
- return {
58
- value: classID,
59
- label: (_b = (_a = classData === null || classData === void 0 ? void 0 : classData.meta) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : "Unknown class"
60
- };
61
- }), {
62
- value: '',
63
- label: "(not selected)"
64
- }];
65
- return (0, _core.jsx)(_core2.HTMLSelect, {
66
- className: className,
67
- style: style,
68
- fill: true,
69
- minimal: true,
70
- options: itemClassChoices,
71
- value: (_a = data.classID) !== null && _a !== void 0 ? _a : '',
72
- disabled: !onChange,
73
- onChange: onChange ? evt => onChange({
74
- classID: evt.currentTarget.value
75
- }) : undefined
76
- });
52
+ return {
53
+ value: classID,
54
+ label: (classData === null || classData === void 0 ? void 0 : (_classData$meta = classData.meta) === null || _classData$meta === void 0 ? void 0 : _classData$meta.title) ?? "Unknown class"
55
+ };
56
+ }), {
57
+ value: '',
58
+ label: "(not selected)"
59
+ }];
60
+ return (0, _react.jsx)(_PropertyView.Select, {
61
+ className: className,
62
+ style: style,
63
+ fill: true,
64
+ options: itemClassChoices,
65
+ value: data.classID ?? '',
66
+ disabled: !onChange,
67
+ onChange: onChange ? evt => onChange({
68
+ classID: evt.currentTarget.value
69
+ }) : undefined
70
+ });
71
+ }
72
+ };
73
+ exports.ITEM_CLASS = ITEM_CLASS;
74
+ const SUBREGISTER = {
75
+ label: "is in subregister",
76
+ icon: 'folder-open',
77
+ isEnabled: ({
78
+ subregisters
79
+ }) => subregisters !== undefined,
80
+ toQuery: ({
81
+ subregisterID
82
+ }, {
83
+ subregisters
84
+ }) => subregisters !== undefined && subregisterID !== null && subregisterID !== void 0 && subregisterID.trim() ? `objPath.indexOf("/subregisters/${subregisterID}/") === 0` : 'true',
85
+ fromQuery: query => ({
86
+ subregisterID: query.split('/')[2]
87
+ }),
88
+ toSummary: ({
89
+ subregisterID
90
+ }, {
91
+ subregisters
92
+ }) => {
93
+ if (subregisters && subregisterID) {
94
+ return subregisters[subregisterID].title;
95
+ } else {
96
+ return "(N/A)";
77
97
  }
78
98
  },
79
- 'custom': {
80
- label: "custom expression is satisfied",
81
- toQuery: ({
82
- customExpression
83
- }) => customExpression,
84
- fromQuery: query => ({
85
- customExpression: query
86
- }),
87
- toSummary: () => (0, _core.jsx)(_react.default.Fragment, null),
88
- widget: ({
89
- data,
90
- onChange,
91
- className
92
- }) => {
93
- var _a;
99
+ widget: ({
100
+ data,
101
+ onChange,
102
+ subregisters,
103
+ className,
104
+ style
105
+ }) => {
106
+ const subregisterChoices = [...Object.entries(subregisters ?? {}).map(([subregisterID, subregisterInfo]) => {
107
+ return {
108
+ value: subregisterID,
109
+ label: subregisterInfo.title
110
+ };
111
+ }), {
112
+ value: '',
113
+ label: "(not selected)"
114
+ }];
115
+ return (0, _react.jsx)(_PropertyView.Select, {
116
+ className: className,
117
+ style: style,
118
+ fill: true,
119
+ options: subregisterChoices,
120
+ value: data.subregisterID ?? '',
121
+ disabled: !onChange,
122
+ onChange: onChange ? evt => onChange({
123
+ subregisterID: evt.currentTarget.value
124
+ }) : undefined
125
+ });
126
+ }
127
+ };
128
+ exports.SUBREGISTER = SUBREGISTER;
129
+ const RAW_SUBSTRING = {
130
+ label: "raw data contains",
131
+ icon: 'search-text',
132
+ toQuery: ({
133
+ substring
134
+ }) => substring !== null && substring !== void 0 && substring.trim() ? `JSON.stringify(obj.data ?? {}).toLowerCase().indexOf("${substring.toLowerCase().replace(/"/g, "\\\"")}") >= 0` : `true`,
135
+ fromQuery: query => {
136
+ var _query$split$;
94
137
 
95
- return (0, _core.jsx)(_core2.InputGroup, {
96
- className: className,
97
- value: (_a = data.customExpression) !== null && _a !== void 0 ? _a : 'true',
98
- placeholder: "Enter a valid query expression\u2026",
99
- disabled: !onChange,
100
- onChange: onChange ? evt => onChange({
101
- customExpression: evt.currentTarget.value
102
- }) : undefined
103
- });
138
+ return {
139
+ substring: (((_query$split$ = query.split('JSON.stringify(obj.data ?? {}).toLowerCase().indexOf("')[1]) === null || _query$split$ === void 0 ? void 0 : _query$split$.split('") >= 0')[0]) ?? '').replace(/\\"/g, '"')
140
+ };
141
+ },
142
+ toSummary: ({
143
+ substring
144
+ }) => {
145
+ if (substring) {
146
+ return substring.length > 20 ? `${substring.slice(0, 20)}…` : substring;
147
+ } else {
148
+ return 'N/A';
104
149
  }
150
+ },
151
+ widget: ({
152
+ data,
153
+ onChange,
154
+ className,
155
+ style
156
+ }) => {
157
+ return (0, _react.jsx)(_PropertyView.TextInput, {
158
+ className: className,
159
+ style: style,
160
+ value: data.substring ?? '',
161
+ onChange: onChange ? substring => onChange({
162
+ substring
163
+ }) : undefined
164
+ });
105
165
  }
106
166
  };
167
+ exports.RAW_SUBSTRING = RAW_SUBSTRING;
168
+ const CUSTOM_CONDITION = {
169
+ label: "condition is met",
170
+ icon: 'code',
171
+ toQuery: ({
172
+ customExpression
173
+ }) => customExpression ?? 'true',
174
+ fromQuery: query => ({
175
+ customExpression: query
176
+ }),
177
+ toSummary: () => "(custom test expr.)",
178
+ widget: ({
179
+ data,
180
+ onChange,
181
+ className
182
+ }) => {
183
+ return (0, _react.jsx)(_PropertyView.TextInput, {
184
+ className: className,
185
+ value: data.customExpression ?? 'true',
186
+ placeholder: "Enter a valid query expression\u2026",
187
+ onChange: onChange ? customExpression => onChange({
188
+ customExpression
189
+ }) : undefined
190
+ });
191
+ }
192
+ };
193
+ exports.CUSTOM_CONDITION = CUSTOM_CONDITION;
194
+ const CRITERIA_CONFIGURATION = {
195
+ 'item-class': ITEM_CLASS,
196
+ 'subregister': SUBREGISTER,
197
+ 'raw-substring': RAW_SUBSTRING,
198
+ 'custom': CUSTOM_CONDITION
199
+ };
107
200
  exports.CRITERIA_CONFIGURATION = CRITERIA_CONFIGURATION;
108
201
  var _default = CRITERIA_CONFIGURATION;
109
202
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"file":"CRITERIA_CONFIGURATION.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/CRITERIA_CONFIGURATION.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React from 'react';\nimport { jsx } from '@emotion/core';\nimport { HTMLSelect, OptionProps, InputGroup } from '@blueprintjs/core';\nimport { CriteriaConfiguration, CriterionConfiguration } from './models';\nimport { SUBREGISTER_PATH_PREFIX } from './index';\n\n\nexport const CRITERIA_CONFIGURATION: CriteriaConfiguration = {\n\n 'item-class': {\n label: \"item class is\",\n toQuery: ({ classID }, { subregisters }) => `objPath.indexOf(\"/${classID}/\") === ${subregisters ? SUBREGISTER_PATH_PREFIX.length : 0}`,\n fromQuery: (query) => ({\n classID: query.split('/')[1],\n }),\n toSummary: ({ classID }, { itemClasses }) => {\n if (classID) {\n return itemClasses[classID]?.meta.title ?? classID;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, itemClasses, className, style }) => {\n const itemClassChoices: OptionProps[] = [\n ...Object.entries(itemClasses).\n map(([classID, classData]) => {\n return { value: classID, label: classData?.meta?.title ?? \"Unknown class\" };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <HTMLSelect\n className={className}\n style={style}\n fill\n minimal\n options={itemClassChoices}\n value={data.classID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ classID: evt.currentTarget.value })\n : undefined} />\n );\n },\n } as CriterionConfiguration<{ classID?: string; }>,\n\n 'custom': {\n label: \"custom expression is satisfied\",\n toQuery: ({ customExpression }) => customExpression,\n fromQuery: (query) => ({\n customExpression: query,\n }),\n toSummary: () => <></>,\n widget: ({ data, onChange, className }) => {\n return (\n <InputGroup\n className={className}\n value={data.customExpression ?? 'true'}\n placeholder=\"Enter a valid query expression…\"\n disabled={!onChange}\n onChange={onChange ? (evt) => onChange!({ customExpression: evt.currentTarget.value }) : undefined} />\n );\n },\n } as CriterionConfiguration<{ customExpression?: string; }>,\n\n};\n\n\nexport default CRITERIA_CONFIGURATION;\n"]}
1
+ {"version":3,"file":"CRITERIA_CONFIGURATION.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/CRITERIA_CONFIGURATION.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport { OptionProps } from '@blueprintjs/core';\nimport { Select, TextInput } from '@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView';\nimport { CriteriaConfiguration, CriterionConfiguration } from './models';\nimport { SUBREGISTER_PATH_PREFIX } from './index';\n\n\nexport const ITEM_CLASS: CriterionConfiguration<{ classID?: string }> = {\n label: \"item class is\",\n icon: 'cube',\n toQuery: ({ classID }, { subregisters }) => `objPath.indexOf(\"/${classID}/\") >= ${subregisters ? SUBREGISTER_PATH_PREFIX.length - 1 : 0}`,\n fromQuery: (query) => ({\n classID: query.split('/')[1],\n }),\n toSummary: ({ classID }, { itemClasses }) => {\n if (classID) {\n return itemClasses[classID]?.meta.title ?? classID;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, itemClasses, availableClassIDs, className, style }) => {\n const itemClassChoices: OptionProps[] = [\n ...Object.entries(itemClasses).\n filter(([clsID, ]) => availableClassIDs.indexOf(clsID) >= 0).\n map(([classID, classData]) => {\n return { value: classID, label: classData?.meta?.title ?? \"Unknown class\" };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <Select\n className={className}\n style={style}\n fill\n options={itemClassChoices}\n value={data.classID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ classID: evt.currentTarget.value })\n : undefined} />\n );\n },\n};\n\n\nexport const SUBREGISTER: CriterionConfiguration<{ subregisterID?: string }> = {\n label: \"is in subregister\",\n icon: 'folder-open',\n isEnabled: ({ subregisters }) => subregisters !== undefined,\n toQuery: ({ subregisterID }, { subregisters }) => subregisters !== undefined && subregisterID?.trim()\n ? `objPath.indexOf(\"/subregisters/${subregisterID}/\") === 0`\n : 'true',\n fromQuery: (query) => ({\n subregisterID: query.split('/')[2],\n }),\n toSummary: ({ subregisterID }, { subregisters }) => {\n if (subregisters && subregisterID) {\n return subregisters[subregisterID].title;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, subregisters, className, style }) => {\n const subregisterChoices: OptionProps[] = [\n ...Object.entries(subregisters ?? {}).\n map(([subregisterID, subregisterInfo]) => {\n return { value: subregisterID, label: subregisterInfo.title };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <Select\n className={className}\n style={style}\n fill\n options={subregisterChoices}\n value={data.subregisterID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ subregisterID: evt.currentTarget.value })\n : undefined} />\n );\n },\n};\n\n\nexport const RAW_SUBSTRING: CriterionConfiguration<{ substring?: string }> = {\n label: \"raw data contains\",\n icon: 'search-text',\n toQuery: ({ substring }) =>\n substring?.trim()\n ? `JSON.stringify(obj.data ?? {}).toLowerCase().indexOf(\"${substring.toLowerCase().replace(/\"/g, \"\\\\\\\"\")}\") >= 0`\n : `true`,\n fromQuery: (query) => ({\n substring: (query.\n split('JSON.stringify(obj.data ?? {}).toLowerCase().indexOf(\"')[1]?.\n split('\") >= 0')[0] ?? '').replace(/\\\\\"/g, '\"'),\n }),\n toSummary: ({ substring }) => {\n if (substring) {\n return substring.length > 20 ? `${substring.slice(0, 20)}…` : substring;\n } else {\n return 'N/A';\n }\n },\n widget: ({ data, onChange, className, style }) => {\n return <TextInput\n className={className}\n style={style}\n value={data.substring ?? ''}\n onChange={onChange ? substring => onChange!({ substring }) : undefined}\n />;\n },\n}\n\n\nexport const CUSTOM_CONDITION: CriterionConfiguration<{ customExpression?: string; }> = {\n label: \"condition is met\",\n icon: 'code',\n toQuery: ({ customExpression }) => customExpression ?? 'true',\n fromQuery: (query) => ({\n customExpression: query,\n }),\n toSummary: () => \"(custom test expr.)\",\n widget: ({ data, onChange, className }) => {\n return (\n <TextInput\n className={className}\n value={data.customExpression ?? 'true'}\n placeholder=\"Enter a valid query expression…\"\n onChange={onChange\n ? (customExpression) => onChange!({ customExpression })\n : undefined} />\n );\n },\n}\n\n\nexport const CRITERIA_CONFIGURATION: CriteriaConfiguration = {\n 'item-class': ITEM_CLASS,\n 'subregister': SUBREGISTER,\n 'raw-substring': RAW_SUBSTRING,\n 'custom': CUSTOM_CONDITION,\n};\n\n\nexport default CRITERIA_CONFIGURATION;\n"]}
@@ -1,2 +1,6 @@
1
1
  import { CriteriaGroup } from './models';
2
+ /**
3
+ * Given a CriteriaGroup,
4
+ * returns a query expression suitable for use with filtered object indexes..
5
+ */
2
6
  export default function criteriaGroupToQueryExpression(cg: CriteriaGroup): string;
@@ -7,13 +7,20 @@ exports.default = criteriaGroupToQueryExpression;
7
7
 
8
8
  var _models = require("./models");
9
9
 
10
- /* Building query expression */
10
+ /**
11
+ * Given a CriteriaGroup,
12
+ * returns a query expression suitable for use with filtered object indexes..
13
+ */
11
14
  function criteriaGroupToQueryExpression(cg) {
12
15
  const exps = [];
13
16
 
14
17
  for (const c of cg.criteria) {
15
18
  if ((0, _models.isCriteriaGroup)(c)) {
16
- exps.push(`${criteriaGroupToQueryExpression(c)}`);
19
+ if (c.criteria.length > 1) {
20
+ exps.push(`(${criteriaGroupToQueryExpression(c)})`);
21
+ } else if (c.criteria.length > 0) {
22
+ exps.push(`${criteriaGroupToQueryExpression(c)}`);
23
+ }
17
24
  } else {
18
25
  exps.push(c.query);
19
26
  }
@@ -22,7 +29,7 @@ function criteriaGroupToQueryExpression(cg) {
22
29
  let result;
23
30
 
24
31
  if (exps.length < 1) {
25
- result = `true;`;
32
+ result = 'true';
26
33
  } else {
27
34
  switch (cg.require) {
28
35
  case 'all':
@@ -1 +1 @@
1
- {"version":3,"file":"criteriaGroupToQueryExpression.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaGroupToQueryExpression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAE,MAAM,UAAU,CAAC;AAE1D,+BAA+B;AAG/B,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,EAAiB;IACtE,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACnD;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACpB;KACF;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG,OAAO,CAAC;KAClB;SAAM;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE;YAClB,KAAK,KAAK;gBACR,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM;SACT;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { CriteriaGroup, isCriteriaGroup } from './models';\n\n/* Building query expression */\n\n\nexport default function criteriaGroupToQueryExpression(cg: CriteriaGroup): string {\n const exps: string[] = [];\n\n for (const c of cg.criteria) {\n if (isCriteriaGroup(c)) {\n exps.push(`${criteriaGroupToQueryExpression(c)}`);\n } else {\n exps.push(c.query);\n }\n }\n\n let result: string;\n if (exps.length < 1) {\n result = `true;`;\n } else {\n switch (cg.require) {\n case 'all':\n result = exps.join(' && ');\n break;\n case 'any':\n result = exps.join(' || ');\n break;\n case 'none':\n result = exps.map(exp => `${exp} === false`).join(' && ');\n break;\n }\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"criteriaGroupToQueryExpression.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaGroupToQueryExpression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAE,MAAM,UAAU,CAAC;AAG1D;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,EAAiB;IACtE,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACrD;iBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACnD;SACF;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACpB;KACF;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG,MAAM,CAAC;KACjB;SAAM;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE;YAClB,KAAK,KAAK;gBACR,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM;SACT;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { CriteriaGroup, isCriteriaGroup } from './models';\n\n\n/**\n * Given a CriteriaGroup,\n * returns a query expression suitable for use with filtered object indexes..\n */\nexport default function criteriaGroupToQueryExpression(cg: CriteriaGroup): string {\n const exps: string[] = [];\n\n for (const c of cg.criteria) {\n if (isCriteriaGroup(c)) {\n if (c.criteria.length > 1) {\n exps.push(`(${criteriaGroupToQueryExpression(c)})`);\n } else if (c.criteria.length > 0) {\n exps.push(`${criteriaGroupToQueryExpression(c)}`);\n }\n } else {\n exps.push(c.query);\n }\n }\n\n let result: string;\n if (exps.length < 1) {\n result = 'true';\n } else {\n switch (cg.require) {\n case 'all':\n result = exps.join(' && ');\n break;\n case 'any':\n result = exps.join(' || ');\n break;\n case 'none':\n result = exps.map(exp => `${exp} === false`).join(' && ');\n break;\n }\n }\n\n return result;\n}\n"]}