fix: Inconsistency Between Actual and Debug Input Variables (#6055)

This commit is contained in:
AIxGEEK 2024-07-08 22:27:55 +08:00 committed by GitHub
parent 0046ef7707
commit 22aaf8960b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 30 additions and 3 deletions

View File

@ -1,6 +1,6 @@
'use client' 'use client'
import type { FC } from 'react' import type { FC } from 'react'
import React, { useCallback } from 'react' import React, { useCallback, useMemo } from 'react'
import produce from 'immer' import produce from 'immer'
import cn from 'classnames' import cn from 'classnames'
import type { InputVar } from '../../../../types' import type { InputVar } from '../../../../types'
@ -24,14 +24,39 @@ const Form: FC<Props> = ({
values, values,
onChange, onChange,
}) => { }) => {
const mapKeysWithSameValueSelector = useMemo(() => {
const keysWithSameValueSelector = (key: string) => {
const targetValueSelector = inputs.find(
item => item.variable === key,
)?.value_selector
if (!targetValueSelector)
return [key]
const result: string[] = []
inputs.forEach((item) => {
if (item.value_selector?.join('.') === targetValueSelector.join('.'))
result.push(item.variable)
})
return result
}
const m = new Map()
for (const input of inputs)
m.set(input.variable, keysWithSameValueSelector(input.variable))
return m
}, [inputs])
const handleChange = useCallback((key: string) => { const handleChange = useCallback((key: string) => {
const mKeys = mapKeysWithSameValueSelector.get(key) ?? [key]
return (value: any) => { return (value: any) => {
const newValues = produce(values, (draft) => { const newValues = produce(values, (draft) => {
draft[key] = value for (const k of mKeys)
draft[k] = value
}) })
onChange(newValues) onChange(newValues)
} }
}, [values, onChange]) }, [values, onChange, mapKeysWithSameValueSelector])
const isArrayLikeType = [InputVarType.contexts, InputVarType.iterator].includes(inputs[0]?.type) const isArrayLikeType = [InputVarType.contexts, InputVarType.iterator].includes(inputs[0]?.type)
const isContext = inputs[0]?.type === InputVarType.contexts const isContext = inputs[0]?.type === InputVarType.contexts
const handleAddContext = useCallback(() => { const handleAddContext = useCallback(() => {

View File

@ -337,6 +337,7 @@ const useOneStepRun = <T>({
variable: item.variable, variable: item.variable,
type: InputVarType.textInput, type: InputVarType.textInput,
required: true, required: true,
value_selector: item.value_selector,
} }
} }
return { return {

View File

@ -132,6 +132,7 @@ export type InputVar = {
required: boolean required: boolean
hint?: string hint?: string
options?: string[] options?: string[]
value_selector?: ValueSelector
} }
export type ModelConfig = { export type ModelConfig = {