index.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import type { FC } from 'react'
  2. import { useContext } from 'use-context-selector'
  3. import type {
  4. FormValue,
  5. Provider,
  6. ProviderConfigItem,
  7. ProviderWithModels,
  8. ProviderWithQuota,
  9. } from '../declarations'
  10. import Setting from './Setting'
  11. import Card from './Card'
  12. import QuotaCard from './QuotaCard'
  13. import I18n from '@/context/i18n'
  14. import { IS_CE_EDITION } from '@/config'
  15. type ModelItemProps = {
  16. currentProvider?: Provider
  17. modelItem: ProviderConfigItem
  18. onOpenModal: (v?: FormValue) => void
  19. onOperate: (v: Record<string, any>) => void
  20. onUpdate: () => void
  21. }
  22. const ModelItem: FC<ModelItemProps> = ({
  23. currentProvider,
  24. modelItem,
  25. onOpenModal,
  26. onOperate,
  27. }) => {
  28. const { locale } = useContext(I18n)
  29. const custom = currentProvider?.providers.find(p => p.provider_type === 'custom') as ProviderWithModels
  30. const systemFree = currentProvider?.providers.find(p => p.provider_type === 'system' && (p as ProviderWithQuota).quota_type === 'free') as ProviderWithQuota
  31. return (
  32. <div className='mb-2 bg-gray-50 rounded-xl'>
  33. <div className='flex justify-between items-center px-4 h-14'>
  34. <div className='flex items-center'>
  35. {modelItem.titleIcon[locale]}
  36. {
  37. modelItem.hit && (
  38. <div className='ml-2 text-xs text-gray-500'>{modelItem.hit[locale]}</div>
  39. )
  40. }
  41. </div>
  42. <Setting
  43. currentProvider={currentProvider}
  44. modelItem={modelItem}
  45. onOpenModal={onOpenModal}
  46. onOperate={onOperate}
  47. />
  48. </div>
  49. {
  50. !!custom?.models?.length && (
  51. <Card
  52. providerType={modelItem.key}
  53. models={custom?.models}
  54. onOpenModal={onOpenModal}
  55. onOperate={onOperate}
  56. />
  57. )
  58. }
  59. {
  60. systemFree?.is_valid && !IS_CE_EDITION && (
  61. <QuotaCard remainTokens={systemFree.quota_limit - systemFree.quota_used}/>
  62. )
  63. }
  64. </div>
  65. )
  66. }
  67. export default ModelItem