| 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' |
| import cn from '@/utils/classnames' |
|
|
| 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) => { |
| const { |
| inputs, |
| setInputs, |
| } = workflowStore.getState() |
| setInputs({ |
| ...inputs, |
| [variable]: v, |
| }) |
| } |
|
|
| if (!variables.length) |
| return null |
|
|
| return ( |
| <div className={cn('sticky top-0 bg-components-panel-on-panel-item-bg rounded-xl border-[0.5px] border-components-panel-border-subtle shadow-xs z-[1]')}> |
| <div className='px-4 pt-3 pb-4'> |
| {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> |
| ))} |
| </div> |
| </div> |
| ) |
| } |
|
|
| export default memo(UserInput) |
|
|