import type { Provider, ProviderAzureToken } from '@/models/common' import { ProviderName } from '@/models/common' import { useTranslation } from 'react-i18next' import Link from 'next/link' import { ArrowTopRightOnSquareIcon } from '@heroicons/react/24/outline' import { useState, useEffect } from 'react' import ProviderInput from '../provider-input' import useValidateToken, { ValidatedStatus } from '../provider-input/useValidateToken' import { ValidatedErrorIcon, ValidatedSuccessIcon, ValidatingTip, ValidatedErrorOnAzureOpenaiTip } from '../provider-input/Validate' interface IAzureProviderProps { provider: Provider onValidatedStatus: (status?: ValidatedStatus) => void onTokenChange: (token: ProviderAzureToken) => void } const AzureProvider = ({ provider, onTokenChange, onValidatedStatus }: IAzureProviderProps) => { const { t } = useTranslation() const [token, setToken] = useState(provider.provider_name === ProviderName.AZURE_OPENAI ? {...provider.token}: {}) const [ validating, validatedStatus, setValidatedStatus, validate ] = useValidateToken(provider.provider_name) const handleFocus = (type: keyof ProviderAzureToken) => { if (token[type] === (provider?.token as ProviderAzureToken)[type]) { token[type] = '' setToken({...token}) onTokenChange({...token}) setValidatedStatus(undefined) } } const handleChange = (type: keyof ProviderAzureToken, v: string, validate: any) => { token[type] = v setToken({...token}) onTokenChange({...token}) validate({...token}, { beforeValidating: () => { if (!token.openai_api_base || !token.openai_api_key) { setValidatedStatus(undefined) return false } return true } }) } const getValidatedIcon = () => { if (validatedStatus === ValidatedStatus.Error || validatedStatus === ValidatedStatus.Exceed) { return } if (validatedStatus === ValidatedStatus.Success) { return } } const getValidatedTip = () => { if (validating) { return } if (validatedStatus === ValidatedStatus.Error) { return } } useEffect(() => { if (typeof onValidatedStatus === 'function') { onValidatedStatus(validatedStatus) } }, [validatedStatus]) return (
handleChange('openai_api_base', v, validate)} onFocus={() => handleFocus('openai_api_base')} validatedIcon={getValidatedIcon()} /> handleChange('openai_api_key', v, validate)} onFocus={() => handleFocus('openai_api_key')} validatedIcon={getValidatedIcon()} validatedTip={getValidatedTip()} /> {t('common.provider.azure.helpTip')}
) } export default AzureProvider