import { memo, useCallback, useState, } from 'react' import { useTranslation } from 'react-i18next' import { RiAddLine, RiArrowDownSLine, } from '@remixicon/react' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import type { Credential } from '@/app/components/header/account-setting/model-provider-page/declarations' import CredentialItem from './authorized/credential-item' import Badge from '@/app/components/base/badge' import Indicator from '@/app/components/header/indicator' type CredentialSelectorProps = { selectedCredential?: Credential & { addNewCredential?: boolean } credentials: Credential[] onSelect: (credential: Credential & { addNewCredential?: boolean }) => void disabled?: boolean notAllowAddNewCredential?: boolean } const CredentialSelector = ({ selectedCredential, credentials, onSelect, disabled, notAllowAddNewCredential, }: CredentialSelectorProps) => { const { t } = useTranslation() const [open, setOpen] = useState(false) const handleSelect = useCallback((credential: Credential & { addNewCredential?: boolean }) => { setOpen(false) onSelect(credential) }, [onSelect]) const handleAddNewCredential = useCallback(() => { handleSelect({ credential_id: '__add_new_credential', addNewCredential: true, credential_name: t('common.modelProvider.auth.addNewModelCredential'), }) }, [handleSelect, t]) return ( !disabled && setOpen(v => !v)}>
{ selectedCredential && (
{ !selectedCredential.addNewCredential && }
{selectedCredential.credential_name}
{ selectedCredential.from_enterprise && ( Enterprise ) }
) } { !selectedCredential && (
{t('common.modelProvider.auth.selectModelCredential')}
) }
{ credentials.map(credential => ( )) }
{ !notAllowAddNewCredential && (
{t('common.modelProvider.auth.addNewModelCredential')}
) }
) } export default memo(CredentialSelector)