| import type { FC } from 'react' |
| import { |
| memo, |
| useMemo, |
| useRef, |
| } from 'react' |
| import type { NodeProps } from 'reactflow' |
| import { useTranslation } from 'react-i18next' |
| import NodeGroupItem from './components/node-group-item' |
| import type { VariableAssignerNodeType } from './types' |
|
|
| const i18nPrefix = 'workflow.nodes.variableAssigner' |
|
|
| const Node: FC<NodeProps<VariableAssignerNodeType>> = (props) => { |
| const { t } = useTranslation() |
| const ref = useRef<HTMLDivElement>(null) |
| const { id, data } = props |
| const { advanced_settings } = data |
|
|
| const groups = useMemo(() => { |
| if (!advanced_settings?.group_enabled) { |
| return [{ |
| groupEnabled: false, |
| targetHandleId: 'target', |
| title: t(`${i18nPrefix}.title`), |
| type: data.output_type, |
| variables: data.variables, |
| variableAssignerNodeId: id, |
| variableAssignerNodeData: data, |
| }] |
| } |
| return advanced_settings.groups.map((group) => { |
| return { |
| groupEnabled: true, |
| targetHandleId: group.groupId, |
| title: group.group_name, |
| type: group.output_type, |
| variables: group.variables, |
| variableAssignerNodeId: id, |
| variableAssignerNodeData: data, |
| } |
| }) |
| }, [t, advanced_settings, data, id]) |
|
|
| return ( |
| <div className='relative mb-1 px-1 space-y-0.5' ref={ref}> |
| { |
| groups.map((item) => { |
| return ( |
| <NodeGroupItem |
| key={item.title} |
| item={item} |
| /> |
| ) |
| }) |
| } |
| </div > |
| ) |
| } |
| |
| export default memo(Node) |
| |