index.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. onUpdate,
  28. }) => {
  29. const { locale } = useContext(I18n)
  30. const custom = currentProvider?.providers.find(p => p.provider_type === 'custom') as ProviderWithModels
  31. const systemFree = currentProvider?.providers.find(p => p.provider_type === 'system' && (p as ProviderWithQuota).quota_type === 'free') as ProviderWithQuota
  32. return (
  33. <div className='mb-2 bg-gray-50 rounded-xl'>
  34. <div className='flex justify-between items-center px-4 h-14'>
  35. <div className='flex items-center'>
  36. {modelItem.titleIcon[locale]}
  37. {
  38. modelItem.hit && (
  39. <div className='ml-2 text-xs text-gray-500'>{modelItem.hit[locale]}</div>
  40. )
  41. }
  42. </div>
  43. <Setting
  44. currentProvider={currentProvider}
  45. modelItem={modelItem}
  46. onOpenModal={onOpenModal}
  47. onOperate={onOperate}
  48. onUpdate={onUpdate}
  49. />
  50. </div>
  51. {
  52. !!custom?.models?.length && (
  53. <Card
  54. providerType={modelItem.key}
  55. models={custom?.models}
  56. onOpenModal={onOpenModal}
  57. onOperate={onOperate}
  58. />
  59. )
  60. }
  61. {
  62. systemFree?.is_valid && !IS_CE_EDITION && (
  63. <QuotaCard remainTokens={systemFree.quota_limit - systemFree.quota_used}/>
  64. )
  65. }
  66. </div>
  67. )
  68. }
  69. export default ModelItem