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)
}}
/>