trigger.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import type { FC } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import type {
  4. Model,
  5. ModelItem,
  6. ModelProvider,
  7. } from '../declarations'
  8. import { MODEL_STATUS_TEXT } from '../declarations'
  9. import { useLanguage } from '../hooks'
  10. import ModelIcon from '../model-icon'
  11. import ModelName from '../model-name'
  12. import { useProviderContext } from '@/context/provider-context'
  13. import { SlidersH } from '@/app/components/base/icons/src/vender/line/mediaAndDevices'
  14. import { AlertTriangle } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback'
  15. import TooltipPlus from '@/app/components/base/tooltip-plus'
  16. export type TriggerProps = {
  17. open?: boolean
  18. disabled?: boolean
  19. currentProvider?: ModelProvider | Model
  20. currentModel?: ModelItem
  21. providerName?: string
  22. modelId?: string
  23. hasDeprecated?: boolean
  24. modelDisabled?: boolean
  25. }
  26. const Trigger: FC<TriggerProps> = ({
  27. disabled,
  28. currentProvider,
  29. currentModel,
  30. providerName,
  31. modelId,
  32. hasDeprecated,
  33. modelDisabled,
  34. }) => {
  35. const { t } = useTranslation()
  36. const language = useLanguage()
  37. const { modelProviders } = useProviderContext()
  38. return (
  39. <div
  40. className={`
  41. flex items-center px-2 h-8 rounded-lg border cursor-pointer hover:border-[1.5px]
  42. ${disabled ? 'border-[#F79009] bg-[#FFFAEB]' : 'border-[#444CE7] bg-primary-50'}
  43. `}
  44. >
  45. {
  46. currentProvider && (
  47. <ModelIcon
  48. className='mr-1.5 !w-5 !h-5'
  49. provider={currentProvider}
  50. modelName={currentModel?.model}
  51. />
  52. )
  53. }
  54. {
  55. !currentProvider && (
  56. <ModelIcon
  57. className='mr-1.5 !w-5 !h-5'
  58. provider={modelProviders.find(item => item.provider === providerName)}
  59. modelName={modelId}
  60. />
  61. )
  62. }
  63. {
  64. currentModel && (
  65. <ModelName
  66. className='mr-1.5 text-gray-900'
  67. modelItem={currentModel}
  68. showMode
  69. modeClassName='!text-[#444CE7] !border-[#A4BCFD]'
  70. showFeatures
  71. featuresClassName='!text-[#444CE7] !border-[#A4BCFD]'
  72. />
  73. )
  74. }
  75. {
  76. !currentModel && (
  77. <div className='mr-1 text-[13px] font-medium text-gray-900 truncate'>
  78. {modelId}
  79. </div>
  80. )
  81. }
  82. {
  83. disabled
  84. ? (
  85. <TooltipPlus
  86. popupContent={
  87. hasDeprecated
  88. ? t('common.modelProvider.deprecated')
  89. : (modelDisabled && currentModel)
  90. ? MODEL_STATUS_TEXT[currentModel.status as string][language]
  91. : ''
  92. }
  93. >
  94. <AlertTriangle className='w-4 h-4 text-[#F79009]' />
  95. </TooltipPlus>
  96. )
  97. : (
  98. <SlidersH className='w-4 h-4 text-indigo-600' />
  99. )
  100. }
  101. </div>
  102. )
  103. }
  104. export default Trigger