diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/components/dataset-item.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/components/dataset-item.tsx new file mode 100644 index 0000000000..f6fe785e8d --- /dev/null +++ b/web/app/components/workflow/nodes/knowledge-retrieval/components/dataset-item.tsx @@ -0,0 +1,21 @@ +'use client' +import type { FC } from 'react' +import React from 'react' +import type { DataSet } from '@/models/datasets' + +type Props = { + payload: DataSet + onRemove: () => void +} + +const DatasetItem: FC = ({ + payload, + onRemove, +}) => { + return ( +
+ {payload.name} +
+ ) +} +export default React.memo(DatasetItem) diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/components/dataset-list.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/components/dataset-list.tsx new file mode 100644 index 0000000000..fdf4949e5a --- /dev/null +++ b/web/app/components/workflow/nodes/knowledge-retrieval/components/dataset-list.tsx @@ -0,0 +1,41 @@ +'use client' +import type { FC } from 'react' +import React, { useCallback } from 'react' +import produce from 'immer' +import Item from './dataset-item' +import type { DataSet } from '@/models/datasets' +type Props = { + list: DataSet[] + onChange: (list: DataSet[]) => void +} + +const DatasetList: FC = ({ + list, + onChange, +}) => { + const handleRemove = useCallback((index: number) => { + return () => { + const newList = produce(list, (draft) => { + draft.splice(index, 1) + }) + onChange(newList) + } + }, []) + return ( +
+ { + list.map((item, index) => { + return ( + + ) + }) + } + +
+ ) +} +export default React.memo(DatasetList) diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/mock.ts b/web/app/components/workflow/nodes/knowledge-retrieval/mock.ts index 9180d92f0e..680f6ed184 100644 --- a/web/app/components/workflow/nodes/knowledge-retrieval/mock.ts +++ b/web/app/components/workflow/nodes/knowledge-retrieval/mock.ts @@ -7,7 +7,7 @@ export const mockData: KnowledgeRetrievalNodeType = { desc: 'xxx', title: 'KnowledgeRetrieval', query_variable_selector: ['aaa', 'name'], - dataset_ids: ['1'], + dataset_ids: ['744a0635-2496-4a87-8e6d-fae410f610be'], retrieval_mode: RETRIEVE_TYPE.oneWay, multiple_retrieval_config: { top_k: 10, diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx index c7254ff31b..791b155f6e 100644 --- a/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx +++ b/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx @@ -5,9 +5,11 @@ import useConfig from './use-config' import { mockData } from './mock' import RetrievalConfig from './components/retrieval-config' import AddKnowledge from './components/add-dataset' +import DatasetList from './components/dataset-list' import Field from '@/app/components/workflow/nodes/_base/components/field' import Split from '@/app/components/workflow/nodes/_base/components/split' import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' + const i18nPrefix = 'workflow.nodes.knowledgeRetrieval' const Panel: FC = () => { @@ -19,6 +21,7 @@ const Panel: FC = () => { handleQueryVarChange, handleRetrievalModeChange, handleMultipleRetrievalConfigChange, + selectedDatasets, handleOnDatasetsChange, } = useConfig(mockData) @@ -56,7 +59,10 @@ const Panel: FC = () => { } > - list + diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts b/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts index 8b8b72ca46..490f624321 100644 --- a/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts +++ b/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts @@ -1,13 +1,13 @@ -import { useCallback, useState } from 'react' +import { useCallback, useEffect, useState } from 'react' import produce from 'immer' import type { ValueSelector } from '../../types' import type { KnowledgeRetrievalNodeType, MultipleRetrievalConfig } from './types' import type { RETRIEVE_TYPE } from '@/types/app' import type { DataSet } from '@/models/datasets' +import { fetchDatasets } from '@/service/datasets' const useConfig = (initInputs: KnowledgeRetrievalNodeType) => { const [inputs, setInputs] = useState(initInputs) - const [selectedDatasets, setSelectedDatasets] = useState([]) const handleQueryVarChange = useCallback((newVar: ValueSelector) => { const newInputs = produce(inputs, (draft) => { draft.query_variable_selector = newVar @@ -29,6 +29,19 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => { setInputs(newInputs) }, [inputs, setInputs]) + // datasets + const [selectedDatasets, setSelectedDatasets] = useState([]) + useEffect(() => { + (async () => { + const datasetIds = inputs.dataset_ids + if (datasetIds?.length > 0) { + const { data: dataSetsWithDetail } = await fetchDatasets({ url: '/datasets', params: { page: 1, ids: datasetIds } }) + setSelectedDatasets(dataSetsWithDetail) + console.log(dataSetsWithDetail) + } + })() + }, []) + const handleOnDatasetsChange = useCallback((newDatasets: DataSet[]) => { const newInputs = produce(inputs, (draft) => { draft.dataset_ids = newDatasets.map(d => d.id) @@ -42,6 +55,7 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => { handleQueryVarChange, handleRetrievalModeChange, handleMultipleRetrievalConfigChange, + selectedDatasets, handleOnDatasetsChange, } }