| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import { | 
					
						
							|  |  |  |   memo, | 
					
						
							|  |  |  | } from 'react' | 
					
						
							|  |  |  | import { useNodes } from 'reactflow' | 
					
						
							|  |  |  | import FormItem from '../../nodes/_base/components/before-run-form/form-item' | 
					
						
							|  |  |  | import { BlockEnum } from '../../types' | 
					
						
							|  |  |  | import { | 
					
						
							|  |  |  |   useStore, | 
					
						
							|  |  |  |   useWorkflowStore, | 
					
						
							|  |  |  | } from '../../store' | 
					
						
							|  |  |  | import type { StartNodeType } from '../../nodes/start/types' | 
					
						
							| 
									
										
										
										
											2024-08-13 14:44:10 +08:00
										 |  |  | import cn from '@/utils/classnames' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | const UserInput = () => { | 
					
						
							|  |  |  |   const workflowStore = useWorkflowStore() | 
					
						
							|  |  |  |   const inputs = useStore(s => s.inputs) | 
					
						
							|  |  |  |   const nodes = useNodes<StartNodeType>() | 
					
						
							|  |  |  |   const startNode = nodes.find(node => node.data.type === BlockEnum.Start) | 
					
						
							|  |  |  |   const variables = startNode?.data.variables || [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const handleValueChange = (variable: string, v: string) => { | 
					
						
							| 
									
										
										
										
											2024-10-21 10:32:37 +08:00
										 |  |  |     const { | 
					
						
							|  |  |  |       inputs, | 
					
						
							|  |  |  |       setInputs, | 
					
						
							|  |  |  |     } = workflowStore.getState() | 
					
						
							|  |  |  |     setInputs({ | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |       ...inputs, | 
					
						
							|  |  |  |       [variable]: v, | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!variables.length) | 
					
						
							|  |  |  |     return null | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |     <div className={cn('sticky top-0 z-[1] rounded-xl border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg shadow-xs')}> | 
					
						
							|  |  |  |       <div className='px-4 pb-4 pt-3'> | 
					
						
							| 
									
										
										
										
											2024-08-13 14:44:10 +08:00
										 |  |  |         {variables.map((variable, index) => ( | 
					
						
							|  |  |  |           <div | 
					
						
							|  |  |  |             key={variable.variable} | 
					
						
							|  |  |  |             className='mb-4 last-of-type:mb-0' | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |             <FormItem | 
					
						
							|  |  |  |               autoFocus={index === 0} | 
					
						
							|  |  |  |               payload={variable} | 
					
						
							|  |  |  |               value={inputs[variable.variable]} | 
					
						
							|  |  |  |               onChange={v => handleValueChange(variable.variable, v)} | 
					
						
							|  |  |  |             /> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         ))} | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default memo(UserInput) |