feat: plugin input type add select and custom var (#2571)

* feat: plugin input type add select and custom var

* fix

* fix ui

* fix

* fix
This commit is contained in:
heheer
2024-08-30 18:03:04 +08:00
committed by GitHub
parent 903f39fe17
commit 9d5fd24085
29 changed files with 591 additions and 367 deletions

View File

@@ -108,15 +108,9 @@ const RenderInput = () => {
<RenderPluginInput
value={value}
onChange={onChange}
label={input.label}
description={input.description}
isDisabled={isDisabledInput}
valueType={input.valueType}
placeholder={input.placeholder}
required={input.required}
min={input.min}
max={input.max}
isInvalid={errors && Object.keys(errors).includes(input.key)}
input={input}
/>
);
}}

View File

@@ -6,10 +6,14 @@ import {
NumberInput,
NumberInputField,
NumberInputStepper,
Select,
Switch,
Textarea
} from '@chakra-ui/react';
import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants';
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
import { FlowNodeInputItemType } from '@fastgpt/global/core/workflow/type/io';
import MySelect from '@fastgpt/web/components/common/MySelect';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { useTranslation } from 'next-i18next';
import dynamic from 'next/dynamic';
@@ -18,58 +22,53 @@ const JsonEditor = dynamic(() => import('@fastgpt/web/components/common/Textarea
const RenderPluginInput = ({
value,
defaultValue,
onChange,
label,
description,
isDisabled,
valueType,
placeholder,
required,
min,
max,
isInvalid
isInvalid,
input
}: {
value: any;
defaultValue?: any;
onChange: () => void;
label: string;
description?: string;
isDisabled?: boolean;
valueType: WorkflowIOValueTypeEnum | undefined;
placeholder?: string;
required?: boolean;
min?: number;
max?: number;
isInvalid: boolean;
input: FlowNodeInputItemType;
}) => {
const { t } = useTranslation();
const inputType = input.renderTypeList[0];
const render = (() => {
if (valueType === WorkflowIOValueTypeEnum.string) {
if (inputType === FlowNodeInputTypeEnum.customVariable) {
return null;
}
if (inputType === FlowNodeInputTypeEnum.select && input.list) {
return (
<MySelect list={input.list} value={value} onchange={onChange} isDisabled={isDisabled} />
);
}
if (input.valueType === WorkflowIOValueTypeEnum.string) {
return (
<Textarea
value={value}
defaultValue={defaultValue}
defaultValue={input.defaultValue}
onChange={onChange}
isDisabled={isDisabled}
placeholder={t(placeholder as any)}
placeholder={t(input.placeholder as any)}
bg={'myGray.50'}
isInvalid={isInvalid}
/>
);
}
if (valueType === WorkflowIOValueTypeEnum.number) {
if (input.valueType === WorkflowIOValueTypeEnum.number) {
return (
<NumberInput
step={1}
min={min}
max={max}
min={input.min}
max={input.max}
bg={'myGray.50'}
isDisabled={isDisabled}
isInvalid={isInvalid}
>
<NumberInputField value={value} onChange={onChange} defaultValue={defaultValue} />
<NumberInputField value={value} onChange={onChange} defaultValue={input.defaultValue} />
<NumberInputStepper>
<NumberIncrementStepper />
<NumberDecrementStepper />
@@ -77,14 +76,14 @@ const RenderPluginInput = ({
</NumberInput>
);
}
if (valueType === WorkflowIOValueTypeEnum.boolean) {
if (input.valueType === WorkflowIOValueTypeEnum.boolean) {
return (
<Switch
isChecked={value}
onChange={onChange}
isDisabled={isDisabled}
isInvalid={isInvalid}
defaultChecked={defaultValue}
defaultChecked={!!input.defaultValue}
/>
);
}
@@ -92,12 +91,12 @@ const RenderPluginInput = ({
return (
<JsonEditor
bg={'myGray.50'}
placeholder={t(placeholder || ('' as any))}
placeholder={t(input.placeholder as any)}
resize
value={value}
onChange={onChange}
isInvalid={isInvalid}
defaultValue={defaultValue}
defaultValue={input.defaultValue}
/>
);
})();
@@ -106,14 +105,14 @@ const RenderPluginInput = ({
<Box _notLast={{ mb: 4 }} px={1}>
<Flex alignItems={'center'} mb={1}>
<Box position={'relative'}>
{required && (
{input.required && (
<Box position={'absolute'} left={-2} top={'-1px'} color={'red.600'}>
*
</Box>
)}
{label}
{input.label}
</Box>
{description && <QuestionTip ml={2} label={description} />}
{input.description && <QuestionTip ml={2} label={input.description} />}
</Flex>
{render}
</Box>