import { Input, Tree } from 'antd';
import { SearchOutlined } from '@ant-design/icons';
import DragItem from '@/pages/system/Menu/Setting/dragItem';
import { useDrop } from 'react-dnd';
import {useEffect, useState} from 'react';
import type { TreeProps } from 'antd';
import { cloneDeep, debounce } from 'lodash';
import './DragItem.less';
interface TreeBodyProps {
treeData: any[];
droppableId: string;
notDragKeys?: (string | number)[];
onDrop?: (item: any, dropIndex: string, type?: string) => void;
onTreeDrop?: TreeProps['onDrop'];
removeDragItem?: (id: string | number) => void;
className?: string;
}
export const DragType = 'DragBox';
const { TreeNode } = Tree;
const defaultExpandedKeys = ['iot', 'media', 'system', 'device', 'link', 'link/Channel', 'rule-engine/Alarm', 'Northbound', 'rule-engine']
export default (props: TreeBodyProps) => {
const [newData, setNewData] = useState(props.treeData);
const [searchKeys, setSearchKeys] = useState<(string | number)[]>([]);
const [expandedKeys, setExpandedKeys] = useState<(string | number)[]>([]);
const [autoExpandParent, setAutoExpandParent] = useState(true);
useEffect(() => {
setNewData(cloneDeep(props.treeData));
}, [props.treeData]);
useEffect(() => {
setTimeout(() => {
setExpandedKeys(defaultExpandedKeys)
}, 300)
}, [])
const [, drop] = useDrop(() => ({
accept: DragType,
drop(item: any, monitor) {
const result = monitor.getDropResult();
if (!result && props.onDrop) {
props.onDrop(item.data, '');
}
return undefined;
},
collect: (monitor) => {
return {
isOver: monitor.isOver(),
canDrop: monitor.canDrop(),
draggingColor: monitor.getItemType(),
};
},
}));
const createTreeNode = (data: any[], type: string): React.ReactNode => {
return data.map((item: any) => {
const isCanDrag = !props.notDragKeys?.includes(item.code);
if (item.children) {
return (