| | |
| | | import Link from 'next/link' |
| | | import produce from 'immer' |
| | | import TypeIcon from '../type-icon' |
| | | import s from './style.module.css' |
| | | import cn from '@/utils/classnames' |
| | | import Modal from '@/app/components/base/modal' |
| | | import type { DataSet } from '@/models/datasets' |
| | | import Button from '@/app/components/base/button' |
| | |
| | | import Loading from '@/app/components/base/loading' |
| | | import Badge from '@/app/components/base/badge' |
| | | import { useKnowledge } from '@/hooks/use-knowledge' |
| | | import cn from '@/utils/classnames' |
| | | |
| | | export type ISelectDataSetProps = { |
| | | isShow: boolean |
| | |
| | | )} |
| | | |
| | | {(loaded && hasNoData) && ( |
| | | <div className='mt-6 flex h-[128px] items-center justify-center space-x-1 rounded-lg border text-[13px]' |
| | | <div className='flex items-center justify-center mt-6 rounded-lg space-x-1 h-[128px] text-[13px] border' |
| | | style={{ |
| | | background: 'rgba(0, 0, 0, 0.02)', |
| | | borderColor: 'rgba(0, 0, 0, 0.02', |
| | | }} |
| | | > |
| | | <span className='text-text-tertiary'>{t('appDebug.feature.dataSet.noDataSet')}</span> |
| | | <Link href={'/datasets/create'} className='font-normal text-text-accent'>{t('appDebug.feature.dataSet.toCreate')}</Link> |
| | | <span className='text-gray-500'>{t('appDebug.feature.dataSet.noDataSet')}</span> |
| | | <Link href="/datasets/create" className='font-normal text-[#155EEF]'>{t('appDebug.feature.dataSet.toCreate')}</Link> |
| | | </div> |
| | | )} |
| | | |
| | | {datasets && datasets?.length > 0 && ( |
| | | <> |
| | | <div ref={listRef} className='mt-7 max-h-[286px] space-y-1 overflow-y-auto'> |
| | | <div ref={listRef} className='mt-7 space-y-1 max-h-[286px] overflow-y-auto'> |
| | | {datasets.map(item => ( |
| | | <div |
| | | key={item.id} |
| | | className={cn( |
| | | 'flex h-10 cursor-pointer items-center justify-between rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg px-2 shadow-xs hover:border-components-panel-border hover:bg-components-panel-on-panel-item-bg-hover hover:shadow-sm', |
| | | selected.some(i => i.id === item.id) && 'border-[1.5px] border-components-option-card-option-selected-border bg-state-accent-hover shadow-xs hover:border-components-option-card-option-selected-border hover:bg-state-accent-hover hover:shadow-xs', |
| | | !item.embedding_available && 'hover:border-components-panel-border-subtle hover:bg-components-panel-on-panel-item-bg hover:shadow-xs', |
| | | )} |
| | | className={cn(s.item, selected.some(i => i.id === item.id) && s.selected, 'flex justify-between items-center h-10 px-2 rounded-lg bg-white border border-gray-200 cursor-pointer', !item.embedding_available && s.disabled)} |
| | | onClick={() => { |
| | | if (!item.embedding_available) |
| | | return |
| | | toggleSelect(item) |
| | | }} |
| | | > |
| | | <div className='mr-1 flex items-center overflow-hidden'> |
| | | <div className={cn('mr-2', !item.embedding_available && 'opacity-30')}> |
| | | <div className='mr-1 flex items-center'> |
| | | <div className={cn('mr-2', !item.embedding_available && 'opacity-50')}> |
| | | <TypeIcon type="upload_file" size='md' /> |
| | | </div> |
| | | <div className={cn('max-w-[200px] truncate text-[13px] font-medium text-text-secondary', !item.embedding_available && '!max-w-[120px] opacity-30')}>{item.name}</div> |
| | | <div className={cn('max-w-[200px] text-[13px] font-medium text-gray-800 overflow-hidden text-ellipsis whitespace-nowrap', !item.embedding_available && 'opacity-50 !max-w-[120px]')}>{item.name}</div> |
| | | {!item.embedding_available && ( |
| | | <span className='ml-1 shrink-0 rounded-md border border-divider-deep px-1 text-xs font-normal leading-[18px] text-text-tertiary'>{t('dataset.unavailable')}</span> |
| | | <span className='ml-1 shrink-0 px-1 border border-gray-200 rounded-md text-gray-500 text-xs font-normal leading-[18px]'>{t('dataset.unavailable')}</span> |
| | | )} |
| | | </div> |
| | | { |
| | | item.indexing_technique && ( |
| | | <Badge |
| | | className='shrink-0' |
| | | text={formatIndexingTechniqueAndMethod(item.indexing_technique, item.retrieval_model_dict?.search_method)} |
| | | /> |
| | | ) |
| | | } |
| | | { |
| | | item.provider === 'external' && ( |
| | | <Badge className='shrink-0' text={t('dataset.externalTag')} /> |
| | | <Badge text={t('dataset.externalTag')} /> |
| | | ) |
| | | } |
| | | </div> |
| | |
| | | </> |
| | | )} |
| | | {loaded && ( |
| | | <div className='mt-8 flex items-center justify-between'> |
| | | <div className='text-sm font-medium text-text-secondary'> |
| | | <div className='flex justify-between items-center mt-8'> |
| | | <div className='text-sm font-medium text-gray-700'> |
| | | {selected.length > 0 && `${selected.length} ${t('appDebug.feature.dataSet.selected')}`} |
| | | </div> |
| | | <div className='flex space-x-2'> |