Merge branch 'feat/mcp-frontend' into deploy/dev

pull/22036/head
Joel 11 months ago
commit e6ac11c492

@ -36,7 +36,7 @@ type Props = {
detail: ToolWithProvider detail: ToolWithProvider
onUpdate: (isDelete?: boolean) => void onUpdate: (isDelete?: boolean) => void
onHide: () => void onHide: () => void
isCreation: boolean isTriggerAuthorize: boolean
onFirstCreate: () => void onFirstCreate: () => void
} }
@ -44,7 +44,7 @@ const MCPDetailContent: FC<Props> = ({
detail, detail,
onUpdate, onUpdate,
onHide, onHide,
isCreation, isTriggerAuthorize,
onFirstCreate, onFirstCreate,
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
@ -70,12 +70,8 @@ const MCPDetailContent: FC<Props> = ({
onUpdate() onUpdate()
}, [detail, hideUpdateConfirm, invalidateMCPTools, onUpdate, updateTools]) }, [detail, hideUpdateConfirm, invalidateMCPTools, onUpdate, updateTools])
const { mutate: updateMCP } = useUpdateMCP({ const { mutateAsync: updateMCP } = useUpdateMCP({})
onSuccess: onUpdate, const { mutateAsync: deleteMCP } = useDeleteMCP({})
})
const { mutate: deleteMCP } = useDeleteMCP({
onSuccess: onUpdate,
})
const [isShowUpdateModal, { const [isShowUpdateModal, {
setTrue: showUpdateModal, setTrue: showUpdateModal,
@ -126,8 +122,9 @@ const MCPDetailContent: FC<Props> = ({
if ((res as any)?.result === 'success') { if ((res as any)?.result === 'success') {
hideUpdateModal() hideUpdateModal()
onUpdate() onUpdate()
handleAuthorize()
} }
}, [detail, updateMCP, hideUpdateModal, onUpdate]) }, [detail, updateMCP, hideUpdateModal, onUpdate, handleAuthorize])
const handleDelete = useCallback(async () => { const handleDelete = useCallback(async () => {
if (!detail) if (!detail)
@ -142,7 +139,7 @@ const MCPDetailContent: FC<Props> = ({
}, [detail, showDeleting, deleteMCP, hideDeleting, hideDeleteConfirm, onUpdate]) }, [detail, showDeleting, deleteMCP, hideDeleting, hideDeleteConfirm, onUpdate])
useEffect(() => { useEffect(() => {
if (isCreation) if (isTriggerAuthorize)
handleAuthorize() handleAuthorize()
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, []) }, [])

@ -10,7 +10,7 @@ type Props = {
detail?: ToolWithProvider detail?: ToolWithProvider
onUpdate: () => void onUpdate: () => void
onHide: () => void onHide: () => void
isCreation: boolean isTriggerAuthorize: boolean
onFirstCreate: () => void onFirstCreate: () => void
} }
@ -18,7 +18,7 @@ const MCPDetailPanel: FC<Props> = ({
detail, detail,
onUpdate, onUpdate,
onHide, onHide,
isCreation, isTriggerAuthorize,
onFirstCreate, onFirstCreate,
}) => { }) => {
const handleUpdate = (isDelete = false) => { const handleUpdate = (isDelete = false) => {
@ -45,7 +45,7 @@ const MCPDetailPanel: FC<Props> = ({
detail={detail} detail={detail}
onHide={onHide} onHide={onHide}
onUpdate={handleUpdate} onUpdate={handleUpdate}
isCreation={isCreation} isTriggerAuthorize={isTriggerAuthorize}
onFirstCreate={onFirstCreate} onFirstCreate={onFirstCreate}
/> />
)} )}

@ -35,7 +35,7 @@ const MCPList = ({
searchText, searchText,
}: Props) => { }: Props) => {
const { data: list = [] as ToolWithProvider[], refetch } = useAllToolProviders() const { data: list = [] as ToolWithProvider[], refetch } = useAllToolProviders()
const [isCreation, setIsCreation] = useState<boolean>(false) const [isTriggerAuthorize, setIsTriggerAuthorize] = useState<boolean>(false)
const filteredList = useMemo(() => { const filteredList = useMemo(() => {
return list.filter((collection) => { return list.filter((collection) => {
@ -54,9 +54,14 @@ const MCPList = ({
const handleCreate = async (provider: ToolWithProvider) => { const handleCreate = async (provider: ToolWithProvider) => {
await refetch() // update list await refetch() // update list
setCurrentProviderID(provider.id) setCurrentProviderID(provider.id)
setIsCreation(true) setIsTriggerAuthorize(true)
} }
const handleUpdate = async (providerID: string) => {
await refetch() // update list
setCurrentProviderID(providerID)
setIsTriggerAuthorize(true)
}
return ( return (
<> <>
<div <div
@ -72,7 +77,8 @@ const MCPList = ({
data={provider} data={provider}
currentProvider={currentProvider as ToolWithProvider} currentProvider={currentProvider as ToolWithProvider}
handleSelect={setCurrentProviderID} handleSelect={setCurrentProviderID}
onUpdate={refetch} onUpdate={handleUpdate}
onDeleted={refetch}
/> />
))} ))}
{!list.length && renderDefaultCard()} {!list.length && renderDefaultCard()}
@ -82,8 +88,8 @@ const MCPList = ({
detail={currentProvider as ToolWithProvider} detail={currentProvider as ToolWithProvider}
onHide={() => setCurrentProviderID(undefined)} onHide={() => setCurrentProviderID(undefined)}
onUpdate={refetch} onUpdate={refetch}
isCreation={isCreation} isTriggerAuthorize={isTriggerAuthorize}
onFirstCreate={() => setIsCreation(false)} onFirstCreate={() => setIsTriggerAuthorize(false)}
/> />
)} )}
</> </>

@ -55,6 +55,7 @@ const MCPModal = ({
onHide, onHide,
}: DuplicateAppModalProps) => { }: DuplicateAppModalProps) => {
const { t } = useTranslation() const { t } = useTranslation()
const isCreate = !data
const originalServerUrl = data?.server_url const originalServerUrl = data?.server_url
const originalServerID = data?.server_identifier const originalServerID = data?.server_identifier
@ -119,7 +120,8 @@ const MCPModal = ({
icon_background: appIcon.type === 'emoji' ? appIcon.background : undefined, icon_background: appIcon.type === 'emoji' ? appIcon.background : undefined,
server_identifier: serverIdentifier.trim(), server_identifier: serverIdentifier.trim(),
}) })
onHide() if(isCreate)
onHide()
} }
return ( return (
@ -132,7 +134,7 @@ const MCPModal = ({
<div className='absolute right-5 top-5 z-10 cursor-pointer p-1.5' onClick={onHide}> <div className='absolute right-5 top-5 z-10 cursor-pointer p-1.5' onClick={onHide}>
<RiCloseLine className='h-5 w-5 text-text-tertiary' /> <RiCloseLine className='h-5 w-5 text-text-tertiary' />
</div> </div>
<div className='title-2xl-semi-bold relative pb-3 text-xl text-text-primary'>{data ? t('tools.mcp.modal.editTitle') : t('tools.mcp.modal.title')}</div> <div className='title-2xl-semi-bold relative pb-3 text-xl text-text-primary'>{!isCreate ? t('tools.mcp.modal.editTitle') : t('tools.mcp.modal.title')}</div>
<div className='space-y-5 py-3'> <div className='space-y-5 py-3'>
<div> <div>
<div className='mb-1 flex h-6 items-center'> <div className='mb-1 flex h-6 items-center'>

@ -18,7 +18,8 @@ type Props = {
currentProvider?: ToolWithProvider currentProvider?: ToolWithProvider
data: ToolWithProvider data: ToolWithProvider
handleSelect: (providerID: string) => void handleSelect: (providerID: string) => void
onUpdate: () => void onUpdate: (providerID: string) => void
onDeleted: () => void
} }
const MCPCard = ({ const MCPCard = ({
@ -26,17 +27,14 @@ const MCPCard = ({
data, data,
onUpdate, onUpdate,
handleSelect, handleSelect,
onDeleted,
}: Props) => { }: Props) => {
const { t } = useTranslation() const { t } = useTranslation()
const { formatTimeFromNow } = useFormatTimeFromNow() const { formatTimeFromNow } = useFormatTimeFromNow()
const { isCurrentWorkspaceManager } = useAppContext() const { isCurrentWorkspaceManager } = useAppContext()
const { mutate: updateMCP } = useUpdateMCP({ const { mutateAsync: updateMCP } = useUpdateMCP({})
onSuccess: onUpdate, const { mutateAsync: deleteMCP } = useDeleteMCP({})
})
const { mutate: deleteMCP } = useDeleteMCP({
onSuccess: onUpdate,
})
const [isOperationShow, setIsOperationShow] = useState(false) const [isOperationShow, setIsOperationShow] = useState(false)
@ -62,7 +60,7 @@ const MCPCard = ({
}) })
if ((res as any)?.result === 'success') { if ((res as any)?.result === 'success') {
hideUpdateModal() hideUpdateModal()
onUpdate() onUpdate(data.id)
} }
}, [data, updateMCP, hideUpdateModal, onUpdate]) }, [data, updateMCP, hideUpdateModal, onUpdate])
@ -72,9 +70,9 @@ const MCPCard = ({
hideDeleting() hideDeleting()
if ((res as any)?.result === 'success') { if ((res as any)?.result === 'success') {
hideDeleteConfirm() hideDeleteConfirm()
onUpdate() onDeleted()
} }
}, [showDeleting, deleteMCP, data.id, hideDeleting, hideDeleteConfirm, onUpdate]) }, [showDeleting, deleteMCP, data.id, hideDeleting, hideDeleteConfirm, onDeleted])
return ( return (
<div <div

Loading…
Cancel
Save