| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 'use client'import React, { useEffect, useState } from 'react'import { useTranslation } from 'react-i18next'import { RiAddLine } from '@remixicon/react'import { useRouter } from 'next/navigation'import ExternalApiSelect from './ExternalApiSelect'import Input from '@/app/components/base/input'import Button from '@/app/components/base/button'import { useModalContext } from '@/context/modal-context'import { useExternalKnowledgeApi } from '@/context/external-knowledge-api-context'type ExternalApiSelectionProps = {  external_knowledge_api_id: string  external_knowledge_id: string  onChange: (data: { external_knowledge_api_id?: string; external_knowledge_id?: string }) => void}const ExternalApiSelection: React.FC<ExternalApiSelectionProps> = ({ external_knowledge_api_id, external_knowledge_id, onChange }) => {  const { t } = useTranslation()  const router = useRouter()  const { externalKnowledgeApiList } = useExternalKnowledgeApi()  const [selectedApiId, setSelectedApiId] = useState(external_knowledge_api_id)  const { setShowExternalKnowledgeAPIModal } = useModalContext()  const { mutateExternalKnowledgeApis } = useExternalKnowledgeApi()  const apiItems = externalKnowledgeApiList.map(api => ({    value: api.id,    name: api.name,    url: api.settings.endpoint,  }))  useEffect(() => {    if (apiItems.length > 0) {      const newSelectedId = external_knowledge_api_id || apiItems[0].value      setSelectedApiId(newSelectedId)      if (newSelectedId !== external_knowledge_api_id)        onChange({ external_knowledge_api_id: newSelectedId, external_knowledge_id })    }  }, [apiItems, external_knowledge_api_id, external_knowledge_id, onChange])  const handleAddNewAPI = () => {    setShowExternalKnowledgeAPIModal({      payload: { name: '', settings: { endpoint: '', api_key: '' } },      onSaveCallback: async () => {        mutateExternalKnowledgeApis()        router.refresh()      },      onCancelCallback: () => {        mutateExternalKnowledgeApis()      },      isEditMode: false,    })  }  useEffect(() => {    if (!external_knowledge_api_id && apiItems.length > 0)      onChange({ external_knowledge_api_id: apiItems[0].value, external_knowledge_id })  }, [])  return (    <form className='flex flex-col gap-4 self-stretch'>      <div className='flex flex-col gap-1 self-stretch'>        <div className='flex flex-col self-stretch'>          <label className='text-text-secondary system-sm-semibold'>{t('dataset.externalAPIPanelTitle')}</label>        </div>        {apiItems.length > 0          ? <ExternalApiSelect            items={apiItems}            value={selectedApiId}            onSelect={(e) => {              setSelectedApiId(e.value)              onChange({ external_knowledge_api_id: e.value, external_knowledge_id })            }}          />          : <Button variant={'tertiary'} onClick={handleAddNewAPI} className='justify-start gap-0.5'>            <RiAddLine className='w-4 h-4 text-text-tertiary' />            <span className='text-text-tertiary system-sm-regular'>{t('dataset.noExternalKnowledge')}</span>          </Button>        }      </div>      <div className='flex flex-col gap-1 self-stretch'>        <div className='flex flex-col self-stretch'>          <label className='text-text-secondary system-sm-semibold'>{t('dataset.externalKnowledgeId')}</label>        </div>        <Input          value={external_knowledge_id}          onChange={e => onChange({ external_knowledge_id: e.target.value, external_knowledge_api_id })}          placeholder={t('dataset.externalKnowledgeIdPlaceholder') ?? ''}        />      </div>    </form>  )}export default ExternalApiSelection
 |