From cf73faf1740656f8950cd3c7c65f73e4d8cbe1ae Mon Sep 17 00:00:00 2001 From: twwu Date: Tue, 20 May 2025 15:09:30 +0800 Subject: [PATCH] feat: add FileUploaderField and TextAreaField components; enhance BaseField to support file inputs --- .../file-uploader-in-attachment/index.tsx | 2 +- .../form/components/field/file-uploader.tsx | 40 +++++++++++ .../base/form/components/field/text-area.tsx | 41 +++++++++++ .../base/form/form-scenarios/base/field.tsx | 70 +++++++++++++++++++ .../base/form/form-scenarios/base/types.ts | 14 +++- web/app/components/base/form/index.tsx | 4 ++ .../components/input-field/index.tsx | 2 - .../test-run/data-source-options/index.tsx | 14 ++-- .../components/panel/test-run/hooks.ts | 14 ++-- .../components/panel/test-run/index.tsx | 2 +- 10 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 web/app/components/base/form/components/field/file-uploader.tsx create mode 100644 web/app/components/base/form/components/field/text-area.tsx diff --git a/web/app/components/base/file-uploader/file-uploader-in-attachment/index.tsx b/web/app/components/base/file-uploader/file-uploader-in-attachment/index.tsx index ab4e2aaa42..a9cecfbd0c 100644 --- a/web/app/components/base/file-uploader/file-uploader-in-attachment/index.tsx +++ b/web/app/components/base/file-uploader/file-uploader-in-attachment/index.tsx @@ -110,7 +110,7 @@ const FileUploaderInAttachment = ({ ) } -type FileUploaderInAttachmentWrapperProps = { +export type FileUploaderInAttachmentWrapperProps = { value?: FileEntity[] onChange: (files: FileEntity[]) => void fileConfig: FileUpload diff --git a/web/app/components/base/form/components/field/file-uploader.tsx b/web/app/components/base/form/components/field/file-uploader.tsx new file mode 100644 index 0000000000..2e4e26b5d6 --- /dev/null +++ b/web/app/components/base/form/components/field/file-uploader.tsx @@ -0,0 +1,40 @@ +import React from 'react' +import { useFieldContext } from '../..' +import type { LabelProps } from '../label' +import Label from '../label' +import cn from '@/utils/classnames' +import type { FileUploaderInAttachmentWrapperProps } from '../../../file-uploader/file-uploader-in-attachment' +import FileUploaderInAttachmentWrapper from '../../../file-uploader/file-uploader-in-attachment' +import type { FileEntity } from '../../../file-uploader/types' + +type FileUploaderFieldProps = { + label: string + labelOptions?: Omit + className?: string +} & Omit + +const FileUploaderField = ({ + label, + labelOptions, + className, + ...inputProps +}: FileUploaderFieldProps) => { + const field = useFieldContext() + + return ( +
+
+ ) +} + +export default FileUploaderField diff --git a/web/app/components/base/form/components/field/text-area.tsx b/web/app/components/base/form/components/field/text-area.tsx new file mode 100644 index 0000000000..2392d0609e --- /dev/null +++ b/web/app/components/base/form/components/field/text-area.tsx @@ -0,0 +1,41 @@ +import React from 'react' +import { useFieldContext } from '../..' +import type { LabelProps } from '../label' +import Label from '../label' +import cn from '@/utils/classnames' +import type { TextareaProps } from '../../../textarea' +import Textarea from '../../../textarea' + +type TextAreaFieldProps = { + label: string + labelOptions?: Omit + className?: string +} & Omit + +const TextAreaField = ({ + label, + labelOptions, + className, + ...inputProps +}: TextAreaFieldProps) => { + const field = useFieldContext() + + return ( +
+