2025-06-26 13:46:12 +08:00
|
|
|
import type { DataSourceNodeType } from '@/app/components/workflow/nodes/data-source/types'
|
2025-06-27 16:29:30 +08:00
|
|
|
import Header from './header'
|
2025-07-03 18:34:54 +08:00
|
|
|
import { useCallback, useEffect } from 'react'
|
2025-06-30 14:19:14 +08:00
|
|
|
import FileList from './file-list'
|
2025-07-03 18:34:54 +08:00
|
|
|
import { DatasourceType } from '@/models/pipeline'
|
|
|
|
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
|
|
|
|
import { ssePost } from '@/service/base'
|
|
|
|
import type { DataSourceNodeCompletedResponse, DataSourceNodeErrorResponse } from '@/types/pipeline'
|
|
|
|
import Toast from '@/app/components/base/toast'
|
|
|
|
import { useDataSourceStore } from '../store'
|
2025-06-26 13:46:12 +08:00
|
|
|
|
|
|
|
type OnlineDriveProps = {
|
2025-07-03 18:34:54 +08:00
|
|
|
nodeId: string
|
2025-06-26 13:46:12 +08:00
|
|
|
nodeData: DataSourceNodeType
|
2025-07-03 18:34:54 +08:00
|
|
|
isInPipeline?: boolean
|
2025-06-26 13:46:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
const OnlineDrive = ({
|
2025-07-03 18:34:54 +08:00
|
|
|
nodeId,
|
2025-06-26 13:46:12 +08:00
|
|
|
nodeData,
|
2025-07-03 18:34:54 +08:00
|
|
|
isInPipeline = false,
|
2025-06-26 13:46:12 +08:00
|
|
|
}: OnlineDriveProps) => {
|
2025-07-03 18:34:54 +08:00
|
|
|
const pipelineId = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id)
|
|
|
|
const prefix = useDataSourceStore(state => state.prefix)
|
|
|
|
const setPrefix = useDataSourceStore(state => state.setPrefix)
|
|
|
|
const keywords = useDataSourceStore(state => state.keywords)
|
|
|
|
const setKeywords = useDataSourceStore(state => state.setKeywords)
|
|
|
|
const bucket = useDataSourceStore(state => state.bucket)
|
|
|
|
const setBucket = useDataSourceStore(state => state.setBucket)
|
|
|
|
const startAfter = useDataSourceStore(state => state.startAfter)
|
|
|
|
const setStartAfter = useDataSourceStore(state => state.setStartAfter)
|
|
|
|
const selectedFileList = useDataSourceStore(state => state.selectedFileList)
|
|
|
|
const setSelectedFileList = useDataSourceStore(state => state.setSelectedFileList)
|
|
|
|
const fileList = useDataSourceStore(state => state.fileList)
|
|
|
|
const setFileList = useDataSourceStore(state => state.setFileList)
|
|
|
|
|
|
|
|
const datasourceNodeRunURL = !isInPipeline
|
|
|
|
? `/rag/pipelines/${pipelineId}/workflows/published/datasource/nodes/${nodeId}/run`
|
|
|
|
: `/rag/pipelines/${pipelineId}/workflows/draft/datasource/nodes/${nodeId}/run`
|
|
|
|
|
|
|
|
const getOnlineDrive = useCallback(async () => {
|
|
|
|
ssePost(
|
|
|
|
datasourceNodeRunURL,
|
|
|
|
{
|
|
|
|
body: {
|
|
|
|
inputs: {
|
|
|
|
prefix: prefix.join('/'),
|
|
|
|
bucket,
|
|
|
|
start_after: startAfter,
|
|
|
|
max_keys: 30, // Adjust as needed
|
|
|
|
},
|
|
|
|
datasource_type: DatasourceType.onlineDrive,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
onDataSourceNodeCompleted: (documentsData: DataSourceNodeCompletedResponse) => {
|
|
|
|
console.log('Online Drive documents data:', documentsData)
|
|
|
|
},
|
|
|
|
onDataSourceNodeError: (error: DataSourceNodeErrorResponse) => {
|
|
|
|
Toast.notify({
|
|
|
|
type: 'error',
|
|
|
|
message: error.error,
|
|
|
|
})
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}, [bucket, datasourceNodeRunURL, prefix, startAfter])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
if (!fileList.length)
|
|
|
|
getOnlineDrive()
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
|
}, [])
|
|
|
|
|
2025-06-30 14:19:14 +08:00
|
|
|
const updateKeywords = useCallback((keywords: string) => {
|
|
|
|
setKeywords(keywords)
|
2025-07-01 16:54:44 +08:00
|
|
|
}, [setKeywords])
|
2025-06-30 14:19:14 +08:00
|
|
|
|
|
|
|
const resetPrefix = useCallback(() => {
|
|
|
|
setKeywords('')
|
2025-07-01 16:54:44 +08:00
|
|
|
}, [setKeywords])
|
2025-06-30 14:19:14 +08:00
|
|
|
|
2025-06-26 13:46:12 +08:00
|
|
|
return (
|
2025-06-27 16:29:30 +08:00
|
|
|
<div className='flex flex-col gap-y-2'>
|
|
|
|
<Header
|
|
|
|
docTitle='Online Drive Docs'
|
|
|
|
docLink='https://docs.dify.ai/'
|
|
|
|
/>
|
2025-06-30 14:19:14 +08:00
|
|
|
<FileList
|
|
|
|
fileList={fileList}
|
|
|
|
selectedFileList={selectedFileList}
|
|
|
|
prefix={prefix}
|
|
|
|
keywords={keywords}
|
|
|
|
resetKeywords={resetPrefix}
|
|
|
|
updateKeywords={updateKeywords}
|
|
|
|
searchResultsLength={fileList.length}
|
|
|
|
/>
|
2025-06-27 16:29:30 +08:00
|
|
|
</div>
|
2025-06-26 13:46:12 +08:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default OnlineDrive
|