|
|
@@ -8,18 +8,17 @@ import PaliText from "../template/Wbw/PaliText";
|
|
|
type TreeNodeData = {
|
|
|
key: string;
|
|
|
title: string;
|
|
|
- children: TreeNodeData[];
|
|
|
+ children?: TreeNodeData[];
|
|
|
level: number;
|
|
|
};
|
|
|
|
|
|
function tocGetTreeData(
|
|
|
listData: ListNodeData[],
|
|
|
active = ""
|
|
|
-): [TreeNodeData[], string] {
|
|
|
+): TreeNodeData[] | undefined {
|
|
|
let treeData: TreeNodeData[] = [];
|
|
|
let tocActivePath: TreeNodeData[] = [];
|
|
|
let treeParents = [];
|
|
|
- let defaultExpandedKey: string = "";
|
|
|
let rootNode: TreeNodeData = {
|
|
|
key: "0",
|
|
|
title: "root",
|
|
|
@@ -36,21 +35,25 @@ function tocGetTreeData(
|
|
|
let newNode: TreeNodeData = {
|
|
|
key: element.key,
|
|
|
title: element.title,
|
|
|
- children: [],
|
|
|
level: element.level,
|
|
|
};
|
|
|
|
|
|
- if (active === element.key) {
|
|
|
- defaultExpandedKey = element.key;
|
|
|
- }
|
|
|
-
|
|
|
if (newNode.level > iCurrLevel) {
|
|
|
//新的层级比较大,为上一个的子目录
|
|
|
treeParents.push(lastInsNode);
|
|
|
+ if (typeof lastInsNode.children === "undefined") {
|
|
|
+ lastInsNode.children = [];
|
|
|
+ }
|
|
|
lastInsNode.children.push(newNode);
|
|
|
} else if (newNode.level === iCurrLevel) {
|
|
|
//目录层级相同,为平级
|
|
|
- treeParents[treeParents.length - 1].children.push(newNode);
|
|
|
+ const parentNode = treeParents[treeParents.length - 1];
|
|
|
+ if (typeof parentNode !== "undefined") {
|
|
|
+ if (typeof parentNode.children === "undefined") {
|
|
|
+ parentNode.children = [];
|
|
|
+ }
|
|
|
+ parentNode.children.push(newNode);
|
|
|
+ }
|
|
|
} else {
|
|
|
// 小于 挂在上一个层级
|
|
|
while (treeParents.length > 1) {
|
|
|
@@ -59,7 +62,13 @@ function tocGetTreeData(
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- treeParents[treeParents.length - 1].children.push(newNode);
|
|
|
+ const parentNode = treeParents[treeParents.length - 1];
|
|
|
+ if (typeof parentNode !== "undefined") {
|
|
|
+ if (typeof parentNode.children === "undefined") {
|
|
|
+ parentNode.children = [];
|
|
|
+ }
|
|
|
+ parentNode.children.push(newNode);
|
|
|
+ }
|
|
|
}
|
|
|
lastInsNode = newNode;
|
|
|
iCurrLevel = newNode.level;
|
|
|
@@ -72,25 +81,26 @@ function tocGetTreeData(
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return [treeData[0].children, defaultExpandedKey];
|
|
|
+
|
|
|
+ return treeData[0].children;
|
|
|
}
|
|
|
|
|
|
interface IWidgetTocTree {
|
|
|
treeData: ListNodeData[];
|
|
|
- expandedKey?: string;
|
|
|
+ expandedKey?: string[];
|
|
|
onSelect?: Function;
|
|
|
}
|
|
|
|
|
|
const Widget = ({ treeData, expandedKey, onSelect }: IWidgetTocTree) => {
|
|
|
const [tree, setTree] = useState<TreeNodeData[]>();
|
|
|
- const [expanded, setExpanded] = useState<string>("");
|
|
|
+ const [expanded, setExpanded] = useState(expandedKey);
|
|
|
|
|
|
useEffect(() => {
|
|
|
if (treeData.length > 0) {
|
|
|
- const [data, key] = tocGetTreeData(treeData, expandedKey);
|
|
|
+ const data = tocGetTreeData(treeData);
|
|
|
setTree(data);
|
|
|
- setExpanded(key);
|
|
|
- console.log("create tree", treeData.length, expandedKey, key);
|
|
|
+ setExpanded(expandedKey);
|
|
|
+ console.log("create tree", treeData.length, expandedKey);
|
|
|
}
|
|
|
}, [treeData, expandedKey]);
|
|
|
const onNodeSelect: TreeProps["onSelect"] = (selectedKeys, info) => {
|
|
|
@@ -104,8 +114,8 @@ const Widget = ({ treeData, expandedKey, onSelect }: IWidgetTocTree) => {
|
|
|
<Tree
|
|
|
onSelect={onNodeSelect}
|
|
|
treeData={tree}
|
|
|
- defaultExpandedKeys={[expanded]}
|
|
|
- defaultSelectedKeys={[expanded]}
|
|
|
+ defaultExpandedKeys={expanded}
|
|
|
+ defaultSelectedKeys={expanded}
|
|
|
blockNode
|
|
|
titleRender={(node: DataNode) => {
|
|
|
if (typeof node.title === "string") {
|