import { useTranslation } from 'react-i18next' import Link from 'next/link' import { ArrowTopRightOnSquareIcon } from '@heroicons/react/24/outline' import { useEffect, useState } from 'react' import ProviderInput from '../provider-input' import type { ValidatedStatusState } from '../provider-input/useValidateToken' import useValidateToken, { ValidatedStatus } from '../provider-input/useValidateToken' import { ValidatedErrorIcon, ValidatedErrorOnAzureOpenaiTip, ValidatedSuccessIcon, ValidatingTip, } from '../provider-input/Validate' import { ProviderName } from '@/models/common' import type { Provider, ProviderAzureToken } from '@/models/common' type IAzureProviderProps = { provider: Provider onValidatedStatus: (status?: ValidatedStatusState) => 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({}) } } 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({}) return false } return true }, }) } const getValidatedIcon = () => { if (validatedStatus.status === ValidatedStatus.Error || validatedStatus.status === ValidatedStatus.Exceed) return if (validatedStatus.status === ValidatedStatus.Success) return } const getValidatedTip = () => { if (validating) return if (validatedStatus.status === 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