'use client' import type { Credential } from '@/app/components/tools/types' import { Button } from '@langgenius/dify-ui/button' import { cn } from '@langgenius/dify-ui/cn' import { Drawer, DrawerBackdrop, DrawerCloseButton, DrawerContent, DrawerPopup, DrawerPortal, DrawerTitle, DrawerViewport, } from '@langgenius/dify-ui/drawer' import { Field, FieldItem, FieldLabel } from '@langgenius/dify-ui/field' import { Fieldset, FieldsetLegend } from '@langgenius/dify-ui/fieldset' import { Input } from '@langgenius/dify-ui/input' import { Radio, RadioGroup } from '@langgenius/dify-ui/radio' import { ScrollArea } from '@langgenius/dify-ui/scroll-area' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Infotip } from '@/app/components/base/infotip' import { AuthHeaderPrefix, AuthType } from '@/app/components/tools/types' type Props = Readonly<{ positionCenter?: boolean credential: Credential onChange: (credential: Credential) => void onHide: () => void }> type ItemProps = { text: string value: Value isChecked: boolean } function SelectItem({ text, value, isChecked }: ItemProps) { return ( value={value} />
{text}
) } export default function ConfigCredential({ positionCenter, credential, onChange, onHide }: Props) { const { t } = useTranslation() const [tempCredential, setTempCredential] = useState(credential) const handleAuthTypeChange = (value: AuthType) => { if (value === AuthType.none) { setTempCredential({ auth_type: value }) return } if (value === AuthType.apiKeyHeader) { setTempCredential({ auth_type: value, api_key_header: tempCredential.api_key_header || 'Authorization', api_key_value: tempCredential.api_key_value || '', api_key_header_prefix: tempCredential.api_key_header_prefix || AuthHeaderPrefix.custom, }) return } setTempCredential({ auth_type: value, api_key_query_param: tempCredential.api_key_query_param || 'key', api_key_value: tempCredential.api_key_value || '', }) } return ( { if (!open) onHide() }} >
{t(($) => $['createTool.authMethod.title'], { ns: 'tools' })} $['operation.close'], { ns: 'common' })} className="size-6 rounded-md" />
className="grid grid-cols-[repeat(auto-fit,minmax(8.5rem,1fr))] gap-2" value={tempCredential.auth_type} onValueChange={handleAuthTypeChange} /> } > {t(($) => $['createTool.authMethod.type'], { ns: 'tools' })} text={t(($) => $['createTool.authMethod.types.none'], { ns: 'tools' })} value={AuthType.none} isChecked={tempCredential.auth_type === AuthType.none} /> text={t(($) => $['createTool.authMethod.types.api_key_header'], { ns: 'tools', })} value={AuthType.apiKeyHeader} isChecked={tempCredential.auth_type === AuthType.apiKeyHeader} /> text={t(($) => $['createTool.authMethod.types.api_key_query'], { ns: 'tools', })} value={AuthType.apiKeyQuery} isChecked={tempCredential.auth_type === AuthType.apiKeyQuery} />
{tempCredential.auth_type === AuthType.apiKeyHeader && ( <>
className="grid grid-cols-[repeat(auto-fit,minmax(8.5rem,1fr))] gap-2" value={tempCredential.api_key_header_prefix} onValueChange={(value) => setTempCredential({ ...tempCredential, api_key_header_prefix: value }) } /> } > {t(($) => $['createTool.authHeaderPrefix.title'], { ns: 'tools' })} text={t(($) => $['createTool.authHeaderPrefix.types.basic'], { ns: 'tools', })} value={AuthHeaderPrefix.basic} isChecked={ tempCredential.api_key_header_prefix === AuthHeaderPrefix.basic } /> text={t(($) => $['createTool.authHeaderPrefix.types.bearer'], { ns: 'tools', })} value={AuthHeaderPrefix.bearer} isChecked={ tempCredential.api_key_header_prefix === AuthHeaderPrefix.bearer } /> text={t(($) => $['createTool.authHeaderPrefix.types.custom'], { ns: 'tools', })} value={AuthHeaderPrefix.custom} isChecked={ tempCredential.api_key_header_prefix === AuthHeaderPrefix.custom } />
{t(($) => $['createTool.authMethod.key'], { ns: 'tools' })} $['createTool.authMethod.keyTooltip'], { ns: 'tools', })} className="ml-0.5 size-4" popupClassName="w-[261px] text-text-tertiary" > {t(($) => $['createTool.authMethod.keyTooltip'], { ns: 'tools' })}
setTempCredential({ ...tempCredential, api_key_header: e.target.value }) } placeholder={ t(($) => $['createTool.authMethod.types.apiKeyPlaceholder'], { ns: 'tools', })! } />
{t(($) => $['createTool.authMethod.value'], { ns: 'tools' })}
setTempCredential({ ...tempCredential, api_key_value: e.target.value }) } placeholder={ t(($) => $['createTool.authMethod.types.apiValuePlaceholder'], { ns: 'tools', })! } />
)} {tempCredential.auth_type === AuthType.apiKeyQuery && ( <>
{t(($) => $['createTool.authMethod.queryParam'], { ns: 'tools' })} $['createTool.authMethod.queryParamTooltip'], { ns: 'tools', })} className="ml-0.5 size-4" popupClassName="w-[261px] text-text-tertiary" > {t(($) => $['createTool.authMethod.queryParamTooltip'], { ns: 'tools' })}
setTempCredential({ ...tempCredential, api_key_query_param: e.target.value, }) } placeholder={ t(($) => $['createTool.authMethod.types.queryParamPlaceholder'], { ns: 'tools', })! } />
{t(($) => $['createTool.authMethod.value'], { ns: 'tools' })}
setTempCredential({ ...tempCredential, api_key_value: e.target.value }) } placeholder={ t(($) => $['createTool.authMethod.types.apiValuePlaceholder'], { ns: 'tools', })! } />
)}
) }