From 3f35f3594ba39370fe6cff85d8a7b0328507f251 Mon Sep 17 00:00:00 2001 From: JzoNg Date: Fri, 8 May 2026 10:32:53 +0800 Subject: [PATCH] fix(web): form submmit in human input form page --- .../form/[token]/__tests__/form.spec.tsx | 14 ++++++++++++-- .../form/[token]/loaded-form-content.tsx | 4 ++-- .../form/[token]/use-form-submit.ts | 12 ++++++++++-- web/service/use-share.ts | 3 +-- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/web/app/(humanInputLayout)/form/[token]/__tests__/form.spec.tsx b/web/app/(humanInputLayout)/form/[token]/__tests__/form.spec.tsx index 48c08e558d..3461c0ae53 100644 --- a/web/app/(humanInputLayout)/form/[token]/__tests__/form.spec.tsx +++ b/web/app/(humanInputLayout)/form/[token]/__tests__/form.spec.tsx @@ -186,7 +186,12 @@ describe('Human input share form', () => { action: 'approve', inputs: { summary: 'updated summary', - attachments: [mockContentItemState.uploadedFile], + attachments: [{ + type: 'document', + transfer_method: TransferMethod.local_file, + url: '', + upload_file_id: 'upload-file-1', + }], }, }, }, expect.objectContaining({ @@ -208,7 +213,12 @@ describe('Human input share form', () => { action: 'approve', inputs: { summary: 'initial summary', - attachments: [mockContentItemState.uploadedFile], + attachments: [{ + type: 'document', + transfer_method: TransferMethod.local_file, + url: '', + upload_file_id: 'upload-file-1', + }], }, }, }, expect.objectContaining({ diff --git a/web/app/(humanInputLayout)/form/[token]/loaded-form-content.tsx b/web/app/(humanInputLayout)/form/[token]/loaded-form-content.tsx index 65257f5956..2c8177db14 100644 --- a/web/app/(humanInputLayout)/form/[token]/loaded-form-content.tsx +++ b/web/app/(humanInputLayout)/form/[token]/loaded-form-content.tsx @@ -16,7 +16,7 @@ import DifyLogo from '@/app/components/base/logo/dify-logo' type LoadedFormContentProps = { formData: FormData isSubmitting: boolean - onSubmit: (inputs: Record, actionID: string) => void + onSubmit: (inputs: Record, actionID: string, formInputs: FormData['inputs']) => void } const LoadedFormContent = ({ @@ -40,7 +40,7 @@ const LoadedFormContent = ({ } const submit = (actionID: string) => { - onSubmit(inputs, actionID) + onSubmit(inputs, actionID, formData.inputs) } const isActionDisabled = isSubmitting || hasInvalidRequiredHumanInput(formData.inputs, inputs) diff --git a/web/app/(humanInputLayout)/form/[token]/use-form-submit.ts b/web/app/(humanInputLayout)/form/[token]/use-form-submit.ts index 24879c3653..de018b28ed 100644 --- a/web/app/(humanInputLayout)/form/[token]/use-form-submit.ts +++ b/web/app/(humanInputLayout)/form/[token]/use-form-submit.ts @@ -1,14 +1,22 @@ import type { HumanInputFieldValue } from '@/app/components/base/chat/chat/answer/human-input-content/field-renderer' +import type { FormInputItem } from '@/app/components/workflow/nodes/human-input/types' import { useCallback, useState } from 'react' +import { getProcessedHumanInputFormInputs } from '@/app/components/base/chat/chat/answer/human-input-content/utils' import { useSubmitHumanInputForm } from '@/service/use-share' export const useFormSubmit = (token: string) => { const [success, setSuccess] = useState(false) const { mutate: submitForm, isPending: isSubmitting } = useSubmitHumanInputForm() - const submit = useCallback((inputs: Record, actionID: string) => { + const submit = useCallback((inputs: Record, actionID: string, formInputs: FormInputItem[]) => { submitForm( - { token, data: { inputs, action: actionID } }, + { + token, + data: { + inputs: getProcessedHumanInputFormInputs(formInputs, inputs) || {}, + action: actionID, + }, + }, { onSuccess: () => { setSuccess(true) diff --git a/web/service/use-share.ts b/web/service/use-share.ts index 02149d72f5..0facd3a8c4 100644 --- a/web/service/use-share.ts +++ b/web/service/use-share.ts @@ -1,5 +1,4 @@ import type { FormData as HumanInputFormData } from '@/app/(humanInputLayout)/form/[token]/form' -import type { HumanInputFieldValue } from '@/app/components/base/chat/chat/answer/human-input-content/field-renderer' import type { AppConversationData, ConversationItem } from '@/models/share' import { useMutation, useQuery } from '@tanstack/react-query' import { @@ -198,7 +197,7 @@ export const useGetHumanInputForm = (token: string, options: ShareQueryOptions = type SubmitHumanInputFormParams = { token: string data: { - inputs: Record + inputs: Record action: string } }