presets-parameter.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import type { FC } from 'react'
  2. import { useCallback } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import { RiArrowDownSLine } from '@remixicon/react'
  5. import Button from '@/app/components/base/button'
  6. import Dropdown from '@/app/components/base/dropdown'
  7. import { Brush01 } from '@/app/components/base/icons/src/vender/solid/editor'
  8. import { Scales02 } from '@/app/components/base/icons/src/vender/solid/FinanceAndECommerce'
  9. import { Target04 } from '@/app/components/base/icons/src/vender/solid/general'
  10. import { TONE_LIST } from '@/config'
  11. import cn from '@/utils/classnames'
  12. type PresetsParameterProps = {
  13. onSelect: (toneId: number) => void
  14. }
  15. const PresetsParameter: FC<PresetsParameterProps> = ({
  16. onSelect,
  17. }) => {
  18. const { t } = useTranslation()
  19. const renderTrigger = useCallback((open: boolean) => {
  20. return (
  21. <Button
  22. size={'small'}
  23. variant={'secondary'}
  24. className={cn(open && 'bg-state-base-hover')}
  25. >
  26. {t('common.modelProvider.loadPresets')}
  27. <RiArrowDownSLine className='ml-0.5 w-3.5 h-3.5' />
  28. </Button>
  29. )
  30. }, [t])
  31. const getToneIcon = (toneId: number) => {
  32. const className = 'mr-2 w-[14px] h-[14px]'
  33. const res = ({
  34. 1: <Brush01 className={`${className} text-[#6938EF]`} />,
  35. 2: <Scales02 className={`${className} text-indigo-600`} />,
  36. 3: <Target04 className={`${className} text-[#107569]`} />,
  37. })[toneId]
  38. return res
  39. }
  40. const options = TONE_LIST.slice(0, 3).map((tone) => {
  41. return {
  42. value: tone.id,
  43. text: (
  44. <div className='flex items-center h-full'>
  45. {getToneIcon(tone.id)}
  46. {t(`common.model.tone.${tone.name}`) as string}
  47. </div>
  48. ),
  49. }
  50. })
  51. return (
  52. <Dropdown
  53. renderTrigger={renderTrigger}
  54. items={options}
  55. onSelect={item => onSelect(item.value as number)}
  56. popupClassName='z-[1003]'
  57. />
  58. )
  59. }
  60. export default PresetsParameter