Files
windmill/frontend/src/lib/components/FlowHistoryJobPicker.svelte
Guilhem 8569675612 fix(frontend): add timeline to the flow log viewer (#6577)
* Fix flow time display

* Make compute timeline a separate component

* Add timeline to log viewer

* Add timeline for subflows

* remove debug log

* fix progresion display while running

* Handle loop iteration

* nit

* Display all iteration for loops

* Show total execution time for loop steps

* Show subflow timeline

* Do not hightlight selected iteration

* Add subflow duration and starting time

* Allow zoom on subflow timeline

* Show execution time

* Improve timeline layout

* nit

* hover effect

* add show timeline toggle

* reset log viewer state when job id changes

* Display history loader in flow preview

* handle branch one

* reset timeline on jobId change

* nit

* fix branch chosen default

* improve time display

* improve look v1

* improve look v2

* Allow loading of more iterations when limit is reached

* fix display

* Add tooltip

* Use popover to display durations

* allow select iteration from timeline

* remove debug log

* fix iteration to index for long loops

* select iteration based on id

* Use localModuleState to get current display job ids

* clean subflow job creation

* improve subflow fetching

* fix load more position

* improve parallele display

* clean

* Add color status

* remove unwanted change

* prevent toggle expand on click timeline

* fix expand running module

* make timeline optional

* prevent running flow be marked as error

* Fix width jump during execution

* fix typo

* nit

* Use a class for timeline computation

* nit
2025-09-15 17:24:12 +00:00

58 lines
1.5 KiB
Svelte

<script lang="ts">
import { HistoryIcon } from 'lucide-svelte'
import { createEventDispatcher } from 'svelte'
import PopoverV2 from '$lib/components/meltComponents/Popover.svelte'
import HistoricInputs from './HistoricInputs.svelte'
import { workspaceStore } from '$lib/stores'
import { JobService } from '$lib/gen'
export let path: string
export let selected: string | undefined = undefined
export let selectInitial: boolean = false
export let loading: boolean = false
const dispatch = createEventDispatcher()
async function loadInitial() {
loading = true
let jobs = await JobService.listJobs({
workspace: $workspaceStore!,
scriptPathExact: path,
jobKinds: ['flow', 'flowpreview'].join(','),
page: 1,
perPage: 1
})
if (jobs.length > 0) {
if (selectInitial) {
dispatch('select', { jobId: jobs[0].id, initial: true })
}
} else {
dispatch('nohistory')
}
loading = false
}
$: $workspaceStore && loadInitial()
</script>
<PopoverV2 closeButton={false}>
<svelte:fragment slot="trigger">
<HistoryIcon size={14} />
</svelte:fragment>
<svelte:fragment slot="content">
<div class="p-2 h-[400px] overflow-hidden w-80 border shadow-sm">
<HistoricInputs
on:select={(e) => {
if (e.detail) {
dispatch('select', { jobId: e.detail?.jobId, initial: false })
} else {
dispatch('unselect')
}
}}
{selected}
runnableId={path}
runnableType={'FlowPath'}
/>
</div>
</svelte:fragment>
</PopoverV2>