mirror of
https://github.com/langgenius/dify.git
synced 2026-04-15 18:00:26 -04:00
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import type { MutableRefObject } from 'react'
|
|
import type { KnowledgeRetrievalNodeType } from '../types'
|
|
import type { ValueSelector } from '@/app/components/workflow/types'
|
|
import { produce } from 'immer'
|
|
import {
|
|
useCallback,
|
|
useEffect,
|
|
useRef,
|
|
} from 'react'
|
|
import { RETRIEVE_TYPE } from '@/types/app'
|
|
|
|
type Params = {
|
|
inputs: KnowledgeRetrievalNodeType
|
|
doSetInputs: (inputs: KnowledgeRetrievalNodeType) => void
|
|
}
|
|
|
|
const normalizeInputs = (nextInputs: KnowledgeRetrievalNodeType) => {
|
|
return produce(nextInputs, (draft) => {
|
|
if (nextInputs.retrieval_mode === RETRIEVE_TYPE.multiWay)
|
|
delete draft.single_retrieval_config
|
|
else
|
|
delete draft.multiple_retrieval_config
|
|
})
|
|
}
|
|
|
|
const useKnowledgeInputManager = ({
|
|
inputs,
|
|
doSetInputs,
|
|
}: Params) => {
|
|
const inputRef = useRef(inputs)
|
|
|
|
useEffect(() => {
|
|
inputRef.current = inputs
|
|
}, [inputs])
|
|
|
|
const setInputs = useCallback((nextInputs: KnowledgeRetrievalNodeType) => {
|
|
const normalizedInputs = normalizeInputs(nextInputs)
|
|
doSetInputs(normalizedInputs)
|
|
inputRef.current = normalizedInputs
|
|
}, [doSetInputs])
|
|
|
|
const handleQueryVarChange = useCallback((newVar: ValueSelector | string) => {
|
|
const nextInputs = produce(inputRef.current, (draft) => {
|
|
draft.query_variable_selector = newVar as ValueSelector
|
|
})
|
|
setInputs(nextInputs)
|
|
}, [setInputs])
|
|
|
|
const handleQueryAttachmentChange = useCallback((newVar: ValueSelector | string) => {
|
|
const nextInputs = produce(inputRef.current, (draft) => {
|
|
draft.query_attachment_selector = newVar as ValueSelector
|
|
})
|
|
setInputs(nextInputs)
|
|
}, [setInputs])
|
|
|
|
return {
|
|
inputRef: inputRef as MutableRefObject<KnowledgeRetrievalNodeType>,
|
|
setInputs,
|
|
handleQueryVarChange,
|
|
handleQueryAttachmentChange,
|
|
}
|
|
}
|
|
|
|
export default useKnowledgeInputManager
|