@riboseinc/paneron-registry-kit 2.2.21 → 2.2.22
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/package.json +2 -2
- package/views/FilterCriteria/criteriaToNodes.js +5 -5
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
- package/views/FilterCriteria/mutateGroup.d.ts +9 -2
- package/views/FilterCriteria/mutateGroup.js +27 -5
- package/views/FilterCriteria/mutateGroup.js.map +1 -1
- package/views/ProposalHistoryDrawer.js +13 -8
- package/views/ProposalHistoryDrawer.js.map +1 -1
- package/views/SearchQuery.js +2 -2
- package/views/SearchQuery.js.map +1 -1
- package/views/sidebar/Search/index.js +3 -3
- package/views/sidebar/Search/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riboseinc/paneron-registry-kit",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.22",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Ribose Inc. <open.source@ribose.com>",
|
|
6
6
|
"scripts": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@blueprintjs/select": "~4.9.10",
|
|
29
29
|
"@emotion/react": "^11.10.6",
|
|
30
30
|
"@emotion/styled": "^11.10.6",
|
|
31
|
-
"@riboseinc/paneron-extension-kit": "2.2.
|
|
31
|
+
"@riboseinc/paneron-extension-kit": "2.2.15",
|
|
32
32
|
"@types/react": "17.0.53",
|
|
33
33
|
"@types/react-dom": "^17.0.2",
|
|
34
34
|
"@types/react-helmet": "^6.1.2",
|
|
@@ -37,12 +37,12 @@ function criteriaToNodes(cs, opts) {
|
|
|
37
37
|
const isRoot = path.length < 1;
|
|
38
38
|
const defaultIcon = isRoot && opts.implied === true ? 'manual' : undefined;
|
|
39
39
|
const disabled = opts.implied === true;
|
|
40
|
-
const deleteButton =
|
|
40
|
+
const deleteButton = opts.onDeleteItem ? (0, _react.jsx)(_core.Button, {
|
|
41
41
|
minimal: true,
|
|
42
42
|
small: true,
|
|
43
43
|
onClick: () => opts.onDeleteItem(path, idx),
|
|
44
44
|
title: "Delete this criterion or criteria block",
|
|
45
|
-
disabled:
|
|
45
|
+
disabled: opts.implied,
|
|
46
46
|
icon: "cross"
|
|
47
47
|
}) : null;
|
|
48
48
|
const addGroupButton = opts.onAddGroup ? (0, _react.jsx)(_core.Button, {
|
|
@@ -63,7 +63,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
63
63
|
isExpanded: true,
|
|
64
64
|
icon: defaultIcon,
|
|
65
65
|
label: (0, _react.jsx)(_index.CriteriaGroupLabel, {
|
|
66
|
-
css: (0, _react.css)`margin: 2.5px
|
|
66
|
+
css: (0, _react.css)`margin: 2.5px`,
|
|
67
67
|
criteriaGroup: cg,
|
|
68
68
|
onUpdate: opts.onEditItem ? op => opts.onEditItem(path, idx, { ...cg,
|
|
69
69
|
require: op
|
|
@@ -124,7 +124,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
124
124
|
}, true)
|
|
125
125
|
}, "criteria") : (0, _react.jsx)(_core.ControlGroup, {
|
|
126
126
|
vertical: true,
|
|
127
|
-
css: (0, _react.css)`margin
|
|
127
|
+
css: (0, _react.css)`margin: 2.5px 0;`
|
|
128
128
|
}, (0, _react.jsx)(_PropertyView.Select, {
|
|
129
129
|
options: criterionTypeOptions,
|
|
130
130
|
value: ci.key,
|
|
@@ -154,7 +154,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
154
154
|
id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,
|
|
155
155
|
disabled,
|
|
156
156
|
label,
|
|
157
|
-
secondaryLabel: (0, _react.jsx)(_core.ButtonGroup, null, deleteButton)
|
|
157
|
+
secondaryLabel: !isPlaceholder ? (0, _react.jsx)(_core.ButtonGroup, null, deleteButton) : undefined
|
|
158
158
|
};
|
|
159
159
|
}
|
|
160
160
|
});
|
|
@@ -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, 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"]}
|
|
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 opts.onDeleteItem\n ? <Button\n minimal\n small\n onClick={() => opts.onDeleteItem!(path, idx)}\n title=\"Delete this criterion or criteria block\"\n disabled={opts.implied}\n icon=\"cross\"\n />\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 />\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:\n <CriteriaGroupLabel\n css={css`margin: 2.5px`}\n criteriaGroup={cg}\n onUpdate={opts.onEditItem\n ? ((op) => opts.onEditItem!(path, idx, { ...cg, require: op }, true))\n : undefined}\n />,\n secondaryLabel:\n <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: 2.5px 0;`}>\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 />\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 />\n </ControlGroup>;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,\n disabled,\n label,\n secondaryLabel: !isPlaceholder\n ? <ButtonGroup>\n {deleteButton}\n </ButtonGroup>\n : undefined,\n };\n\n }\n\n });\n}\n"]}
|
|
@@ -10,8 +10,15 @@ declare type TreeMutation<T> = {
|
|
|
10
10
|
idx: number;
|
|
11
11
|
item: T;
|
|
12
12
|
};
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Mutates given criteria tree in place.
|
|
15
|
+
* If `path` is empty, guarantees to return a list with at least one item.
|
|
16
|
+
* (There’s only one top-level element.)
|
|
17
|
+
*/
|
|
14
18
|
export default function mutateGroup(criteria: (CriteriaGroup | Criterion)[],
|
|
15
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Parent node path in reverse (top-level index coming last).
|
|
21
|
+
* Empty path would indicate top-level (which is single and cannot be deleted).
|
|
22
|
+
*/
|
|
16
23
|
path: number[], mutation: TreeMutation<CriteriaGroup | Criterion>): void;
|
|
17
24
|
export {};
|
|
@@ -5,13 +5,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = mutateGroup;
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Mutates given criteria tree in place.
|
|
10
|
+
* If `path` is empty, guarantees to return a list with at least one item.
|
|
11
|
+
* (There’s only one top-level element.)
|
|
12
|
+
*/
|
|
9
13
|
function mutateGroup(criteria,
|
|
10
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Parent node path in reverse (top-level index coming last).
|
|
16
|
+
* Empty path would indicate top-level (which is single and cannot be deleted).
|
|
17
|
+
*/
|
|
11
18
|
path, mutation) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
var _a;
|
|
20
|
+
|
|
21
|
+
if (path.length < 1) {
|
|
22
|
+
if (!((_a = criteria[0]) === null || _a === void 0 ? void 0 : _a.hasOwnProperty('criteria'))) {
|
|
23
|
+
throw new Error("Top-level item is not a group");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (mutation.action === 'edit') {
|
|
27
|
+
// Adjust root criteria group requirement (any/all/none)
|
|
28
|
+
criteria[0].require = mutation.item.require;
|
|
29
|
+
} else if (mutation.action === 'delete') {
|
|
30
|
+
// We MUST NOT delete the singular root critera.
|
|
31
|
+
// (Calling code depends on there being exactly one top-level group.)
|
|
32
|
+
// However, we can delete all nested criteria.
|
|
33
|
+
criteria[0].criteria.splice(0);
|
|
34
|
+
}
|
|
35
|
+
} // Other adjustments
|
|
36
|
+
|
|
15
37
|
|
|
16
38
|
for (const [curIdx, c] of criteria.entries()) {
|
|
17
39
|
if (curIdx === path[path.length - 1]) {
|
|
@@ -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":"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","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/**\n * Mutates given criteria tree in place.\n * If `path` is empty, guarantees to return a list with at least one item.\n * (There’s only one top-level element.)\n */\nexport default function mutateGroup(\n criteria: (CriteriaGroup | Criterion)[],\n\n /**\n * Parent node path in reverse (top-level index coming last).\n * Empty path would indicate top-level (which is single and cannot be deleted).\n */\n path: number[],\n\n mutation: TreeMutation<CriteriaGroup | Criterion>,\n) {\n\n if (path.length < 1) {\n if (!criteria[0]?.hasOwnProperty('criteria')) {\n throw new Error(\"Top-level item is not a group\");\n }\n\n if (mutation.action === 'edit') {\n // Adjust root criteria group requirement (any/all/none)\n (criteria[0] as CriteriaGroup).require = (mutation.item as CriteriaGroup).require;\n } else if (mutation.action === 'delete') {\n // We MUST NOT delete the singular root critera.\n // (Calling code depends on there being exactly one top-level group.)\n // However, we can delete all nested criteria.\n (criteria[0] as CriteriaGroup).criteria.splice(0);\n }\n }\n\n // Other adjustments\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"]}
|
|
@@ -46,11 +46,15 @@ const ProposalHistoryDrawer = function ({
|
|
|
46
46
|
const {
|
|
47
47
|
spawnTab
|
|
48
48
|
} = (0, _react2.useContext)(_context.TabbedWorkspaceContext);
|
|
49
|
-
const [selectedItemPath, setSelectedItemPath] = (0, _react2.useState)(null);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
const [selectedItemPath, setSelectedItemPath] = (0, _react2.useState)(null); // Return disposed CRs
|
|
50
|
+
// that were either accepted or accepted on appeal
|
|
51
|
+
// and have the item in question.
|
|
52
|
+
|
|
53
|
+
const query = `return (
|
|
54
|
+
(${_Registration.DISPOSED_CR_QUERY})
|
|
55
|
+
&& (obj.state === "${_cr.State.ACCEPTED}" || obj.state === "${_cr.State.ACCEPTED_ON_APPEAL}")
|
|
56
|
+
&& obj.items["${itemPath}"] !== undefined
|
|
57
|
+
)`;
|
|
54
58
|
return (0, _react.jsx)(_core.Drawer, {
|
|
55
59
|
isOpen: isOpen,
|
|
56
60
|
onClose: onClose,
|
|
@@ -65,7 +69,9 @@ const ProposalHistoryDrawer = function ({
|
|
|
65
69
|
selectedItemPath: selectedItemPath,
|
|
66
70
|
onSelectItem: setSelectedItemPath,
|
|
67
71
|
onOpenItem: (0, _react2.useCallback)(itemPath => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:${itemPath}`), [spawnTab]),
|
|
68
|
-
extraItemViewData:
|
|
72
|
+
extraItemViewData: (0, _react2.useMemo)(() => ({
|
|
73
|
+
itemPath
|
|
74
|
+
}), [itemPath])
|
|
69
75
|
}));
|
|
70
76
|
};
|
|
71
77
|
|
|
@@ -74,11 +80,10 @@ const ProposalHistoryItem = function ({
|
|
|
74
80
|
extraData
|
|
75
81
|
}) {
|
|
76
82
|
const justification = (0, _cr.hasSubmitterInput)(objectData) ? objectData.justification : 'N/A';
|
|
77
|
-
console.debug("Extra data", extraData);
|
|
78
83
|
const change_ = (extraData === null || extraData === void 0 ? void 0 : extraData.itemPath) ? objectData.items[extraData === null || extraData === void 0 ? void 0 : extraData.itemPath] : undefined;
|
|
79
84
|
const change = (0, _proposal.isProposal)(change_) ? change_ : null;
|
|
80
85
|
return (0, _react.jsx)("span", {
|
|
81
|
-
title:
|
|
86
|
+
title: `Accepted proposal “${justification}” (proposal ID: ${objectData.id})`
|
|
82
87
|
}, change ? (0, _react.jsx)(_Proposals.ProposalType, {
|
|
83
88
|
proposal: change
|
|
84
89
|
}) : null, (0, _cr.isDisposed)(objectData) ? (0, _react.jsx)(_react2.default.Fragment, null, (0, _react.jsx)(_util.Datestamp, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProposalHistoryDrawer.js","sourceRoot":"","sources":["../../src/views/ProposalHistoryDrawer.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;AAE7F,OAAO,EAAe,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ProposalHistoryDrawer.js","sourceRoot":"","sources":["../../src/views/ProposalHistoryDrawer.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\nimport { Drawer } from '@blueprintjs/core';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport type { InternalItemReference } from '../types';\nimport { type SomeCR, State, hasSubmitterInput, isDisposed, hadBeenProposed } from '../types/cr';\nimport { isProposal } from '../types/proposal';\nimport { ProposalType } from './change-request/Proposals';\nimport { Datestamp } from '../views/util';\nimport { DISPOSED_CR_QUERY } from './sidebar/Registration';\nimport { Protocols } from './protocolRegistry';\n\n\n/** History of changes affecting given item. */\nconst ProposalHistoryDrawer: React.FC<{\n itemPath: string\n isOpen: boolean\n onClose: () => void\n onChooseItem?: (itemRef: InternalItemReference) => void\n}> = function ({\n itemPath,\n isOpen, onClose,\n}) {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const [ selectedItemPath, setSelectedItemPath ] = useState<string | null>(null);\n // Return disposed CRs\n // that were either accepted or accepted on appeal\n // and have the item in question.\n const query = `return (\n (${DISPOSED_CR_QUERY})\n && (obj.state === \"${State.ACCEPTED}\" || obj.state === \"${State.ACCEPTED_ON_APPEAL}\")\n && obj.items[\"${itemPath}\"] !== undefined\n )`;\n return (\n <Drawer\n isOpen={isOpen}\n onClose={onClose}\n enforceFocus={false}\n size=\"50vw\"\n style={{ padding: '0', width: 'unset' }}>\n <ProposalList\n\tqueryExpression={query}\n\tselectedItemPath={selectedItemPath}\n\tonSelectItem={setSelectedItemPath}\n\tonOpenItem={useCallback((itemPath =>\n\t spawnTab(`${Protocols.CHANGE_REQUEST}:${itemPath}`)\n\t), [spawnTab])}\n\textraItemViewData={useMemo(() => ({ itemPath }), [itemPath])}\n />\n </Drawer>\n );\n};\n\n\nconst ProposalHistoryItem: React.FC<{\n objectData: SomeCR,\n extraData?: { itemPath: string },\n objectPath: string,\n}> = function ({ objectData, extraData }) {\n const justification = hasSubmitterInput(objectData) ? objectData.justification : 'N/A';\n const change_ = extraData?.itemPath ? objectData.items[extraData?.itemPath] : undefined;\n const change = isProposal(change_) ? change_ : null;\n return <span title={`Accepted proposal “${justification}” (proposal ID: ${objectData.id})`}>\n {change ? <ProposalType proposal={change} /> : null}\n {isDisposed(objectData)\n ? <><Datestamp date={objectData.timeDisposed} title=\"Disposed\" />: </>\n : hadBeenProposed(objectData)\n ? <><Datestamp date={objectData.timeProposed} title=\"Proposed\" />: </>\n : null}\n {justification}\n </span>;\n};\n\n\nconst ProposalList = makeSearchResultList<SomeCR, { itemPath: string }>(ProposalHistoryItem, (objPath) => ({\n name: 'Prp.',\n iconProps: {\n icon: 'lightbulb',\n title: objPath,\n htmlTitle: `icon for proposal at ${objPath}`,\n },\n}));\n\n\nexport default ProposalHistoryDrawer;\n"]}
|
package/views/SearchQuery.js
CHANGED
|
@@ -93,13 +93,12 @@ const SearchQuery = (0, _react.memo)(function ({
|
|
|
93
93
|
className: className
|
|
94
94
|
}, (0, _react2.jsx)(_core.InputGroup, {
|
|
95
95
|
fill: true,
|
|
96
|
-
small: true,
|
|
97
96
|
inputRef: quickSearchInputRef,
|
|
98
97
|
disabled: !quickSearchIsEnabled,
|
|
99
98
|
value: hasAdvancedQuery ? '' : quickSearchString,
|
|
100
99
|
leftIcon: "search",
|
|
101
100
|
placeholder: "Quick search",
|
|
102
|
-
title: !hasAdvancedQuery ? "Search for a substring occurring anywhere within serialized item data." : "Advanced query overrides quick search.",
|
|
101
|
+
title: !hasAdvancedQuery ? "Search for a substring occurring anywhere within serialized item data." : "Advanced query overrides quick search. Delete advanced query to re-enable.",
|
|
103
102
|
css: (0, _react2.css)`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`,
|
|
104
103
|
rightElement: (0, _react2.jsx)(_core.Button, {
|
|
105
104
|
disabled: !onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery,
|
|
@@ -115,6 +114,7 @@ const SearchQuery = (0, _react.memo)(function ({
|
|
|
115
114
|
}, (0, _react2.jsx)(_core.Button, {
|
|
116
115
|
fill: true,
|
|
117
116
|
small: true,
|
|
117
|
+
minimal: true,
|
|
118
118
|
title: "Edit advanced search query",
|
|
119
119
|
icon: 'filter',
|
|
120
120
|
onClick: !hasAdvancedQuery ? () => {
|
package/views/SearchQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,8BAA8B,MAAM,iDAAiD,CAAC;AAC7F,+EAA+E;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,WAAW,GASZ,IAAI,CAAC,UAAU,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,SAAS,GACV;IACC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,uBAAuB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtF,MAAM,CAAE,eAAe,EAAE,qBAAqB,CAAE,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAE1D,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS,mBAAmB;QAClE,IAAI,iBAAiB,EAAE;YACrB,IAAI,uBAAuB,EAAE;gBAC3B,OAAO;oBACL,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,EAChE,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;iBACF,CAAA;aACF;iBAAM;gBACL,OAAO;oBACL,GAAG,EAAE,eAAe;oBACpB,KAAK,EAAE,aAAa,CAAC,OAAO,CAC1B,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAChC,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;iBACF,CAAA;aACF;SACF;aAAM;YACL,OAAO;gBACL,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAC7B,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;aACF,CAAA;SACF;IACH,CAAC,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5E,MAAM,oBAAoB,GAAG,yBAAyB,IAAI,CAAC,gBAAgB,CAAC;IAC5E,MAAM,mBAAmB,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,oBAAoB,IAAI,mBAAmB,CAAC,OAAO,EAAE;YACvD,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACrC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,IAAC,YAAY,IAAC,IAAI,QAAC,QAAQ,QAAC,SAAS,EAAE,SAAS;QAC9C,IAAC,UAAU,IACT,IAAI,QACJ,
|
|
1
|
+
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useEffect, useRef, useState, useContext, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, ControlGroup, Colors, InputGroup, Tag, ButtonGroup } from '@blueprintjs/core';\nimport CriteriaTree from './FilterCriteria';\nimport { CUSTOM_CONDITION, RAW_SUBSTRING } from './FilterCriteria/CRITERIA_CONFIGURATION';\nimport { CriteriaGroup, Criterion } from './FilterCriteria/models';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\n//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';\nimport { BrowserCtx } from './BrowserCtx';\n\n\nconst SearchQuery: React.FC<{\n rootCriteria: CriteriaGroup;\n onCriteriaChange?: (rootCriteria: CriteriaGroup) => void;\n\n quickSearchString: string;\n onQuickSearchStringChange?: (searchString: string) => void;\n\n availableClassIDs?: string[];\n className?: string;\n}> = memo(function ({\n rootCriteria,\n onCriteriaChange,\n quickSearchString,\n onQuickSearchStringChange,\n availableClassIDs,\n className,\n}) {\n const { itemClasses, subregisters, getQuickSearchPredicate } = useContext(BrowserCtx);\n\n const [ editingAdvanced, toggleEditingAdvanced ] = useState<boolean>(false);\n\n const classIDs = availableClassIDs ?? Object.keys(itemClasses);\n\n const hasAdvancedQuery = rootCriteria.criteria.length > 0;\n\n const makeDefaultCriteria = useCallback(function makeDefaultCriteria(): Criterion {\n if (quickSearchString) {\n if (getQuickSearchPredicate) {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n } else {\n return {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters },\n ),\n }\n }\n } else {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: 'false' },\n { itemClasses, subregisters },\n ),\n }\n }\n }, [quickSearchString, getQuickSearchPredicate, itemClasses, subregisters]);\n\n const quickSearchIsEnabled = onQuickSearchStringChange && !hasAdvancedQuery;\n const quickSearchInputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n if (quickSearchIsEnabled && quickSearchInputRef.current) {\n quickSearchInputRef.current.focus();\n }\n }, []);\n\n return (\n <ControlGroup fill vertical className={className}>\n <InputGroup\n fill\n inputRef={quickSearchInputRef}\n disabled={!quickSearchIsEnabled}\n value={hasAdvancedQuery ? '' : quickSearchString}\n leftIcon=\"search\"\n placeholder=\"Quick search\"\n title={!hasAdvancedQuery\n ? \"Search for a substring occurring anywhere within serialized item data.\"\n : \"Advanced query overrides quick search. Delete advanced query to re-enable.\"}\n css={css`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`}\n rightElement={<Button\n disabled={!onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery}\n onClick={() => onQuickSearchStringChange?.('')}\n small\n minimal\n icon=\"cross\"\n title=\"Clear quick search\" />}\n onChange={evt => onQuickSearchStringChange?.(evt.currentTarget.value)}\n />\n <ButtonGroup fill>\n <Button\n fill\n small\n minimal\n title=\"Edit advanced search query\"\n icon='filter'\n onClick={!hasAdvancedQuery\n ? (() => {\n onCriteriaChange!({ criteria: [makeDefaultCriteria()], require: 'all' });\n toggleEditingAdvanced(true);\n })\n : () => toggleEditingAdvanced(v => !v)}\n active={editingAdvanced && hasAdvancedQuery}\n disabled={!hasAdvancedQuery && !onCriteriaChange}\n rightIcon={rootCriteria.criteria.length > 0\n ? <Tag intent=\"success\" round>on</Tag>\n : <Tag round>off</Tag>}>\n Advanced\n </Button>\n </ButtonGroup>\n {hasAdvancedQuery && editingAdvanced\n ? <>\n <CriteriaTree\n key=\"tree\"\n criteria={rootCriteria}\n onChange={onCriteriaChange}\n itemClasses={itemClasses}\n availableClassIDs={classIDs}\n subregisters={subregisters}\n css={css`max-height: 50vh; overflow-y: auto;`}\n />\n <div\n key=\"query\"\n css={css`\n margin-top: 5px;\n padding: 0 10px 10px 10px;\n color: ${Colors.GRAY3};\n font-size: 90%;\n overflow-wrap: break-word;\n `}>\n Query used: <code>{criteriaGroupToQueryExpression(rootCriteria)}</code>\n </div>\n </>\n : null}\n </ControlGroup>\n );\n});\n\nexport default SearchQuery;\n"]}
|
|
@@ -108,12 +108,12 @@ const Search = (0, _react.memo)(function ({
|
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
|
-
}, [selectedItemPath, dispatch]);
|
|
111
|
+
}, [selectedItemPath, dispatch]); // Why are we memoing this? It’s just a string and seems not too slow to compute.
|
|
112
|
+
|
|
112
113
|
const effectiveQueryExpression = (0, _react.useMemo)(() => {
|
|
113
114
|
var _a;
|
|
114
115
|
|
|
115
116
|
const quickSearchString = ((_a = state.quickSubstringQuery) !== null && _a !== void 0 ? _a : '').trim();
|
|
116
|
-
console.log("quick search predicate", getQuickSearchPredicate === null || getQuickSearchPredicate === void 0 ? void 0 : getQuickSearchPredicate(quickSearchString));
|
|
117
117
|
const withSearchString = state.query.criteria.criteria.length < 1 && quickSearchString !== '' ? {
|
|
118
118
|
require: 'all',
|
|
119
119
|
criteria: [getQuickSearchPredicate ? {
|
|
@@ -173,7 +173,7 @@ const Search = (0, _react.memo)(function ({
|
|
|
173
173
|
substring
|
|
174
174
|
}
|
|
175
175
|
}), [dispatch]),
|
|
176
|
-
css: (0, _react2.css)`padding:
|
|
176
|
+
css: (0, _react2.css)`padding: 2px;`
|
|
177
177
|
}), (0, _react2.jsx)("div", {
|
|
178
178
|
css: (0, _react2.css)`flex: 1;`
|
|
179
179
|
}, (0, _react2.jsx)(SearchResultList, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Search/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;AAC7F,OAAO,WAAW,MAAM,8CAA8C,CAAC;AACvE,OAAO,EAAsB,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,8BAA8B,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAcnD,SAAS,OAAO,CAAC,GAAQ;IACvB,OAAO,GAAG;WACL,GAAG,CAAC,KAAK;WACT,GAAG,CAAC,KAAK,CAAC,QAAQ;WAClB,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;WACnC,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ;WAC3C,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAA;AAClF,CAAC;AAMD,MAAM,YAAY,GAAU;IAC1B,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE;IACnC,mBAAmB,EAAE,EAAE;IACvB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,MAAM,MAAM,GAgBZ,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;IAC7F,MAAM,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACxD,MAAM,EAAE,aAAa,EAAE,uBAAuB,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC3H,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAE3D,MAAM,CAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAE,GAAI,gCAA8E,CACxH,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,gBAAgB,EAC7B,SAAS,EACT,OAAO,EACP,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;QACpB,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,cAAc;gBACjB,OAAO;oBACL,GAAG,SAAS;oBACZ,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;iBAC5B,CAAC;YACJ,KAAK,8BAA8B;gBACjC,OAAO;oBACL,GAAG,SAAS;oBACZ,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;iBAC9C,CAAC;YACJ,KAAK,aAAa;gBAChB,OAAO;oBACL,GAAG,SAAS;oBACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;iBAC1C,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;IACH,CAAC,EACD,YAAY,EACZ,IAAI,CAAC,CAAC;IAER,MAAM,gBAAgB,GAAG,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,GAAG;QAChD,CAAC,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC;IAET,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,EAAE;YACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;SAC5E;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEjC,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,EAAE;;QAC5C,MAAM,iBAAiB,GAAG,CAAC,MAAA,KAAK,CAAC,mBAAmB,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAG,iBAAiB,CAAC,CAAC,CAAC;QACpF,MAAM,gBAAgB,GACpB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,KAAK,EAAE;YAClE,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR,uBAAuB;wBACrB,CAAC,CAAC;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,EAChE,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;yBACF;wBACH,CAAC,CAAC;4BACE,GAAG,EAAE,eAAe;4BACpB,KAAK,EAAE,aAAa,CAAC,OAAO,CAC1B,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAChC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;yBACjC;iBACN;aACF;YACH,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAA;QAC1B,MAAM,YAAY,GAAkB,gBAAgB;YAClD,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,CAAE,gBAAgB,EAAE,gBAAgB,CAAE;aACjD;YACH,CAAC,CAAC,gBAAgB,CAAC;QACrB,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,8BAA8B,CAAC,YAAY,CAAC;YAC9C,2DAA2D;YAC3D,CAAC,CAAC,OAAO,CAAC;IACd,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE1G,MAAM,sBAAsB,GAAG,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAAG,WAAW,CAC1C,wBAAwB,EACxB,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACjC,CAAC;IAEF,MAAM,kCAAkC,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CACvD,wBAAwB,IAAI,OAAO;QACjC,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,SAAS,CAAC;QAC5E,CAAC,CAAC,cAAc,CACnB,EAAE,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9C,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAC,CAAC,CAAC,EACrE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAGd,MAAM,cAAc,GAAG,WAAW,CAChC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC,EAC7E,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE1B,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,0CAA0C,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;QACzF,IAAC,WAAW,IACV,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAClC,iBAAiB,EAAE,KAAK,CAAC,mBAAmB,EAC5C,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,WAAW,CAAC,CAC5B,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACjF,EAAE,CAAC,QAAQ,CAAC,CAAC,EACd,yBAAyB,EAAE,WAAW,CAAC,CACrC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CACxF,EAAE,CAAC,QAAQ,CAAC,CAAC,EACd,GAAG,EAAE,GAAG,CAAA,eAAe,GACvB;QACF,aAAK,GAAG,EAAE,GAAG,CAAA,UAAU;YACrB,IAAC,gBAAgB,IACb,eAAe,EAAE,kCAAkC,EACnD,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,cAAc,GAC1B,CACA,CACF,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAGH,MAAM,gBAAgB,GAAG,oBAAoB,CAAoB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE;QACT,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,oBAAoB,OAAO,EAAE;KACzC;CACF,CAAC,CAAC,CAAC;AAGJ,eAAe,MAAM,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, isCriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING, CUSTOM_CONDITION } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport type { RegisterItem } from '../../../types';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport SearchQuery from '../../SearchQuery';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\n// TODO: Move Search widget core out of sidebar, as it’s used elsewhere too.\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ninterface State {\n query: Query;\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\nfunction isState(val: any): val is State {\n return val\n && val.query\n && val.query.criteria\n && isCriteriaGroup(val.query.criteria)\n && typeof val.quickSubstringQuery === 'string'\n && (val.selectedItemPath === null || typeof val.selectedItemPath === 'string')\n}\ntype Action =\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n};\n\nconst Search: React.FC<{\n /**\n * Criteria that will always apply.\n * Used e.g. in superseding item selection\n * (to limit to the same item class).\n */\n implicitCriteria?: CriteriaGroup,\n\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n\n stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ implicitCriteria, availableClassIDs, stateName, onOpenItem, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { keyExpression, getQuickSearchPredicate, itemClasses, subregisters, selectedRegisterItem } = useContext(BrowserCtx);\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'search-sidebar',\n undefined,\n isState,\n (prevState, action) => {\n switch (action.type) {\n case 'update-query':\n return {\n ...prevState,\n query: action.payload.query,\n };\n case 'update-quick-substring-query':\n return {\n ...prevState,\n quickSubstringQuery: action.payload.substring,\n };\n case 'select-item':\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n default:\n throw new Error(\"Unexpected search state\");\n }\n },\n initialState,\n null);\n\n const selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n const effectiveQueryExpression = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n console.log(\"quick search predicate\", getQuickSearchPredicate?.(quickSearchString));\n const withSearchString: CriteriaGroup =\n state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n getQuickSearchPredicate\n ? {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n : {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n return withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n }, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters, getQuickSearchPredicate]);\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = useMemo((() =>\n queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false'\n ), [queryExpressionDebounced, changeRequest]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n\n\n const handleOpenItem = useCallback(\n onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [onOpenItem, spawnTab]);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <SearchQuery\n rootCriteria={state.query.criteria}\n quickSearchString={state.quickSubstringQuery}\n availableClassIDs={availableClassIDs}\n onCriteriaChange={useCallback((\n criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })\n ), [dispatch])}\n onQuickSearchStringChange={useCallback((\n substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })\n ), [dispatch])}\n css={css`padding: 5px;`}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\n </div>\n </div>\n );\n});\n\n\nconst SearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`,\n },\n}));\n\n\nexport default Search;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Search/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, isCriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING, CUSTOM_CONDITION } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport type { RegisterItem } from '../../../types';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport SearchQuery from '../../SearchQuery';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\n// TODO: Move Search widget core out of sidebar, as it’s used elsewhere too.\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ninterface State {\n query: Query;\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\nfunction isState(val: any): val is State {\n return val\n && val.query\n && val.query.criteria\n && isCriteriaGroup(val.query.criteria)\n && typeof val.quickSubstringQuery === 'string'\n && (val.selectedItemPath === null || typeof val.selectedItemPath === 'string')\n}\ntype Action =\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n};\n\nconst Search: React.FC<{\n /**\n * Criteria that will always apply.\n * Used e.g. in superseding item selection\n * (to limit to the same item class).\n */\n implicitCriteria?: CriteriaGroup,\n\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n\n stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ implicitCriteria, availableClassIDs, stateName, onOpenItem, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { keyExpression, getQuickSearchPredicate, itemClasses, subregisters, selectedRegisterItem } = useContext(BrowserCtx);\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'search-sidebar',\n undefined,\n isState,\n (prevState, action) => {\n switch (action.type) {\n case 'update-query':\n return {\n ...prevState,\n query: action.payload.query,\n };\n case 'update-quick-substring-query':\n return {\n ...prevState,\n quickSubstringQuery: action.payload.substring,\n };\n case 'select-item':\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n default:\n throw new Error(\"Unexpected search state\");\n }\n },\n initialState,\n null);\n\n const selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n // Why are we memoing this? It’s just a string and seems not too slow to compute.\n const effectiveQueryExpression: string = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n const withSearchString: CriteriaGroup =\n state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n getQuickSearchPredicate\n ? {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n : {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n return withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n }, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters, getQuickSearchPredicate]);\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = useMemo((() =>\n queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false'\n ), [queryExpressionDebounced, changeRequest]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n\n const handleOpenItem = useCallback(\n onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [onOpenItem, spawnTab]);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <SearchQuery\n rootCriteria={state.query.criteria}\n quickSearchString={state.quickSubstringQuery}\n availableClassIDs={availableClassIDs}\n onCriteriaChange={useCallback((\n criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })\n ), [dispatch])}\n onQuickSearchStringChange={useCallback((\n substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })\n ), [dispatch])}\n css={css`padding: 2px;`}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\n </div>\n </div>\n );\n});\n\n\nconst SearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`,\n },\n}));\n\n\nexport default Search;\n"]}
|