import { memo, useCallback, useRef, } from 'react' import { useTranslation } from 'react-i18next' import { RiExternalLinkLine } from '@remixicon/react' import { Lock01 } from '@/app/components/base/icons/src/vender/solid/security' import Modal from '@/app/components/base/modal/modal' import { useAddPluginToolCredential, useGetPluginToolCredentialSchema, useInvalidPluginToolCredentialInfo, useUpdatePluginToolCredential, } from '@/service/use-plugins-auth' import { CredentialTypeEnum } from '../types' import AuthForm from '@/app/components/base/form/form-scenarios/auth' import type { FromRefObject } from '@/app/components/base/form/types' import { useToastContext } from '@/app/components/base/toast' export type ApiKeyModalProps = { provider: string onClose?: () => void editValues?: Record onRemove?: () => void } const ApiKeyModal = ({ provider, onClose, editValues, onRemove, }: ApiKeyModalProps) => { const { t } = useTranslation() const { notify } = useToastContext() const { data } = useGetPluginToolCredentialSchema(provider, CredentialTypeEnum.API_KEY) const { mutateAsync: addPluginToolCredential } = useAddPluginToolCredential(provider) const { mutateAsync: updatePluginToolCredential } = useUpdatePluginToolCredential(provider) const invalidatePluginToolCredentialInfo = useInvalidPluginToolCredentialInfo(provider) const formRef = useRef(null) const handleConfirm = useCallback(async () => { const store = formRef.current?.getFormStore() const values = store?.state.values if (editValues) { await updatePluginToolCredential({ credentials: values, type: CredentialTypeEnum.API_KEY, }) } else { await addPluginToolCredential({ credentials: values, type: CredentialTypeEnum.API_KEY, }) } notify({ type: 'success', message: t('common.api.actionSuccess'), }) onClose?.() invalidatePluginToolCredentialInfo() }, [addPluginToolCredential, onClose, invalidatePluginToolCredentialInfo, updatePluginToolCredential, notify, t, editValues]) return ( Get your API Key from OpenAI } bottomSlot={
{t('common.modelProvider.encrypted.front')} PKCS1_OAEP {t('common.modelProvider.encrypted.back')}
} onConfirm={handleConfirm} showExtraButton={!!editValues} onExtraButtonClick={onRemove} >
) } export default memo(ApiKeyModal)