|
import type { FC } from 'react' |
|
import React from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
import Field from '../_base/components/field' |
|
import RemoveEffectVarConfirm from '../_base/components/remove-effect-var-confirm' |
|
import useConfig from './use-config' |
|
import type { VariableAssignerNodeType } from './types' |
|
import VarGroupItem from './components/var-group-item' |
|
import cn from '@/utils/classnames' |
|
import { type NodePanelProps } from '@/app/components/workflow/types' |
|
import Split from '@/app/components/workflow/nodes/_base/components/split' |
|
import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' |
|
import Switch from '@/app/components/base/switch' |
|
import AddButton from '@/app/components/workflow/nodes/_base/components/add-button' |
|
|
|
const i18nPrefix = 'workflow.nodes.variableAssigner' |
|
const Panel: FC<NodePanelProps<VariableAssignerNodeType>> = ({ |
|
id, |
|
data, |
|
}) => { |
|
const { t } = useTranslation() |
|
|
|
const { |
|
readOnly, |
|
inputs, |
|
handleListOrTypeChange, |
|
isEnableGroup, |
|
handleGroupEnabledChange, |
|
handleAddGroup, |
|
handleListOrTypeChangeInGroup, |
|
handleGroupRemoved, |
|
handleVarGroupNameChange, |
|
isShowRemoveVarConfirm, |
|
hideRemoveVarConfirm, |
|
onRemoveVarConfirm, |
|
getAvailableVars, |
|
filterVar, |
|
} = useConfig(id, data) |
|
|
|
return ( |
|
<div className='mt-2'> |
|
<div className='px-4 pb-4 space-y-4'> |
|
{!isEnableGroup |
|
? ( |
|
<VarGroupItem |
|
readOnly={readOnly} |
|
nodeId={id} |
|
payload={{ |
|
output_type: inputs.output_type, |
|
variables: inputs.variables, |
|
}} |
|
onChange={handleListOrTypeChange} |
|
groupEnabled={false} |
|
availableVars={getAvailableVars(id, 'target', filterVar(inputs.output_type), true)} |
|
/> |
|
) |
|
: (<div> |
|
<div className='space-y-2'> |
|
{inputs.advanced_settings?.groups.map((item, index) => ( |
|
<div key={item.groupId}> |
|
<VarGroupItem |
|
readOnly={readOnly} |
|
nodeId={id} |
|
payload={item} |
|
onChange={handleListOrTypeChangeInGroup(item.groupId)} |
|
groupEnabled |
|
canRemove={!readOnly && inputs.advanced_settings?.groups.length > 1} |
|
onRemove={handleGroupRemoved(item.groupId)} |
|
onGroupNameChange={handleVarGroupNameChange(item.groupId)} |
|
availableVars={getAvailableVars(id, item.groupId, filterVar(item.output_type), true)} |
|
/> |
|
{index !== inputs.advanced_settings?.groups.length - 1 && <Split className='my-4' />} |
|
</div> |
|
|
|
))} |
|
</div> |
|
<AddButton |
|
className='mt-2' |
|
text={t(`${i18nPrefix}.addGroup`)} |
|
onClick={handleAddGroup} |
|
/> |
|
</div>)} |
|
</div> |
|
<Split /> |
|
<div className={cn('px-4 pt-4', isEnableGroup ? 'pb-4' : 'pb-2')}> |
|
<Field |
|
title={t(`${i18nPrefix}.aggregationGroup`)} |
|
tooltip={t(`${i18nPrefix}.aggregationGroupTip`)!} |
|
operations={ |
|
<Switch |
|
defaultValue={isEnableGroup} |
|
onChange={handleGroupEnabledChange} |
|
size='md' |
|
disabled={readOnly} |
|
/> |
|
} |
|
/> |
|
</div> |
|
{isEnableGroup && ( |
|
<> |
|
<Split /> |
|
<div className='px-4 pt-4 pb-2'> |
|
<OutputVars> |
|
<> |
|
{inputs.advanced_settings?.groups.map((item, index) => ( |
|
<VarItem |
|
key={index} |
|
name={`${item.group_name}.output`} |
|
type={item.output_type} |
|
description={t(`${i18nPrefix}.outputVars.varDescribe`, { |
|
groupName: item.group_name, |
|
})} |
|
/> |
|
))} |
|
</> |
|
</OutputVars> |
|
</div> |
|
</> |
|
)} |
|
<RemoveEffectVarConfirm |
|
isShow={isShowRemoveVarConfirm} |
|
onCancel={hideRemoveVarConfirm} |
|
onConfirm={onRemoveVarConfirm} |
|
/> |
|
</div> |
|
) |
|
} |
|
|
|
export default React.memo(Panel) |
|
|