import React, { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { useBoolean } from 'ahooks' import { RiDeleteBinLine, RiEditLine, RiLoginCircleLine } from '@remixicon/react' import type { EndpointListItem } from '../types' import EndpointModal from './endpoint-modal' import { addDefaultValue, toolCredentialToFormSchemas } from '@/app/components/tools/utils/to-form-schema' import ActionButton from '@/app/components/base/action-button' import CopyBtn from '@/app/components/base/copy-btn' import Confirm from '@/app/components/base/confirm' import Indicator from '@/app/components/header/indicator' import Switch from '@/app/components/base/switch' import { deleteEndpoint, disableEndpoint, enableEndpoint, updateEndpoint, } from '@/service/plugins' type Props = { data: EndpointListItem } const EndpointCard = ({ data, }: Props) => { const { t } = useTranslation() const [active, setActive] = useState(data.enabled) const endpointID = data.id const [isShowDisableConfirm, { setTrue: showDisableConfirm, setFalse: hideDisableConfirm, }] = useBoolean(false) const activeEndpoint = async () => { try { await enableEndpoint({ url: '/workspaces/current/endpoints/enable', endpointID, }) } catch (error) { console.error(error) setActive(false) } } const inactiveEndpoint = async () => { try { await disableEndpoint({ url: '/workspaces/current/endpoints/disable', endpointID, }) } catch (error) { console.error(error) setActive(true) } } const handleSwitch = (state: boolean) => { if (state) { setActive(true) activeEndpoint() } else { setActive(false) showDisableConfirm() } } const [isShowDeleteConfirm, { setTrue: showDeleteConfirm, setFalse: hideDeleteConfirm, }] = useBoolean(false) const handleDelete = async () => { try { await deleteEndpoint({ url: '/workspaces/current/endpoints/delete', endpointID, }) } catch (error) { console.error(error) } } const [isShowEndpointModal, { setTrue: showEndpointModalConfirm, setFalse: hideEndpointModalConfirm, }] = useBoolean(false) const formSchemas = useMemo(() => { return toolCredentialToFormSchemas(data.declaration.settings) }, [data.declaration.settings]) const formValue = useMemo(() => { return addDefaultValue(data.settings, formSchemas) }, [data.settings, formSchemas]) const handleUpdate = (state: any) => { try { updateEndpoint({ url: '/workspaces/current/endpoints', body: { endpoint_id: data.id, settings: state, name: state.name, }, }) } catch (error) { console.error(error) } } return (
{data.name}
{data.declaration.endpoints.map((endpoint, index) => (
{endpoint.method}
{`${data.url}${endpoint.path}`}
))}
{active && (
{t('plugin.detailPanel.serviceOk')}
)} {!active && (
{t('plugin.detailPanel.disabled')}
)}
{isShowDisableConfirm && ( {t('plugin.detailPanel.endpointDisableContent', { name: data.name })}
} onCancel={() => { hideDisableConfirm() setActive(true) }} onConfirm={inactiveEndpoint} /> )} {isShowDeleteConfirm && ( {t('plugin.detailPanel.endpointDeleteContent', { name: data.name })}} onCancel={hideDeleteConfirm} onConfirm={handleDelete} /> )} {isShowEndpointModal && ( )} ) } export default EndpointCard