|
@@ -30,6 +30,7 @@ import useEditDocumentMetadata from '../metadata/hooks/use-edit-dataset-metadata
|
|
|
import DatasetMetadataDrawer from '../metadata/metadata-dataset/dataset-metadata-drawer'
|
|
|
import StatusWithAction from '../common/document-status-with-action/status-with-action'
|
|
|
import { SimpleSelect } from '@/app/components/base/select'
|
|
|
+import DetailModal from './mould/index'
|
|
|
|
|
|
const FolderPlusIcon = ({ className }: React.SVGProps<SVGElement>) => {
|
|
|
return <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" className={className ?? ''}>
|
|
@@ -259,113 +260,135 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
|
|
|
onUpdateDocList: invalidDocumentList,
|
|
|
})
|
|
|
|
|
|
+ const [mouldModalVisible, setMouldModalVisible] = useState(false)
|
|
|
+ const [transfer, setTransfer] = useState<any>({
|
|
|
+ mode: 'add',
|
|
|
+ })
|
|
|
+
|
|
|
return (
|
|
|
- <div className='flex h-full flex-col overflow-y-auto'>
|
|
|
- <div className='flex flex-col justify-center gap-1 px-6 pt-4'>
|
|
|
- <h1 className='text-base font-semibold text-text-primary'>{t('datasetDocuments.list.title')}</h1>
|
|
|
- <div className='flex items-center space-x-0.5 text-sm font-normal text-text-tertiary'>
|
|
|
- <span>{t('datasetDocuments.list.desc')}</span>
|
|
|
- <a
|
|
|
- className='flex items-center text-text-accent'
|
|
|
- target='_blank'
|
|
|
- href='https://docs.dify.ai/guides/knowledge-base/integrate-knowledge-within-application'>
|
|
|
- <span>{t('datasetDocuments.list.learnMore')}</span>
|
|
|
- <RiExternalLinkLine className='h-3 w-3' />
|
|
|
- </a>
|
|
|
+ <>
|
|
|
+ <div className='flex h-full flex-col overflow-y-auto'>
|
|
|
+ <div className='flex flex-col justify-center gap-1 px-6 pt-4'>
|
|
|
+ <h1 className='text-base font-semibold text-text-primary'>{t('datasetDocuments.list.title')}</h1>
|
|
|
+ <div className='flex items-center space-x-0.5 text-sm font-normal text-text-tertiary'>
|
|
|
+ <span>{t('datasetDocuments.list.desc')}</span>
|
|
|
+ <a
|
|
|
+ className='flex items-center text-text-accent'
|
|
|
+ target='_blank'
|
|
|
+ href='https://docs.dify.ai/guides/knowledge-base/integrate-knowledge-within-application'>
|
|
|
+ <span>{t('datasetDocuments.list.learnMore')}</span>
|
|
|
+ <RiExternalLinkLine className='h-3 w-3' />
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div className='flex flex-1 flex-col px-6 py-4'>
|
|
|
- <div className='flex flex-wrap items-center justify-between'>
|
|
|
- <Input
|
|
|
- showLeftIcon
|
|
|
- showClearIcon
|
|
|
- wrapperClassName='!w-[200px]'
|
|
|
- value={inputValue}
|
|
|
- onChange={e => handleInputChange(e.target.value)}
|
|
|
- onClear={() => handleInputChange('')}
|
|
|
- />
|
|
|
- <div className="ml-2 mr-auto h-[32px]">
|
|
|
- <SimpleSelect
|
|
|
- className="h-[32px] w-[200px]"
|
|
|
- defaultValue={status}
|
|
|
- onSelect={(i) => {
|
|
|
- setStatus(i.value)
|
|
|
- }}
|
|
|
- items={optionsStatus}
|
|
|
- allowSearch={false}
|
|
|
- placeholder="请选择审核状态"
|
|
|
+ <div className='flex flex-1 flex-col px-6 py-4'>
|
|
|
+ <div className='flex flex-wrap items-center justify-between'>
|
|
|
+ <Input
|
|
|
+ showLeftIcon
|
|
|
+ showClearIcon
|
|
|
+ wrapperClassName='!w-[200px]'
|
|
|
+ value={inputValue}
|
|
|
+ onChange={e => handleInputChange(e.target.value)}
|
|
|
+ onClear={() => handleInputChange('')}
|
|
|
/>
|
|
|
- </div>
|
|
|
- <div className='flex !h-8 items-center justify-center gap-2'>
|
|
|
- <Button variant='primary' onClick={routeToDocCreate} className='shrink-0'>
|
|
|
- <BookOpenIcon className={cn('mr-2 h-4 w-4 stroke-current')} />
|
|
|
- 模板管理
|
|
|
- </Button>
|
|
|
- <Button variant='primary' onClick={routeToDocCreate} className='shrink-0'>
|
|
|
- <ArrowDownTrayIcon className={cn('mr-2 h-4 w-4 stroke-current')} />
|
|
|
- 模板下载
|
|
|
- </Button>
|
|
|
-
|
|
|
- {!isFreePlan && <AutoDisabledDocument datasetId={datasetId} />}
|
|
|
- <IndexFailed datasetId={datasetId} />
|
|
|
- {!embeddingAvailable && <StatusWithAction type='warning' description={t('dataset.embeddingModelNotAvailable')} />}
|
|
|
- {embeddingAvailable && (
|
|
|
- <Button variant='secondary' className='shrink-0' onClick={showEditMetadataModal}>
|
|
|
- <RiDraftLine className='mr-1 size-4' />
|
|
|
- {t('dataset.metadata.metadata')}
|
|
|
- </Button>
|
|
|
- )}
|
|
|
- {isShowEditMetadataModal && (
|
|
|
- <DatasetMetadataDrawer
|
|
|
- userMetadata={datasetMetaData || []}
|
|
|
- onClose={hideEditMetadataModal}
|
|
|
- onAdd={handleAddMetaData}
|
|
|
- onRename={handleRename}
|
|
|
- onRemove={handleDeleteMetaData}
|
|
|
- builtInMetadata={builtInMetaData || []}
|
|
|
- isBuiltInEnabled={!!builtInEnabled}
|
|
|
- onIsBuiltInEnabledChange={setBuiltInEnabled}
|
|
|
+ <div className="ml-2 mr-auto h-[32px]">
|
|
|
+ <SimpleSelect
|
|
|
+ className="h-[32px] w-[200px]"
|
|
|
+ defaultValue={status}
|
|
|
+ onSelect={(i) => {
|
|
|
+ setStatus(i.value)
|
|
|
+ }}
|
|
|
+ items={optionsStatus}
|
|
|
+ allowSearch={false}
|
|
|
+ placeholder="请选择审核状态"
|
|
|
/>
|
|
|
- )}
|
|
|
- {embeddingAvailable && (
|
|
|
- <Button variant='primary' onClick={routeToDocCreate} className='shrink-0'>
|
|
|
- <PlusIcon className={cn('mr-2 h-4 w-4 stroke-current')} />
|
|
|
- {isDataSourceNotion && t('datasetDocuments.list.addPages')}
|
|
|
- {isDataSourceWeb && t('datasetDocuments.list.addUrl')}
|
|
|
- {(!dataset?.data_source_type || isDataSourceFile) && t('datasetDocuments.list.addFile')}
|
|
|
+ </div>
|
|
|
+ <div className='flex !h-8 items-center justify-center gap-2'>
|
|
|
+ <Button variant='primary' onClick={() => {
|
|
|
+ setTransfer({ mode: 'manage' })
|
|
|
+ setMouldModalVisible(true)
|
|
|
+ }} className='shrink-0'>
|
|
|
+ <BookOpenIcon className={cn('mr-2 h-4 w-4 stroke-current')} />
|
|
|
+ 模板管理
|
|
|
</Button>
|
|
|
- )}
|
|
|
+ <Button variant='primary' onClick={() => {
|
|
|
+ setTransfer({ mode: 'download' })
|
|
|
+ setMouldModalVisible(true)
|
|
|
+ }} className='shrink-0'>
|
|
|
+ <ArrowDownTrayIcon className={cn('mr-2 h-4 w-4 stroke-current')} />
|
|
|
+ 模板下载
|
|
|
+ </Button>
|
|
|
+
|
|
|
+ {!isFreePlan && <AutoDisabledDocument datasetId={datasetId} />}
|
|
|
+ <IndexFailed datasetId={datasetId} />
|
|
|
+ {!embeddingAvailable && <StatusWithAction type='warning' description={t('dataset.embeddingModelNotAvailable')} />}
|
|
|
+ {embeddingAvailable && (
|
|
|
+ <Button variant='secondary' className='shrink-0' onClick={showEditMetadataModal}>
|
|
|
+ <RiDraftLine className='mr-1 size-4' />
|
|
|
+ {t('dataset.metadata.metadata')}
|
|
|
+ </Button>
|
|
|
+ )}
|
|
|
+ {isShowEditMetadataModal && (
|
|
|
+ <DatasetMetadataDrawer
|
|
|
+ userMetadata={datasetMetaData || []}
|
|
|
+ onClose={hideEditMetadataModal}
|
|
|
+ onAdd={handleAddMetaData}
|
|
|
+ onRename={handleRename}
|
|
|
+ onRemove={handleDeleteMetaData}
|
|
|
+ builtInMetadata={builtInMetaData || []}
|
|
|
+ isBuiltInEnabled={!!builtInEnabled}
|
|
|
+ onIsBuiltInEnabledChange={setBuiltInEnabled}
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ {embeddingAvailable && (
|
|
|
+ <Button variant='primary' onClick={routeToDocCreate} className='shrink-0'>
|
|
|
+ <PlusIcon className={cn('mr-2 h-4 w-4 stroke-current')} />
|
|
|
+ {isDataSourceNotion && t('datasetDocuments.list.addPages')}
|
|
|
+ {isDataSourceWeb && t('datasetDocuments.list.addUrl')}
|
|
|
+ {(!dataset?.data_source_type || isDataSourceFile) && t('datasetDocuments.list.addFile')}
|
|
|
+ </Button>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ {isListLoading
|
|
|
+ ? <Loading type='app' />
|
|
|
+ : total > 0
|
|
|
+ ? <List
|
|
|
+ embeddingAvailable={embeddingAvailable}
|
|
|
+ documents={documentsList || []}
|
|
|
+ datasetId={datasetId}
|
|
|
+ onUpdate={handleUpdate}
|
|
|
+ selectedIds={selectedIds}
|
|
|
+ onSelectedIdChange={setSelectedIds}
|
|
|
+ pagination={{
|
|
|
+ total,
|
|
|
+ limit,
|
|
|
+ onLimitChange: setLimit,
|
|
|
+ current: currPage,
|
|
|
+ onChange: setCurrPage,
|
|
|
+ }}
|
|
|
+ onManageMetadata={showEditMetadataModal}
|
|
|
+ />
|
|
|
+ : <EmptyElement canAdd={embeddingAvailable} onClick={routeToDocCreate} type={isDataSourceNotion ? 'sync' : 'upload'} />
|
|
|
+ }
|
|
|
+ <NotionPageSelectorModal
|
|
|
+ isShow={notionPageSelectorModalVisible}
|
|
|
+ onClose={() => setNotionPageSelectorModalVisible(false)}
|
|
|
+ onSave={handleSaveNotionPageSelected}
|
|
|
+ datasetId={dataset?.id || ''}
|
|
|
+ />
|
|
|
</div>
|
|
|
- {isListLoading
|
|
|
- ? <Loading type='app' />
|
|
|
- : total > 0
|
|
|
- ? <List
|
|
|
- embeddingAvailable={embeddingAvailable}
|
|
|
- documents={documentsList || []}
|
|
|
- datasetId={datasetId}
|
|
|
- onUpdate={handleUpdate}
|
|
|
- selectedIds={selectedIds}
|
|
|
- onSelectedIdChange={setSelectedIds}
|
|
|
- pagination={{
|
|
|
- total,
|
|
|
- limit,
|
|
|
- onLimitChange: setLimit,
|
|
|
- current: currPage,
|
|
|
- onChange: setCurrPage,
|
|
|
- }}
|
|
|
- onManageMetadata={showEditMetadataModal}
|
|
|
- />
|
|
|
- : <EmptyElement canAdd={embeddingAvailable} onClick={routeToDocCreate} type={isDataSourceNotion ? 'sync' : 'upload'} />
|
|
|
- }
|
|
|
- <NotionPageSelectorModal
|
|
|
- isShow={notionPageSelectorModalVisible}
|
|
|
- onClose={() => setNotionPageSelectorModalVisible(false)}
|
|
|
- onSave={handleSaveNotionPageSelected}
|
|
|
- datasetId={dataset?.id || ''}
|
|
|
- />
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ {
|
|
|
+ mouldModalVisible && (
|
|
|
+ <DetailModal
|
|
|
+ transfer={transfer}
|
|
|
+ datasetId={datasetId}
|
|
|
+ onCancel={() => setMouldModalVisible(false)}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }
|
|
|
+ </>
|
|
|
)
|
|
|
}
|
|
|
|