'use client' import type { FC } from 'react' import type { BuiltInMetadataItem, MetadataItemWithValueLength, } from '@/app/components/datasets/metadata/types' import type { SortType } from '@/service/datasets' import { Button } from '@langgenius/dify-ui/button' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import Chip from '@/app/components/base/chip' import Input from '@/app/components/base/input' import Sort from '@/app/components/base/sort' import AutoDisabledDocument from '@/app/components/datasets/common/document-status-with-action/auto-disabled-document' import IndexFailed from '@/app/components/datasets/common/document-status-with-action/index-failed' import StatusWithAction from '@/app/components/datasets/common/document-status-with-action/status-with-action' import DatasetMetadataDrawer from '@/app/components/datasets/metadata/metadata-dataset/dataset-metadata-drawer' import { useDocLink } from '@/context/i18n' import { DataSourceType } from '@/models/datasets' import { useIndexStatus } from '../status-item/hooks' type SelectOption = { value: string | number name: string } type DocumentsHeaderProps = { // Dataset info datasetId: string dataSourceType?: DataSourceType embeddingAvailable: boolean canManageMetadata?: boolean canAddDocument?: boolean canEditDocument?: boolean isFreePlan: boolean // Filter & sort statusFilterValue: string sortValue: SortType inputValue: string onStatusFilterChange: (value: string) => void onStatusFilterClear: () => void onSortChange: (value: string) => void onInputChange: (value: string) => void // Metadata modal isShowEditMetadataModal: boolean showEditMetadataModal: () => void hideEditMetadataModal: () => void datasetMetaData?: MetadataItemWithValueLength[] builtInMetaData?: BuiltInMetadataItem[] builtInEnabled: boolean onAddMetaData: (payload: BuiltInMetadataItem) => Promise onRenameMetaData: (payload: MetadataItemWithValueLength) => Promise onDeleteMetaData: (metaDataId: string) => Promise onBuiltInEnabledChange: (enabled: boolean) => void // Actions onAddDocument: () => void } const DocumentsHeader: FC = ({ datasetId, dataSourceType, embeddingAvailable, canManageMetadata = false, canAddDocument = false, canEditDocument = false, isFreePlan, statusFilterValue, sortValue, inputValue, onStatusFilterChange, onStatusFilterClear, onSortChange, onInputChange, isShowEditMetadataModal, showEditMetadataModal, hideEditMetadataModal, datasetMetaData, builtInMetaData, builtInEnabled, onAddMetaData, onRenameMetaData, onDeleteMetaData, onBuiltInEnabledChange, onAddDocument, }) => { const { t } = useTranslation() const docLink = useDocLink() const DOC_INDEX_STATUS_MAP = useIndexStatus() const isDataSourceNotion = dataSourceType === DataSourceType.NOTION const isDataSourceWeb = dataSourceType === DataSourceType.WEB const statusFilterItems: SelectOption[] = useMemo( () => [ { value: 'all', name: t(($) => $['list.index.all'], { ns: 'datasetDocuments' }) as string }, { value: 'queuing', name: DOC_INDEX_STATUS_MAP.queuing.text }, { value: 'indexing', name: DOC_INDEX_STATUS_MAP.indexing.text }, { value: 'paused', name: DOC_INDEX_STATUS_MAP.paused.text }, { value: 'error', name: DOC_INDEX_STATUS_MAP.error.text }, { value: 'available', name: DOC_INDEX_STATUS_MAP.available.text }, { value: 'enabled', name: DOC_INDEX_STATUS_MAP.enabled.text }, { value: 'disabled', name: DOC_INDEX_STATUS_MAP.disabled.text }, { value: 'archived', name: DOC_INDEX_STATUS_MAP.archived.text }, ], [DOC_INDEX_STATUS_MAP, t], ) const sortItems: SelectOption[] = useMemo( () => [ { value: 'created_at', name: t(($) => $['list.sort.uploadTime'], { ns: 'datasetDocuments' }) as string, }, { value: 'hit_count', name: t(($) => $['list.sort.hitCount'], { ns: 'datasetDocuments' }) as string, }, ], [t], ) // Determine add button text based on data source type const addButtonText = useMemo(() => { if (isDataSourceNotion) return t(($) => $['list.addPages'], { ns: 'datasetDocuments' }) if (isDataSourceWeb) return t(($) => $['list.addUrl'], { ns: 'datasetDocuments' }) return t(($) => $['list.addFile'], { ns: 'datasetDocuments' }) }, [isDataSourceNotion, isDataSourceWeb, t]) return ( <> {/* Title section */}

{t(($) => $['list.title'], { ns: 'datasetDocuments' })}

{t(($) => $['list.desc'], { ns: 'datasetDocuments' })} {t(($) => $['list.learnMore'], { ns: 'datasetDocuments' })}
{/* Toolbar section */}
{/* Left: Filters */}
onStatusFilterChange(item?.value ? String(item.value) : '')} onClear={onStatusFilterClear} /> onInputChange(e.target.value)} onClear={() => onInputChange('')} />
onSortChange(String(value))} />
{/* Right: Actions */}
{!isFreePlan && canEditDocument && } {canEditDocument && } {!embeddingAvailable && ( $.embeddingModelNotAvailable, { ns: 'dataset' })} /> )} {embeddingAvailable && canManageMetadata && ( )} {isShowEditMetadataModal && ( )} {embeddingAvailable && canAddDocument && ( )}
) } export default DocumentsHeader