import { useContext, useState } from "react"; import CodeAreaComponent from "../../../../components/codeAreaComponent"; import DictComponent from "../../../../components/dictComponent"; import Dropdown from "../../../../components/dropdownComponent"; import FloatComponent from "../../../../components/floatComponent"; import InputComponent from "../../../../components/inputComponent"; import InputFileComponent from "../../../../components/inputFileComponent"; import InputListComponent from "../../../../components/inputListComponent"; import IntComponent from "../../../../components/intComponent"; import KeypairListComponent from "../../../../components/keypairListComponent"; import PromptAreaComponent from "../../../../components/promptComponent"; import TextAreaComponent from "../../../../components/textAreaComponent"; import ToggleShadComponent from "../../../../components/toggleShadComponent"; import { TabsContext } from "../../../../contexts/tabsContext"; import { typesContext } from "../../../../contexts/typesContext"; import CollectionNameComponent from "../../../../pages/FlowPage/components/CollectionNameComponent"; import { cleanEdges, convertObjToArray, convertValuesToNumbers, hasDuplicateKeys } from "../../../../util/reactflowUtils"; export default function L2ParameterComponent({ // id, data, type, name = "", }) { const { reactFlowInstance } = useContext(typesContext); // let disabled = reactFlowInstance?.getEdges().some((e) => e.targetHandle === id) ?? false; let disabled = false const [errorDuplicateKey, setErrorDuplicateKey] = useState(false); const { setTabsState, flow } = useContext(TabsContext); const handleOnNewValue = (newValue: any) => { data.node.template[name].value = ['float', 'int'].includes(type) ? Number(newValue) : newValue; // Set state to pending setTabsState((prev) => { return { ...prev, [flow.id]: { ...prev[flow.id], isPending: true, }, }; }); }; // 临时处理知识库保存方法, 类似方法多了需要抽象 const handleOnNewLibValue = (newValue: string, collectionId: number | '') => { data.node.template[name].value = newValue; data.node.template[name].collection_id = collectionId; // Set state to pending setTabsState((prev) => { return { ...prev, [flow.id]: { ...prev[flow.id], isPending: true, }, }; }); }; return
{type === "str" && !data.node.template[name].options ? (
{data.node.template[name].list ? ( ) : data.node.template[name].multiline ? ( ) : ['index_name', 'collection_name'].some(key => name.indexOf(key) === 0) ? ( // 知识库选择 { data.node = nodeClass; }} nodeClass={data.node} disabled={disabled} id={data.node.template[name].collection_id ?? ""} value={data.node.template[name].value ?? ""} onSelect={handleOnNewLibValue} onChange={() => { }} /> ) : ( )}
) : type === "bool" ? (
{ handleOnNewValue(t); }} size="large" />
) : type === "float" ? (
) : type === "str" && data.node.template[name].options ? (
) : type === "code" ? (
{ data.node = nodeClass; }} nodeClass={data.node} disabled={disabled} value={data.node.template[name].value ?? ""} onChange={handleOnNewValue} />
) : type === "file" ? (
{ data.node.template[name].file_path = t; }} >
) : type === "int" ? (
) : type === "prompt" ? (
{ data.node = nodeClass; if (reactFlowInstance) { const edges = cleanEdges( reactFlowInstance.getNodes(), reactFlowInstance.getEdges() ) reactFlowInstance.setEdges(edges) } }} nodeClass={data.node} disabled={disabled} value={data.node.template[name].value ?? ""} onChange={handleOnNewValue} />
) : type === "NestedDict" ? (
{ data.node!.template[name].value = newValue; handleOnNewValue(newValue); }} />
) : type === "dict" ? (
{ const valueToNumbers = convertValuesToNumbers(newValue); data.node!.template[name].value = valueToNumbers; setErrorDuplicateKey(hasDuplicateKeys(valueToNumbers)); handleOnNewValue(valueToNumbers); }} />
) : ( <> )}
}