Commit 0a7cbf6f authored by Joel's avatar Joel

feat: dataset list struct

parent e4701e26
'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<Props> = ({
payload,
onRemove,
}) => {
return (
<div>
{payload.name}
</div>
)
}
export default React.memo(DatasetItem)
'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<Props> = ({
list,
onChange,
}) => {
const handleRemove = useCallback((index: number) => {
return () => {
const newList = produce(list, (draft) => {
draft.splice(index, 1)
})
onChange(newList)
}
}, [])
return (
<div>
{
list.map((item, index) => {
return (
<Item
key={index}
payload={item}
onRemove={handleRemove(index)}
/>
)
})
}
</div>
)
}
export default React.memo(DatasetList)
...@@ -7,7 +7,7 @@ export const mockData: KnowledgeRetrievalNodeType = { ...@@ -7,7 +7,7 @@ export const mockData: KnowledgeRetrievalNodeType = {
desc: 'xxx', desc: 'xxx',
title: 'KnowledgeRetrieval', title: 'KnowledgeRetrieval',
query_variable_selector: ['aaa', 'name'], query_variable_selector: ['aaa', 'name'],
dataset_ids: ['1'], dataset_ids: ['744a0635-2496-4a87-8e6d-fae410f610be'],
retrieval_mode: RETRIEVE_TYPE.oneWay, retrieval_mode: RETRIEVE_TYPE.oneWay,
multiple_retrieval_config: { multiple_retrieval_config: {
top_k: 10, top_k: 10,
......
...@@ -5,9 +5,11 @@ import useConfig from './use-config' ...@@ -5,9 +5,11 @@ import useConfig from './use-config'
import { mockData } from './mock' import { mockData } from './mock'
import RetrievalConfig from './components/retrieval-config' import RetrievalConfig from './components/retrieval-config'
import AddKnowledge from './components/add-dataset' import AddKnowledge from './components/add-dataset'
import DatasetList from './components/dataset-list'
import Field from '@/app/components/workflow/nodes/_base/components/field' import Field from '@/app/components/workflow/nodes/_base/components/field'
import Split from '@/app/components/workflow/nodes/_base/components/split' import Split from '@/app/components/workflow/nodes/_base/components/split'
import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars'
const i18nPrefix = 'workflow.nodes.knowledgeRetrieval' const i18nPrefix = 'workflow.nodes.knowledgeRetrieval'
const Panel: FC = () => { const Panel: FC = () => {
...@@ -19,6 +21,7 @@ const Panel: FC = () => { ...@@ -19,6 +21,7 @@ const Panel: FC = () => {
handleQueryVarChange, handleQueryVarChange,
handleRetrievalModeChange, handleRetrievalModeChange,
handleMultipleRetrievalConfigChange, handleMultipleRetrievalConfigChange,
selectedDatasets,
handleOnDatasetsChange, handleOnDatasetsChange,
} = useConfig(mockData) } = useConfig(mockData)
...@@ -56,7 +59,10 @@ const Panel: FC = () => { ...@@ -56,7 +59,10 @@ const Panel: FC = () => {
</div> </div>
} }
> >
list <DatasetList
list={selectedDatasets}
onChange={handleOnDatasetsChange}
/>
</Field> </Field>
</div> </div>
......
import { useCallback, useState } from 'react' import { useCallback, useEffect, useState } from 'react'
import produce from 'immer' import produce from 'immer'
import type { ValueSelector } from '../../types' import type { ValueSelector } from '../../types'
import type { KnowledgeRetrievalNodeType, MultipleRetrievalConfig } from './types' import type { KnowledgeRetrievalNodeType, MultipleRetrievalConfig } from './types'
import type { RETRIEVE_TYPE } from '@/types/app' import type { RETRIEVE_TYPE } from '@/types/app'
import type { DataSet } from '@/models/datasets' import type { DataSet } from '@/models/datasets'
import { fetchDatasets } from '@/service/datasets'
const useConfig = (initInputs: KnowledgeRetrievalNodeType) => { const useConfig = (initInputs: KnowledgeRetrievalNodeType) => {
const [inputs, setInputs] = useState<KnowledgeRetrievalNodeType>(initInputs) const [inputs, setInputs] = useState<KnowledgeRetrievalNodeType>(initInputs)
const [selectedDatasets, setSelectedDatasets] = useState<DataSet[]>([])
const handleQueryVarChange = useCallback((newVar: ValueSelector) => { const handleQueryVarChange = useCallback((newVar: ValueSelector) => {
const newInputs = produce(inputs, (draft) => { const newInputs = produce(inputs, (draft) => {
draft.query_variable_selector = newVar draft.query_variable_selector = newVar
...@@ -29,6 +29,19 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => { ...@@ -29,6 +29,19 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => {
setInputs(newInputs) setInputs(newInputs)
}, [inputs, setInputs]) }, [inputs, setInputs])
// datasets
const [selectedDatasets, setSelectedDatasets] = useState<DataSet[]>([])
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 handleOnDatasetsChange = useCallback((newDatasets: DataSet[]) => {
const newInputs = produce(inputs, (draft) => { const newInputs = produce(inputs, (draft) => {
draft.dataset_ids = newDatasets.map(d => d.id) draft.dataset_ids = newDatasets.map(d => d.id)
...@@ -42,6 +55,7 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => { ...@@ -42,6 +55,7 @@ const useConfig = (initInputs: KnowledgeRetrievalNodeType) => {
handleQueryVarChange, handleQueryVarChange,
handleRetrievalModeChange, handleRetrievalModeChange,
handleMultipleRetrievalConfigChange, handleMultipleRetrievalConfigChange,
selectedDatasets,
handleOnDatasetsChange, handleOnDatasetsChange,
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment