index.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import type { Provider, ProviderAzureToken } from '@/models/common'
  2. import { useTranslation } from 'react-i18next'
  3. import Link from 'next/link'
  4. import { ArrowTopRightOnSquareIcon } from '@heroicons/react/24/outline'
  5. import ProviderInput, { ProviderValidateTokenInput} from '../provider-input'
  6. import { useState } from 'react'
  7. import { ValidatedStatus } from '../provider-input/useValidateToken'
  8. interface IAzureProviderProps {
  9. provider: Provider
  10. onValidatedStatus: (status?: ValidatedStatus) => void
  11. onTokenChange: (token: ProviderAzureToken) => void
  12. }
  13. const AzureProvider = ({
  14. provider,
  15. onTokenChange,
  16. onValidatedStatus
  17. }: IAzureProviderProps) => {
  18. const { t } = useTranslation()
  19. const [token, setToken] = useState(provider.token as ProviderAzureToken || {})
  20. const handleFocus = () => {
  21. if (token === provider.token) {
  22. token.azure_api_key = ''
  23. setToken({...token})
  24. onTokenChange({...token})
  25. }
  26. }
  27. const handleChange = (type: keyof ProviderAzureToken, v: string) => {
  28. token[type] = v
  29. setToken({...token})
  30. onTokenChange({...token})
  31. }
  32. return (
  33. <div className='px-4 py-3'>
  34. <ProviderInput
  35. className='mb-4'
  36. name={t('common.provider.azure.resourceName')}
  37. placeholder={t('common.provider.azure.resourceNamePlaceholder')}
  38. value={token.azure_api_base}
  39. onChange={(v) => handleChange('azure_api_base', v)}
  40. />
  41. <ProviderInput
  42. className='mb-4'
  43. name={t('common.provider.azure.deploymentId')}
  44. placeholder={t('common.provider.azure.deploymentIdPlaceholder')}
  45. value={token.azure_api_type}
  46. onChange={v => handleChange('azure_api_type', v)}
  47. />
  48. <ProviderInput
  49. className='mb-4'
  50. name={t('common.provider.azure.apiVersion')}
  51. placeholder={t('common.provider.azure.apiVersionPlaceholder')}
  52. value={token.azure_api_version}
  53. onChange={v => handleChange('azure_api_version', v)}
  54. />
  55. <ProviderValidateTokenInput
  56. className='mb-4'
  57. name={t('common.provider.azure.apiKey')}
  58. placeholder={t('common.provider.azure.apiKeyPlaceholder')}
  59. value={token.azure_api_key}
  60. onChange={v => handleChange('azure_api_key', v)}
  61. onFocus={handleFocus}
  62. onValidatedStatus={onValidatedStatus}
  63. providerName={provider.provider_name}
  64. />
  65. <Link className="flex items-center text-xs cursor-pointer text-primary-600" href="https://platform.openai.com/account/api-keys" target={'_blank'}>
  66. {t('common.provider.azure.helpTip')}
  67. <ArrowTopRightOnSquareIcon className='w-3 h-3 ml-1 text-primary-600' aria-hidden="true" />
  68. </Link>
  69. </div>
  70. )
  71. }
  72. export default AzureProvider