mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 19:03:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { useTranslation } from 'react-i18next'
 | |
| import Image from 'next/image'
 | |
| import SerpapiLogo from '../../assets/serpapi.png'
 | |
| import KeyValidator from '../key-validator'
 | |
| import type { Form, ValidateValue } from '../key-validator/declarations'
 | |
| import { updatePluginKey, validatePluginKey } from './utils'
 | |
| import { useToastContext } from '@/app/components/base/toast'
 | |
| import type { PluginProvider } from '@/models/common'
 | |
| import { useAppContext } from '@/context/app-context'
 | |
| 
 | |
| type SerpapiPluginProps = {
 | |
|   plugin: PluginProvider
 | |
|   onUpdate: () => void
 | |
| }
 | |
| const SerpapiPlugin = ({
 | |
|   plugin,
 | |
|   onUpdate,
 | |
| }: SerpapiPluginProps) => {
 | |
|   const { t } = useTranslation()
 | |
|   const { isCurrentWorkspaceManager } = useAppContext()
 | |
|   const { notify } = useToastContext()
 | |
| 
 | |
|   const forms: Form[] = [{
 | |
|     key: 'api_key',
 | |
|     title: t('common.plugin.serpapi.apiKey'),
 | |
|     placeholder: t('common.plugin.serpapi.apiKeyPlaceholder'),
 | |
|     value: plugin.credentials?.api_key,
 | |
|     validate: {
 | |
|       before: (v) => {
 | |
|         if (v?.api_key)
 | |
|           return true
 | |
|       },
 | |
|       run: async (v) => {
 | |
|         return validatePluginKey('serpapi', {
 | |
|           credentials: {
 | |
|             api_key: v?.api_key,
 | |
|           },
 | |
|         })
 | |
|       },
 | |
|     },
 | |
|     handleFocus: (v, dispatch) => {
 | |
|       if (v.api_key === plugin.credentials?.api_key)
 | |
|         dispatch({ ...v, api_key: '' })
 | |
|     },
 | |
|   }]
 | |
| 
 | |
|   const handleSave = async (v: ValidateValue) => {
 | |
|     if (!v?.api_key || v?.api_key === plugin.credentials?.api_key)
 | |
|       return
 | |
| 
 | |
|     const res = await updatePluginKey('serpapi', {
 | |
|       credentials: {
 | |
|         api_key: v?.api_key,
 | |
|       },
 | |
|     })
 | |
| 
 | |
|     if (res.status === 'success') {
 | |
|       notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') })
 | |
|       onUpdate()
 | |
|       return true
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return (
 | |
|     <KeyValidator
 | |
|       type='serpapi'
 | |
|       title={<Image alt='serpapi logo' src={SerpapiLogo} width={64} />}
 | |
|       status={plugin.credentials?.api_key ? 'success' : 'add'}
 | |
|       forms={forms}
 | |
|       keyFrom={{
 | |
|         text: t('common.plugin.serpapi.keyFrom'),
 | |
|         link: 'https://serpapi.com/manage-api-key',
 | |
|       }}
 | |
|       onSave={handleSave}
 | |
|       disabled={!isCurrentWorkspaceManager}
 | |
|     />
 | |
|   )
 | |
| }
 | |
| 
 | |
| export default SerpapiPlugin
 | 
