import { memo, useCallback, useRef, } from 'react' import { useTranslation } from 'react-i18next' import Item from './item' import Configure from './configure' import type { DataSourceAuth, DataSourceCredential, } from './types' import { useRenderI18nObject } from '@/hooks/use-i18n' import { AuthCategory } from '@/app/components/plugins/plugin-auth/types' import { ApiKeyModal, usePluginAuthAction, } from '@/app/components/plugins/plugin-auth' import { useDataSourceAuthUpdate } from './hooks' import Confirm from '@/app/components/base/confirm' import { useGetDataSourceOAuthUrl } from '@/service/use-datasource' import { openOAuthPopup } from '@/hooks/use-oauth' type CardProps = { item: DataSourceAuth disabled?: boolean } const Card = ({ item, disabled, }: CardProps) => { const { t } = useTranslation() const renderI18nObject = useRenderI18nObject() const { icon, label, author, name, credentials_list, credential_schema, } = item const pluginPayload = { category: AuthCategory.datasource, provider: `${item.plugin_id}/${item.name}`, } const { handleAuthUpdate } = useDataSourceAuthUpdate() const { deleteCredentialId, doingAction, handleConfirm, handleEdit, handleRemove, handleRename, handleSetDefault, editValues, setEditValues, openConfirm, closeConfirm, pendingOperationCredentialId, } = usePluginAuthAction(pluginPayload, handleAuthUpdate) const changeCredentialIdRef = useRef(undefined) const { mutateAsync: getPluginOAuthUrl, } = useGetDataSourceOAuthUrl(pluginPayload.provider) const handleOAuth = useCallback(async () => { const { authorization_url } = await getPluginOAuthUrl(changeCredentialIdRef.current) if (authorization_url) { openOAuthPopup( authorization_url, handleAuthUpdate, ) } }, [getPluginOAuthUrl, handleAuthUpdate]) const handleAction = useCallback(( action: string, credentialItem: DataSourceCredential, renamePayload?: Record, ) => { if (action === 'edit') { handleEdit( credentialItem.id, { ...credentialItem.credential, __name__: credentialItem.name, __credential_id__: credentialItem.id, }, ) } if (action === 'delete') openConfirm(credentialItem.id) if (action === 'setDefault') handleSetDefault(credentialItem.id) if (action === 'rename') handleRename(renamePayload as any) if (action === 'change') { changeCredentialIdRef.current = credentialItem.id handleOAuth() } }, [ openConfirm, handleEdit, handleSetDefault, handleRename, ]) return (
{renderI18nObject(label)}
{author}
/
{name}
{t('plugin.auth.connectedWorkspace')}
{ !!credentials_list.length && (
{ credentials_list.map(credentialItem => ( )) }
) } { !credentials_list.length && (
{t('plugin.auth.emptyAuth')}
) } { deleteCredentialId && ( ) } { !!editValues && ( { setEditValues(null) pendingOperationCredentialId.current = null }} onUpdate={handleAuthUpdate} formSchemas={credential_schema} editValues={editValues} onRemove={handleRemove} disabled={disabled || doingAction} /> ) }
) } export default memo(Card)