@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.
- 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 -19
- 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 +13 -1
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +178 -85
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +4 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js +10 -3
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToSummary.js +7 -7
- package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -1
- package/views/FilterCriteria/criteriaToNodes.d.ts +9 -0
- package/views/FilterCriteria/criteriaToNodes.js +42 -28
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
- package/views/FilterCriteria/index.d.ts +1 -0
- package/views/FilterCriteria/index.js +29 -21
- package/views/FilterCriteria/index.js.map +1 -1
- package/views/FilterCriteria/models.d.ts +29 -2
- package/views/FilterCriteria/models.js +17 -10
- package/views/FilterCriteria/models.js.map +1 -1
- package/views/FilterCriteria/mutateGroup.d.ts +4 -1
- package/views/FilterCriteria/mutateGroup.js +4 -3
- package/views/FilterCriteria/mutateGroup.js.map +1 -1
- package/views/GenericRelatedItemView.d.ts +1 -1
- package/views/GenericRelatedItemView.js +142 -102
- 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/ItemBrowser.d.ts +0 -12
- package/views/ItemBrowser.js +0 -258
- 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 -276
- package/views/RegisterItemGrid.js.map +0 -1
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = criteriaGroupToSummary;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
11
11
|
|
|
12
12
|
var _models = require("./models");
|
|
13
13
|
|
|
@@ -34,26 +34,26 @@ function criteriaGroupToSummary(cg, opts) {
|
|
|
34
34
|
throw new Error("Missing criterion configuration");
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
exps.push((0,
|
|
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
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
let result;
|
|
42
42
|
|
|
43
43
|
if (exps.length < 1) {
|
|
44
|
-
result = (0,
|
|
44
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, "(no criteria)");
|
|
45
45
|
} else {
|
|
46
46
|
switch (cg.require) {
|
|
47
47
|
case 'all':
|
|
48
|
-
result = (0,
|
|
48
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, exps.reduce((acc, current, index) => [...acc, index ? ', ' : '', current], []));
|
|
49
49
|
break;
|
|
50
50
|
|
|
51
51
|
case 'any':
|
|
52
|
-
result = (0,
|
|
52
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, exps.reduce((acc, current, index) => [...acc, index ? ' or ' : '', current], []));
|
|
53
53
|
break;
|
|
54
54
|
|
|
55
55
|
case 'none':
|
|
56
|
-
result = (0,
|
|
56
|
+
result = (0, _react.jsx)(_react2.default.Fragment, null, "neither ", exps.reduce((acc, current, index) => [...acc, index ? ' nor ' : '', current], []));
|
|
57
57
|
break;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -1 +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,
|
|
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"]}
|
|
@@ -3,9 +3,18 @@
|
|
|
3
3
|
import { TreeNodeInfo } from '@blueprintjs/core';
|
|
4
4
|
import { ItemClassConfigurationSet, Subregisters } from '../../types';
|
|
5
5
|
import { CriteriaGroup, Criterion } from './models';
|
|
6
|
+
/**
|
|
7
|
+
* Builds Blueprint’s tree nodes given criteria,
|
|
8
|
+
* callbacks and relevant register configuration.
|
|
9
|
+
*/
|
|
6
10
|
export default function criteriaToNodes(cs: (CriteriaGroup | Criterion)[], opts: {
|
|
7
11
|
path?: number[];
|
|
12
|
+
/** XXX: This seems to be obsolete. Don’t use, investigate for usefulness. */
|
|
8
13
|
implied?: true;
|
|
14
|
+
/**
|
|
15
|
+
* Called when criteria is being edited. `commit` is set to true
|
|
16
|
+
* when change should take effect.
|
|
17
|
+
*/
|
|
9
18
|
onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void;
|
|
10
19
|
onDeleteItem?: (parent: number[], idx: number) => void;
|
|
11
20
|
onAddGroup?: (parent: number[]) => void;
|
|
@@ -5,11 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = criteriaToNodes;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _core = require("@blueprintjs/core");
|
|
13
|
+
|
|
14
|
+
var _PropertyView = require("@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView");
|
|
13
15
|
|
|
14
16
|
var _models = require("./models");
|
|
15
17
|
|
|
@@ -23,50 +25,58 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
23
25
|
|
|
24
26
|
/** @jsxFrag React.Fragment */
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Builds Blueprint’s tree nodes given criteria,
|
|
30
|
+
* callbacks and relevant register configuration.
|
|
31
|
+
*/
|
|
27
32
|
function criteriaToNodes(cs, opts) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const path = (_a = opts.path) !== null && _a !== void 0 ? _a : [];
|
|
33
|
+
const path = opts.path ?? [];
|
|
31
34
|
return [...cs.entries()].map(([idx, c]) => {
|
|
32
35
|
const isRoot = path.length < 1;
|
|
33
|
-
const
|
|
36
|
+
const defaultIcon = isRoot && opts.implied === true ? 'manual' : undefined;
|
|
34
37
|
const disabled = opts.implied === true;
|
|
35
|
-
const deleteButton = idx < cs.length - 1 && opts.onDeleteItem
|
|
38
|
+
const deleteButton = idx < cs.length - 1 && opts.onDeleteItem ? (0, _react.jsx)(_core.Button, {
|
|
36
39
|
minimal: true,
|
|
37
40
|
small: true,
|
|
38
41
|
onClick: () => opts.onDeleteItem(path, idx),
|
|
42
|
+
title: "Delete this criterion or criteria block",
|
|
43
|
+
disabled: isRoot,
|
|
39
44
|
icon: "cross"
|
|
40
45
|
}) : null;
|
|
46
|
+
const addGroupButton = opts.onAddGroup ? (0, _react.jsx)(_core.Button, {
|
|
47
|
+
minimal: true,
|
|
48
|
+
small: true,
|
|
49
|
+
title: "Add nested criteria block",
|
|
50
|
+
icon: "add-to-artifact",
|
|
51
|
+
onClick: () => opts.onAddGroup([...path, idx])
|
|
52
|
+
}) : null;
|
|
41
53
|
|
|
42
54
|
if ((0, _models.isCriteriaGroup)(c)) {
|
|
55
|
+
// Render criteria group recursively
|
|
43
56
|
const cg = c;
|
|
44
57
|
return {
|
|
45
58
|
id: `${path.join('-')}-${idx}-${opts.implied}`,
|
|
46
59
|
disabled,
|
|
47
60
|
hasCaret: true,
|
|
48
61
|
isExpanded: true,
|
|
49
|
-
icon,
|
|
50
|
-
label: (0,
|
|
62
|
+
icon: defaultIcon,
|
|
63
|
+
label: (0, _react.jsx)(_index.CriteriaGroupLabel, {
|
|
64
|
+
css: (0, _react.css)`margin: 2.5px 0`,
|
|
51
65
|
criteriaGroup: cg,
|
|
52
|
-
onUpdate: opts.onEditItem ? op => opts.onEditItem(path, idx,
|
|
66
|
+
onUpdate: opts.onEditItem ? op => opts.onEditItem(path, idx, { ...cg,
|
|
53
67
|
require: op
|
|
54
|
-
}
|
|
68
|
+
}, true) : undefined
|
|
55
69
|
}),
|
|
56
|
-
secondaryLabel: (0,
|
|
57
|
-
minimal: true,
|
|
58
|
-
small: true,
|
|
59
|
-
onClick: () => opts.onAddGroup([...path, idx]),
|
|
60
|
-
icon: "more"
|
|
61
|
-
}) : null, deleteButton),
|
|
70
|
+
secondaryLabel: (0, _react.jsx)(_core.ButtonGroup, null, opts.implied && isRoot ? (0, _react.jsx)(_react2.default.Fragment, null, "(implied)") : null, addGroupButton, deleteButton),
|
|
62
71
|
childNodes: criteriaToNodes(opts.onEditItem ? [...cg.criteria, {
|
|
63
72
|
key: 'custom',
|
|
64
73
|
query: ''
|
|
65
|
-
}] : cg.criteria,
|
|
74
|
+
}] : cg.criteria, { ...opts,
|
|
66
75
|
path: [...path, idx]
|
|
67
|
-
})
|
|
76
|
+
})
|
|
68
77
|
};
|
|
69
78
|
} else {
|
|
79
|
+
// Render leaf criterion
|
|
70
80
|
const ci = c;
|
|
71
81
|
const {
|
|
72
82
|
subregisters,
|
|
@@ -96,19 +106,24 @@ function criteriaToNodes(cs, opts) {
|
|
|
96
106
|
label: cfg.label
|
|
97
107
|
};
|
|
98
108
|
});
|
|
99
|
-
const
|
|
109
|
+
const isPlaceholder = ci.key === 'custom' && ci.query === '';
|
|
110
|
+
const label = isPlaceholder ? (0, _react.jsx)(_core.Button, {
|
|
100
111
|
small: true,
|
|
112
|
+
minimal: true,
|
|
113
|
+
icon: "plus",
|
|
101
114
|
onClick: () => opts.onEditItem(path, idx, {
|
|
102
115
|
key: 'custom',
|
|
103
116
|
query: cfg.toQuery({
|
|
104
|
-
customExpression: '
|
|
117
|
+
customExpression: 'false'
|
|
105
118
|
}, {
|
|
106
119
|
subregisters,
|
|
107
120
|
itemClasses
|
|
108
121
|
})
|
|
109
122
|
}, true)
|
|
110
|
-
}, "
|
|
111
|
-
|
|
123
|
+
}, "criteria") : (0, _react.jsx)(_core.ControlGroup, {
|
|
124
|
+
vertical: true,
|
|
125
|
+
css: (0, _react.css)`margin-bottom: 2.5px;`
|
|
126
|
+
}, (0, _react.jsx)(_PropertyView.Select, {
|
|
112
127
|
options: criterionTypeOptions,
|
|
113
128
|
value: ci.key,
|
|
114
129
|
disabled: !opts.onEditItem,
|
|
@@ -120,7 +135,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
120
135
|
});
|
|
121
136
|
}
|
|
122
137
|
} : undefined
|
|
123
|
-
}), (0,
|
|
138
|
+
}), (0, _react.jsx)(Widget, {
|
|
124
139
|
itemClasses: opts.itemClasses,
|
|
125
140
|
availableClassIDs: opts.availableClassIDs,
|
|
126
141
|
subregisters: opts.subregisters,
|
|
@@ -136,9 +151,8 @@ function criteriaToNodes(cs, opts) {
|
|
|
136
151
|
return {
|
|
137
152
|
id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,
|
|
138
153
|
disabled,
|
|
139
|
-
icon,
|
|
140
154
|
label,
|
|
141
|
-
secondaryLabel: (0,
|
|
155
|
+
secondaryLabel: (0, _react.jsx)(_core.ButtonGroup, null, deleteButton)
|
|
142
156
|
};
|
|
143
157
|
}
|
|
144
158
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteriaToNodes.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaToNodes.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { Button, ButtonGroup, HTMLSelect, OptionProps, TreeNodeInfo, ControlGroup } from '@blueprintjs/core';\nimport { ItemClassConfigurationSet, Subregisters } from '../../types';\nimport { CriteriaGroup, Criterion, isCriteriaGroup, isCriteriaKey } from './models';\nimport { CriteriaGroupLabel } from './index';\nimport { CRITERIA_CONFIGURATION } from \"./CRITERIA_CONFIGURATION\";\n\n\n/* Building tree nodes */\nexport default function criteriaToNodes(\n cs: (CriteriaGroup | Criterion)[],\n opts: {\n path?: number[];\n implied?: true;\n onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void;\n onDeleteItem?: (parent: number[], idx: number) => void;\n onAddGroup?: (parent: number[]) => void;\n\n itemClasses: ItemClassConfigurationSet;\n availableClassIDs: string[];\n subregisters?: Subregisters;\n }): TreeNodeInfo[] {\n const path = opts.path ?? [];\n\n return [...cs.entries()].map(([idx, c]): TreeNodeInfo => {\n const isRoot = path.length < 1;\n const icon = isRoot && opts.implied === true ? 'manual' : undefined;\n const disabled = opts.implied === true;\n const deleteButton: JSX.Element | null = idx < (cs.length - 1) &&\n opts.onDeleteItem &&\n !isRoot\n ? <Button minimal small\n onClick={() => opts.onDeleteItem!(path, idx)}\n icon=\"cross\" />\n : null;\n\n if (isCriteriaGroup(c)) {\n const cg = c as CriteriaGroup;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied}`,\n disabled,\n hasCaret: true,\n isExpanded: true,\n icon,\n label: <CriteriaGroupLabel\n criteriaGroup={cg}\n onUpdate={opts.onEditItem\n ? ((op) => opts.onEditItem!(path, idx, { ...cg, require: op }, true))\n : undefined} />,\n secondaryLabel: <ButtonGroup>\n {opts.implied && isRoot ? <>(implied from plan)</> : null}\n {opts.onAddGroup\n ? <Button minimal small\n onClick={() => opts.onAddGroup!([...path, idx])}\n icon=\"more\" />\n : null}\n {deleteButton}\n </ButtonGroup>,\n childNodes: criteriaToNodes(\n opts.onEditItem\n ? [...cg.criteria, { key: 'custom', query: '' }]\n : cg.criteria,\n { ...opts, path: [...path, idx] }),\n };\n } else {\n const ci = c as Criterion;\n const { subregisters, itemClasses } = opts;\n if (!isCriteriaKey(ci.key)) {\n console.error(\"Invalid criteria key encountered\", ci.key);\n throw new Error(\"Invalid criteria key encountered\");\n }\n const cfg = CRITERIA_CONFIGURATION[ci.key];\n if (!cfg) {\n console.error(\"Missing criterion configuration for key\", ci.key);\n throw new Error(\"Missing criterion configuration\");\n }\n const Widget = cfg.widget;\n const data = cfg.fromQuery(ci.query, { subregisters, itemClasses });\n const criterionTypeOptions: OptionProps[] = Object.entries(CRITERIA_CONFIGURATION).\n map(([key, cfg]) => {\n return { value: key, label: cfg.label };\n });\n const label = ci.key === 'custom' && ci.query === ''\n ? <Button\n small\n onClick={() => opts.onEditItem!(\n path,\n idx,\n { key: 'custom', query: cfg.toQuery({ customExpression: 'true' }, { subregisters, itemClasses }) },\n true)}>\n Add…\n </Button>\n : <ControlGroup>\n <HTMLSelect\n minimal\n options={criterionTypeOptions}\n value={ci.key}\n disabled={!opts.onEditItem}\n onChange={opts.onEditItem\n ? (evt) => {\n if (evt.currentTarget.value !== '' && isCriteriaKey(evt.currentTarget.value)) {\n opts.onEditItem!(\n path,\n idx,\n { key: evt.currentTarget.value, query: '' }\n );\n }\n }\n : undefined} />\n <Widget\n itemClasses={opts.itemClasses}\n availableClassIDs={opts.availableClassIDs}\n subregisters={opts.subregisters}\n data={data}\n onChange={(val) => opts.onEditItem!(\n path,\n idx,\n { key: ci.key, query: cfg.toQuery(val, { subregisters, itemClasses }) },\n true)} />\n </ControlGroup>;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,\n disabled,\n icon,\n label,\n secondaryLabel: <ButtonGroup>\n {deleteButton}\n </ButtonGroup>,\n };\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"criteriaToNodes.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaToNodes.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React from 'react';\nimport { Button, ButtonGroup, OptionProps, TreeNodeInfo, ControlGroup } from '@blueprintjs/core';\nimport { Select } from '@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView';\nimport { ItemClassConfigurationSet, Subregisters } from '../../types';\nimport { CriteriaGroup, Criterion, isCriteriaGroup, isCriteriaKey } from './models';\nimport { CriteriaGroupLabel } from './index';\nimport { CRITERIA_CONFIGURATION } from './CRITERIA_CONFIGURATION';\n\n\n/**\n * Builds Blueprint’s tree nodes given criteria,\n * callbacks and relevant register configuration.\n */\nexport default function criteriaToNodes(\n cs: (CriteriaGroup | Criterion)[],\n opts: {\n path?: number[];\n\n /** XXX: This seems to be obsolete. Don’t use, investigate for usefulness. */\n implied?: true;\n\n /**\n * Called when criteria is being edited. `commit` is set to true\n * when change should take effect.\n */\n onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void;\n onDeleteItem?: (parent: number[], idx: number) => void;\n onAddGroup?: (parent: number[]) => void;\n\n itemClasses: ItemClassConfigurationSet;\n availableClassIDs: string[];\n subregisters?: Subregisters;\n }): TreeNodeInfo[] {\n const path = opts.path ?? [];\n\n return [...cs.entries()].map(([idx, c]): TreeNodeInfo => {\n const isRoot = path.length < 1;\n const defaultIcon = isRoot && opts.implied === true\n ? 'manual'\n : undefined;\n\n const disabled = opts.implied === true;\n const deleteButton: JSX.Element | null =\n idx < (cs.length - 1) && opts.onDeleteItem\n ? <Button minimal small\n onClick={() => opts.onDeleteItem!(path, idx)}\n title=\"Delete this criterion or criteria block\"\n disabled={isRoot}\n icon=\"cross\" />\n : null;\n const addGroupButton: JSX.Element | null = opts.onAddGroup\n ? <Button\n minimal\n small\n title=\"Add nested criteria block\"\n icon=\"add-to-artifact\"\n onClick={() => opts.onAddGroup!([...path, idx])} />\n : null;\n\n if (isCriteriaGroup(c)) {\n\n // Render criteria group recursively\n\n const cg = c as CriteriaGroup;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied}`,\n disabled,\n hasCaret: true,\n isExpanded: true,\n icon: defaultIcon,\n label: <CriteriaGroupLabel\n css={css`margin: 2.5px 0`}\n criteriaGroup={cg}\n onUpdate={opts.onEditItem\n ? ((op) => opts.onEditItem!(path, idx, { ...cg, require: op }, true))\n : undefined} />,\n secondaryLabel: <ButtonGroup>\n {opts.implied && isRoot ? <>(implied)</> : null}\n {addGroupButton}\n {deleteButton}\n </ButtonGroup>,\n childNodes: criteriaToNodes(\n opts.onEditItem\n ? [...cg.criteria, { key: 'custom', query: '' }]\n : cg.criteria,\n { ...opts, path: [...path, idx] }),\n };\n\n } else {\n\n // Render leaf criterion\n\n const ci = c as Criterion;\n const { subregisters, itemClasses } = opts;\n if (!isCriteriaKey(ci.key)) {\n console.error(\"Invalid criteria key encountered\", ci.key);\n throw new Error(\"Invalid criteria key encountered\");\n }\n const cfg = CRITERIA_CONFIGURATION[ci.key];\n if (!cfg) {\n console.error(\"Missing criterion configuration for key\", ci.key);\n throw new Error(\"Missing criterion configuration\");\n }\n const Widget = cfg.widget;\n const data = cfg.fromQuery(ci.query, { subregisters, itemClasses });\n const criterionTypeOptions: OptionProps[] = Object.entries(CRITERIA_CONFIGURATION).\n map(([key, cfg]) => {\n return { value: key, label: cfg.label };\n });\n const isPlaceholder = ci.key === 'custom' && ci.query === '';\n const label = isPlaceholder\n ? <Button\n small\n minimal\n icon=\"plus\"\n onClick={() => opts.onEditItem!(\n path,\n idx,\n { key: 'custom', query: cfg.toQuery({ customExpression: 'false' }, { subregisters, itemClasses }) },\n true)}>\n criteria\n </Button>\n : <ControlGroup vertical css={css`margin-bottom: 2.5px;`}>\n <Select\n options={criterionTypeOptions}\n value={ci.key}\n disabled={!opts.onEditItem}\n onChange={opts.onEditItem\n ? (evt) => {\n if (evt.currentTarget.value !== '' && isCriteriaKey(evt.currentTarget.value)) {\n opts.onEditItem!(\n path,\n idx,\n { key: evt.currentTarget.value, query: '' }\n );\n }\n }\n : undefined} />\n <Widget\n itemClasses={opts.itemClasses}\n availableClassIDs={opts.availableClassIDs}\n subregisters={opts.subregisters}\n data={data}\n onChange={(val) => opts.onEditItem!(\n path,\n idx,\n { key: ci.key, query: cfg.toQuery(val, { subregisters, itemClasses }) },\n true)} />\n </ControlGroup>;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,\n disabled,\n label,\n secondaryLabel: <ButtonGroup>\n {deleteButton}\n </ButtonGroup>,\n };\n\n }\n\n });\n}\n"]}
|
|
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.CriteriaGroupLabel = exports.default = exports.CriteriaTree = exports.SUBREGISTER_PATH_PREFIX = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _react2 = require("react");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _core = require("@blueprintjs/core");
|
|
13
13
|
|
|
14
14
|
var _models = require("./models");
|
|
15
15
|
|
|
@@ -19,10 +19,6 @@ var _criteriaToNodes = _interopRequireDefault(require("./criteriaToNodes"));
|
|
|
19
19
|
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
21
|
|
|
22
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
23
|
-
|
|
24
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
|
|
25
|
-
|
|
26
22
|
/** @jsx jsx */
|
|
27
23
|
|
|
28
24
|
/** @jsxFrag React.Fragment */
|
|
@@ -38,14 +34,13 @@ const CriteriaTree = function ({
|
|
|
38
34
|
subregisters,
|
|
39
35
|
className
|
|
40
36
|
}) {
|
|
41
|
-
const [crit, updateCriteria] = (0,
|
|
42
|
-
(0,
|
|
37
|
+
const [crit, updateCriteria] = (0, _react2.useState)(criteria);
|
|
38
|
+
(0, _react2.useEffect)(() => {
|
|
43
39
|
updateCriteria(criteria);
|
|
44
40
|
}, [JSON.stringify(criteria)]);
|
|
45
41
|
|
|
46
42
|
function onAddGroup(parent) {
|
|
47
|
-
|
|
48
|
-
p.reverse();
|
|
43
|
+
const p = reverseArray(parent);
|
|
49
44
|
var newCriteria = JSON.parse(JSON.stringify([crit]));
|
|
50
45
|
const newGroup = (0, _models.makeBlankCriteria)();
|
|
51
46
|
(0, _mutateGroup.default)(newCriteria, p, {
|
|
@@ -57,8 +52,7 @@ const CriteriaTree = function ({
|
|
|
57
52
|
}
|
|
58
53
|
|
|
59
54
|
function onDelete(parent, idx) {
|
|
60
|
-
|
|
61
|
-
p.reverse();
|
|
55
|
+
const p = reverseArray(parent);
|
|
62
56
|
var newCriteria = JSON.parse(JSON.stringify([crit]));
|
|
63
57
|
(0, _mutateGroup.default)(newCriteria, p, {
|
|
64
58
|
action: 'delete',
|
|
@@ -69,8 +63,7 @@ const CriteriaTree = function ({
|
|
|
69
63
|
}
|
|
70
64
|
|
|
71
65
|
function onEditItem(parent, idx, newItem, commit) {
|
|
72
|
-
|
|
73
|
-
p.reverse();
|
|
66
|
+
const p = reverseArray(parent);
|
|
74
67
|
var newCriteria = JSON.parse(JSON.stringify([crit]));
|
|
75
68
|
(0, _mutateGroup.default)(newCriteria, p, {
|
|
76
69
|
action: 'edit',
|
|
@@ -98,8 +91,14 @@ const CriteriaTree = function ({
|
|
|
98
91
|
subregisters,
|
|
99
92
|
availableClassIDs
|
|
100
93
|
}) : [];
|
|
101
|
-
return (0,
|
|
102
|
-
contents: [...implied, ...nodes]
|
|
94
|
+
return (0, _react.jsx)(_core.Tree, {
|
|
95
|
+
contents: [...implied, ...nodes],
|
|
96
|
+
className: className,
|
|
97
|
+
css: (0, _react.css)`
|
|
98
|
+
.bp4-tree-node-content { height: unset; }
|
|
99
|
+
.bp4-tree-node-label { overflow: unset; }
|
|
100
|
+
.bp4-tree-node-caret, .bp4-tree-node-caret-none { display: none; }
|
|
101
|
+
`
|
|
103
102
|
});
|
|
104
103
|
};
|
|
105
104
|
|
|
@@ -109,14 +108,23 @@ exports.default = _default;
|
|
|
109
108
|
|
|
110
109
|
const CriteriaGroupLabel = function ({
|
|
111
110
|
criteriaGroup,
|
|
112
|
-
onUpdate
|
|
111
|
+
onUpdate,
|
|
112
|
+
className
|
|
113
113
|
}) {
|
|
114
|
-
return (0,
|
|
114
|
+
return (0, _react.jsx)("div", {
|
|
115
|
+
className: className
|
|
116
|
+
}, onUpdate ? (0, _react.jsx)(_core.ButtonGroup, null, _models.COMPOSITION_OPERATORS.map(op => (0, _react.jsx)(_core.Button, {
|
|
115
117
|
key: op,
|
|
116
118
|
small: true,
|
|
117
119
|
onClick: () => onUpdate ? onUpdate(op) : void 0,
|
|
118
120
|
active: criteriaGroup.require === op
|
|
119
|
-
}, op))) : (0,
|
|
121
|
+
}, op))) : (0, _react.jsx)("strong", null, criteriaGroup.require), " ", "of:");
|
|
120
122
|
};
|
|
121
123
|
|
|
122
|
-
exports.CriteriaGroupLabel = CriteriaGroupLabel;
|
|
124
|
+
exports.CriteriaGroupLabel = CriteriaGroupLabel;
|
|
125
|
+
|
|
126
|
+
function reverseArray(arr) {
|
|
127
|
+
var copy = JSON.parse(JSON.stringify(arr));
|
|
128
|
+
copy.reverse();
|
|
129
|
+
return copy;
|
|
130
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React, { useEffect, useState } from 'react';\nimport { Button, ButtonGroup, TreeNodeInfo, Tree } from '@blueprintjs/core';\nimport { ItemClassConfigurationSet, Subregisters } from '../../types';\nimport { CriteriaGroup, makeBlankCriteria, Criterion, CompositionOperator, COMPOSITION_OPERATORS } from './models';\nimport mutateGroup from './mutateGroup';\nimport criteriaToNodes from './criteriaToNodes';\n\n\nexport const SUBREGISTER_PATH_PREFIX = '/subregisters/';\n\n\ninterface CriteriaTreeProps {\n impliedCriteria?: CriteriaGroup\n criteria: CriteriaGroup\n onChange?: (criteria: CriteriaGroup) => void\n className?: string\n availableClassIDs: string[]\n\n // TODO: move to context\n itemClasses: ItemClassConfigurationSet\n subregisters?: Subregisters\n}\n\n\nexport const CriteriaTree: React.FC<CriteriaTreeProps> =\nfunction ({ criteria, impliedCriteria, onChange, availableClassIDs, itemClasses, subregisters, className }) {\n const [crit, updateCriteria] = useState<CriteriaGroup>(criteria);\n\n useEffect(() => {\n updateCriteria(criteria);\n }, [JSON.stringify(criteria)]);\n\n function onAddGroup(parent: number[]) {\n const p = reverseArray(parent);\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n const newGroup: CriteriaGroup = makeBlankCriteria();\n mutateGroup(newCriteria, p, { action: 'insert', item: newGroup });\n updateCriteria(newCriteria[0]);\n onChange!(newCriteria[0]);\n }\n\n function onDelete(parent: number[], idx: number) {\n const p = reverseArray(parent);\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n mutateGroup(newCriteria, p, { action: 'delete', idx });\n updateCriteria(newCriteria[0]);\n onChange!(newCriteria[0]);\n }\n\n function onEditItem(parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) {\n const p = reverseArray(parent);\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n mutateGroup(newCriteria, p, { action: 'edit', idx, item: newItem });\n updateCriteria(newCriteria[0]);\n if (commit) {\n onChange!(newCriteria[0]);\n }\n }\n\n const nodes: TreeNodeInfo[] = criteriaToNodes([crit], {\n onEditItem: onChange ? onEditItem : undefined,\n onAddGroup: onChange ? onAddGroup : undefined,\n onDeleteItem: onChange ? onDelete : undefined,\n itemClasses,\n subregisters,\n availableClassIDs,\n });\n\n const implied: TreeNodeInfo[] = impliedCriteria !== undefined\n ? criteriaToNodes([impliedCriteria], {\n implied: true,\n itemClasses,\n subregisters,\n availableClassIDs,\n })\n : [];\n\n return (\n <Tree\n contents={[ ...implied, ...nodes ]}\n className={className}\n css={css`\n .bp4-tree-node-content { height: unset; }\n .bp4-tree-node-label { overflow: unset; }\n .bp4-tree-node-caret, .bp4-tree-node-caret-none { display: none; }\n `}\n />\n );\n}\n\nexport default CriteriaTree;\n\n\n/* Displaying criteria group labels */\n\ninterface CriteriaGroupLabelProps {\n criteriaGroup: CriteriaGroup\n onUpdate?: (op: CompositionOperator) => void\n className?: string\n}\nexport const CriteriaGroupLabel: React.FC<CriteriaGroupLabelProps> =\nfunction ({ criteriaGroup, onUpdate, className }) {\n return <div className={className}>\n {onUpdate\n ? <ButtonGroup>\n {COMPOSITION_OPERATORS.map(op =>\n <Button\n key={op}\n small\n onClick={() => onUpdate ? onUpdate(op) : void 0}\n active={criteriaGroup.require === op}>\n {op}\n </Button>\n )}\n </ButtonGroup>\n : <strong>{criteriaGroup.require}</strong>}\n {\" \"}\n of:\n </div>;\n}\n\n\nfunction reverseArray<T>(arr: T[]): T[] {\n var copy = JSON.parse(JSON.stringify(arr));\n copy.reverse();\n return copy;\n}\n"]}
|
|
@@ -1,18 +1,40 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
+
import { IconName } from '@blueprintjs/core';
|
|
2
3
|
import type { ItemClassConfigurationSet, Subregisters } from '../../types';
|
|
4
|
+
/**
|
|
5
|
+
* Defines how to display a search criterion.
|
|
6
|
+
* T: criteria data structure.
|
|
7
|
+
*/
|
|
3
8
|
export interface CriterionConfiguration<T extends Record<string, any>> {
|
|
9
|
+
icon?: IconName;
|
|
4
10
|
label: string;
|
|
11
|
+
/**
|
|
12
|
+
* Widget that displays and optionally allows editing
|
|
13
|
+
* criteria data structure.
|
|
14
|
+
*/
|
|
5
15
|
widget: CriteriaWidget<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Determines whether to enable this search criteria based on
|
|
18
|
+
* registry configuration.
|
|
19
|
+
*/
|
|
20
|
+
isEnabled?: (opts: CommonOpts) => boolean;
|
|
21
|
+
/** Summarizes criteria in a human-readable way. */
|
|
6
22
|
toSummary: (data: T, opts: CommonOpts) => string | JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* Coverts criteria structure to a string
|
|
25
|
+
* that can be passed to filtering backend.
|
|
26
|
+
*/
|
|
7
27
|
toQuery: (data: T, opts: CommonOpts) => string;
|
|
28
|
+
/** Converts a query string to criteria structure. */
|
|
8
29
|
fromQuery: (query: string, opts: CommonOpts) => T;
|
|
9
30
|
}
|
|
10
31
|
export declare type CriteriaConfiguration = {
|
|
11
32
|
[key in CriterionKey]: CriterionConfiguration<Record<string, unknown>>;
|
|
12
33
|
};
|
|
34
|
+
export declare type CriteriaTransformer = (existing: CriteriaGroup) => CriteriaGroup;
|
|
13
35
|
export declare const COMPOSITION_OPERATORS: readonly ["all", "any", "none"];
|
|
14
36
|
export declare type CompositionOperator = typeof COMPOSITION_OPERATORS[number];
|
|
15
|
-
declare const CRITERIA_KEYS: readonly ["item-class", "custom"];
|
|
37
|
+
declare const CRITERIA_KEYS: readonly ["item-class", "subregister", "custom", "raw-substring"];
|
|
16
38
|
declare type CriterionKey = typeof CRITERIA_KEYS[number];
|
|
17
39
|
export declare function isCriteriaKey(val: string): val is CriterionKey;
|
|
18
40
|
declare type CriteriaWidget<T extends Record<string, any>> = React.FC<{
|
|
@@ -25,9 +47,12 @@ declare type CriteriaWidget<T extends Record<string, any>> = React.FC<{
|
|
|
25
47
|
style?: React.CSSProperties;
|
|
26
48
|
}>;
|
|
27
49
|
export interface Criterion {
|
|
28
|
-
|
|
50
|
+
/** Specific criterion as a string. */
|
|
29
51
|
query: string;
|
|
52
|
+
/** Key in criteria configuration that defines how to work with this criterion. */
|
|
53
|
+
key: CriterionKey;
|
|
30
54
|
}
|
|
55
|
+
/** Register metadata that may be needed to display filter criteria. */
|
|
31
56
|
export interface CommonOpts {
|
|
32
57
|
subregisters?: Subregisters;
|
|
33
58
|
itemClasses: ItemClassConfigurationSet;
|
|
@@ -38,4 +63,6 @@ export interface CriteriaGroup {
|
|
|
38
63
|
}
|
|
39
64
|
export declare function isCriteriaGroup(val: any): val is CriteriaGroup;
|
|
40
65
|
export declare function makeBlankCriteria(): CriteriaGroup;
|
|
66
|
+
/** Useful as no-op default where a valid criteria is required. */
|
|
67
|
+
export declare const BLANK_CRITERIA: CriteriaGroup;
|
|
41
68
|
export {};
|
|
@@ -6,22 +6,29 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.isCriteriaKey = isCriteriaKey;
|
|
7
7
|
exports.isCriteriaGroup = isCriteriaGroup;
|
|
8
8
|
exports.makeBlankCriteria = makeBlankCriteria;
|
|
9
|
-
exports.COMPOSITION_OPERATORS = void 0;
|
|
10
|
-
const COMPOSITION_OPERATORS = ['all', 'any', 'none'];
|
|
9
|
+
exports.BLANK_CRITERIA = exports.COMPOSITION_OPERATORS = void 0;
|
|
10
|
+
const COMPOSITION_OPERATORS = ['all', 'any', 'none']; // TODO: Can we not hard-code keys here? Would require some smart generic typing.
|
|
11
|
+
|
|
11
12
|
exports.COMPOSITION_OPERATORS = COMPOSITION_OPERATORS;
|
|
12
|
-
const CRITERIA_KEYS = ['item-class', 'custom'];
|
|
13
|
+
const CRITERIA_KEYS = ['item-class', 'subregister', 'custom', 'raw-substring'];
|
|
13
14
|
|
|
14
15
|
function isCriteriaKey(val) {
|
|
15
16
|
return CRITERIA_KEYS.indexOf(val) >= 0;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
function isCriteriaGroup(val) {
|
|
19
|
-
return val.hasOwnProperty('require');
|
|
20
|
-
}
|
|
20
|
+
return val && val.hasOwnProperty('require') && val.hasOwnProperty('criteria');
|
|
21
|
+
} // TODO: Deprecate in favour of `BLANK_CRITERIA`?
|
|
22
|
+
|
|
21
23
|
|
|
22
24
|
function makeBlankCriteria() {
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
return BLANK_CRITERIA;
|
|
26
|
+
}
|
|
27
|
+
/** Useful as no-op default where a valid criteria is required. */
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
const BLANK_CRITERIA = {
|
|
31
|
+
require: 'all',
|
|
32
|
+
criteria: []
|
|
33
|
+
};
|
|
34
|
+
exports.BLANK_CRITERIA = BLANK_CRITERIA;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/models.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/models.ts"],"names":[],"mappings":"AA4CA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK;IACL,KAAK;IACL,MAAM;CACE,CAAC;AAGX,iFAAiF;AACjF,MAAM,aAAa,GAAG;IACpB,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,eAAe;CACP,CAAC;AAGX,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAmB,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AA+BD,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,EAAE;CACb,CAAC","sourcesContent":["import type React from 'react';\nimport { IconName } from '@blueprintjs/core';\nimport type { ItemClassConfigurationSet, Subregisters } from '../../types';\n\n\n/**\n * Defines how to display a search criterion.\n * T: criteria data structure.\n */\nexport interface CriterionConfiguration<T extends Record<string, any>> {\n icon?: IconName\n label: string;\n\n /**\n * Widget that displays and optionally allows editing\n * criteria data structure.\n */\n widget: CriteriaWidget<T>;\n\n /**\n * Determines whether to enable this search criteria based on \n * registry configuration.\n */\n isEnabled?: (opts: CommonOpts) => boolean\n\n /** Summarizes criteria in a human-readable way. */\n toSummary: (data: T, opts: CommonOpts) => string | JSX.Element;\n\n /**\n * Coverts criteria structure to a string\n * that can be passed to filtering backend.\n */\n toQuery: (data: T, opts: CommonOpts) => string;\n\n /** Converts a query string to criteria structure. */\n fromQuery: (query: string, opts: CommonOpts) => T;\n}\n\nexport type CriteriaConfiguration = {\n [key in CriterionKey]: CriterionConfiguration<Record<string, unknown>>;\n};\n\nexport type CriteriaTransformer = (existing: CriteriaGroup) => CriteriaGroup;\n\nexport const COMPOSITION_OPERATORS = [\n 'all',\n 'any',\n 'none',\n] as const;\nexport type CompositionOperator = typeof COMPOSITION_OPERATORS[number];\n\n// TODO: Can we not hard-code keys here? Would require some smart generic typing.\nconst CRITERIA_KEYS = [\n 'item-class',\n 'subregister',\n 'custom',\n 'raw-substring',\n] as const;\ntype CriterionKey = typeof CRITERIA_KEYS[number];\n\nexport function isCriteriaKey(val: string): val is CriterionKey {\n return CRITERIA_KEYS.indexOf(val as CriterionKey) >= 0;\n}\n\ntype CriteriaWidget<T extends Record<string, any>> = React.FC<{\n data: T;\n onChange?: (newData: T) => void;\n availableClassIDs: string[];\n itemClasses: ItemClassConfigurationSet;\n subregisters?: Subregisters;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport interface Criterion {\n /** Specific criterion as a string. */\n query: string;\n\n /** Key in criteria configuration that defines how to work with this criterion. */\n key: CriterionKey;\n}\n\n/** Register metadata that may be needed to display filter criteria. */\nexport interface CommonOpts {\n subregisters?: Subregisters;\n itemClasses: ItemClassConfigurationSet;\n}\n\nexport interface CriteriaGroup {\n require: 'all' | 'any' | 'none';\n criteria: (CriteriaGroup | Criterion)[];\n}\n\nexport function isCriteriaGroup(val: any): val is CriteriaGroup {\n return val && val.hasOwnProperty('require') && val.hasOwnProperty('criteria');\n}\n\n// TODO: Deprecate in favour of `BLANK_CRITERIA`?\nexport function makeBlankCriteria(): CriteriaGroup {\n return BLANK_CRITERIA;\n}\n\n/** Useful as no-op default where a valid criteria is required. */\nexport const BLANK_CRITERIA: CriteriaGroup = {\n require: 'all',\n criteria: [],\n};\n"]}
|
|
@@ -10,5 +10,8 @@ declare type TreeMutation<T> = {
|
|
|
10
10
|
idx: number;
|
|
11
11
|
item: T;
|
|
12
12
|
};
|
|
13
|
-
|
|
13
|
+
/** Mutates given criteria tree in place. */
|
|
14
|
+
export default function mutateGroup(criteria: (CriteriaGroup | Criterion)[],
|
|
15
|
+
/** Here path must be parent node path in reverse (top-level index coming last). */
|
|
16
|
+
path: number[], mutation: TreeMutation<CriteriaGroup | Criterion>): void;
|
|
14
17
|
export {};
|
|
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = mutateGroup;
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
function mutateGroup(criteria,
|
|
10
|
-
|
|
8
|
+
/** Mutates given criteria tree in place. */
|
|
9
|
+
function mutateGroup(criteria,
|
|
10
|
+
/** Here path must be parent node path in reverse (top-level index coming last). */
|
|
11
|
+
path, mutation) {
|
|
11
12
|
if (path.length < 1 && mutation.action === 'edit') {
|
|
12
13
|
criteria[0].require = mutation.item.require;
|
|
13
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutateGroup.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/mutateGroup.ts"],"names":[],"mappings":"AASA,
|
|
1
|
+
{"version":3,"file":"mutateGroup.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/mutateGroup.ts"],"names":[],"mappings":"AASA,4CAA4C;AAC5C,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,QAAuC;AAEvC,mFAAmF;AACnF,IAAc,EAEd,QAAiD;IAGjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE;QAChD,QAAQ,CAAC,CAAC,CAAmB,CAAC,OAAO,GAAI,QAAQ,CAAC,IAAsB,CAAC,OAAO,CAAC;KACnF;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YAEX,IAAI,EAAiB,CAAC;YACtB,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;gBAChC,2DAA2D;gBAC3D,EAAE,GAAG,CAAkB,CAAC;aACzB;iBAAM;gBACL,sEAAsE;gBACtE,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;aAC7F;YAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;aAC1C;iBAAM;gBACL,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;oBAChC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBACrC;qBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;oBACvC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACjC;qBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE;oBACrC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE;wBAClF,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;4BAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;4BACrC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;yBAChD;wBACD,8CAA8C;wBAC9C,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;qBACjC;oBACD,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBACpE,IAAI,OAAO,EAAE;wBACX,gFAAgF;wBAC/E,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAmB,CAAC,OAAO;4BACjD,QAAQ,CAAC,IAAsB,CAAC,OAAO,CAAC;qBAC5C;yBAAM;wBACL,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;qBAC3C;iBACF;aACF;SACF;KACF;AACH,CAAC","sourcesContent":["import { CriteriaGroup, Criterion } from './models';\n\n\ntype TreeMutation<T> =\n { action: 'delete'; idx: number; } |\n { action: 'insert'; item: T; } |\n { action: 'edit'; idx: number; item: T; };\n\n\n/** Mutates given criteria tree in place. */\nexport default function mutateGroup(\n criteria: (CriteriaGroup | Criterion)[],\n\n /** Here path must be parent node path in reverse (top-level index coming last). */\n path: number[],\n\n mutation: TreeMutation<CriteriaGroup | Criterion>,\n) {\n\n if (path.length < 1 && mutation.action === 'edit') {\n (criteria[0] as CriteriaGroup).require = (mutation.item as CriteriaGroup).require;\n }\n for (const [curIdx, c] of criteria.entries()) {\n if (curIdx === path[path.length - 1]) {\n path.pop();\n\n let cg: CriteriaGroup;\n if (c.hasOwnProperty('criteria')) {\n // This item is a group, let’s go in and delete descendants\n cg = c as CriteriaGroup;\n } else {\n // This item is a predicate string, can’t go in and delete descendants\n throw new Error(`Cannot enter item: not a group at path ${path.join('/')}/${curIdx}: ${c}`);\n }\n\n if (path.length > 0) {\n mutateGroup(cg.criteria, path, mutation);\n } else {\n if (mutation.action === 'delete') {\n cg.criteria.splice(mutation.idx, 1);\n } else if (mutation.action === 'insert') {\n cg.criteria.push(mutation.item);\n } else if (mutation.action === 'edit') {\n if (cg.criteria[mutation.idx] === undefined && mutation.idx === cg.criteria.length) {\n if (mutation.item.hasOwnProperty('require')) {\n console.error(cg.criteria, mutation);\n throw new Error(\"Won’t auto-insert new group\");\n }\n // It may be that a new item is being appended\n cg.criteria.push(mutation.item);\n }\n const isGroup = cg.criteria[mutation.idx].hasOwnProperty('require');\n if (isGroup) {\n // If it’s a group, only change the predicate operator to preserve nested items:\n (cg.criteria[mutation.idx] as CriteriaGroup).require =\n (mutation.item as CriteriaGroup).require;\n } else {\n cg.criteria[mutation.idx] = mutation.item;\n }\n }\n }\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { GenericRelatedItemViewProps } from '../types';
|
|
4
|
+
import { type GenericRelatedItemViewProps } from '../types';
|
|
5
5
|
export declare const GenericRelatedItemView: React.FC<GenericRelatedItemViewProps>;
|
|
6
6
|
export default GenericRelatedItemView;
|