import React, { useContext, useState } from 'react'; import styles from './index.less'; import { Empty, Popconfirm, Tooltip, Modal, Menu, Dropdown } from 'antd'; import DragList from '../DragList'; import type { IDataset } from '../../typings'; import DatasetDetailDrawer from './DatasetDetailDrawer'; import useDataset from '../../hooks/useDataset'; import classnames from 'classnames'; import useList from '../../hooks/useList'; import EditName from '../EditName'; import { DatasetModelContext } from '../../context/DatasetContext'; import { CloudDownloadOutlined } from '@ant-design/icons'; import DownloadDatasetModal from './DownloadDatasetModal'; import { LayerModelContext } from '../../context/LayerContext'; import { FilterModelContext } from '../../context/FilterContext'; import { InteractiveModelContext } from '../../context/InteractiveContext'; interface IProps { className?: string; } export default function DatasetList({ className }: IProps) { const { datasetList, setDatasetList, selectDatasetId, setSelectDatasetId } = useContext(DatasetModelContext); const { layerList, setLayerList } = useContext(LayerModelContext); const { filterList, setFilterList } = useContext(FilterModelContext); const { interactiveList, setInteractiveList } = useContext( InteractiveModelContext, ); const { onDragEnd, onEditName, onDelete } = useList( datasetList, setDatasetList, ); const [datasetDetail, setDatasetDetail] = useState({ visible: false, datasetId: '', }); const [downloadModal, setDownloadModal] = useState<{ visible: boolean; dataset?: IDataset | null; }>({ visible: false, dataset: null, }); const { copyDataset, getDatasetMarkStyle } = useDataset(); const onClick = (dataset: IDataset) => { setSelectDatasetId(selectDatasetId === dataset.id ? null : dataset.id); }; const onFullDelete = (dataset: IDataset) => { const { id } = dataset; onDelete(dataset); setLayerList(layerList.filter((item) => item.datasetId !== id)); setFilterList(filterList.filter((item) => item.datasetId !== id)); setInteractiveList(interactiveList.filter((item) => item.datasetId !== id)); }; const checkDelete = (dataset: IDataset) => { const { id: datasetId } = dataset; if ( [...layerList, ...filterList, ...interactiveList].filter( (item) => item.datasetId === datasetId, ).length ) { Modal.confirm({ content: '当前有配置关联至该数据源,确认是否删除', onOk: () => onFullDelete(dataset), }); } else { onFullDelete(dataset); } }; return (