| import type { FC } from 'react' |
| import React from 'react' |
| import { useTranslation } from 'react-i18next' |
|
|
| import VarReferencePicker from '../_base/components/variable/var-reference-picker' |
| import OptionCard from '../_base/components/option-card' |
| import useConfig from './use-config' |
| import { WriteMode } from './types' |
| import type { AssignerNodeType } from './types' |
| import Field from '@/app/components/workflow/nodes/_base/components/field' |
| import { type NodePanelProps } from '@/app/components/workflow/types' |
| import cn from '@/utils/classnames' |
|
|
| const i18nPrefix = 'workflow.nodes.assigner' |
|
|
| const Panel: FC<NodePanelProps<AssignerNodeType>> = ({ |
| id, |
| data, |
| }) => { |
| const { t } = useTranslation() |
|
|
| const { |
| readOnly, |
| inputs, |
| handleAssignedVarChanges, |
| isSupportAppend, |
| writeModeTypes, |
| handleWriteModeChange, |
| filterAssignedVar, |
| filterToAssignedVar, |
| handleToAssignedVarChange, |
| toAssignedVarType, |
| } = useConfig(id, data) |
|
|
| return ( |
| <div className='mt-2'> |
| <div className='px-4 pb-4 space-y-4'> |
| <Field |
| title={t(`${i18nPrefix}.assignedVariable`)} |
| > |
| <VarReferencePicker |
| readonly={readOnly} |
| nodeId={id} |
| isShowNodeName |
| value={inputs.assigned_variable_selector || []} |
| onChange={handleAssignedVarChanges} |
| filterVar={filterAssignedVar} |
| /> |
| </Field> |
| <Field |
| title={t(`${i18nPrefix}.writeMode`)} |
| > |
| <div className={cn('grid gap-2 grid-cols-3')}> |
| {writeModeTypes.map(type => ( |
| <OptionCard |
| key={type} |
| title={t(`${i18nPrefix}.${type}`)} |
| onSelect={handleWriteModeChange(type)} |
| selected={inputs.write_mode === type} |
| disabled={!isSupportAppend && type === WriteMode.Append} |
| tooltip={type === WriteMode.Append ? t(`${i18nPrefix}.writeModeTip`)! : undefined} |
| /> |
| ))} |
| </div> |
| </Field> |
| {inputs.write_mode !== WriteMode.Clear && ( |
| <Field |
| title={t(`${i18nPrefix}.setVariable`)} |
| > |
| <VarReferencePicker |
| readonly={readOnly} |
| nodeId={id} |
| isShowNodeName |
| value={inputs.input_variable_selector || []} |
| onChange={handleToAssignedVarChange} |
| filterVar={filterToAssignedVar} |
| valueTypePlaceHolder={toAssignedVarType} |
| /> |
| </Field> |
| )} |
| |
| </div> |
| </div> |
| ) |
| } |
|
|
| export default React.memo(Panel) |
|
|