| import type { FC } from 'react' |
| import React from 'react' |
| import { useTranslation } from 'react-i18next' |
| import RemoveEffectVarConfirm from '../_base/components/remove-effect-var-confirm' |
| import VarList from './components/var-list' |
| import VarItem from './components/var-item' |
| import useConfig from './use-config' |
| import type { StartNodeType } from './types' |
| import Split from '@/app/components/workflow/nodes/_base/components/split' |
| import Field from '@/app/components/workflow/nodes/_base/components/field' |
| import AddButton from '@/app/components/base/button/add-button' |
| import ConfigVarModal from '@/app/components/app/configuration/config-var/config-modal' |
| import type { InputVar, NodePanelProps } from '@/app/components/workflow/types' |
|
|
| const i18nPrefix = 'workflow.nodes.start' |
|
|
| const Panel: FC<NodePanelProps<StartNodeType>> = ({ |
| id, |
| data, |
| }) => { |
| const { t } = useTranslation() |
| const { |
| readOnly, |
| isChatMode, |
| inputs, |
| isShowAddVarModal, |
| showAddVarModal, |
| handleAddVariable, |
| hideAddVarModal, |
| handleVarListChange, |
| isShowRemoveVarConfirm, |
| hideRemoveVarConfirm, |
| onRemoveVarConfirm, |
| } = useConfig(id, data) |
|
|
| const handleAddVarConfirm = (payload: InputVar) => { |
| handleAddVariable(payload) |
| hideAddVarModal() |
| } |
|
|
| return ( |
| <div className='mt-2'> |
| <div className='px-4 pb-2 space-y-4'> |
| <Field |
| title={t(`${i18nPrefix}.inputField`)} |
| operations={ |
| !readOnly ? <AddButton onClick={showAddVarModal} /> : undefined |
| } |
| > |
| <> |
| <VarList |
| readonly={readOnly} |
| list={inputs.variables || []} |
| onChange={handleVarListChange} |
| /> |
| |
| <div className='mt-1 space-y-1'> |
| <Split className='my-2' /> |
| { |
| isChatMode && ( |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.query', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| String |
| </div> |
| } |
| />) |
| } |
| |
| <VarItem |
| readonly |
| showLegacyBadge={!isChatMode} |
| payload={{ |
| variable: 'sys.files', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| Array[File] |
| </div> |
| } |
| /> |
| { |
| isChatMode && ( |
| <> |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.dialogue_count', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| Number |
| </div> |
| } |
| /> |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.conversation_id', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| String |
| </div> |
| } |
| /> |
| </> |
| ) |
| } |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.user_id', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| String |
| </div> |
| } |
| /> |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.app_id', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| String |
| </div> |
| } |
| /> |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.workflow_id', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| String |
| </div> |
| } |
| /> |
| <VarItem |
| readonly |
| payload={{ |
| variable: 'sys.workflow_run_id', |
| } as any} |
| rightContent={ |
| <div className='text-xs font-normal text-gray-500'> |
| String |
| </div> |
| } |
| /> |
| </div> |
| |
| </> |
| </Field> |
| </div> |
|
|
| {isShowAddVarModal && ( |
| <ConfigVarModal |
| isCreate |
| supportFile |
| isShow={isShowAddVarModal} |
| onClose={hideAddVarModal} |
| onConfirm={handleAddVarConfirm} |
| varKeys={inputs.variables.map(v => v.variable)} |
| /> |
| )} |
|
|
| <RemoveEffectVarConfirm |
| isShow={isShowRemoveVarConfirm} |
| onCancel={hideRemoveVarConfirm} |
| onConfirm={onRemoveVarConfirm} |
| /> |
| </div> |
| ) |
| } |
|
|
| export default React.memo(Panel) |
|
|