| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 
                        - 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={`shadows-shadow-xs flex items-start self-stretch rounded-lg border-[0.5px] border-components-panel-border-subtle
 -         bg-components-panel-on-panel-item-bg p-2
 -         pl-3 ${isHovered ? 'border-state-destructive-border bg-state-destructive-hover' : ''}`}
 -       >
 -         <div className='flex grow flex-col items-start justify-center gap-1.5 py-1'>
 -           <div className='flex items-center gap-1 self-stretch text-text-secondary'>
 -             <ApiConnectionMod className='h-4 w-4' />
 -             <div className='system-sm-medium'>{api.name}</div>
 -           </div>
 -           <div className='system-xs-regular self-stretch text-text-tertiary'>{api.settings.endpoint}</div>
 -         </div>
 -         <div className='flex items-start gap-1'>
 -           <ActionButton onClick={handleEditClick}>
 -             <RiEditLine className='h-4 w-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='h-4 w-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
 
 
  |