| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | 
							- import React, { useState } from 'react'
 
- import { useTranslation } from 'react-i18next'
 
- import {
 
-   RiDeleteBinLine,
 
-   RiEditLine,
 
- } from '@remixicon/react'
 
- import type { CreateExternalAPIReq } from '../declarations'
 
- import type { ExternalAPIItem } from '@/models/datasets'
 
- import { checkUsageExternalAPI, deleteExternalAPI, fetchExternalAPI, updateExternalAPI } from '@/service/datasets'
 
- import { ApiConnectionMod } from '@/app/components/base/icons/src/vender/solid/development'
 
- import { useExternalKnowledgeApi } from '@/context/external-knowledge-api-context'
 
- import { useModalContext } from '@/context/modal-context'
 
- import ActionButton from '@/app/components/base/action-button'
 
- import Confirm from '@/app/components/base/confirm'
 
- type ExternalKnowledgeAPICardProps = {
 
-   api: ExternalAPIItem
 
- }
 
- const ExternalKnowledgeAPICard: React.FC<ExternalKnowledgeAPICardProps> = ({ api }) => {
 
-   const { setShowExternalKnowledgeAPIModal } = useModalContext()
 
-   const [showConfirm, setShowConfirm] = useState(false)
 
-   const [isHovered, setIsHovered] = useState(false)
 
-   const [usageCount, setUsageCount] = useState(0)
 
-   const { mutateExternalKnowledgeApis } = useExternalKnowledgeApi()
 
-   const { t } = useTranslation()
 
-   const handleEditClick = async () => {
 
-     try {
 
-       const response = await fetchExternalAPI({ apiTemplateId: api.id })
 
-       const formValue: CreateExternalAPIReq = {
 
-         name: response.name,
 
-         settings: {
 
-           endpoint: response.settings.endpoint,
 
-           api_key: response.settings.api_key,
 
-         },
 
-       }
 
-       setShowExternalKnowledgeAPIModal({
 
-         payload: formValue,
 
-         onSaveCallback: () => {
 
-           mutateExternalKnowledgeApis()
 
-         },
 
-         onCancelCallback: () => {
 
-           mutateExternalKnowledgeApis()
 
-         },
 
-         isEditMode: true,
 
-         datasetBindings: response.dataset_bindings,
 
-         onEditCallback: async (updatedData: CreateExternalAPIReq) => {
 
-           try {
 
-             await updateExternalAPI({
 
-               apiTemplateId: api.id,
 
-               body: {
 
-                 ...response,
 
-                 name: updatedData.name,
 
-                 settings: {
 
-                   ...response.settings,
 
-                   endpoint: updatedData.settings.endpoint,
 
-                   api_key: updatedData.settings.api_key,
 
-                 },
 
-               },
 
-             })
 
-             mutateExternalKnowledgeApis()
 
-           }
 
-           catch (error) {
 
-             console.error('Error updating external knowledge API:', error)
 
-           }
 
-         },
 
-       })
 
-     }
 
-     catch (error) {
 
-       console.error('Error fetching external knowledge API data:', error)
 
-     }
 
-   }
 
-   const handleDeleteClick = async () => {
 
-     try {
 
-       const usage = await checkUsageExternalAPI({ apiTemplateId: api.id })
 
-       if (usage.is_using)
 
-         setUsageCount(usage.count)
 
-       setShowConfirm(true)
 
-     }
 
-     catch (error) {
 
-       console.error('Error checking external API usage:', error)
 
-     }
 
-   }
 
-   const handleConfirmDelete = async () => {
 
-     try {
 
-       const response = await deleteExternalAPI({ apiTemplateId: api.id })
 
-       if (response && response.result === 'success') {
 
-         setShowConfirm(false)
 
-         mutateExternalKnowledgeApis()
 
-       }
 
-       else {
 
-         console.error('Failed to delete external API')
 
-       }
 
-     }
 
-     catch (error) {
 
-       console.error('Error deleting external knowledge API:', error)
 
-     }
 
-   }
 
-   return (
 
-     <>
 
-       <div className={`flex p-2 pl-3 items-start self-stretch rounded-lg border-[0.5px] 
 
-         border-components-panel-border-subtle bg-components-panel-on-panel-item-bg 
 
-         shadows-shadow-xs ${isHovered ? 'bg-state-destructive-hover border-state-destructive-border' : ''}`}
 
-       >
 
-         <div className='flex py-1 flex-col justify-center items-start gap-1.5 flex-grow'>
 
-           <div className='flex items-center gap-1 self-stretch text-text-secondary'>
 
-             <ApiConnectionMod className='w-4 h-4' />
 
-             <div className='system-sm-medium'>{api.name}</div>
 
-           </div>
 
-           <div className='self-stretch text-text-tertiary system-xs-regular'>{api.settings.endpoint}</div>
 
-         </div>
 
-         <div className='flex items-start gap-1'>
 
-           <ActionButton onClick={handleEditClick}>
 
-             <RiEditLine className='w-4 h-4 text-text-tertiary hover:text-text-secondary' />
 
-           </ActionButton>
 
-           <ActionButton
 
-             className='hover:bg-state-destructive-hover'
 
-             onClick={handleDeleteClick}
 
-             onMouseEnter={() => setIsHovered(true)}
 
-             onMouseLeave={() => setIsHovered(false)}
 
-           >
 
-             <RiDeleteBinLine className='w-4 h-4 text-text-tertiary hover:text-text-destructive' />
 
-           </ActionButton>
 
-         </div>
 
-       </div>
 
-       {showConfirm && (
 
-         <Confirm
 
-           isShow={showConfirm}
 
-           title={`${t('dataset.deleteExternalAPIConfirmWarningContent.title.front')} ${api.name}${t('dataset.deleteExternalAPIConfirmWarningContent.title.end')}`}
 
-           content={
 
-             usageCount > 0
 
-               ? `${t('dataset.deleteExternalAPIConfirmWarningContent.content.front')} ${usageCount} ${t('dataset.deleteExternalAPIConfirmWarningContent.content.end')}`
 
-               : t('dataset.deleteExternalAPIConfirmWarningContent.noConnectionContent')
 
-           }
 
-           type='warning'
 
-           onConfirm={handleConfirmDelete}
 
-           onCancel={() => setShowConfirm(false)}
 
-         />
 
-       )}
 
-     </>
 
-   )
 
- }
 
- export default ExternalKnowledgeAPICard
 
 
  |