From 61ebc756aab3d96acce28593da53cbcc50b758c1 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 16 Oct 2025 17:38:13 +0800 Subject: [PATCH] feat: workflow preview --- .../preview/flow-app-preview.tsx | 21 ++++++++++++++++++- .../app/configuration/preview/index.tsx | 2 +- .../workflow/workflow-preview/index.tsx | 7 +++++-- web/service/try-app.ts | 14 +++++++++++++ web/service/use-try-app.ts | 11 +++++++++- 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/web/app/components/app/configuration/preview/flow-app-preview.tsx b/web/app/components/app/configuration/preview/flow-app-preview.tsx index f374f6a1d5..44686dcc04 100644 --- a/web/app/components/app/configuration/preview/flow-app-preview.tsx +++ b/web/app/components/app/configuration/preview/flow-app-preview.tsx @@ -1,17 +1,36 @@ 'use client' +import Loading from '@/app/components/base/loading' +import { useGetTryAppFlowPreview } from '@/service/use-try-app' import type { FC } from 'react' import React from 'react' +import WorkflowPreview from '@/app/components/workflow/workflow-preview' +import cn from '@/utils/classnames' type Props = { appId: string + className?: string } const FlowAppPreview: FC = ({ appId, + className, }) => { + const { data, isLoading } = useGetTryAppFlowPreview(appId) + + if (isLoading) { + return
+ +
+ } + if(!data) + return null return (
- {appId} +
) } diff --git a/web/app/components/app/configuration/preview/index.tsx b/web/app/components/app/configuration/preview/index.tsx index e1455f757a..d8a9640fe0 100644 --- a/web/app/components/app/configuration/preview/index.tsx +++ b/web/app/components/app/configuration/preview/index.tsx @@ -21,6 +21,6 @@ const Preview: FC = ({ } - return isBasicApp ? : + return isBasicApp ? : } export default React.memo(Preview) diff --git a/web/app/components/workflow/workflow-preview/index.tsx b/web/app/components/workflow/workflow-preview/index.tsx index 5fd4b9097c..0a10a9d416 100644 --- a/web/app/components/workflow/workflow-preview/index.tsx +++ b/web/app/components/workflow/workflow-preview/index.tsx @@ -61,12 +61,14 @@ type WorkflowPreviewProps = { edges: Edge[] viewport: Viewport className?: string + miniMapToRight?: boolean } const WorkflowPreview = ({ nodes, edges, viewport, className, + miniMapToRight, }: WorkflowPreviewProps) => { const [nodesData, setNodesData] = useState(() => initialNodes(nodes, edges)) const [edgesData, setEdgesData] = useState(() => initialEdges(edges, nodes)) @@ -97,8 +99,9 @@ const WorkflowPreview = ({ height: 72, }} maskColor='var(--color-workflow-minimap-bg)' - className='!absolute !bottom-14 !left-4 z-[9] !m-0 !h-[72px] !w-[102px] !rounded-lg !border-[0.5px] - !border-divider-subtle !bg-background-default-subtle !shadow-md !shadow-shadow-shadow-5' + className={cn('!absolute !bottom-14 z-[9] !m-0 !h-[72px] !w-[102px] !rounded-lg !border-[0.5px] !border-divider-subtle !bg-background-default-subtle !shadow-md !shadow-shadow-shadow-5', + miniMapToRight ? '!right-4' : '!left-4', + )} />
diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 0a523623b8..9e8b0cfe99 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -8,6 +8,8 @@ import type { import type { ModelConfig } from '@/types/app' import qs from 'qs' import type { DataSetListResponse } from '@/models/datasets' +import type { Edge, Node } from '@/app/components/workflow/types' +import type { Viewport } from 'reactflow' type TryAppInfo = { name: string @@ -25,3 +27,15 @@ export const fetchTryAppDatasets = (appId: string, ids: string[]) => { const urlParams = qs.stringify({ ids }, { indices: false }) return get(`/trial-apps/${appId}/datasets?${urlParams}`) } + +type TryAppFlowPreview = { + graph: { + nodes: Node[] + edges: Edge[] + viewport: Viewport + } +} + +export const fetchTryAppFlowPreview = (appId: string) => { + return get(`/trial-apps/${appId}/workflows`) +} diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index 1245e628e1..d4c4fbcb5f 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query' -import { fetchTryAppDatasets, fetchTryAppInfo } from './try-app' +import { fetchTryAppDatasets, fetchTryAppFlowPreview, fetchTryAppInfo } from './try-app' import { AppSourceType, fetchAppParams } from './share' import type { DataSetListResponse } from '@/models/datasets' @@ -32,3 +32,12 @@ export const useGetTryAppDataSets = (appId: string, ids: string[]) => { enabled: ids.length > 0, }) } + +export const useGetTryAppFlowPreview = (appId: string) => { + return useQuery({ + queryKey: [NAME_SPACE, 'preview', appId], + queryFn: () => { + return fetchTryAppFlowPreview(appId) + }, + }) +}