| 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) |
|
|