'use client' import type { DataSet } from '@/models/datasets' import { useHover } from 'ahooks' import { useMemo, useRef } from 'react' import { useSelector as useAppContextWithSelector } from '@/context/app-context' import { useRouter } from '@/next/navigation' import CornerLabels from './components/corner-labels' import DatasetCardFooter from './components/dataset-card-footer' import DatasetCardHeader from './components/dataset-card-header' import DatasetCardModals from './components/dataset-card-modals' import Description from './components/description' import OperationsPopover from './components/operations-popover' import TagArea from './components/tag-area' import { useDatasetCardState } from './hooks/use-dataset-card-state' const EXTERNAL_PROVIDER = 'external' type DatasetCardProps = { dataset: DataSet onSuccess?: () => void } const DatasetCard = ({ dataset, onSuccess, }: DatasetCardProps) => { const { push } = useRouter() const isCurrentWorkspaceDatasetOperator = useAppContextWithSelector(state => state.isCurrentWorkspaceDatasetOperator) const tagSelectorRef = useRef(null) const isHoveringTagSelector = useHover(tagSelectorRef) const { tags, setTags, modalState, openRenameModal, closeRenameModal, closeConfirmDelete, handleExportPipeline, detectIsUsedByApp, onConfirmDelete, } = useDatasetCardState({ dataset, onSuccess }) const isExternalProvider = dataset.provider === EXTERNAL_PROVIDER const isPipelineUnpublished = useMemo(() => { return dataset.runtime_mode === 'rag_pipeline' && !dataset.is_published }, [dataset.runtime_mode, dataset.is_published]) const handleCardClick = (e: React.MouseEvent) => { e.preventDefault() if (isExternalProvider) push(`/datasets/${dataset.id}/hitTesting`) else if (isPipelineUnpublished) push(`/datasets/${dataset.id}/pipeline`) else push(`/datasets/${dataset.id}/documents`) } const handleTagAreaClick = (e: React.MouseEvent) => { e.stopPropagation() e.preventDefault() } return ( <>
) } export default DatasetCard