|
|
|
|
@ -2,28 +2,31 @@
|
|
|
|
|
import type { FC } from 'react'
|
|
|
|
|
import React, { useCallback } from 'react'
|
|
|
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
|
import {
|
|
|
|
|
RiDeleteBinLine,
|
|
|
|
|
} from '@remixicon/react'
|
|
|
|
|
import type { Topic } from '../types'
|
|
|
|
|
import TextEditor from '../../_base/components/editor/text-editor'
|
|
|
|
|
import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor'
|
|
|
|
|
import useAvailableVarList from '@/app/components/workflow/nodes/_base/hooks/use-available-var-list'
|
|
|
|
|
import type { ValueSelector, Var } from '@/app/components/workflow/types'
|
|
|
|
|
|
|
|
|
|
const i18nPrefix = 'workflow.nodes.questionClassifiers'
|
|
|
|
|
|
|
|
|
|
type Props = {
|
|
|
|
|
nodeId: string
|
|
|
|
|
payload: Topic
|
|
|
|
|
onChange: (payload: Topic) => void
|
|
|
|
|
onRemove: () => void
|
|
|
|
|
index: number
|
|
|
|
|
readonly?: boolean
|
|
|
|
|
filterVar: (payload: Var, valueSelector: ValueSelector) => boolean
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ClassItem: FC<Props> = ({
|
|
|
|
|
nodeId,
|
|
|
|
|
payload,
|
|
|
|
|
onChange,
|
|
|
|
|
onRemove,
|
|
|
|
|
index,
|
|
|
|
|
readonly,
|
|
|
|
|
filterVar,
|
|
|
|
|
}) => {
|
|
|
|
|
const { t } = useTranslation()
|
|
|
|
|
|
|
|
|
|
@ -31,35 +34,26 @@ const ClassItem: FC<Props> = ({
|
|
|
|
|
onChange({ ...payload, name: value })
|
|
|
|
|
}, [onChange, payload])
|
|
|
|
|
|
|
|
|
|
const { availableVars, availableNodesWithParent } = useAvailableVarList(nodeId, {
|
|
|
|
|
onlyLeafNodeVar: false,
|
|
|
|
|
hideChatVar: false,
|
|
|
|
|
hideEnv: false,
|
|
|
|
|
filterVar,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<TextEditor
|
|
|
|
|
isInNode
|
|
|
|
|
title={<div>
|
|
|
|
|
<div className='w-[200px]'>
|
|
|
|
|
<div
|
|
|
|
|
className='text-xs font-semibold leading-4 text-gray-700'
|
|
|
|
|
>
|
|
|
|
|
{`${t(`${i18nPrefix}.class`)} ${index}`}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>}
|
|
|
|
|
<Editor
|
|
|
|
|
title={`${t(`${i18nPrefix}.class`)} ${index}`}
|
|
|
|
|
placeholder={t(`${i18nPrefix}.topicPlaceholder`)!}
|
|
|
|
|
value={payload.name}
|
|
|
|
|
onChange={handleNameChange}
|
|
|
|
|
placeholder={t(`${i18nPrefix}.topicPlaceholder`)!}
|
|
|
|
|
headerRight={(
|
|
|
|
|
<div className='flex h-full items-center'>
|
|
|
|
|
<div className='text-xs font-medium text-gray-500'>{payload.name.length}</div>
|
|
|
|
|
<div className='mx-3 h-3 w-px bg-gray-200'></div>
|
|
|
|
|
{!readonly && (
|
|
|
|
|
<RiDeleteBinLine
|
|
|
|
|
className='mr-1 h-3.5 w-3.5 cursor-pointer text-gray-500'
|
|
|
|
|
onClick={onRemove}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
readonly={readonly}
|
|
|
|
|
minHeight={64}
|
|
|
|
|
showRemove
|
|
|
|
|
onRemove={onRemove}
|
|
|
|
|
nodesOutputVars={availableVars}
|
|
|
|
|
availableNodes={availableNodesWithParent}
|
|
|
|
|
readOnly={readonly} // ?
|
|
|
|
|
justVar // ?
|
|
|
|
|
isSupportFileVar // ?
|
|
|
|
|
/>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|