'use client' import type { FC } from 'react' import React, { useCallback, useState } from 'react' import { useBoolean } from 'ahooks' import { RiDeleteBinLine, RiEditLine, } from '@remixicon/react' import { useTranslation } from 'react-i18next' import type { DataSet } from '@/models/datasets' import { DataSourceType } from '@/models/datasets' import ActionButton, { ActionButtonState } from '@/app/components/base/action-button' import FileIcon from '@/app/components/base/file-icon' import { Folder } from '@/app/components/base/icons/src/vender/solid/files' import SettingsModal from '@/app/components/app/configuration/dataset-config/settings-modal' import Drawer from '@/app/components/base/drawer' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import Badge from '@/app/components/base/badge' import { useKnowledge } from '@/hooks/use-knowledge' type Props = { payload: DataSet onRemove: () => void onChange: (dataSet: DataSet) => void readonly?: boolean } const DatasetItem: FC = ({ payload, onRemove, onChange, readonly, }) => { const media = useBreakpoints() const { t } = useTranslation() const isMobile = media === MediaType.mobile const { formatIndexingTechniqueAndMethod } = useKnowledge() const [isDeleteHovered, setIsDeleteHovered] = useState(false) const [isShowSettingsModal, { setTrue: showSettingsModal, setFalse: hideSettingsModal, }] = useBoolean(false) const handleSave = useCallback((newDataset: DataSet) => { onChange(newDataset) hideSettingsModal() }, [hideSettingsModal, onChange]) const handleRemove = useCallback((e: React.MouseEvent) => { e.stopPropagation() onRemove() }, [onRemove]) return (
{ payload.data_source_type === DataSourceType.NOTION ? (
) :
}
{payload.name}
{!readonly && (
{ e.stopPropagation() showSettingsModal() }} > setIsDeleteHovered(true)} onMouseLeave={() => setIsDeleteHovered(false)} >
)} { payload.indexing_technique && } { payload.provider === 'external' && } {isShowSettingsModal && ( )}
) } export default React.memo(DatasetItem)