From ec49d63a65e929211aa56491ed8fd422a7fb93da Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Wed, 24 Apr 2024 18:16:27 +0200 Subject: [PATCH] feat: add planned later toggle on runs --- .../calendarPicker/CalendarPicker.svelte | 2 + .../src/lib/components/runs/JobLoader.svelte | 5 +- .../(logged)/runs/[...path]/+page.svelte | 82 ++++++++++++++++--- 3 files changed, 75 insertions(+), 14 deletions(-) diff --git a/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte b/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte index ff1a68e583..e30d0285b7 100644 --- a/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte +++ b/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte @@ -7,6 +7,7 @@ export let date: string | undefined export let label: string + export let useDropdown: boolean = false const dispatch = createEventDispatcher() let input: HTMLInputElement @@ -33,6 +34,7 @@
{label}
{ date = e.detail diff --git a/frontend/src/lib/components/runs/JobLoader.svelte b/frontend/src/lib/components/runs/JobLoader.svelte index dbfa8aaeef..ef338055fb 100644 --- a/frontend/src/lib/components/runs/JobLoader.svelte +++ b/frontend/src/lib/components/runs/JobLoader.svelte @@ -14,7 +14,8 @@ export let path: string | null export let success: 'success' | 'failure' | 'running' | undefined = undefined export let isSkipped: boolean = false - export let showSchedules: boolean = false + export let showSchedules: boolean = true + export let showFutureJobs: boolean = true export let argFilter: string | undefined export let resultFilter: string | undefined = undefined export let schedulePath: string | undefined = undefined @@ -45,6 +46,7 @@ jobKinds && user && folder && + showFutureJobs != undefined && showSchedules != undefined && allWorkspaces != undefined && argFilter != undefined && @@ -110,6 +112,7 @@ isFlowStep: jobKindsCat != 'all' ? false : undefined, label: label === null || label === '' ? undefined : label, isNotSchedule: showSchedules == false ? true : undefined, + scheduledForBeforeNow: showFutureJobs == false ? true : undefined, args: argFilter && argFilter != '{}' && argFilter != '' && argError == '' ? argFilter : undefined, result: diff --git a/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte b/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte index 9811445636..349c9ac029 100644 --- a/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/runs/[...path]/+page.svelte @@ -30,7 +30,7 @@ import { twMerge } from 'tailwind-merge' import ManuelDatePicker from '$lib/components/runs/ManuelDatePicker.svelte' import JobLoader from '$lib/components/runs/JobLoader.svelte' - import { Calendar } from 'lucide-svelte' + import { Calendar, Clock } from 'lucide-svelte' let jobs: Job[] | undefined let selectedId: string | undefined = undefined @@ -51,12 +51,18 @@ ? $page.url.searchParams.get('is_skipped') == 'true' : false - let showSchedules: boolean | undefined = + let showSchedules: boolean = $page.url.searchParams.get('show_schedules') != undefined ? $page.url.searchParams.get('show_schedules') == 'true' : localStorage.getItem('show_schedules_in_run') == 'false' ? false : true + let showFutureJobs: boolean = + $page.url.searchParams.get('show_future_jobs') != undefined + ? $page.url.searchParams.get('show_future_jobs') == 'true' + : localStorage.getItem('show_future_jobs') == 'false' + ? false + : true let argFilter: any = $page.url.searchParams.get('arg') ? JSON.parse(decodeURIComponent($page.url.searchParams.get('arg') ?? '{}')) @@ -98,6 +104,7 @@ success !== undefined || isSkipped || showSchedules || + showFutureJobs || argFilter || resultFilter || schedulePath || @@ -141,6 +148,12 @@ searchParams.delete('show_schedules') } + if (showFutureJobs) { + searchParams.set('show_future_jobs', showFutureJobs.toString()) + } else { + searchParams.delete('show_future_jobs') + } + if (allWorkspaces && $workspaceStore == 'admins') { searchParams.set('all_workspaces', allWorkspaces.toString()) searchParams.set('workspace', 'admins') @@ -265,6 +278,8 @@ folder = null label = e.detail } + + let calendarChangeTimeout: NodeJS.Timeout | undefined = undefined - Jobs from schedules + CRON Schedules
+
+ Planned later + { + localStorage.setItem('show_future_jobs', showFutureJobs ? 'true' : 'false') + }} + /> + +
@@ -416,6 +443,10 @@ label="Min datetimes" on:change={async ({ detail }) => { minTs = new Date(detail).toISOString() + calendarChangeTimeout && clearTimeout(calendarChangeTimeout) + calendarChangeTimeout = setTimeout(() => { + jobLoader?.loadJobs(minTs, maxTs, true) + }, 1000) }} />
@@ -433,6 +464,10 @@ label="Max datetimes" on:change={async ({ detail }) => { maxTs = new Date(detail).toISOString() + calendarChangeTimeout && clearTimeout(calendarChangeTimeout) + calendarChangeTimeout = setTimeout(() => { + jobLoader?.loadJobs(minTs, maxTs, true) + }, 1000) }} />
@@ -555,17 +590,30 @@ on:click={async () => (cancelAllJobs = true)}>Cancel All
-
- { - localStorage.setItem('show_schedules_in_run', showSchedules ? 'true' : 'false') - }} - /> - Schedules +
+
+ { + localStorage.setItem('show_schedules_in_run', showSchedules ? 'true' : 'false') + }} + /> + Schedules - + +
+
+ Planned later + { + localStorage.setItem('show_future_jobs', showFutureJobs ? 'true' : 'false') + }} + /> + +
@@ -585,6 +633,10 @@ label="Min datetimes" on:change={async ({ detail }) => { minTs = new Date(detail).toISOString() + calendarChangeTimeout && clearTimeout(calendarChangeTimeout) + calendarChangeTimeout = setTimeout(() => { + jobLoader?.loadJobs(minTs, maxTs, true) + }, 1000) }} />
@@ -602,6 +654,10 @@ label="Max datetimes" on:change={async ({ detail }) => { maxTs = new Date(detail).toISOString() + calendarChangeTimeout && clearTimeout(calendarChangeTimeout) + calendarChangeTimeout = setTimeout(() => { + jobLoader?.loadJobs(minTs, maxTs, true) + }, 1000) }} />