Files
windmill/frontend/src/lib/components/FlowJobResult.svelte
T
Guilhem 3b5c1657c7 fix(frontend): improve runs detail page (#7694)
* separate flow and status with splitpane

* fix autoscroll behavior

* Flow log viewer nit

* not graph viewer

* Improve flow job result

* Create job detail header to replace metadata

* Remove FlowPreviewResult

* Create compact job header

* Use job header in runs page

* Improve runs page run preview

* Use flow header in detail section

* Show logs for script steps

* Clean old schedule status

* Limit result height

* Script run detail improvement

* Script run preview improvement

* Fix csv table overflow

* surface tertiary as background for Inputs

* nit

* Improve runs detail skeleton

* fix check

* nit

* Improve node definition

* fix flow module component overflow

* Use component DataTable for flow schema viewer

* Add language icon to step detail

* improve run header

* Improve Job detail header

* nit

* restore isOwner logic

* Handle resume flows

* restore execution status in run preview

* restore flow execution status in the preview

* flow preview, add status bar

* nit module status

* nit

* Remove flor preview result

* nit

* nit

* fix flow result card

* nit

* nit

* nit

* improve field selection on runs detail based on job type

* Improve column layout

* create JobStatusIcon component

* remove job status badge icons

* improve compact version

* use shared job field display

* improve job detail field display

* fix badge alignment

* increase padding

* nit

* nit

* improve compact display

* make background darker for metadata

* use auto layout

* fix auto layout

* improve display

* fix truncate logic

* fix compact

* improve flex adaptibility

* improve responsive layout

* improve extra compact header

* nit

* remove unused icons

* nit

* Improve flow result display

* nit

* merge progressbar and execution status

* handle canceled flow better
2026-02-03 17:20:35 +00:00

89 lines
2.4 KiB
Svelte

<script lang="ts">
import { Loader2 } from 'lucide-svelte'
import DisplayResult from './DisplayResult.svelte'
import LogViewer from './LogViewer.svelte'
import type { CompletedJob, Job } from '$lib/gen'
import AiAgentLogViewer from './AIAgentLogViewer.svelte'
import { twMerge } from 'tailwind-merge'
import type { AgentTool } from './flows/agentToolUtils'
interface Props {
waitingForExecutor?: boolean
result: any
result_stream?: string
logs: string | undefined
col?: boolean
loading: boolean
filename?: string | undefined
jobId?: string | undefined
tag?: string | undefined
workspaceId?: string | undefined
refreshLog?: boolean
downloadLogs?: boolean
tagLabel?: string | undefined
aiAgentStatus?: {
tools: AgentTool[]
agentJob: Partial<CompletedJob> & Pick<CompletedJob, 'id'> & { type: 'CompletedJob' }
storedToolCallJobs?: Record<number, Job>
onToolJobLoaded?: (job: Job, idx: number) => void
}
}
let {
waitingForExecutor = false,
result,
result_stream,
logs,
col = false,
loading,
filename = undefined,
jobId = undefined,
tag = undefined,
workspaceId = undefined,
downloadLogs = true,
tagLabel = undefined,
aiAgentStatus = undefined
}: Props = $props()
</script>
<div
class={twMerge(
'grow overflow-hidden text-xs',
!col ? 'grid grid-cols-2 gap-2' : 'flex flex-col max-h-screen gap-6 overflow-hidden'
)}
>
<div class="relative flex flex-col gap-1">
<span class="text-emphasis text-xs font-semibold">Result</span>
<div
class="{col
? 'max-h-1/2 grow'
: 'max-h-80'} overflow-auto rounded-md grow min-h-0 border bg-surface-tertiary p-2"
>
{#if result !== undefined || result_stream !== undefined}
<DisplayResult {workspaceId} {jobId} {filename} {result} {result_stream} growVertical />
{:else if loading}
<Loader2 class="animate-spin" />
{:else}
<div class="text-secondary">No result (result is undefined)</div>
{/if}
</div>
</div>
<div class="relative flex flex-col gap-1">
<span class="text-emphasis text-xs font-semibold">Logs</span>
{#if aiAgentStatus}
<AiAgentLogViewer {...aiAgentStatus} {workspaceId} noPadding />
{:else}
<div class="rounded-md grow min-h-0 border bg-surface-tertiary overflow-hidden">
<LogViewer
{tagLabel}
download={downloadLogs}
content={logs ?? ''}
{jobId}
isLoading={waitingForExecutor}
{tag}
/>
</div>
{/if}
</div>
</div>