chatflow/workflow add field required (#18892)

This commit is contained in:
Junjie.M 2025-04-27 16:12:02 +08:00 committed by GitHub
parent 0e0ec4691a
commit e3daef19e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 26 additions and 3 deletions

View File

@ -17,6 +17,7 @@ type Props = {
children?: React.JSX.Element | string | null children?: React.JSX.Element | string | null
operations?: React.JSX.Element operations?: React.JSX.Element
inline?: boolean inline?: boolean
required?: boolean
} }
const Field: FC<Props> = ({ const Field: FC<Props> = ({
@ -28,6 +29,7 @@ const Field: FC<Props> = ({
operations, operations,
inline, inline,
supportFold, supportFold,
required,
}) => { }) => {
const [fold, { const [fold, {
toggle: toggleFold, toggle: toggleFold,
@ -38,7 +40,9 @@ const Field: FC<Props> = ({
onClick={() => supportFold && toggleFold()} onClick={() => supportFold && toggleFold()}
className={cn('flex items-center justify-between', supportFold && 'cursor-pointer')}> className={cn('flex items-center justify-between', supportFold && 'cursor-pointer')}>
<div className='flex h-6 items-center'> <div className='flex h-6 items-center'>
<div className={cn(isSubTitle ? 'system-xs-medium-uppercase text-text-tertiary' : 'system-sm-semibold-uppercase text-text-secondary')}>{title}</div> <div className={cn(isSubTitle ? 'system-xs-medium-uppercase text-text-tertiary' : 'system-sm-semibold-uppercase text-text-secondary')}>
{title} {required && <span className='text-text-destructive'>*</span>}
</div>
{tooltip && ( {tooltip && (
<Tooltip <Tooltip
popupContent={tooltip} popupContent={tooltip}

View File

@ -81,7 +81,11 @@ const AgentPanel: FC<NodePanelProps<AgentNodeType>> = (props) => {
const resetEditor = useStore(s => s.setControlPromptEditorRerenderKey) const resetEditor = useStore(s => s.setControlPromptEditorRerenderKey)
return <div className='my-2'> return <div className='my-2'>
<Field title={t('workflow.nodes.agent.strategy.label')} className='px-4 py-2' tooltip={t('workflow.nodes.agent.strategy.tooltip')} > <Field
required
title={t('workflow.nodes.agent.strategy.label')}
className='px-4 py-2'
tooltip={t('workflow.nodes.agent.strategy.tooltip')} >
<AgentStrategy <AgentStrategy
strategy={inputs.agent_strategy_name ? { strategy={inputs.agent_strategy_name ? {
agent_strategy_provider_name: inputs.agent_strategy_provider_name!, agent_strategy_provider_name: inputs.agent_strategy_provider_name!,

View File

@ -117,8 +117,8 @@ const Panel: FC<NodePanelProps<CodeNodeType>> = ({
operations={ operations={
<AddButton onClick={handleAddOutputVariable} /> <AddButton onClick={handleAddOutputVariable} />
} }
required
> >
<OutputVarList <OutputVarList
readonly={readOnly} readonly={readOnly}
outputs={inputs.outputs} outputs={inputs.outputs}

View File

@ -64,6 +64,7 @@ const Panel: FC<NodePanelProps<DocExtractorNodeType>> = ({
<div className='space-y-4 px-4 pb-4'> <div className='space-y-4 px-4 pb-4'>
<Field <Field
title={t(`${i18nPrefix}.inputVar`)} title={t(`${i18nPrefix}.inputVar`)}
required
> >
<> <>
<VarReferencePicker <VarReferencePicker

View File

@ -69,6 +69,7 @@ const Panel: FC<NodePanelProps<HttpNodeType>> = ({
<div className='space-y-4 px-4 pb-4'> <div className='space-y-4 px-4 pb-4'>
<Field <Field
title={t(`${i18nPrefix}.api`)} title={t(`${i18nPrefix}.api`)}
required
operations={ operations={
<div className='flex'> <div className='flex'>
<div <div
@ -126,6 +127,7 @@ const Panel: FC<NodePanelProps<HttpNodeType>> = ({
</Field> </Field>
<Field <Field
title={t(`${i18nPrefix}.body`)} title={t(`${i18nPrefix}.body`)}
required
> >
<EditBody <EditBody
nodeId={id} nodeId={id}

View File

@ -73,6 +73,7 @@ const Panel: FC<NodePanelProps<IterationNodeType>> = ({
<div className='space-y-4 px-4 pb-4'> <div className='space-y-4 px-4 pb-4'>
<Field <Field
title={t(`${i18nPrefix}.input`)} title={t(`${i18nPrefix}.input`)}
required
operations={( operations={(
<div className='system-2xs-medium-uppercase flex h-[18px] items-center rounded-[5px] border border-divider-deep px-1 capitalize text-text-tertiary'>Array</div> <div className='system-2xs-medium-uppercase flex h-[18px] items-center rounded-[5px] border border-divider-deep px-1 capitalize text-text-tertiary'>Array</div>
)} )}
@ -91,6 +92,7 @@ const Panel: FC<NodePanelProps<IterationNodeType>> = ({
<div className='mt-2 space-y-4 px-4 pb-4'> <div className='mt-2 space-y-4 px-4 pb-4'>
<Field <Field
title={t(`${i18nPrefix}.output`)} title={t(`${i18nPrefix}.output`)}
required
operations={( operations={(
<div className='system-2xs-medium-uppercase flex h-[18px] items-center rounded-[5px] border border-divider-deep px-1 capitalize text-text-tertiary'>Array</div> <div className='system-2xs-medium-uppercase flex h-[18px] items-center rounded-[5px] border border-divider-deep px-1 capitalize text-text-tertiary'>Array</div>
)} )}

View File

@ -81,6 +81,7 @@ const Panel: FC<NodePanelProps<KnowledgeRetrievalNodeType>> = ({
{/* {JSON.stringify(inputs, null, 2)} */} {/* {JSON.stringify(inputs, null, 2)} */}
<Field <Field
title={t(`${i18nPrefix}.queryVariable`)} title={t(`${i18nPrefix}.queryVariable`)}
required
> >
<VarReferencePicker <VarReferencePicker
nodeId={id} nodeId={id}
@ -94,6 +95,7 @@ const Panel: FC<NodePanelProps<KnowledgeRetrievalNodeType>> = ({
<Field <Field
title={t(`${i18nPrefix}.knowledge`)} title={t(`${i18nPrefix}.knowledge`)}
required
operations={ operations={
<div className='flex items-center space-x-1'> <div className='flex items-center space-x-1'>
<RetrievalConfig <RetrievalConfig

View File

@ -46,6 +46,7 @@ const Panel: FC<NodePanelProps<ListFilterNodeType>> = ({
<div className='space-y-4 px-4'> <div className='space-y-4 px-4'>
<Field <Field
title={t(`${i18nPrefix}.inputVar`)} title={t(`${i18nPrefix}.inputVar`)}
required
> >
<VarReferencePicker <VarReferencePicker
readonly={readOnly} readonly={readOnly}

View File

@ -147,6 +147,7 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
<div className='space-y-4 px-4 pb-4'> <div className='space-y-4 px-4 pb-4'>
<Field <Field
title={t(`${i18nPrefix}.model`)} title={t(`${i18nPrefix}.model`)}
required
> >
<ModelParameterModal <ModelParameterModal
popupClassName='!w-[387px]' popupClassName='!w-[387px]'

View File

@ -115,6 +115,7 @@ const Panel: FC<NodePanelProps<ParameterExtractorNodeType>> = ({
<div className='space-y-4 px-4'> <div className='space-y-4 px-4'>
<Field <Field
title={t(`${i18nCommonPrefix}.model`)} title={t(`${i18nCommonPrefix}.model`)}
required
> >
<ModelParameterModal <ModelParameterModal
popupClassName='!w-[387px]' popupClassName='!w-[387px]'
@ -133,6 +134,7 @@ const Panel: FC<NodePanelProps<ParameterExtractorNodeType>> = ({
</Field> </Field>
<Field <Field
title={t(`${i18nPrefix}.inputVar`)} title={t(`${i18nPrefix}.inputVar`)}
required
> >
<> <>
<VarReferencePicker <VarReferencePicker
@ -157,6 +159,7 @@ const Panel: FC<NodePanelProps<ParameterExtractorNodeType>> = ({
/> />
<Field <Field
title={t(`${i18nPrefix}.extractParameters`)} title={t(`${i18nPrefix}.extractParameters`)}
required
operations={ operations={
!readOnly !readOnly
? ( ? (

View File

@ -103,6 +103,7 @@ const Panel: FC<NodePanelProps<QuestionClassifierNodeType>> = ({
<div className='space-y-4 px-4'> <div className='space-y-4 px-4'>
<Field <Field
title={t(`${i18nPrefix}.model`)} title={t(`${i18nPrefix}.model`)}
required
> >
<ModelParameterModal <ModelParameterModal
popupClassName='!w-[387px]' popupClassName='!w-[387px]'
@ -121,6 +122,7 @@ const Panel: FC<NodePanelProps<QuestionClassifierNodeType>> = ({
</Field> </Field>
<Field <Field
title={t(`${i18nPrefix}.inputVars`)} title={t(`${i18nPrefix}.inputVars`)}
required
> >
<VarReferencePicker <VarReferencePicker
readonly={readOnly} readonly={readOnly}
@ -143,6 +145,7 @@ const Panel: FC<NodePanelProps<QuestionClassifierNodeType>> = ({
/> />
<Field <Field
title={t(`${i18nPrefix}.class`)} title={t(`${i18nPrefix}.class`)}
required
> >
<ClassList <ClassList
nodeId={id} nodeId={id}