@riboseinc/paneron-registry-kit 2.0.0-dev8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common.d.ts +1 -1
- package/common.js +1 -1
- package/common.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +26 -18
- package/types/cr.d.ts +216 -0
- package/types/cr.js +175 -0
- package/types/cr.js.map +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +19 -0
- package/types/index.js.map +1 -1
- package/types/item.d.ts +13 -3
- package/types/item.js +11 -1
- package/types/item.js.map +1 -1
- package/types/proposal.d.ts +31 -14
- package/types/proposal.js +1 -1
- package/types/proposal.js.map +1 -1
- package/types/register.d.ts +6 -5
- package/types/register.js +19 -1
- package/types/register.js.map +1 -1
- package/types/registry.d.ts +8 -3
- package/types/registry.js +8 -1
- package/types/registry.js.map +1 -1
- package/types/stakeholder.d.ts +40 -16
- package/types/stakeholder.js +47 -3
- package/types/stakeholder.js.map +1 -1
- package/types/views.d.ts +98 -24
- package/types/views.js.map +1 -1
- package/views/AnnotatedChange.d.ts +7 -0
- package/views/AnnotatedChange.js +91 -0
- package/views/AnnotatedChange.js.map +1 -0
- package/views/BrowserCtx.d.ts +66 -2
- package/views/BrowserCtx.js +13 -2
- package/views/BrowserCtx.js.map +1 -1
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +17 -0
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +202 -0
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +6 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js +50 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -0
- package/views/FilterCriteria/criteriaGroupToSummary.d.ts +5 -0
- package/views/FilterCriteria/criteriaGroupToSummary.js +62 -0
- package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -0
- package/views/FilterCriteria/criteriaToNodes.d.ts +24 -0
- package/views/FilterCriteria/criteriaToNodes.js +159 -0
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -0
- package/views/FilterCriteria/index.d.ts +23 -0
- package/views/FilterCriteria/index.js +130 -0
- package/views/FilterCriteria/index.js.map +1 -0
- package/views/FilterCriteria/models.d.ts +68 -0
- package/views/FilterCriteria/models.js +34 -0
- package/views/FilterCriteria/models.js.map +1 -0
- package/views/FilterCriteria/mutateGroup.d.ts +17 -0
- package/views/FilterCriteria/mutateGroup.js +59 -0
- package/views/FilterCriteria/mutateGroup.js.map +1 -0
- package/views/GenericRelatedItemView.d.ts +1 -1
- package/views/GenericRelatedItemView.js +143 -101
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/RegisterStakeholder.d.ts +9 -0
- package/views/RegisterStakeholder.js +40 -0
- package/views/RegisterStakeholder.js.map +1 -0
- package/views/RegisterVersion.d.ts +9 -0
- package/views/RegisterVersion.js +41 -0
- package/views/RegisterVersion.js.map +1 -0
- package/views/SearchQuery.d.ts +13 -0
- package/views/SearchQuery.js +137 -0
- package/views/SearchQuery.js.map +1 -0
- package/views/change-request/ChangeRequestContext.d.ts +20 -0
- package/views/change-request/ChangeRequestContext.js +56 -0
- package/views/change-request/ChangeRequestContext.js.map +1 -0
- package/views/change-request/Proposals.d.ts +21 -0
- package/views/change-request/Proposals.js +331 -0
- package/views/change-request/Proposals.js.map +1 -0
- package/views/change-request/objectChangeset.d.ts +31 -0
- package/views/change-request/objectChangeset.js +229 -0
- package/views/change-request/objectChangeset.js.map +1 -0
- package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
- package/views/detail/ChangeRequest/Proposal.js +142 -0
- package/views/detail/ChangeRequest/Proposal.js.map +1 -0
- package/views/detail/ChangeRequest/index.d.ts +13 -0
- package/views/detail/ChangeRequest/index.js +207 -0
- package/views/detail/ChangeRequest/index.js.map +1 -0
- package/views/detail/ChangeRequest/transitions.d.ts +28 -0
- package/views/detail/ChangeRequest/transitions.js +530 -0
- package/views/detail/ChangeRequest/transitions.js.map +1 -0
- package/views/detail/CustomView/index.d.ts +13 -0
- package/views/detail/CustomView/index.js +68 -0
- package/views/detail/CustomView/index.js.map +1 -0
- package/views/detail/RegisterHome/index.d.ts +5 -0
- package/views/detail/RegisterHome/index.js +128 -0
- package/views/detail/RegisterHome/index.js.map +1 -0
- package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
- package/views/detail/RegisterItem/RelatedItems.js +61 -0
- package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
- package/views/detail/RegisterItem/index.d.ts +13 -0
- package/views/detail/RegisterItem/index.js +356 -0
- package/views/detail/RegisterItem/index.js.map +1 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
- package/views/detail/RegisterMeta/index.d.ts +10 -0
- package/views/detail/RegisterMeta/index.js +111 -0
- package/views/detail/RegisterMeta/index.js.map +1 -0
- package/views/detail/index.d.ts +1 -0
- package/views/detail/index.js +24 -0
- package/views/detail/index.js.map +1 -0
- package/views/diffing/InlineDiff.d.ts +12 -0
- package/views/diffing/InlineDiff.js +58 -0
- package/views/diffing/InlineDiff.js.map +1 -0
- package/views/diffing/StructuredDiff.d.ts +11 -0
- package/views/diffing/StructuredDiff.js +65 -0
- package/views/diffing/StructuredDiff.js.map +1 -0
- package/views/hooks/useCustomView.d.ts +3 -0
- package/views/hooks/useCustomView.js +24 -0
- package/views/hooks/useCustomView.js.map +1 -0
- package/views/hooks/useItemClassConfig.d.ts +3 -0
- package/views/hooks/useItemClassConfig.js +24 -0
- package/views/hooks/useItemClassConfig.js.map +1 -0
- package/views/hooks/useItemRef.d.ts +3 -0
- package/views/hooks/useItemRef.js +39 -0
- package/views/hooks/useItemRef.js.map +1 -0
- package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
- package/views/hooks/useSingleRegisterItemData.js +32 -0
- package/views/hooks/useSingleRegisterItemData.js.map +1 -0
- package/views/index.d.ts +2 -2
- package/views/index.js +161 -130
- package/views/index.js.map +1 -1
- package/views/itemPathUtils.d.ts +45 -2
- package/views/itemPathUtils.js +101 -14
- package/views/itemPathUtils.js.map +1 -1
- package/views/itemQueryUtils.d.ts +11 -0
- package/views/itemQueryUtils.js +48 -0
- package/views/itemQueryUtils.js.map +1 -0
- package/views/protocolRegistry.d.ts +12 -0
- package/views/protocolRegistry.js +42 -0
- package/views/protocolRegistry.js.map +1 -0
- package/views/sidebar/Browse/index.d.ts +11 -0
- package/views/sidebar/Browse/index.js +453 -0
- package/views/sidebar/Browse/index.js.map +1 -0
- package/views/sidebar/Export/index.d.ts +5 -0
- package/views/sidebar/Export/index.js +94 -0
- package/views/sidebar/Export/index.js.map +1 -0
- package/views/sidebar/ListItem.d.ts +10 -0
- package/views/sidebar/ListItem.js +43 -0
- package/views/sidebar/ListItem.js.map +1 -0
- package/views/sidebar/Registration/index.d.ts +5 -0
- package/views/sidebar/Registration/index.js +163 -0
- package/views/sidebar/Registration/index.js.map +1 -0
- package/views/sidebar/Search/index.d.ts +18 -0
- package/views/sidebar/Search/index.js +177 -0
- package/views/sidebar/Search/index.js.map +1 -0
- package/views/sidebar/index.d.ts +6 -0
- package/views/sidebar/index.js +104 -0
- package/views/sidebar/index.js.map +1 -0
- package/views/util.d.ts +29 -5
- package/views/util.js +92 -6
- package/views/util.js.map +1 -1
- package/views/ChangeRequest.d.ts +0 -12
- package/views/ChangeRequest.js +0 -689
- package/views/ChangeRequest.js.map +0 -1
- package/views/FilterCriteria.d.ts +0 -27
- package/views/FilterCriteria.js +0 -410
- package/views/FilterCriteria.js.map +0 -1
- package/views/ItemBrowser.d.ts +0 -12
- package/views/ItemBrowser.js +0 -255
- package/views/ItemBrowser.js.map +0 -1
- package/views/ItemDetails.d.ts +0 -14
- package/views/ItemDetails.js +0 -128
- package/views/ItemDetails.js.map +0 -1
- package/views/MainView.d.ts +0 -8
- package/views/MainView.js +0 -34
- package/views/MainView.js.map +0 -1
- package/views/RegisterInformation.d.ts +0 -7
- package/views/RegisterInformation.js +0 -264
- package/views/RegisterInformation.js.map +0 -1
- package/views/RegisterItemGrid.d.ts +0 -25
- package/views/RegisterItemGrid.js +0 -248
- package/views/RegisterItemGrid.js.map +0 -1
|
@@ -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"]}
|
package/views/BrowserCtx.d.ts
CHANGED
|
@@ -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
|
-
|
|
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>;
|
package/views/BrowserCtx.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/views/BrowserCtx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserCtx.js","sourceRoot":"","sources":["../../src/views/BrowserCtx.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
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"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
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
|
+
}>;
|
|
16
|
+
export declare const CRITERIA_CONFIGURATION: CriteriaConfiguration;
|
|
17
|
+
export default CRITERIA_CONFIGURATION;
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.CRITERIA_CONFIGURATION = exports.CUSTOM_CONDITION = exports.RAW_SUBSTRING = exports.SUBREGISTER = exports.ITEM_CLASS = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
|
+
|
|
10
|
+
var _PropertyView = require("@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView");
|
|
11
|
+
|
|
12
|
+
var _index = require("./index");
|
|
13
|
+
|
|
14
|
+
/** @jsx jsx */
|
|
15
|
+
|
|
16
|
+
/** @jsxFrag React.Fragment */
|
|
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;
|
|
35
|
+
|
|
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;
|
|
51
|
+
|
|
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)";
|
|
97
|
+
}
|
|
98
|
+
},
|
|
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$;
|
|
137
|
+
|
|
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';
|
|
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
|
+
});
|
|
165
|
+
}
|
|
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
|
+
};
|
|
200
|
+
exports.CRITERIA_CONFIGURATION = CRITERIA_CONFIGURATION;
|
|
201
|
+
var _default = CRITERIA_CONFIGURATION;
|
|
202
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CRITERIA_CONFIGURATION.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/CRITERIA_CONFIGURATION.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,+DAA+D,CAAC;AAElG,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAGlD,MAAM,CAAC,MAAM,UAAU,GAAiD;IACtE,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,qBAAqB,OAAO,UAAU,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACzI,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QAC1C,IAAI,OAAO,EAAE;YACX,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;SACpD;aAAM;YACL,OAAO,OAAO,CAAC;SAChB;IACH,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/E,MAAM,gBAAgB,GAAkB;YACtC,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC9B,MAAM,CAAC,CAAC,CAAC,KAAK,EAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5D,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE;gBAC3B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC;YAC9E,CAAC,CAAC;YACF,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;SACvC,CAAC;QACF,OAAO,CACL,IAAC,MAAM,IACL,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,QACJ,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EACzB,QAAQ,EAAE,CAAC,QAAQ,EACnB,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC1D,CAAC,CAAC,SAAS,GAAI,CACpB,CAAC;IACJ,CAAC;CACF,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAuD;IAC7E,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,KAAK,SAAS;IAC3D,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,KAAK,SAAS,IAAI,aAAa,EAAE,IAAI,EAAE;QACnG,CAAC,CAAC,kCAAkC,aAAa,WAAW;QAC5D,CAAC,CAAC,MAAM;IACV,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;IACF,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACjD,IAAI,YAAY,IAAI,aAAa,EAAE;YACjC,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;SAC1C;aAAM;YACL,OAAO,OAAO,CAAC;SAChB;IACH,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7D,MAAM,kBAAkB,GAAkB;YACxC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;gBACnC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,EAAE;gBACvC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC;YAChE,CAAC,CAAC;YACJ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;SACvC,CAAC;QACF,OAAO,CACL,IAAC,MAAM,IACL,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,QACJ,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAC/B,QAAQ,EAAE,CAAC,QAAQ,EACnB,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAS,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAChE,CAAC,CAAC,SAAS,GAAI,CACpB,CAAC;IACJ,CAAC;CACF,CAAC;AAGF,MAAM,CAAC,MAAM,aAAa,GAAmD;IAC3E,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CACzB,SAAS,EAAE,IAAI,EAAE;QACf,CAAC,CAAC,yDAAyD,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS;QACjH,CAAC,CAAC,MAAM;IACZ,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,SAAS,EAAE,CAAC,KAAK;YACf,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC,CAAC,EAAE;YACpE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;KAClD,CAAC;IACF,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QAC3B,IAAI,SAAS,EAAE;YACb,OAAO,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;SACzE;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/C,OAAO,IAAC,SAAS,IACf,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,EAC3B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,QAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GACtE,CAAC;IACL,CAAC;CACF,CAAA;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAA2D;IACtF,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,gBAAgB,IAAI,MAAM;IAC7D,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,gBAAgB,EAAE,KAAK;KACxB,CAAC;IACF,SAAS,EAAE,GAAG,EAAE,CAAC,qBAAqB;IACtC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QACxC,OAAO,CACL,IAAC,SAAS,IACR,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,MAAM,EACtC,WAAW,EAAC,sCAAiC,EAC7C,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;gBACvD,CAAC,CAAC,SAAS,GAAI,CACpB,CAAC;IACJ,CAAC;CACF,CAAA;AAGD,MAAM,CAAC,MAAM,sBAAsB,GAA0B;IAC3D,YAAY,EAAE,UAAU;IACxB,aAAa,EAAE,WAAW;IAC1B,eAAe,EAAE,aAAa;IAC9B,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAGF,eAAe,sBAAsB,CAAC","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"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = criteriaGroupToQueryExpression;
|
|
7
|
+
|
|
8
|
+
var _models = require("./models");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Given a CriteriaGroup,
|
|
12
|
+
* returns a query expression suitable for use with filtered object indexes..
|
|
13
|
+
*/
|
|
14
|
+
function criteriaGroupToQueryExpression(cg) {
|
|
15
|
+
const exps = [];
|
|
16
|
+
|
|
17
|
+
for (const c of cg.criteria) {
|
|
18
|
+
if ((0, _models.isCriteriaGroup)(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
|
+
}
|
|
24
|
+
} else {
|
|
25
|
+
exps.push(c.query);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let result;
|
|
30
|
+
|
|
31
|
+
if (exps.length < 1) {
|
|
32
|
+
result = 'true';
|
|
33
|
+
} else {
|
|
34
|
+
switch (cg.require) {
|
|
35
|
+
case 'all':
|
|
36
|
+
result = exps.join(' && ');
|
|
37
|
+
break;
|
|
38
|
+
|
|
39
|
+
case 'any':
|
|
40
|
+
result = exps.join(' || ');
|
|
41
|
+
break;
|
|
42
|
+
|
|
43
|
+
case 'none':
|
|
44
|
+
result = exps.map(exp => `${exp} === false`).join(' && ');
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = criteriaGroupToSummary;
|
|
7
|
+
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
|
+
|
|
10
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _models = require("./models");
|
|
13
|
+
|
|
14
|
+
var _CRITERIA_CONFIGURATION = require("./CRITERIA_CONFIGURATION");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
/** @jsx jsx */
|
|
19
|
+
|
|
20
|
+
/** @jsxFrag React.Fragment */
|
|
21
|
+
|
|
22
|
+
/* Building query summary */
|
|
23
|
+
function criteriaGroupToSummary(cg, opts) {
|
|
24
|
+
const exps = [];
|
|
25
|
+
|
|
26
|
+
for (const c of cg.criteria) {
|
|
27
|
+
if ((0, _models.isCriteriaGroup)(c)) {
|
|
28
|
+
exps.push(criteriaGroupToSummary(c, opts));
|
|
29
|
+
} else {
|
|
30
|
+
const cfg = _CRITERIA_CONFIGURATION.CRITERIA_CONFIGURATION[c.key];
|
|
31
|
+
|
|
32
|
+
if (!cfg) {
|
|
33
|
+
console.error("Missing criterion configuration for key", c.key);
|
|
34
|
+
throw new Error("Missing criterion configuration");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
exps.push((0, _react.jsx)(_react2.default.Fragment, null, cfg.label, " ", (0, _react.jsx)("em", null, cfg.toSummary(cfg.fromQuery(c.query, opts), opts))));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let result;
|
|
42
|
+
|
|
43
|
+
if (exps.length < 1) {
|
|
44
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, "(no criteria)");
|
|
45
|
+
} else {
|
|
46
|
+
switch (cg.require) {
|
|
47
|
+
case 'all':
|
|
48
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, exps.reduce((acc, current, index) => [...acc, index ? ', ' : '', current], []));
|
|
49
|
+
break;
|
|
50
|
+
|
|
51
|
+
case 'any':
|
|
52
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, exps.reduce((acc, current, index) => [...acc, index ? ' or ' : '', current], []));
|
|
53
|
+
break;
|
|
54
|
+
|
|
55
|
+
case 'none':
|
|
56
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, "neither ", exps.reduce((acc, current, index) => [...acc, index ? ' nor ' : '', current], []));
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criteriaGroupToSummary.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaGroupToSummary.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAA6B,eAAe,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,4BAA4B;AAG5B,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAiB,EAAE,IAAgB;IAChF,MAAM,IAAI,GAAkB,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;SAC5C;aAAM;YACL,MAAM,GAAG,GAAG,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACpD;YACD,IAAI,CAAC,IAAI,CAAC;gBAAG,GAAG,CAAC,KAAK;;gBAAE,gBAAK,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAM,CAAG,CAAC,CAAC;SAC1F;KACF;IAED,IAAI,MAAmB,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG,0CAAkB,CAAC;KAC7B;SAAM;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE;YAClB,KAAK,KAAK;gBACR,MAAM,GAAG,0BAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAmB,EAAE,OAAkB,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAI,CAAC;gBAClI,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,0BAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAmB,EAAE,OAAkB,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAI,CAAC;gBACpI,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG;;oBAAW,IAAI,CAAC,MAAM,CAAC,CAAC,GAAmB,EAAE,OAAkB,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAI,CAAC;gBAC7I,MAAM;SACT;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport React, { ReactNode, ReactNodeArray } from 'react';\nimport { CriteriaGroup, CommonOpts, isCriteriaGroup } from './models';\nimport { CRITERIA_CONFIGURATION } from \"./CRITERIA_CONFIGURATION\";\n\n/* Building query summary */\n\n\nexport default function criteriaGroupToSummary(cg: CriteriaGroup, opts: CommonOpts): JSX.Element {\n const exps: JSX.Element[] = [];\n\n for (const c of cg.criteria) {\n if (isCriteriaGroup(c)) {\n exps.push(criteriaGroupToSummary(c, opts));\n } else {\n const cfg = CRITERIA_CONFIGURATION[c.key];\n if (!cfg) {\n console.error(\"Missing criterion configuration for key\", c.key);\n throw new Error(\"Missing criterion configuration\");\n }\n exps.push(<>{cfg.label} <em>{cfg.toSummary(cfg.fromQuery(c.query, opts), opts)}</em></>);\n }\n }\n\n let result: JSX.Element;\n if (exps.length < 1) {\n result = <>(no criteria)</>;\n } else {\n switch (cg.require) {\n case 'all':\n result = <>{exps.reduce((acc: ReactNodeArray, current: ReactNode, index: number) => [...acc, index ? ', ' : '', current], [])}</>;\n break;\n case 'any':\n result = <>{exps.reduce((acc: ReactNodeArray, current: ReactNode, index: number) => [...acc, index ? ' or ' : '', current], [])}</>;\n break;\n case 'none':\n result = <>neither {exps.reduce((acc: ReactNodeArray, current: ReactNode, index: number) => [...acc, index ? ' nor ' : '', current], [])}</>;\n break;\n }\n }\n\n return result;\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import { TreeNodeInfo } from '@blueprintjs/core';
|
|
4
|
+
import { ItemClassConfigurationSet, Subregisters } from '../../types';
|
|
5
|
+
import { CriteriaGroup, Criterion } from './models';
|
|
6
|
+
/**
|
|
7
|
+
* Builds Blueprint’s tree nodes given criteria,
|
|
8
|
+
* callbacks and relevant register configuration.
|
|
9
|
+
*/
|
|
10
|
+
export default function criteriaToNodes(cs: (CriteriaGroup | Criterion)[], opts: {
|
|
11
|
+
path?: number[];
|
|
12
|
+
/** XXX: This seems to be obsolete. Don’t use, investigate for usefulness. */
|
|
13
|
+
implied?: true;
|
|
14
|
+
/**
|
|
15
|
+
* Called when criteria is being edited. `commit` is set to true
|
|
16
|
+
* when change should take effect.
|
|
17
|
+
*/
|
|
18
|
+
onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void;
|
|
19
|
+
onDeleteItem?: (parent: number[], idx: number) => void;
|
|
20
|
+
onAddGroup?: (parent: number[]) => void;
|
|
21
|
+
itemClasses: ItemClassConfigurationSet;
|
|
22
|
+
availableClassIDs: string[];
|
|
23
|
+
subregisters?: Subregisters;
|
|
24
|
+
}): TreeNodeInfo[];
|