more migration

This commit is contained in:
Diego Imbert
2026-01-12 14:17:31 +01:00
parent f51849e3e3
commit 688b5aed7f
8 changed files with 144 additions and 144 deletions
@@ -19,16 +19,16 @@
interface Props {
extendedJobs?: ExtendedJobs | undefined
maxIsNow?: boolean
minTimeSet?: string | undefined
maxTimeSet?: string | undefined
minTimeSet?: string | null
maxTimeSet?: string | null
onZoom: (zoom: { min: Date; max: Date }) => void
}
let {
extendedJobs = undefined,
maxIsNow = false,
minTimeSet = undefined,
maxTimeSet = undefined,
minTimeSet = null,
maxTimeSet = null,
onZoom
}: Props = $props()
@@ -157,8 +157,8 @@
}
function computeMinMaxTime(
intervals: AggregatedInterval[] | undefined,
minTimeSet: string | undefined,
maxTimeSet: string | undefined
minTimeSet: string | null,
maxTimeSet: string | null
) {
let minTimeSetDate = minTimeSet ? new Date(minTimeSet) : undefined
let maxTimeSetDate = maxTimeSet ? new Date(maxTimeSet) : undefined
+6 -6
View File
@@ -23,8 +23,8 @@
interface Props {
jobs?: CompletedJob[] | undefined
maxIsNow?: boolean
minTimeSet?: string | undefined
maxTimeSet?: string | undefined
minTimeSet?: string | null
maxTimeSet?: string | null
selectedIds?: string[]
canSelect?: boolean
lastFetchWentToEnd?: boolean
@@ -37,8 +37,8 @@
let {
jobs = [],
maxIsNow = false,
minTimeSet = undefined,
maxTimeSet = undefined,
minTimeSet = null,
maxTimeSet = null,
selectedIds = $bindable([]),
canSelect = true,
lastFetchWentToEnd = false,
@@ -163,8 +163,8 @@
function computeMinMaxTime(
jobs: CompletedJob[] | undefined,
minTimeSet: string | undefined,
maxTimeSet: string | undefined
minTimeSet: string | null,
maxTimeSet: string | null
) {
let minTimeSetDate = minTimeSet ? new Date(minTimeSet) : undefined
let maxTimeSetDate = maxTimeSet ? new Date(maxTimeSet) : undefined
+80 -80
View File
@@ -73,7 +73,12 @@
.nullable()
.default(null),
show_skipped: z.boolean().default(false),
show_schedules: z.boolean().default(true)
show_schedules: z.boolean().default(true),
min_ts: z.string().nullable().default(null),
max_ts: z.string().nullable().default(null),
schedule_path: z.string().nullable().default(null),
job_kinds: z.string().default('runs'),
all_workspaces: z.boolean().default(false)
})
)
let jobs: Job[] | undefined = $state()
@@ -97,13 +102,6 @@
(page.url.searchParams.get('job_trigger_kind') as JobTriggerKind) ?? undefined
)
// Handled on the main page
let minTs = $state(page.url.searchParams.get('min_ts') ?? undefined)
let maxTs = $state(page.url.searchParams.get('max_ts') ?? undefined)
let schedulePath = $state(page.url.searchParams.get('schedule_path') ?? undefined)
let jobKindsCat = $state(page.url.searchParams.get('job_kinds') ?? 'runs')
let allWorkspaces = $state(page.url.searchParams.get('all_workspaces') == 'true')
let lastFetchWentToEnd = $state(false)
function loadFromQuery() {
@@ -115,13 +113,7 @@
: undefined
jobTriggerKind = (page.url.searchParams.get('job_trigger_kind') as JobTriggerKind) ?? undefined
// Handled on the main page
minTs = page.url.searchParams.get('min_ts') ?? undefined
maxTs = page.url.searchParams.get('max_ts') ?? undefined
schedulePath = page.url.searchParams.get('schedule_path') ?? undefined
perPage = parseInt(page.url.searchParams.get('per_page') ?? DEFAULT_RUNS_PER_PAGE.toString())
jobKindsCat = page.url.searchParams.get('job_kinds') ?? 'runs'
allWorkspaces = page.url.searchParams.get('all_workspaces') == 'true'
}
let queue_count: Tweened<number> | undefined = $state(undefined)
@@ -178,24 +170,24 @@
if (resultError == '' && argError == '') {
filterTimeout && clearTimeout(filterTimeout)
filterTimeout = setTimeout(() => {
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}, 2000)
}
}
function reset() {
minTs = undefined
maxTs = undefined
filters.min_ts = null
filters.max_ts = null
jobs = undefined
completedJobs = undefined
lastFetchWentToEnd = false
selectedManualDate = 0
selectedIds = []
schedulePath = undefined
filters.schedule_path = null
batchReRunOptions = { flow: {}, script: {} }
selectionMode = false
selectedWorkspace = undefined
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}
async function loadUsernames(): Promise<void> {
@@ -222,7 +214,7 @@
filters.concurrency_key = null
filters.tag = null
filters.worker = null
schedulePath = undefined
filters.schedule_path = null
}
function filterByUser(e: CustomEvent<string>) {
@@ -232,7 +224,7 @@
filters.label = null
filters.concurrency_key = null
filters.tag = null
schedulePath = undefined
filters.schedule_path = null
}
function filterByFolder(e: CustomEvent<string>) {
@@ -243,7 +235,7 @@
filters.concurrency_key = null
filters.tag = null
filters.worker = null
schedulePath = undefined
filters.schedule_path = null
}
function filterByLabel(e: CustomEvent<string>) {
@@ -255,7 +247,7 @@
filters.tag = null
filters.worker = null
filters.allow_wildcards = false
schedulePath = undefined
filters.schedule_path = null
}
function filterByConcurrencyKey(e: CustomEvent<string>) {
@@ -266,7 +258,7 @@
filters.concurrency_key = e.detail
filters.tag = null
filters.worker = null
schedulePath = undefined
filters.schedule_path = null
}
function filterByTag(e: CustomEvent<string>) {
@@ -278,7 +270,7 @@
filters.tag = e.detail
filters.worker = null
filters.allow_wildcards = false
schedulePath = undefined
filters.schedule_path = null
}
function filterBySchedule(e: CustomEvent<string>) {
@@ -289,7 +281,7 @@
filters.concurrency_key = null
filters.tag = null
filters.worker = null
schedulePath = e.detail
filters.schedule_path = e.detail
}
function filterByWorker(e: CustomEvent<string>) {
@@ -301,7 +293,7 @@
filters.tag = null
filters.worker = e.detail
filters.allow_wildcards = false
schedulePath = undefined
filters.schedule_path = null
}
let calendarChangeTimeout: ReturnType<typeof setInterval> | undefined = $state(undefined)
@@ -341,9 +333,9 @@
function getSelectedFilters() {
return {
workspace: $workspaceStore ?? '',
startedBefore: maxTs,
startedAfter: minTs,
schedulePath,
startedBefore: filters.max_ts ?? undefined,
startedAfter: filters.min_ts ?? undefined,
schedulePath: filters.schedule_path ?? undefined,
scriptPathExact: filters.path === null || filters.path === '' ? undefined : filters.path,
createdBy: filters.user || undefined,
scriptPathStart: filters.folder ? `f/${filters.folder}/` : undefined,
@@ -359,7 +351,7 @@
isSkipped: filters.show_skipped ? undefined : false,
// isFlowStep: jobKindsCat != 'all' ? false : undefined,
hasNullParent:
filters.path != undefined || filters.path != undefined || jobKindsCat != 'all'
filters.path != undefined || filters.path != undefined || filters.job_kinds != 'all'
? true
: undefined,
label: filters.label || undefined,
@@ -380,7 +372,7 @@
? resultFilter
: undefined,
jobTriggerKind,
allWorkspaces: allWorkspaces || undefined,
allWorkspaces: filters.all_workspaces || undefined,
allowWildcards: filters.allow_wildcards || undefined
}
}
@@ -398,7 +390,7 @@
forceCancel: forceCancel
})
selectedIds = []
jobsLoader?.loadJobs(minTs, maxTs, true, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true, true)
sendUserToast(`Canceled ${uuids.length} jobs`)
selectionMode = false
}
@@ -505,7 +497,7 @@
selectedIds = []
batchReRunOptions = { flow: {}, script: {} }
jobsLoader?.loadJobs(minTs, maxTs, true, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true, true)
selectionMode = false
}
@@ -514,7 +506,7 @@
selectedIds = []
loadingSelectedIds = true
if (jobKindsCat !== 'runs') {
if (filters.job_kinds !== 'runs') {
sendUserToast('Batch re-run is only supported for scripts and flows', true)
}
selectedIds = await JobService.listFilteredJobsUuids({
@@ -554,13 +546,13 @@
filters.concurrency_key = null
filters.tag = null
filters.worker = null
schedulePath = undefined
filters.schedule_path = null
if (filters.success == f) {
filters.success = null
} else {
filters.success = f
}
jobKindsCat = 'all'
filters.job_kinds = 'all'
}
$effect(() => {
@@ -620,7 +612,7 @@
<JobsLoader
allowWildcards={filters.allow_wildcards}
{allWorkspaces}
allWorkspaces={filters.all_workspaces}
bind:jobs
user={filters.user}
folder={filters.folder}
@@ -636,11 +628,11 @@
{jobTriggerKind}
showSchedules={filters.show_schedules}
showFutureJobs={filters.show_future_jobs}
{schedulePath}
{jobKindsCat}
schedulePath={filters.schedule_path}
jobKindsCat={filters.job_kinds}
computeMinAndMax={manualDatePicker?.computeMinMax}
bind:minTs
bind:maxTs
bind:minTs={filters.min_ts}
bind:maxTs={filters.max_ts}
bind:jobKinds
bind:queue_count
bind:suspended_count
@@ -763,70 +755,78 @@
<!-- Dates -->
<div class="flex flex-row gap-2">
<RunOption label="From" for="min-datetimes">
{#if minTs || maxTs}
{#if filters.min_ts || filters.max_ts}
<input
type="text"
class="!text-sm text-primary !bg-surface-secondary h-9 !border-none"
value={minTs ? new Date(minTs).toLocaleString() : 'zoom x axis to set min'}
value={filters.min_ts
? new Date(filters.min_ts).toLocaleString()
: 'zoom x axis to set min'}
disabled
name="min-datetimes"
/>
{/if}
<CalendarPicker
clearable={true}
date={minTs}
date={filters.min_ts}
label="From"
class={minTs || maxTs ? '' : 'relative top-0 bottom-0 left-0 right-0 h-[34px]'}
class={filters.min_ts || filters.max_ts
? ''
: 'relative top-0 bottom-0 left-0 right-0 h-[34px]'}
on:change={async ({ detail }) => {
minTs = new Date(detail).toISOString()
filters.min_ts = new Date(detail).toISOString()
calendarChangeTimeout && clearTimeout(calendarChangeTimeout)
calendarChangeTimeout = setTimeout(() => {
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}, 1000)
}}
on:clear={async () => {
minTs = undefined
filters.min_ts = null
calendarChangeTimeout && clearTimeout(calendarChangeTimeout)
calendarChangeTimeout = setTimeout(() => {
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}, 1000)
}}
/>
</RunOption>
<RunOption label="To" for="max-datetimes">
{#if maxTs || minTs}
{#if filters.max_ts || filters.min_ts}
<input
type="text"
class="!text-sm text-primary !bg-surface-secondary h-9 !border-none"
value={maxTs ? new Date(maxTs).toLocaleString() : 'zoom x axis to set max'}
value={filters.max_ts
? new Date(filters.max_ts).toLocaleString()
: 'zoom x axis to set max'}
name="max-datetimes"
disabled
/>
{/if}
<CalendarPicker
clearable={true}
date={maxTs}
date={filters.max_ts}
label="To"
class={minTs || maxTs ? '' : 'relative top-0 bottom-0 left-0 right-0 h-[34px]'}
class={filters.min_ts || filters.max_ts
? ''
: 'relative top-0 bottom-0 left-0 right-0 h-[34px]'}
on:change={async ({ detail }) => {
maxTs = new Date(detail).toISOString()
filters.max_ts = new Date(detail).toISOString()
calendarChangeTimeout && clearTimeout(calendarChangeTimeout)
calendarChangeTimeout = setTimeout(() => {
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}, 1000)
}}
on:clear={async () => {
maxTs = undefined
filters.max_ts = null
calendarChangeTimeout && clearTimeout(calendarChangeTimeout)
calendarChangeTimeout = setTimeout(() => {
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}, 1000)
}}
/>
</RunOption>
{#if minTs || maxTs}
{#if filters.min_ts || filters.max_ts}
<RunOption label="Reset" for="reset" noLabel>
<Button variant="default" size="xs" onClick={reset} btnClasses="h-9">Reset</Button>
</RunOption>
@@ -851,13 +851,13 @@
bind:jobTriggerKind
bind:argError
bind:resultError
bind:jobKindsCat
bind:allWorkspaces
bind:schedulePath
bind:jobKindsCat={filters.job_kinds}
bind:allWorkspaces={filters.all_workspaces}
bind:schedulePath={filters.schedule_path}
on:change={reloadJobsWithoutFilterError}
on:successChange={(e) => {
if (e.detail == 'running' && maxTs != undefined) {
maxTs = undefined
if (e.detail == 'running' && filters.max_ts != undefined) {
filters.max_ts = null
}
}}
{usernames}
@@ -865,7 +865,7 @@
{paths}
mobile={innerWidth < verySmallScreenWidth}
small={innerWidth < smallScreenWidth}
calendarSmall={!minTs && !maxTs}
calendarSmall={!filters.min_ts && !filters.max_ts}
/>
</div>
</div>
@@ -939,17 +939,17 @@
{lastFetchWentToEnd}
bind:selectedIds
canSelect={!selectionMode}
minTimeSet={minTs}
maxTimeSet={maxTs}
minTimeSet={filters.min_ts}
maxTimeSet={filters.max_ts}
totalRowsFetched={jobs?.length ?? 0}
maxIsNow={maxTs == undefined}
maxIsNow={filters.max_ts == undefined}
onLoadExtra={loadExtra}
jobs={completedJobs}
onZoom={async (zoom) => {
minTs = zoom.min.toISOString()
maxTs = zoom.max.toISOString()
filters.min_ts = zoom.min.toISOString()
filters.max_ts = zoom.max.toISOString()
manualDatePicker?.resetChoice()
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}}
onPointClicked={(ids) => {
runsTable?.scrollToRun(ids)
@@ -957,14 +957,14 @@
/>
{:else if graph === 'ConcurrencyChart'}
<ConcurrentJobsChart
minTimeSet={minTs}
maxTimeSet={maxTs}
maxIsNow={maxTs == undefined}
minTimeSet={filters.min_ts}
maxTimeSet={filters.max_ts}
maxIsNow={filters.max_ts == undefined}
{extendedJobs}
onZoom={async (zoom) => {
minTs = zoom.min.toISOString()
maxTs = zoom.max.toISOString()
jobsLoader?.loadJobs(minTs, maxTs, true)
filters.min_ts = zoom.min.toISOString()
filters.max_ts = zoom.max.toISOString()
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}}
/>
{/if}
@@ -1049,10 +1049,10 @@
<ManuelDatePicker
on:loadJobs={() => {
lastFetchWentToEnd = false
jobsLoader?.loadJobs(minTs, maxTs, true)
jobsLoader?.loadJobs(filters.min_ts, filters.max_ts, true)
}}
bind:minTs
bind:maxTs
bind:minTs={filters.min_ts}
bind:maxTs={filters.max_ts}
bind:selectedManualDate
{loading}
bind:this={manualDatePicker}
@@ -6,7 +6,7 @@
import DateTimeInput from '$lib/components/DateTimeInput.svelte'
import { twMerge } from 'tailwind-merge'
export let date: string | undefined
export let date: string | null
export let label: string
export let useDropdown: boolean = false
export let clearable: boolean = false
@@ -32,10 +32,10 @@
argFilter: string | undefined
resultFilter?: string | undefined
jobTriggerKind?: JobTriggerKind | undefined
schedulePath?: string | undefined
jobKindsCat?: string | undefined
minTs?: string | undefined
maxTs?: string | undefined
schedulePath?: string | null
jobKindsCat?: string | null
minTs: string | null
maxTs: string | null
jobKinds?: string
queue_count?: Tweened<number> | undefined
suspended_count?: Tweened<number> | undefined
@@ -52,9 +52,9 @@
refreshRate?: number
syncQueuedRunsCount?: boolean
allWorkspaces?: boolean
computeMinAndMax: (() => { minTs: string; maxTs: string | undefined } | undefined) | undefined
computeMinAndMax: (() => { minTs: string; maxTs: string | null } | undefined) | undefined
lookback?: number
perPage?: number
perPage: number
allowWildcards?: boolean
}
@@ -73,18 +73,18 @@
resultFilter = undefined,
jobTriggerKind = undefined,
schedulePath = undefined,
jobKindsCat = undefined,
minTs = $bindable(undefined),
maxTs = $bindable(undefined),
jobKinds = $bindable(undefined),
queue_count = $bindable(undefined),
suspended_count = $bindable(undefined),
jobKindsCat = null,
minTs = $bindable(),
maxTs = $bindable(),
jobKinds = $bindable(),
queue_count = $bindable(),
suspended_count = $bindable(),
autoRefresh = true,
completedJobs = $bindable(undefined),
externalJobs = $bindable(undefined),
completedJobs = $bindable(),
externalJobs = $bindable(),
concurrencyKey,
tag,
extendedJobs = $bindable(undefined),
extendedJobs = $bindable(),
argError = '',
resultError = '',
loading = $bindable(false),
@@ -93,7 +93,7 @@
allWorkspaces = false,
computeMinAndMax,
lookback = 0,
perPage = $bindable(1000),
perPage = $bindable(),
allowWildcards = false
}: Props = $props()
let intervalId: ReturnType<typeof setInterval> | undefined = $state()
@@ -120,8 +120,8 @@
return promise
}
function computeJobKinds(jobKindsCat: string | undefined): string {
if (jobKindsCat == undefined && jobKinds != undefined) {
function computeJobKinds(jobKindsCat: string | null): string {
if (jobKindsCat == null && jobKinds != null) {
return jobKinds
}
if (jobKindsCat == 'all') {
@@ -192,8 +192,8 @@
}
function fetchJobs(
completedBefore: string | undefined,
completedAfter: string | undefined,
completedBefore: string | null,
completedAfter: string | null,
createdAfterQueue: string | undefined
): CancelablePromise<Job[]> {
loadingFetch = true
@@ -201,10 +201,10 @@
let scriptPathExact = path === null || path === '' ? undefined : path
let promise = JobService.listJobs({
workspace: $workspaceStore!,
completedBefore,
completedAfter,
completedBefore: completedBefore ?? undefined,
completedAfter: completedAfter ?? undefined,
createdAfterQueue,
schedulePath,
schedulePath: schedulePath ?? undefined,
scriptPathExact,
createdBy: user === null || user === '' ? undefined : user,
scriptPathStart: scriptPathStart,
@@ -253,20 +253,20 @@
function fetchExtendedJobs(
concurrencyKey: string | null,
createdBeforeQueue: string | undefined,
completedAfter: string | undefined
createdBeforeQueue: string | null,
completedAfter: string | null
): CancelablePromise<ExtendedJobs> {
loadingFetch = true
let promise = ConcurrencyGroupsService.listExtendedJobs({
rowLimit: perPage,
concurrencyKey: concurrencyKey == null || concurrencyKey == '' ? undefined : concurrencyKey,
workspace: $workspaceStore!,
completedAfter,
createdBeforeQueue: createdBeforeQueue,
completedAfter: completedAfter ?? undefined,
createdBeforeQueue: createdBeforeQueue ?? undefined,
// createdOrStartedBefore: startedBefore,
// createdOrStartedAfter: startedAfter,
// createdOrStartedAfterCompletedJobs: startedAfterCompletedJobs,
schedulePath,
schedulePath: schedulePath ?? undefined,
scriptPathExact: path === null || path === '' ? undefined : path,
createdBy: user === null || user === '' ? undefined : user,
scriptPathStart: folder === null || folder === '' ? undefined : `f/${folder}/`,
@@ -302,8 +302,8 @@
}
export async function loadJobs(
nMinTs: string | undefined,
nMaxTs: string | undefined,
nMinTs: string | null,
nMaxTs: string | null,
reset: boolean,
shouldGetCount?: boolean
): Promise<void> {
@@ -334,7 +334,7 @@
const extendedMinTs = subtractDaysFromDateString(minTs, lookback)
if (concurrencyKey == null || concurrencyKey === '') {
return CancelablePromiseUtils.map(fetchJobs(maxTs, undefined, extendedMinTs), (newJobs) => {
return CancelablePromiseUtils.map(fetchJobs(maxTs, null, extendedMinTs), (newJobs) => {
extendedJobs = { jobs: newJobs, obscured_jobs: [] } as ExtendedJobs
// Filter on minTs here and not in the backend
@@ -346,7 +346,7 @@
})
} else {
return CancelablePromiseUtils.map(
fetchExtendedJobs(concurrencyKey, maxTs, extendedMinTs),
fetchExtendedJobs(concurrencyKey, maxTs, extendedMinTs ?? null),
(newExtendedJobs) => {
extendedJobs = newExtendedJobs
const newJobs = newExtendedJobs.jobs
@@ -399,8 +399,8 @@
async function syncer() {
if (success == 'waiting') {
minTs = undefined
maxTs = undefined
minTs = null
maxTs = null
}
if (loadingFetch) {
return
@@ -426,7 +426,7 @@
loadJobsIntern(false)
} else {
let minQueueCreatedAt: string | undefined = undefined
let completedTs: string | undefined = undefined
let completedTs: string | null = null
let cursor = 0
@@ -491,8 +491,8 @@
return ret
}
function sortMinDate(minTs: string | undefined, jobs: Job[]) {
if (minTs != undefined) {
function sortMinDate(minTs: string | null, jobs: Job[]) {
if (minTs) {
const minDate = new Date(minTs)
return jobs.filter((x) =>
x.started_at
@@ -4,8 +4,8 @@
import { createEventDispatcher } from 'svelte'
interface Props {
minTs: string | undefined
maxTs: string | undefined
minTs: string | null
maxTs: string | null
loading?: boolean
selectedManualDate?: number
loadText?: string | undefined
@@ -23,7 +23,7 @@
numberOfLastJobsToFetch = 1000
}: Props = $props()
export function computeMinMax(): { minTs: string; maxTs: string | undefined } | undefined {
export function computeMinMax(): { minTs: string; maxTs: string | null } | undefined {
return manualDates[selectedManualDate].computeMinMax()
}
@@ -33,13 +33,13 @@
function computeMinMaxInc(inc: number) {
let minTs = new Date(new Date().getTime() - inc).toISOString()
let maxTs = undefined
let maxTs = null
return { minTs, maxTs }
}
const fixedManualDates: {
label: string
computeMinMax: () => { minTs: string; maxTs: string | undefined } | undefined
computeMinMax: () => { minTs: string; maxTs: string | null } | undefined
}[] = [
...(!serviceLogsChoices
? [
@@ -110,8 +110,8 @@
minTs = ts.minTs
maxTs = ts.maxTs
} else {
minTs = undefined
maxTs = undefined
minTs = null
maxTs = null
}
dispatch('loadJobs')
}
@@ -38,7 +38,7 @@
user?: string | null
folder?: string | null
mobile?: boolean
schedulePath: string | undefined
schedulePath: string | null
allowWildcards?: boolean
// Autocomplete data
paths?: string[]
@@ -120,7 +120,7 @@
let displayedLabel = $derived(label)
let displayedConcurrencyKey = $derived(concurrencyKey)
let displayedTag = $derived(tag)
let displayedSchedule = $derived(schedulePath)
let displayedSchedule = $derived(schedulePath ?? undefined)
let displayedWorker = $derived(worker)
$effect(() => {
;(path || user || folder || label || worker || concurrencyKey || tag || schedulePath) &&
@@ -134,7 +134,7 @@
label = null
concurrencyKey = null
tag = null
schedulePath = undefined
schedulePath = null
worker = null
}
</script>
@@ -407,7 +407,7 @@
<button
class="absolute top-2 right-2 z-50"
onclick={() => {
schedulePath = undefined
schedulePath = null
dispatch('reset')
}}
>
@@ -426,7 +426,7 @@
}
tagTimeout = setTimeout(() => {
schedulePath = displayedSchedule
schedulePath = displayedSchedule ?? null
}, 1000)
},
id: 'schedulePath'
@@ -687,7 +687,7 @@
label = null
concurrencyKey = null
tag = null
schedulePath = undefined
schedulePath = null
}
}}
>
+1 -1
View File
@@ -146,7 +146,7 @@ export function retrieveCommonWorkerPrefix(workerName: string): string {
}
export function subtractDaysFromDateString(
dateString: string | undefined,
dateString: string | null,
days: number
): string | undefined {
if (dateString == undefined) {