diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx index d404da0461..7e592729a5 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx @@ -1,6 +1,6 @@ 'use client' import type { FC } from 'react' -import React from 'react' +import React, { useMemo } from 'react' import { useTranslation } from 'react-i18next' import { useContext } from 'use-context-selector' import AppCard from '@/app/components/app/overview/app-card' @@ -15,11 +15,15 @@ import { updateAppSiteStatus, } from '@/service/apps' import type { App } from '@/types/app' +import { AppModeEnum } from '@/types/app' import type { UpdateAppSiteCodeResponse } from '@/models/app' import { asyncRunSafe } from '@/utils' import { NEED_REFRESH_APP_LIST_KEY } from '@/config' import type { IAppCardProps } from '@/app/components/app/overview/app-card' import { useStore as useAppStore } from '@/app/components/app/store' +import { useAppWorkflow } from '@/service/use-workflow' +import type { BlockEnum } from '@/app/components/workflow/types' +import { isTriggerNode } from '@/app/components/workflow/types' export type ICardViewProps = { appId: string @@ -34,7 +38,17 @@ const CardView: FC = ({ appId, isInPanel, className }) => { const setAppDetail = useAppStore(state => state.setAppDetail) const showMCPCard = isInPanel - const showTriggerCard = isInPanel && appDetail?.mode === 'workflow' + const showTriggerCard = isInPanel && appDetail?.mode === AppModeEnum.WORKFLOW + const { data: currentWorkflow } = useAppWorkflow(appDetail?.mode === AppModeEnum.WORKFLOW ? appDetail.id : '') + const hasTriggerNode = useMemo(() => { + if (appDetail?.mode !== AppModeEnum.WORKFLOW) + return false + const nodes = currentWorkflow?.graph?.nodes || [] + return nodes.some((node) => { + const nodeType = node.data?.type as BlockEnum | undefined + return !!nodeType && isTriggerNode(nodeType) + }) + }, [appDetail?.mode, currentWorkflow]) const updateAppDetail = async () => { try { @@ -108,25 +122,31 @@ const CardView: FC = ({ appId, isInPanel, className }) => { return (
- - - {showMCPCard && ( - - )} + { + !hasTriggerNode && ( + <> + + + {showMCPCard && ( + + )} + + ) + } {showTriggerCard && (