@riboseinc/paneron-registry-kit 2.2.31 → 2.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/item-classes/treeNodes.js +1 -1
- package/item-classes/treeNodes.js.map +1 -1
- package/package.json +1 -1
- package/proposals/actionableGroups/treeNodes.js +3 -1
- package/proposals/actionableGroups/treeNodes.js.map +1 -1
- package/views/StatefulTree.d.ts +11 -2
- package/views/StatefulTree.js +5 -2
- package/views/StatefulTree.js.map +1 -1
|
@@ -20,7 +20,7 @@ var _util = require("../views/util");
|
|
|
20
20
|
//import React, { useContext, useMemo } from 'react';
|
|
21
21
|
function getMaybeGroupedItemClassesAsTreeNodes(itemClasses, itemClassGroups, opts) {
|
|
22
22
|
if (!itemClassGroups) {
|
|
23
|
-
return getItemClassesAsTreeNodes(itemClasses, Object.keys(itemClasses));
|
|
23
|
+
return getItemClassesAsTreeNodes(itemClasses, Object.keys(itemClasses), opts);
|
|
24
24
|
} else {
|
|
25
25
|
return Object.entries(itemClassGroups).map(([groupLabel, clsIDs]) => {
|
|
26
26
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeNodes.js","sourceRoot":"","sources":["../../src/item-classes/treeNodes.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B;;;GAGG;AAEH,qDAAqD;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMxD,MAAM,UAAU,qCAAqC,CACnD,WAAwC,EACxC,eAAiD,EACjD,IAIC;IAED,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"treeNodes.js","sourceRoot":"","sources":["../../src/item-classes/treeNodes.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B;;;GAGG;AAEH,qDAAqD;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMxD,MAAM,UAAU,qCAAqC,CACnD,WAAwC,EACxC,eAAiD,EACjD,IAIC;IAED,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;KAC/E;SAAM;QACL,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;;YAClE,MAAM,gBAAgB,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,KAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtF,MAAM,UAAU,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,KAAI,UAAU,KAAK,IAAI,CAAC,cAAc;gBAC3E,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK,CAAC;YACV,MAAM,UAAU,GAAG,gBAAgB,KAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,0CAAE,GAAG,CAAC,UAAU,CAAC,CAAA,CAAC;YAClF,OAAO;gBACL,EAAE,EAAE,UAAU;gBACd,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,IAAI;gBACd,UAAU;gBACV,UAAU;gBACV,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAA0B;gBAC7D,UAAU,EAAE,UAAU;oBACpB,CAAC,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;oBACtD,CAAC,CAAC,EAAE;gBACN,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aAC5B,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,WAAc;AACd,yBAAyB;AACzB,QAA8B,EAC9B,IAGC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;QAC1B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO;YACL,EAAE,EAAE,KAAe;YACnB,KAAK,EAAE,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,KAAK,mCAAI,eAAe;YACzC,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,MAAK,KAAK;YAC1C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1B,cAAc,EACZ,IAAC,QAAQ;gBACP,IAAC,aAAa,IACZ,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,EAAC,CAAC;wBAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAc,CAAC,KAAe,CAAC;wBAC1C,CAAC,CAAC,SAAS,GACb,CACO;SACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\n/**\n * Tools for rendering proposal groups as tree nodes.\n * Each proposal group is top-level node, with proposals as nested nodes.\n */\n\n//import React, { useContext, useMemo } from 'react';\nimport { jsx } from '@emotion/react';\nimport type { RegistryViewProps } from '../types/views';\nimport type { TreeNodeInfo, IconName } from '@blueprintjs/core';\nimport { MoreMenu, ItemClassMenu } from '../views/util';\n\n\nexport type ItemOrGroupTreeNode = TreeNodeInfo<{ type: 'group' | 'item' }>;\n\n\nexport function getMaybeGroupedItemClassesAsTreeNodes<T extends RegistryViewProps>(\n itemClasses: T['itemClassConfiguration'],\n itemClassGroups: T['itemClassGroups'] | undefined,\n opts?: {\n expandedGroupLabels?: Set<string>\n selectedItemID?: string\n onProposeItem?: (clsID: string) => Promise<void>\n },\n): ItemOrGroupTreeNode[] {\n if (!itemClassGroups) {\n return getItemClassesAsTreeNodes(itemClasses, Object.keys(itemClasses), opts);\n } else {\n return Object.entries(itemClassGroups).map(([groupLabel, clsIDs]) => {\n const hasSelectedClass = opts?.selectedItemID && clsIDs.includes(opts.selectedItemID);\n const isSelected = opts?.selectedItemID && groupLabel === opts.selectedItemID\n ? true\n : false;\n const isExpanded = hasSelectedClass || opts?.expandedGroupLabels?.has(groupLabel);\n return {\n id: groupLabel,\n label: groupLabel,\n hasCaret: true,\n isSelected,\n isExpanded,\n icon: isExpanded ? 'folder-open' : 'folder-close' as IconName,\n childNodes: isExpanded\n ? getItemClassesAsTreeNodes(itemClasses, clsIDs, opts)\n : [],\n nodeData: { type: 'group' },\n };\n });\n }\n}\n\nfunction getItemClassesAsTreeNodes<T extends RegistryViewProps['itemClassConfiguration']>(\n itemClasses: T,\n /** Used for ordering. */\n classIDs: readonly (keyof T)[],\n opts?: {\n selectedItemID?: string\n onProposeItem?: (clsID: string) => Promise<void>\n },\n): TreeNodeInfo<{ type: 'item' }>[] {\n return classIDs.map(clsID => {\n const cls = itemClasses[clsID];\n return {\n id: clsID as string,\n label: cls?.meta.title ?? 'unknown class',\n icon: 'folder-close',\n isSelected: opts?.selectedItemID === clsID,\n nodeData: { type: 'item' },\n secondaryLabel:\n <MoreMenu>\n <ItemClassMenu\n cfg={cls}\n onCreate={opts?.onProposeItem ?\n () => opts.onProposeItem!(clsID as string)\n : undefined}\n />\n </MoreMenu>,\n };\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -64,7 +64,9 @@ function getActionableProposalTreeNode(proposal, opts) {
|
|
|
64
64
|
|
|
65
65
|
return {
|
|
66
66
|
id: proposal.id,
|
|
67
|
-
label:
|
|
67
|
+
label: (0, _react.jsx)("span", {
|
|
68
|
+
title: `Double-click the proposal to activate: “${proposal.justification}”`
|
|
69
|
+
}, proposal.justification),
|
|
68
70
|
isSelected: (_a = opts === null || opts === void 0 ? void 0 : opts.isSelected) !== null && _a !== void 0 ? _a : false,
|
|
69
71
|
icon: 'lightbulb',
|
|
70
72
|
secondaryLabel: (opts === null || opts === void 0 ? void 0 : opts.isActive) ? activeCRMarker : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeNodes.js","sourceRoot":"","sources":["../../../src/proposals/actionableGroups/treeNodes.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B;;;GAGG;AAEH,qDAAqD;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAKxC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAU1C,MAAM,UAAU,sCAAsC,CACpD,MAAgD,EAChD,IAKC;IAED,OAAO,MAAM;QACX,+DAA+D;QAC/D,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;;QAChC,MAAM,YAAY,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,MAAM,iBAAiB,GAAG,YAAY;gBACjC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,mBAAmB,GAAG,YAAY;gBACnC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,KAAK,CAAC;gBAChB,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,0CAAE,GAAG,CAAC,UAAU,CAAC,CAAA;eAC1C,mBAAmB;YACpB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC;QAEZ,OAAO;YACL,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,IAAI;YACd,cAAc,EACZ,iBAAiB,IAAI,CAAC,UAAU;gBAC9B,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,IAAC,GAAG,IACA,OAAO,EAAE,CAAC,YAAY,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAC7C,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAChC;YACZ,IAAI,EAAE,UAAU;gBACd,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,cAA0B;YAC9B,UAAU;YACV,UAAU,EAAE,UAAU,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAA;YAC9C,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,UAAU,EAAE,YAAY,IAAI,UAAU;gBACpC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,EAAE;oBAClD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA;oBACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAA;iBACpC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,cAAc,GAAG,IAAC,GAAG,IAAC,MAAM,EAAC,QAAQ,aAAa,CAAC;AAEzD,SAAS,6BAA6B,CACpC,QAAY,EACZ,IAAmD;;IAEnD,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,KAAK,EAAE,QAAQ,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"treeNodes.js","sourceRoot":"","sources":["../../../src/proposals/actionableGroups/treeNodes.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\n/**\n * Tools for rendering proposal groups as tree nodes.\n * Each proposal group is top-level node, with proposals as nested nodes.\n */\n\n//import React, { useContext, useMemo } from 'react';\nimport { jsx } from '@emotion/react';\n\nimport { Tag } from '@blueprintjs/core';\nimport type { IconName, TreeNodeInfo } from '@blueprintjs/core';\nimport type { RegisterStakeholder } from '../../types';\nimport type { SomeCR as CR } from '../../types/cr';\nimport type { ActionableProposalGroup } from './types';\nimport { CR_BASE_QUERY } from './queries';\n\n\nexport type ActionableProposalTreeNode = TreeNodeInfo<{ type: 'group' | 'item' }>;\n\n\ninterface ActionableProposalGroupResult {\n groupLabel: string\n proposals: CR[] | undefined\n}\nexport function getActionableProposalGroupsAsTreeNodes(\n groups: readonly ActionableProposalGroupResult[],\n opts?: {\n expandedGroupLabels?: Set<string>\n selectedGroup?: string\n selectedCRID?: string\n activeCRID?: string\n },\n): ActionableProposalTreeNode[] {\n return groups.\n //filter(({ proposals }) => proposals && proposals.length > 0).\n map(({ groupLabel, proposals }) => {\n const hasProposals = proposals && proposals.length > 0;\n const hasActiveProposal = hasProposals\n && opts?.activeCRID && proposals.find(p => p.id === opts.activeCRID);\n const hasSelectedProposal = hasProposals\n && opts?.selectedCRID && proposals.find(p => p.id === opts.selectedCRID);\n const isExpanded =\n groups.length === 1\n || opts?.expandedGroupLabels?.has(groupLabel)\n || hasSelectedProposal\n ? true\n : false;\n\n return {\n id: groupLabel,\n label: groupLabel,\n hasCaret: true,\n secondaryLabel:\n hasActiveProposal && !isExpanded\n ? activeCRMarker\n : <Tag\n minimal={!hasProposals}\n intent={hasProposals ? 'primary' : undefined}>\n {hasProposals ? proposals.length : 0}\n </Tag>,\n icon: isExpanded\n ? 'folder-open'\n : 'folder-close' as IconName,\n isExpanded,\n isSelected: groupLabel === opts?.selectedGroup,\n nodeData: { type: 'group' },\n childNodes: hasProposals && isExpanded\n ? proposals.map(p => getActionableProposalTreeNode(p, {\n isSelected: p.id === opts?.selectedCRID,\n isActive: p.id === opts?.activeCRID,\n }))\n : [],\n };\n });\n}\n\nconst activeCRMarker = <Tag intent='danger'>active</Tag>;\n\nfunction getActionableProposalTreeNode(\n proposal: CR,\n opts?: { isSelected?: boolean, isActive?: boolean },\n): ActionableProposalTreeNode {\n return {\n id: proposal.id,\n label: <span title={`Double-click the proposal to activate: “${proposal.justification}”`}>\n {proposal.justification}\n </span>,\n isSelected: opts?.isSelected ?? false,\n icon: 'lightbulb',\n secondaryLabel: opts?.isActive ? activeCRMarker : undefined,\n nodeData: { type: 'item' },\n };\n}\n\n\nexport function getMapReduceChainsForActionableProposalGroups(\n proposalGroups: readonly ActionableProposalGroup[],\n stakeholder: RegisterStakeholder,\n) {\n return proposalGroups.map(([label, , queryGetter]) => {\n const query = queryGetter(stakeholder);\n const predicateFunc = `\n const objPath = key, obj = value;\n return ((${CR_BASE_QUERY}) && (${query}));\n `;\n const mapFunc = `emit(value);`;\n return { [label]: { mapFunc, predicateFunc } };\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n}\n"]}
|
package/views/StatefulTree.d.ts
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { type TreeNodeInfo } from '@blueprintjs/core';
|
|
5
|
+
/**
|
|
6
|
+
* A Blueprint tree node that carries extra data
|
|
7
|
+
* denoting whether it’s a group or a leaf item.
|
|
8
|
+
*/
|
|
5
9
|
export declare type ItemOrGroupTreeNode = TreeNodeInfo<{
|
|
6
10
|
type: 'group' | 'item';
|
|
7
11
|
}>;
|
|
@@ -9,9 +13,14 @@ export interface State {
|
|
|
9
13
|
selectedItemID: string | null;
|
|
10
14
|
expandedItemIDs: readonly string[];
|
|
11
15
|
}
|
|
12
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A tree that also uses Paneron’s dataset persistent reducer
|
|
18
|
+
* to handle open/closed & selected item state preservation.
|
|
19
|
+
*/
|
|
13
20
|
export declare const GenericStatefulTree: React.FC<{
|
|
14
|
-
|
|
21
|
+
/** Called with given state, and must return the list of tree nodes. */
|
|
22
|
+
getNodes: (state: State) => readonly ItemOrGroupTreeNode[];
|
|
23
|
+
/** Key to disambiguate stored state (see usePersistentDatasetStateReducer). */
|
|
15
24
|
stateKey: string;
|
|
16
25
|
onItemDoubleClick?: (node: TreeNodeInfo<any>) => void;
|
|
17
26
|
className?: string;
|
package/views/StatefulTree.js
CHANGED
|
@@ -21,11 +21,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
21
21
|
|
|
22
22
|
/** @jsxFrag React.Fragment */
|
|
23
23
|
const initialState = {
|
|
24
|
-
//selectedFolderID: null,
|
|
25
24
|
selectedItemID: null,
|
|
26
25
|
expandedItemIDs: []
|
|
27
26
|
};
|
|
28
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* A tree that also uses Paneron’s dataset persistent reducer
|
|
29
|
+
* to handle open/closed & selected item state preservation.
|
|
30
|
+
*/
|
|
29
31
|
|
|
30
32
|
const GenericStatefulTree = function ({
|
|
31
33
|
getNodes,
|
|
@@ -33,6 +35,7 @@ const GenericStatefulTree = function ({
|
|
|
33
35
|
onItemDoubleClick,
|
|
34
36
|
className
|
|
35
37
|
}) {
|
|
38
|
+
// TODO: This component shouldn’t know about dataset, persistent reducer hook can be supplied?
|
|
36
39
|
const {
|
|
37
40
|
usePersistentDatasetStateReducer
|
|
38
41
|
} = (0, _react.useContext)(_paneronExtensionKit.DatasetContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatefulTree.js","sourceRoot":"","sources":["../../src/views/StatefulTree.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAqB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"StatefulTree.js","sourceRoot":"","sources":["../../src/views/StatefulTree.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useMemo } from 'react';\nimport update from 'immutability-helper';\nimport { jsx } from '@emotion/react';\nimport { Tree, type TreeNodeInfo } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\n\n\n/**\n * A Blueprint tree node that carries extra data\n * denoting whether it’s a group or a leaf item.\n */\nexport type ItemOrGroupTreeNode = TreeNodeInfo<{ type: 'group' | 'item' }>;\n\nexport interface State {\n selectedItemID: string | null\n expandedItemIDs: readonly string[]\n}\n\nconst initialState: State = {\n selectedItemID: null,\n expandedItemIDs: [],\n} as const;\n\ntype Action =\n | { type: 'select-item'; payload: { itemID: string | null; }; }\n | { type: 'enter-item'; payload: { itemID: string; }; }\n | { type: 'exit-item'; payload: { itemID: string; }; }\n\n\n/**\n * A tree that also uses Paneron’s dataset persistent reducer\n * to handle open/closed & selected item state preservation.\n */\nexport const GenericStatefulTree: React.FC<{\n /** Called with given state, and must return the list of tree nodes. */\n getNodes: (state: State) => readonly ItemOrGroupTreeNode[]\n /** Key to disambiguate stored state (see usePersistentDatasetStateReducer). */\n stateKey: string\n onItemDoubleClick?: (node: TreeNodeInfo<any>) => void\n className?: string\n}> =\nfunction ({ getNodes, stateKey, onItemDoubleClick, className }) {\n // TODO: This component shouldn’t know about dataset, persistent reducer hook can be supplied?\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateKey,\n undefined,\n undefined,\n function reduce(prevState, action) {\n switch (action.type) {\n case 'select-item':\n if (prevState.selectedItemID !== action.payload.itemID) {\n return {\n ...prevState,\n selectedItemID: action.payload.itemID,\n };\n } else {\n return prevState;\n }\n case 'enter-item':\n if (!prevState.expandedItemIDs.includes(action.payload.itemID)) {\n return {\n ...prevState,\n selectedItemID: action.payload.itemID,\n expandedItemIDs: update(\n prevState.expandedItemIDs,\n { $push: [action.payload.itemID] }),\n };\n } else {\n return prevState;\n }\n case 'exit-item':\n const idx = prevState.expandedItemIDs.indexOf(action.payload.itemID);\n if (idx >= 0) {\n return {\n ...prevState,\n selectedItemID: action.payload.itemID,\n expandedItemIDs: update(\n prevState.expandedItemIDs,\n { $splice: [[idx, 1]] }),\n };\n } else {\n return prevState;\n }\n default:\n throw new Error(\"Unexpected browse state\");\n }\n },\n initialState,\n null);\n\n const nodes = useMemo(\n (() => getNodes(state)),\n [state, getNodes]);\n\n const eventHandlers = useMemo((() => ({\n onNodeClick: (node: ItemOrGroupTreeNode) =>\n dispatch({\n type: 'select-item',\n payload: { itemID: node.id as string },\n }),\n onNodeExpand: (node: ItemOrGroupTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'enter-item',\n payload: { itemID: node.id as string },\n })\n : void 0,\n onNodeCollapse: (node: ItemOrGroupTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'exit-item',\n payload: { itemID: node.id as string },\n })\n : void 0,\n onNodeDoubleClick: (node: ItemOrGroupTreeNode) =>\n node.nodeData?.type === 'group'\n ? dispatch({\n type: 'enter-item',\n payload: { itemID: node.id as string },\n })\n : onItemDoubleClick?.(node),\n })), [dispatch, onItemDoubleClick]);\n\n return <Tree\n className={className}\n contents={nodes}\n {...eventHandlers}\n />;\n};\n\nexport default GenericStatefulTree;\n"]}
|