visuddhinanda 3 éve
szülő
commit
ce8fc54f43
1 módosított fájl, 61 hozzáadás és 6 törlés
  1. 61 6
      dashboard/src/components/article/EditableTree.tsx

+ 61 - 6
dashboard/src/components/article/EditableTree.tsx

@@ -2,13 +2,20 @@ import React, { useState } from "react";
 import { useEffect } from "react";
 import { useEffect } from "react";
 import { Tree } from "antd";
 import { Tree } from "antd";
 import type { DataNode, TreeProps } from "antd/es/tree";
 import type { DataNode, TreeProps } from "antd/es/tree";
+import { Key } from "antd/lib/table/interface";
+import {
+  FileAddOutlined,
+  DeleteOutlined,
+  SaveOutlined,
+} from "@ant-design/icons";
+import { Button, Divider, Space } from "antd";
 
 
-type TreeNodeData = {
+interface TreeNodeData {
   key: string;
   key: string;
   title: string;
   title: string;
   children: TreeNodeData[];
   children: TreeNodeData[];
   level: number;
   level: number;
-};
+}
 export type ListNodeData = {
 export type ListNodeData = {
   key: string;
   key: string;
   title: string;
   title: string;
@@ -107,13 +114,15 @@ function treeToList(treeNode: TreeNodeData[]): ListNodeData[] {
 interface IWidgetEditableTree {
 interface IWidgetEditableTree {
   treeData: ListNodeData[];
   treeData: ListNodeData[];
   onChange?: Function;
   onChange?: Function;
+  onSelect?: Function;
+  onSave?: Function;
 }
 }
-const Widget = ({ treeData, onChange }: IWidgetEditableTree) => {
-  const data = tocGetTreeData(treeData);
-  console.log("treedata", data);
-  const [gData, setGData] = useState(data);
+const Widget = ({ treeData, onChange, onSelect }: IWidgetEditableTree) => {
+  const [gData, setGData] = useState<TreeNodeData[]>([]);
+  const [keys, setKeys] = useState<Key>("");
   useEffect(() => {
   useEffect(() => {
     const data = tocGetTreeData(treeData);
     const data = tocGetTreeData(treeData);
+    console.log("tree data", data);
     setGData(data);
     setGData(data);
   }, [treeData]);
   }, [treeData]);
 
 
@@ -194,12 +203,58 @@ const Widget = ({ treeData, onChange }: IWidgetEditableTree) => {
 
 
   return (
   return (
     <>
     <>
+      <Space>
+        <Button icon={<FileAddOutlined />}>添加</Button>
+        <Button
+          icon={<DeleteOutlined />}
+          danger
+          onClick={() => {
+            const delTree = (node: TreeNodeData[]): boolean => {
+              for (let index = 0; index < node.length; index++) {
+                if (node[index].key === keys) {
+                  node.splice(index, 1);
+                  return true;
+                } else {
+                  const cf = delTree(node[index].children);
+                  if (cf) {
+                    return cf;
+                  }
+                }
+              }
+              return false;
+            };
+            const tmp = [...gData];
+            const find = delTree(tmp);
+
+            console.log("delete", keys, find, tmp);
+            setGData(tmp);
+          }}
+        >
+          删除
+        </Button>
+        <Button icon={<SaveOutlined />} type="primary">
+          保存
+        </Button>
+      </Space>
+      <Divider></Divider>
       <Tree
       <Tree
         rootClassName="draggable-tree"
         rootClassName="draggable-tree"
         draggable
         draggable
         blockNode
         blockNode
         onDragEnter={onDragEnter}
         onDragEnter={onDragEnter}
         onDrop={onDrop}
         onDrop={onDrop}
+        onSelect={(selectedKeys: Key[]) => {
+          if (selectedKeys.length > 0) {
+            setKeys(selectedKeys[0]);
+          } else {
+            setKeys("");
+          }
+
+          console.log(selectedKeys);
+          if (typeof onSelect !== "undefined") {
+            onSelect(selectedKeys);
+          }
+        }}
         treeData={gData}
         treeData={gData}
       />
       />
     </>
     </>