import { memo, useCallback, useMemo, useState, } from 'react' import { useTranslation } from 'react-i18next' import { RiClipboardLine, RiEqualizer2Line, RiInformation2Fill, } from '@remixicon/react' import Button from '@/app/components/base/button' import type { ButtonProps } from '@/app/components/base/button' import OAuthClientSettings from './oauth-client-settings' import cn from '@/utils/classnames' import type { PluginPayload } from '../types' import { openOAuthPopup } from '@/hooks/use-oauth' import Badge from '@/app/components/base/badge' import { useGetPluginOAuthClientSchemaHook, useGetPluginOAuthUrlHook, } from '../hooks/use-credential' import type { FormSchema } from '@/app/components/base/form/types' import { FormTypeEnum } from '@/app/components/base/form/types' import ActionButton from '@/app/components/base/action-button' import { useRenderI18nObject } from '@/hooks/use-i18n' export type AddOAuthButtonProps = { pluginPayload: PluginPayload buttonVariant?: ButtonProps['variant'] buttonText?: string className?: string buttonLeftClassName?: string buttonRightClassName?: string dividerClassName?: string disabled?: boolean onUpdate?: () => void } const AddOAuthButton = ({ pluginPayload, buttonVariant = 'primary', buttonText = 'use oauth', className, buttonLeftClassName, buttonRightClassName, dividerClassName, disabled, onUpdate, }: AddOAuthButtonProps) => { const { t } = useTranslation() const renderI18nObject = useRenderI18nObject() const [isOAuthSettingsOpen, setIsOAuthSettingsOpen] = useState(false) const { mutateAsync: getPluginOAuthUrl } = useGetPluginOAuthUrlHook(pluginPayload) const { data, isLoading } = useGetPluginOAuthClientSchemaHook(pluginPayload) const { schema = [], is_oauth_custom_client_enabled, is_system_oauth_params_exists, client_params, redirect_uri, } = data || {} const isConfigured = is_system_oauth_params_exists || is_oauth_custom_client_enabled const handleOAuth = useCallback(async () => { const { authorization_url } = await getPluginOAuthUrl() if (authorization_url) { openOAuthPopup( authorization_url, () => onUpdate?.(), ) } }, [getPluginOAuthUrl, onUpdate]) const renderCustomLabel = useCallback((item: FormSchema) => { return (