From 04bd70f6379dd0c8e46a150067a75caa386f6018 Mon Sep 17 00:00:00 2001 From: "windmill-internal-app[bot]" <1429786+windmill-internal-app[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 18:12:00 +0000 Subject: [PATCH] fix: preserve table column order for integer-like column names --- frontend/src/lib/components/DisplayResult.svelte | 13 +++++++++---- .../src/lib/components/table/AutoDataTable.svelte | 12 ++++++++---- frontend/src/lib/components/table/tableUtils.ts | 7 +++++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/frontend/src/lib/components/DisplayResult.svelte b/frontend/src/lib/components/DisplayResult.svelte index 8ac06662d8..1a41b4c09c 100644 --- a/frontend/src/lib/components/DisplayResult.svelte +++ b/frontend/src/lib/components/DisplayResult.svelte @@ -378,7 +378,10 @@ } } - function handleArrayOfObjectsHeaders(json: any) { + function handleArrayOfObjectsHeaders(json: any): { + rows: any[] + explicitHeaders?: string[] + } { // handle possible a first row of headers if ( Array.isArray(json) && @@ -401,10 +404,10 @@ rows[i - 1] = obj } - return rows + return { rows, explicitHeaders: headers } } - return json + return { rows: json } } type InputObject = { [key: string]: number[] } @@ -635,11 +638,13 @@ typeof result === 'object' && 'table-row-object' in result ? result['table-row-object'] : result} + {@const { rows, explicitHeaders } = handleArrayOfObjectsHeaders(data)} div]:h-full [&>div]:min-h-[10rem]' : ''} - objects={handleArrayOfObjectsHeaders(data)} + objects={rows} + {explicitHeaders} /> {:else if !forceJson && resultKind === 'html'}
diff --git a/frontend/src/lib/components/table/AutoDataTable.svelte b/frontend/src/lib/components/table/AutoDataTable.svelte index b6f70d2307..500ef962ac 100644 --- a/frontend/src/lib/components/table/AutoDataTable.svelte +++ b/frontend/src/lib/components/table/AutoDataTable.svelte @@ -21,10 +21,11 @@ import DownloadCsv from './DownloadCsv.svelte' interface Props { objects?: Array> + explicitHeaders?: string[] class?: string } - let { objects = [], class: className }: Props = $props() + let { objects = [], explicitHeaders, class: className }: Props = $props() let currentPage = $state(1) let perPage = $state(25) @@ -36,8 +37,11 @@ }[] = $state([]) let headers: string[] = $state([]) - function recomputeObjectsAndHeaders(objects: Array>) { - ;[headers, structuredObjects] = computeStructuredObjectsAndHeaders(objects) + function recomputeObjectsAndHeaders( + objects: Array>, + explicitHeaders?: string[] + ) { + ;[headers, structuredObjects] = computeStructuredObjectsAndHeaders(objects, explicitHeaders) } function adjustCurrentPage() { @@ -160,7 +164,7 @@ } } run(() => { - recomputeObjectsAndHeaders(objects) + recomputeObjectsAndHeaders(objects, explicitHeaders) }) run(() => { perPage && adjustCurrentPage() diff --git a/frontend/src/lib/components/table/tableUtils.ts b/frontend/src/lib/components/table/tableUtils.ts index db935ebe02..e7273146e0 100644 --- a/frontend/src/lib/components/table/tableUtils.ts +++ b/frontend/src/lib/components/table/tableUtils.ts @@ -8,7 +8,10 @@ export function isEmail(value: string) { return value?.includes('@') } -export function computeStructuredObjectsAndHeaders(objects: Array>): [ +export function computeStructuredObjectsAndHeaders( + objects: Array>, + explicitHeaders?: string[] +): [ string[], { _id: number @@ -18,7 +21,7 @@ export function computeStructuredObjectsAndHeaders(objects: Array { let rowData = obj && typeof obj == 'object' ? obj : {} if (Array.isArray(rowData)) {