From cc8654f53f6bbc4f77abc4044bd145588c62b86f Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 12:33:11 -0500 Subject: [PATCH 1/7] add iso option to timestamp formats, add tests --- src/lib/components/timezone-select.svelte | 5 +++++ src/lib/utilities/format-date.test.ts | 3 +++ src/lib/utilities/format-date.ts | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib/components/timezone-select.svelte b/src/lib/components/timezone-select.svelte index bbdee5d228..eeb66ba9d0 100644 --- a/src/lib/components/timezone-select.svelte +++ b/src/lib/components/timezone-select.svelte @@ -160,6 +160,11 @@ /> + setTimestampFormat('iso')}>ISO { expect(formatDate(date, 'utc', { format: 'long' })).toEqual( 'April 13, 2022 at 4:29:35.63 PM UTC', ); + expect(formatDate(date, 'utc', { format: 'iso' })).toEqual( + '2022-04-13T16:29:35.630Z', + ); }); }); diff --git a/src/lib/utilities/format-date.ts b/src/lib/utilities/format-date.ts index f9a775187f..5baacd9a43 100644 --- a/src/lib/utilities/format-date.ts +++ b/src/lib/utilities/format-date.ts @@ -57,7 +57,7 @@ export const timestampFormats: Record< }, } as const; -export type TimestampFormat = keyof typeof timestampFormats; +export type TimestampFormat = keyof typeof timestampFormats | 'iso'; export function formatDate( date: ValidTime | undefined | null, From 5da5660486d9d192cf65b32d8f6d20c6c177d78f Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 12:56:34 -0500 Subject: [PATCH 2/7] fix iso format check --- src/lib/utilities/format-date.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/utilities/format-date.ts b/src/lib/utilities/format-date.ts index 5baacd9a43..ec0106b542 100644 --- a/src/lib/utilities/format-date.ts +++ b/src/lib/utilities/format-date.ts @@ -82,6 +82,10 @@ export function formatDate( const parsed = parseJSON(new Date(date)); + if (format === 'iso') { + return parsed.toISOString(); + } + if (timeFormat === BASE_TIME_FORMAT_OPTIONS.LOCAL) { if (relative) { return ( From c11ff5f1949bdbf085fdd1369b1b67a34fd5c0fa Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 13:15:17 -0500 Subject: [PATCH 3/7] refactor layout in workflows-with-new-search.svelte so long date formats didn't push away refresh button --- src/lib/pages/workflows-with-new-search.svelte | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/pages/workflows-with-new-search.svelte b/src/lib/pages/workflows-with-new-search.svelte index 0da218970f..5ae4d90164 100644 --- a/src/lib/pages/workflows-with-new-search.svelte +++ b/src/lib/pages/workflows-with-new-search.svelte @@ -228,8 +228,8 @@
-
-
+
+

{#if $supportsAdvancedVisibility} {/if}

-

- {refreshTimeFormatted} -

+ +
- - +

+ {refreshTimeFormatted} +

{#if $$slots['header-actions'] || workflowStartEnabled}
From 8706c8dbf737d8a94e61060cf42e3c7565523d0e Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 13:29:10 -0500 Subject: [PATCH 4/7] fix: ensure formatUTCOffset returns an empty string for undefined offset --- src/lib/utilities/format-date.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/utilities/format-date.ts b/src/lib/utilities/format-date.ts index ec0106b542..ee56582109 100644 --- a/src/lib/utilities/format-date.ts +++ b/src/lib/utilities/format-date.ts @@ -131,6 +131,7 @@ export function formatUTCOffset( absoluteValue > 9 ? `${absoluteValue}:00` : `0${absoluteValue}:00`; if (offset > 0) return `${utc}+${formattedOffset}`; if (offset < 0) return `${utc}-${formattedOffset}`; + return ''; } export function getLocalTimezone(): string { From ff5272b0333e8eb4918f1c749a6558168b334be9 Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 13:49:45 -0500 Subject: [PATCH 5/7] fix: handle undefined query in workflows-with-new-search component --- src/lib/pages/workflows-with-new-search.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/pages/workflows-with-new-search.svelte b/src/lib/pages/workflows-with-new-search.svelte index 5ae4d90164..ecd4be0525 100644 --- a/src/lib/pages/workflows-with-new-search.svelte +++ b/src/lib/pages/workflows-with-new-search.svelte @@ -98,7 +98,7 @@ }); $effect(() => { - $workflowsQuery = query; + $workflowsQuery = query ?? ''; }); $effect(() => { From 586f9a371032ea542dd36a372c2e72c0e905b93f Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 16:26:06 -0500 Subject: [PATCH 6/7] fix: relative --- src/lib/utilities/format-date.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lib/utilities/format-date.ts b/src/lib/utilities/format-date.ts index ee56582109..a91758fd3b 100644 --- a/src/lib/utilities/format-date.ts +++ b/src/lib/utilities/format-date.ts @@ -82,22 +82,22 @@ export function formatDate( const parsed = parseJSON(new Date(date)); + if (relative) { + return ( + formatDistanceToNowStrict(parsed, { + ...(!flexibleUnits && + Math.abs(differenceInHours(currentDate, parsed)) > 24 && { + unit: 'day', + }), + }) + ` ${relativeLabel}` + ); + } + if (format === 'iso') { return parsed.toISOString(); } if (timeFormat === BASE_TIME_FORMAT_OPTIONS.LOCAL) { - if (relative) { - return ( - formatDistanceToNowStrict(parsed, { - ...(!flexibleUnits && - Math.abs(differenceInHours(currentDate, parsed)) > 24 && { - unit: 'day', - }), - }) + ` ${relativeLabel}` - ); - } - return new Intl.DateTimeFormat( undefined, timestampFormats[format], From a41160c92008a0ca6ee7c3adddb73ae2efb4efb0 Mon Sep 17 00:00:00 2001 From: Andrew Zamojc Date: Mon, 19 Jan 2026 16:57:48 -0500 Subject: [PATCH 7/7] improve scrolling --- src/lib/components/timezone-select.svelte | 47 ++++++++++++----------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/lib/components/timezone-select.svelte b/src/lib/components/timezone-select.svelte index eeb66ba9d0..f29aa8963a 100644 --- a/src/lib/components/timezone-select.svelte +++ b/src/lib/components/timezone-select.svelte @@ -123,6 +123,7 @@ id="timezones-menu" {position} class="w-[10rem] sm:w-[20rem] md:w-[28rem]" + maxHeight="" > - {#if !search} - {#each QuickTimezoneOptions as { value, label }} +
+ {#if !search} + {#each QuickTimezoneOptions as { value, label }} + selectTimezone(value)} + data-testid="timezones-{value}" + selected={value === $timeFormat} + description={value === BASE_TIME_FORMAT_OPTIONS.LOCAL + ? localTime + : undefined} + > + {label} + + {/each} + {/if} + + {#each filteredOptions as { value, label, offset, abbr }} selectTimezone(value)} - data-testid="timezones-{value}" selected={value === $timeFormat} - description={value === BASE_TIME_FORMAT_OPTIONS.LOCAL - ? localTime - : undefined} + onclick={() => selectTimezone(value)} + description={formatUTCOffset(offset, translate('common.utc'))} > - {label} + {label} ({abbr}) + {:else} + {translate('common.no-results')} {/each} - - - {/if} - - {#each filteredOptions as { value, label, offset, abbr }} - selectTimezone(value)} - description={formatUTCOffset(offset, translate('common.utc'))} - > - {label} ({abbr}) - - {:else} - {translate('common.no-results')} - {/each} +