123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import {
- memo,
- useState,
- } from 'react'
- import { useTranslation } from 'react-i18next'
- 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 { ChevronDown } from '@/app/components/base/icons/src/vender/line/arrows'
- const UserInput = () => {
- const { t } = useTranslation()
- const workflowStore = useWorkflowStore()
- const [expanded, setExpanded] = useState(true)
- 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) => {
- workflowStore.getState().setInputs({
- ...inputs,
- [variable]: v,
- })
- }
- if (!variables.length)
- return null
- return (
- <div
- className={`
- relative rounded-xl border z-[1]
- ${!expanded ? 'bg-indigo-25 border-indigo-100 shadow-none' : 'bg-white shadow-xs border-transparent'}
- `}
- >
- <div
- className={`
- flex items-center px-2 pt-4 h-[18px] text-[13px] font-semibold cursor-pointer
- ${!expanded ? 'text-indigo-800' : 'text-gray-800'}
- `}
- onClick={() => setExpanded(!expanded)}
- >
- <ChevronDown
- className={`mr-1 w-3 h-3 ${!expanded ? '-rotate-90 text-indigo-600' : 'text-gray-300'}`}
- />
- {t('workflow.panel.userInputField').toLocaleUpperCase()}
- </div>
- <div className='px-2 pt-1 pb-3'>
- {
- expanded && (
- <div className='py-2 text-[13px] text-gray-900'>
- {
- variables.map((variable, index) => (
- <div
- key={variable.variable}
- className='mb-2 last-of-type:mb-0'
- >
- <FormItem
- autoFocus={index === 0}
- payload={variable}
- value={inputs[variable.variable]}
- onChange={v => handleValueChange(variable.variable, v)}
- />
- </div>
- ))
- }
- </div>
- )
- }
- </div>
- </div>
- )
- }
- export default memo(UserInput)
|