dify
/
web
/app
/components
/header
/account-setting
/model-provider-page
/model-parameter-modal
/presets-parameter.tsx
| import type { FC } from 'react' | |
| import { useCallback } from 'react' | |
| import { useTranslation } from 'react-i18next' | |
| import { RiArrowDownSLine } from '@remixicon/react' | |
| import Dropdown from '@/app/components/base/dropdown' | |
| import { SlidersH } from '@/app/components/base/icons/src/vender/line/mediaAndDevices' | |
| import { Brush01 } from '@/app/components/base/icons/src/vender/solid/editor' | |
| import { Scales02 } from '@/app/components/base/icons/src/vender/solid/FinanceAndECommerce' | |
| import { Target04 } from '@/app/components/base/icons/src/vender/solid/general' | |
| import { TONE_LIST } from '@/config' | |
| type PresetsParameterProps = { | |
| onSelect: (toneId: number) => void | |
| } | |
| const PresetsParameter: FC<PresetsParameterProps> = ({ | |
| onSelect, | |
| }) => { | |
| const { t } = useTranslation() | |
| const renderTrigger = useCallback((open: boolean) => { | |
| return ( | |
| <div | |
| className={` | |
| flex items-center px-[7px] h-7 rounded-md border-[0.5px] border-gray-200 shadow-xs | |
| text-xs font-medium text-gray-700 cursor-pointer | |
| ${open && 'bg-gray-100'} | |
| `} | |
| > | |
| <SlidersH className='mr-[5px] w-3.5 h-3.5 text-gray-500' /> | |
| {t('common.modelProvider.loadPresets')} | |
| <RiArrowDownSLine className='ml-0.5 w-3.5 h-3.5 text-gray-500' /> | |
| </div> | |
| ) | |
| }, []) | |
| const getToneIcon = (toneId: number) => { | |
| const className = 'mr-2 w-[14px] h-[14px]' | |
| const res = ({ | |
| 1: <Brush01 className={`${className} text-[#6938EF]`} />, | |
| 2: <Scales02 className={`${className} text-indigo-600`} />, | |
| 3: <Target04 className={`${className} text-[#107569]`} />, | |
| })[toneId] | |
| return res | |
| } | |
| const options = TONE_LIST.slice(0, 3).map((tone) => { | |
| return { | |
| value: tone.id, | |
| text: ( | |
| <div className='flex items-center h-full'> | |
| {getToneIcon(tone.id)} | |
| {t(`common.model.tone.${tone.name}`) as string} | |
| </div> | |
| ), | |
| } | |
| }) | |
| return ( | |
| <Dropdown | |
| renderTrigger={renderTrigger} | |
| items={options} | |
| onSelect={item => onSelect(item.value as number)} | |
| popupClassName='z-[1003]' | |
| /> | |
| ) | |
| } | |
| export default PresetsParameter | |