mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 20:29:02 +08:00
fix: text-generation webapp file form (#10578)
This commit is contained in:
parent
40c5e6d67a
commit
b77628c458
@ -94,6 +94,7 @@ const TextGeneration: FC<IMainProps> = ({
|
|||||||
const [isCallBatchAPI, setIsCallBatchAPI] = useState(false)
|
const [isCallBatchAPI, setIsCallBatchAPI] = useState(false)
|
||||||
const isInBatchTab = currentTab === 'batch'
|
const isInBatchTab = currentTab === 'batch'
|
||||||
const [inputs, setInputs] = useState<Record<string, any>>({})
|
const [inputs, setInputs] = useState<Record<string, any>>({})
|
||||||
|
const inputsRef = useRef(inputs)
|
||||||
const [appId, setAppId] = useState<string>('')
|
const [appId, setAppId] = useState<string>('')
|
||||||
const [siteInfo, setSiteInfo] = useState<SiteInfo | null>(null)
|
const [siteInfo, setSiteInfo] = useState<SiteInfo | null>(null)
|
||||||
const [canReplaceLogo, setCanReplaceLogo] = useState<boolean>(false)
|
const [canReplaceLogo, setCanReplaceLogo] = useState<boolean>(false)
|
||||||
@ -604,6 +605,7 @@ const TextGeneration: FC<IMainProps> = ({
|
|||||||
<RunOnce
|
<RunOnce
|
||||||
siteInfo={siteInfo}
|
siteInfo={siteInfo}
|
||||||
inputs={inputs}
|
inputs={inputs}
|
||||||
|
inputsRef={inputsRef}
|
||||||
onInputsChange={setInputs}
|
onInputsChange={setInputs}
|
||||||
promptConfig={promptConfig}
|
promptConfig={promptConfig}
|
||||||
onSend={handleSend}
|
onSend={handleSend}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { FC, FormEvent } from 'react'
|
import type { FC, FormEvent } from 'react'
|
||||||
import React from 'react'
|
import React, { useCallback } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import {
|
import {
|
||||||
PlayIcon,
|
PlayIcon,
|
||||||
@ -19,6 +19,7 @@ export type IRunOnceProps = {
|
|||||||
siteInfo: SiteInfo
|
siteInfo: SiteInfo
|
||||||
promptConfig: PromptConfig
|
promptConfig: PromptConfig
|
||||||
inputs: Record<string, any>
|
inputs: Record<string, any>
|
||||||
|
inputsRef: React.MutableRefObject<Record<string, any>>
|
||||||
onInputsChange: (inputs: Record<string, any>) => void
|
onInputsChange: (inputs: Record<string, any>) => void
|
||||||
onSend: () => void
|
onSend: () => void
|
||||||
visionConfig: VisionSettings
|
visionConfig: VisionSettings
|
||||||
@ -27,6 +28,7 @@ export type IRunOnceProps = {
|
|||||||
const RunOnce: FC<IRunOnceProps> = ({
|
const RunOnce: FC<IRunOnceProps> = ({
|
||||||
promptConfig,
|
promptConfig,
|
||||||
inputs,
|
inputs,
|
||||||
|
inputsRef,
|
||||||
onInputsChange,
|
onInputsChange,
|
||||||
onSend,
|
onSend,
|
||||||
visionConfig,
|
visionConfig,
|
||||||
@ -47,6 +49,11 @@ const RunOnce: FC<IRunOnceProps> = ({
|
|||||||
onSend()
|
onSend()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleInputsChange = useCallback((newInputs: Record<string, any>) => {
|
||||||
|
onInputsChange(newInputs)
|
||||||
|
inputsRef.current = newInputs
|
||||||
|
}, [onInputsChange, inputsRef])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="">
|
<div className="">
|
||||||
<section>
|
<section>
|
||||||
@ -60,7 +67,7 @@ const RunOnce: FC<IRunOnceProps> = ({
|
|||||||
<Select
|
<Select
|
||||||
className='w-full'
|
className='w-full'
|
||||||
defaultValue={inputs[item.key]}
|
defaultValue={inputs[item.key]}
|
||||||
onSelect={(i) => { onInputsChange({ ...inputs, [item.key]: i.value }) }}
|
onSelect={(i) => { handleInputsChange({ ...inputsRef.current, [item.key]: i.value }) }}
|
||||||
items={(item.options || []).map(i => ({ name: i, value: i }))}
|
items={(item.options || []).map(i => ({ name: i, value: i }))}
|
||||||
allowSearch={false}
|
allowSearch={false}
|
||||||
bgClassName='bg-gray-50'
|
bgClassName='bg-gray-50'
|
||||||
@ -72,7 +79,7 @@ const RunOnce: FC<IRunOnceProps> = ({
|
|||||||
className="block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 sm:text-xs focus:ring-blue-500 focus:border-blue-500 "
|
className="block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 sm:text-xs focus:ring-blue-500 focus:border-blue-500 "
|
||||||
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
||||||
value={inputs[item.key]}
|
value={inputs[item.key]}
|
||||||
onChange={(e) => { onInputsChange({ ...inputs, [item.key]: e.target.value }) }}
|
onChange={(e) => { handleInputsChange({ ...inputsRef.current, [item.key]: e.target.value }) }}
|
||||||
maxLength={item.max_length || DEFAULT_VALUE_MAX_LEN}
|
maxLength={item.max_length || DEFAULT_VALUE_MAX_LEN}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@ -81,7 +88,7 @@ const RunOnce: FC<IRunOnceProps> = ({
|
|||||||
className='h-[104px] sm:text-xs'
|
className='h-[104px] sm:text-xs'
|
||||||
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
||||||
value={inputs[item.key]}
|
value={inputs[item.key]}
|
||||||
onChange={(e) => { onInputsChange({ ...inputs, [item.key]: e.target.value }) }}
|
onChange={(e) => { handleInputsChange({ ...inputsRef.current, [item.key]: e.target.value }) }}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{item.type === 'number' && (
|
{item.type === 'number' && (
|
||||||
@ -90,12 +97,12 @@ const RunOnce: FC<IRunOnceProps> = ({
|
|||||||
className="block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 sm:text-xs focus:ring-blue-500 focus:border-blue-500 "
|
className="block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 sm:text-xs focus:ring-blue-500 focus:border-blue-500 "
|
||||||
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
||||||
value={inputs[item.key]}
|
value={inputs[item.key]}
|
||||||
onChange={(e) => { onInputsChange({ ...inputs, [item.key]: e.target.value }) }}
|
onChange={(e) => { handleInputsChange({ ...inputsRef.current, [item.key]: e.target.value }) }}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{item.type === 'file' && (
|
{item.type === 'file' && (
|
||||||
<FileUploaderInAttachmentWrapper
|
<FileUploaderInAttachmentWrapper
|
||||||
onChange={(files) => { onInputsChange({ ...inputs, [item.key]: getProcessedFiles(files)[0] }) }}
|
onChange={(files) => { handleInputsChange({ ...inputsRef.current, [item.key]: getProcessedFiles(files)[0] }) }}
|
||||||
fileConfig={{
|
fileConfig={{
|
||||||
...item.config,
|
...item.config,
|
||||||
fileUploadConfig: (visionConfig as any).fileUploadConfig,
|
fileUploadConfig: (visionConfig as any).fileUploadConfig,
|
||||||
@ -104,7 +111,7 @@ const RunOnce: FC<IRunOnceProps> = ({
|
|||||||
)}
|
)}
|
||||||
{item.type === 'file-list' && (
|
{item.type === 'file-list' && (
|
||||||
<FileUploaderInAttachmentWrapper
|
<FileUploaderInAttachmentWrapper
|
||||||
onChange={(files) => { onInputsChange({ ...inputs, [item.key]: getProcessedFiles(files) }) }}
|
onChange={(files) => { handleInputsChange({ ...inputsRef.current, [item.key]: getProcessedFiles(files) }) }}
|
||||||
fileConfig={{
|
fileConfig={{
|
||||||
...item.config,
|
...item.config,
|
||||||
fileUploadConfig: (visionConfig as any).fileUploadConfig,
|
fileUploadConfig: (visionConfig as any).fileUploadConfig,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user