diff --git a/web/app/components/snippets/components/__tests__/snippet-main.spec.tsx b/web/app/components/snippets/components/__tests__/snippet-main.spec.tsx index a5ee5ed627..3685edca4d 100644 --- a/web/app/components/snippets/components/__tests__/snippet-main.spec.tsx +++ b/web/app/components/snippets/components/__tests__/snippet-main.spec.tsx @@ -316,5 +316,16 @@ describe('SnippetMain', () => { expect(capturedHooksStore?.handleStartWorkflowRun).toBe(mockHandleStartWorkflowRun) expect(capturedHooksStore?.handleWorkflowStartRunInWorkflow).toBe(mockHandleWorkflowStartRunInWorkflow) }) + + it('should pass snippet workflow run detail urls to WorkflowWithInnerContext', () => { + renderSnippetMain() + + const getWorkflowRunAndTraceUrl = capturedHooksStore?.getWorkflowRunAndTraceUrl as ((runId?: string) => { runUrl: string, traceUrl: string }) | undefined + + expect(getWorkflowRunAndTraceUrl?.('run-1')).toEqual({ + runUrl: '/snippets/snippet-1/workflow-runs/run-1', + traceUrl: '/snippets/snippet-1/workflow-runs/run-1/node-executions', + }) + }) }) }) diff --git a/web/app/components/snippets/components/snippet-main.tsx b/web/app/components/snippets/components/snippet-main.tsx index 324f523ede..dea35c13af 100644 --- a/web/app/components/snippets/components/snippet-main.tsx +++ b/web/app/components/snippets/components/snippet-main.tsx @@ -13,6 +13,7 @@ import { useAvailableNodesMetaData } from '@/app/components/workflow-app/hooks' import { useSetWorkflowVarsWithValue } from '@/app/components/workflow/hooks/use-fetch-workflow-inspect-vars' import { BlockEnum } from '@/app/components/workflow/types' import { useConfigsMap } from '../hooks/use-configs-map' +import { useGetRunAndTraceUrl } from '../hooks/use-get-run-and-trace-url' import { useInspectVarsCrud } from '../hooks/use-inspect-vars-crud' import { useNodesSyncDraft } from '../hooks/use-nodes-sync-draft' import { useSnippetRefreshDraft } from '../hooks/use-snippet-refresh-draft' @@ -179,6 +180,7 @@ const SnippetMain = ({ handleRun, inputFields: fields, }) + const { getWorkflowRunAndTraceUrl } = useGetRunAndTraceUrl(snippetId) useEffect(() => { reset() @@ -200,6 +202,7 @@ const SnippetMain = ({ handleStopRun, handleStartWorkflowRun, handleWorkflowStartRunInWorkflow, + getWorkflowRunAndTraceUrl, availableNodesMetaData, fetchInspectVars, hasNodeInspectVars, @@ -237,6 +240,7 @@ const SnippetMain = ({ handleStartWorkflowRun, handleStopRun, handleWorkflowStartRunInWorkflow, + getWorkflowRunAndTraceUrl, hasNodeInspectVars, hasSetInspectVar, invalidateConversationVarValues, diff --git a/web/app/components/snippets/components/snippet-run-panel.tsx b/web/app/components/snippets/components/snippet-run-panel.tsx index fb3a27737d..673be80946 100644 --- a/web/app/components/snippets/components/snippet-run-panel.tsx +++ b/web/app/components/snippets/components/snippet-run-panel.tsx @@ -263,7 +263,7 @@ const SnippetRunPanel = ({ elapsed_time={workflowRunningData.result?.elapsed_time} total_tokens={workflowRunningData.result?.total_tokens} created_at={workflowRunningData.result?.created_at} - created_by={workflowRunningData.result?.created_by} + created_by={(workflowRunningData.result?.created_by as unknown as { name: string })?.name} steps={workflowRunningData.result?.total_steps} exceptionCounts={workflowRunningData.result?.exceptions_count} /> diff --git a/web/app/components/snippets/hooks/__tests__/use-get-run-and-trace-url.spec.ts b/web/app/components/snippets/hooks/__tests__/use-get-run-and-trace-url.spec.ts new file mode 100644 index 0000000000..96da348f26 --- /dev/null +++ b/web/app/components/snippets/hooks/__tests__/use-get-run-and-trace-url.spec.ts @@ -0,0 +1,22 @@ +import { renderHook } from '@testing-library/react' +import { useGetRunAndTraceUrl } from '../use-get-run-and-trace-url' + +describe('useGetRunAndTraceUrl', () => { + it('should build snippet workflow run and trace urls from the snippet id', () => { + const { result } = renderHook(() => useGetRunAndTraceUrl('snippet-1')) + + expect(result.current.getWorkflowRunAndTraceUrl('run-1')).toEqual({ + runUrl: '/snippets/snippet-1/workflow-runs/run-1', + traceUrl: '/snippets/snippet-1/workflow-runs/run-1/node-executions', + }) + }) + + it('should return empty urls when no run id is provided', () => { + const { result } = renderHook(() => useGetRunAndTraceUrl('snippet-1')) + + expect(result.current.getWorkflowRunAndTraceUrl()).toEqual({ + runUrl: '', + traceUrl: '', + }) + }) +}) diff --git a/web/app/components/snippets/hooks/use-get-run-and-trace-url.ts b/web/app/components/snippets/hooks/use-get-run-and-trace-url.ts new file mode 100644 index 0000000000..5d26360835 --- /dev/null +++ b/web/app/components/snippets/hooks/use-get-run-and-trace-url.ts @@ -0,0 +1,21 @@ +import { useCallback } from 'react' + +export const useGetRunAndTraceUrl = (snippetId: string) => { + const getWorkflowRunAndTraceUrl = useCallback((runId?: string) => { + if (!runId) { + return { + runUrl: '', + traceUrl: '', + } + } + + return { + runUrl: `/snippets/${snippetId}/workflow-runs/${runId}`, + traceUrl: `/snippets/${snippetId}/workflow-runs/${runId}/node-executions`, + } + }, [snippetId]) + + return { + getWorkflowRunAndTraceUrl, + } +}