import { memo, useCallback, useMemo, } from 'react' import { useTranslation } from 'react-i18next' import { RiAddCircleFill, } from '@remixicon/react' import { Button, } from '@/app/components/base/button' import type { CustomConfigurationModelFixedFields, ModelProvider, } from '@/app/components/header/account-setting/model-provider-page/declarations' import { ConfigurationMethodEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import Authorized from './authorized' import { useAuth, useCustomModels, } from './hooks' import cn from '@/utils/classnames' import Tooltip from '@/app/components/base/tooltip' type AddCustomModelProps = { provider: ModelProvider, configurationMethod: ConfigurationMethodEnum, currentCustomConfigurationModelFixedFields?: CustomConfigurationModelFixedFields, } const AddCustomModel = ({ provider, configurationMethod, currentCustomConfigurationModelFixedFields, }: AddCustomModelProps) => { const { t } = useTranslation() const customModels = useCustomModels(provider) const noModels = !customModels.length const { handleOpenModal, } = useAuth(provider, configurationMethod, currentCustomConfigurationModelFixedFields, true) const notAllowCustomCredential = provider.allow_custom_token === false const handleClick = useCallback(() => { if (notAllowCustomCredential) return handleOpenModal() }, [handleOpenModal, notAllowCustomCredential]) const ButtonComponent = useMemo(() => { const Item = ( ) if (notAllowCustomCredential) { return ( {Item} ) } return Item }, [handleClick, notAllowCustomCredential, t]) const renderTrigger = useCallback((open?: boolean) => { const Item = ( ) return Item }, [t]) if (noModels) return ButtonComponent return ( ({ model, credentials: model.available_model_credentials ?? [], }))} renderTrigger={renderTrigger} isModelCredential enableAddModelCredential bottomAddModelCredentialText={t('common.modelProvider.auth.addNewModel')} /> ) } export default memo(AddCustomModel)