visuddhinanda 2 лет назад
Родитель
Сommit
4f03637c20
1 измененных файлов с 50 добавлено и 0 удалено
  1. 50 0
      dashboard/src/components/article/EditableTreeNode.tsx

+ 50 - 0
dashboard/src/components/article/EditableTreeNode.tsx

@@ -0,0 +1,50 @@
+import { Button, Space, Typography } from "antd";
+import { useState } from "react";
+import { PlusOutlined } from "@ant-design/icons";
+import { TreeNodeData } from "./EditableTree";
+const { Text } = Typography;
+
+interface IWidget {
+  node: TreeNodeData;
+  onAdd?: Function;
+}
+const EditableTreeNodeWidget = ({ node, onAdd }: IWidget) => {
+  const [showNodeMenu, setShowNodeMenu] = useState(false);
+  const [loading, setLoading] = useState(false);
+
+  const title = node.deletedAt ? (
+    <Text delete disabled>
+      {node.title}
+    </Text>
+  ) : (
+    <>{node.title}</>
+  );
+  const menu = (
+    <Space style={{ visibility: showNodeMenu ? "visible" : "hidden" }}>
+      <Button
+        loading={loading}
+        size="small"
+        icon={<PlusOutlined />}
+        type="text"
+        onClick={async () => {
+          if (typeof onAdd !== "undefined") {
+            setLoading(true);
+            const ok = await onAdd();
+            setLoading(false);
+          }
+        }}
+      />
+    </Space>
+  );
+  return (
+    <Space
+      onMouseEnter={() => setShowNodeMenu(true)}
+      onMouseLeave={() => setShowNodeMenu(false)}
+    >
+      {title}
+      {menu}
+    </Space>
+  );
+};
+
+export default EditableTreeNodeWidget;