import type { StatusDotStatus } from '@langgenius/dify-ui/status-dot'
import type { Credential, PluginPayload } from './types'
import { Button } from '@langgenius/dify-ui/button'
import { cn } from '@langgenius/dify-ui/cn'
import { StatusDot } from '@langgenius/dify-ui/status-dot'
import { RiArrowDownSLine } from '@remixicon/react'
import { memo, useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
import Authorize from './authorize'
import Authorized from './authorized'
import { usePluginAuth } from './hooks/use-plugin-auth'
type PluginAuthInAgentProps = {
pluginPayload: PluginPayload
credentialId?: string
onAuthorizationItemClick?: (id: string) => void
}
const PluginAuthInAgent = ({
pluginPayload,
credentialId,
onAuthorizationItemClick,
}: PluginAuthInAgentProps) => {
const { t } = useTranslation()
const [isOpen, setIsOpen] = useState(false)
const {
isAuthorized,
canOAuth,
canApiKey,
credentials,
invalidPluginCredentialInfo,
notAllowCustomCredential,
} = usePluginAuth(pluginPayload, true, credentialId ? [credentialId] : undefined)
const extraAuthorizationItems: Credential[] = [
{
id: '__workspace_default__',
name: t(($) => $['auth.workspaceDefault'], { ns: 'plugin' }),
provider: '',
is_default: !credentialId,
isWorkspaceDefault: true,
},
]
const handleAuthorizationItemClick = useCallback(
(id: string) => {
onAuthorizationItemClick?.(id)
setIsOpen(false)
},
[onAuthorizationItemClick, setIsOpen],
)
const renderTrigger = useCallback(
(isOpen?: boolean) => {
let label = ''
let removed = false
let unavailable = false
let color: StatusDotStatus = 'success'
if (!credentialId) {
label = t(($) => $['auth.workspaceDefault'], { ns: 'plugin' })
} else {
const credential = credentials.find((c) => c.id === credentialId)
label = credential ? credential.name : t(($) => $['auth.authRemoved'], { ns: 'plugin' })
removed = !credential
unavailable = !!credential?.not_allowed_to_use && !credential?.from_enterprise
if (removed) color = 'error'
else if (unavailable) color = 'disabled'
}
return (
)
},
[credentialId, credentials, t],
)
return (
<>
{!isAuthorized && (
)}
{isAuthorized && (
)}
>
)
}
export default memo(PluginAuthInAgent)