| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { Button, message, Space, Typography } from "antd";
- import { useState } from "react";
- import { PlusOutlined } from "@ant-design/icons";
- import type { TreeNodeData } from "./EditableTree"
- const { Text } = Typography;
- interface IWidget {
- node: TreeNodeData;
- onAdd?: Function;
- onTitleClick?: Function;
- }
- const EditableTreeNodeWidget = ({ node, onAdd, onTitleClick }: IWidget) => {
- const [showNodeMenu, setShowNodeMenu] = useState(false);
- const [loading, setLoading] = useState(false);
- const title = (
- <Text type={node.status === 10 ? "secondary" : undefined}>
- {node.title_text ? node.title_text : node.title}
- </Text>
- );
- const TitleText = () =>
- node.deletedAt ? (
- <Text delete disabled>
- {title}
- </Text>
- ) : (
- <Text
- onClick={(e: React.MouseEvent<HTMLElement, MouseEvent>) => {
- if (typeof onTitleClick !== "undefined") {
- onTitleClick(e);
- }
- }}
- >
- {title}
- </Text>
- );
- const Menu = () => (
- <Space style={{ visibility: showNodeMenu ? "visible" : "hidden" }}>
- <Button
- loading={loading}
- size="middle"
- icon={<PlusOutlined />}
- type="text"
- onClick={async () => {
- if (typeof onAdd !== "undefined") {
- setLoading(true);
- const ok = await onAdd();
- setLoading(false);
- if (!ok) {
- message.error("error");
- }
- }
- }}
- />
- </Space>
- );
- return (
- <Space
- onMouseEnter={() => setShowNodeMenu(true)}
- onMouseLeave={() => setShowNodeMenu(false)}
- >
- <TitleText />
- <Menu />
- </Space>
- );
- };
- export default EditableTreeNodeWidget;
|