| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import type { FC } from 'react' | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  | import { | 
					
						
							|  |  |  |   memo, | 
					
						
							|  |  |  |   useMemo, | 
					
						
							|  |  |  |   useRef, | 
					
						
							|  |  |  | } from 'react' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import type { NodeProps } from 'reactflow' | 
					
						
							|  |  |  | import { useTranslation } from 'react-i18next' | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  | import NodeGroupItem from './components/node-group-item' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import type { VariableAssignerNodeType } from './types' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const i18nPrefix = 'workflow.nodes.variableAssigner' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const Node: FC<NodeProps<VariableAssignerNodeType>> = (props) => { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |   const ref = useRef<HTMLDivElement>(null) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |   const { id, data } = props | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |   const { advanced_settings } = data | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |   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]) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |     <div className='relative mb-1 space-y-0.5 px-1' ref={ref}> | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |       { | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |         groups.map((item) => { | 
					
						
							|  |  |  |           return ( | 
					
						
							|  |  |  |             <NodeGroupItem | 
					
						
							|  |  |  |               key={item.title} | 
					
						
							|  |  |  |               item={item} | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |             /> | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |           ) | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     </div > | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  | export default memo(Node) |