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