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