From 2de7134b85d8249f661e3db34ff43c29b13fa0aa Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Tue, 23 Sep 2025 15:03:37 +0000 Subject: [PATCH] fix: improve scripts duplicity error in global search --- .../windmill-worker/src/python_executor.rs | 7 ++++ frontend/src/lib/components/JobArgs.svelte | 4 +- .../table/AppAggridInfiniteTable.svelte | 18 +++++++-- .../display/table/SyncColumnDefs.svelte | 5 ++- .../components/helpers/RefreshButton.svelte | 6 ++- .../helpers/RunnableComponent.svelte | 40 ------------------- .../components/helpers/RunnableWrapper.svelte | 1 + .../lib/components/common/layout/List.svelte | 26 ++++++++---- .../src/lib/components/home/ItemsList.svelte | 3 +- 9 files changed, 54 insertions(+), 56 deletions(-) diff --git a/backend/windmill-worker/src/python_executor.rs b/backend/windmill-worker/src/python_executor.rs index 57936969b8..b31de6e184 100644 --- a/backend/windmill-worker/src/python_executor.rs +++ b/backend/windmill-worker/src/python_executor.rs @@ -2054,6 +2054,13 @@ pub async fn handle_python_reqs( .unwrap_or(Err(anyhow!("Problem by joining handle"))) { failed = true; + append_logs( + &job_id, + w_id, + format!("\nEnv installation failed: {:?}", e), + conn, + ) + .await; tracing::warn!( workspace_id = %w_id, "Env installation failed: {:?}", diff --git a/frontend/src/lib/components/JobArgs.svelte b/frontend/src/lib/components/JobArgs.svelte index cd0c121a93..67435ebc09 100644 --- a/frontend/src/lib/components/JobArgs.svelte +++ b/frontend/src/lib/components/JobArgs.svelte @@ -81,13 +81,15 @@ ${Object.entries(args) - {#if args && Object.keys(args).length > 0} + {#if args && typeof args === 'object' && Object.keys(args).length > 0} {#each Object.entries(args).sort((a, b) => a[0].localeCompare(b[0])) as [arg, value]} {arg} {/each} + {:else if args && typeof args !== 'object'} + Argument is not an object (type: {typeof args}) {:else if args} No arguments {:else} diff --git a/frontend/src/lib/components/apps/components/display/table/AppAggridInfiniteTable.svelte b/frontend/src/lib/components/apps/components/display/table/AppAggridInfiniteTable.svelte index cd99f35a9e..eaf3804d0a 100644 --- a/frontend/src/lib/components/apps/components/display/table/AppAggridInfiniteTable.svelte +++ b/frontend/src/lib/components/apps/components/display/table/AppAggridInfiniteTable.svelte @@ -21,6 +21,7 @@ import InitializeComponent from '../../helpers/InitializeComponent.svelte' import DebouncedInput from '../../helpers/DebouncedInput.svelte' import RunnableComponent from '../../helpers/RunnableComponent.svelte' + import { CancelablePromise } from '$lib/gen' interface Props { id: string @@ -163,6 +164,8 @@ $effect(() => { searchValue !== undefined && untrack(() => updateSearchInOutputs()) }) + + let ignoreFirst = true {#each Object.keys(components['aggridinfinitecomponent'].initialData.configuration) as key (key)} @@ -194,10 +197,17 @@ bind:result bind:loading bind:runnableComponent - on:recompute={() => { - console.log('recompute') - clear() - }} + preventDefaultRefresh + overrideCallback={() => + new CancelablePromise(async (resolve) => { + if (ignoreFirst) { + ignoreFirst = false + resolve() + return + } + clear() + resolve() + })} {render} autoRefresh={true} allowConcurentRequests diff --git a/frontend/src/lib/components/apps/components/display/table/SyncColumnDefs.svelte b/frontend/src/lib/components/apps/components/display/table/SyncColumnDefs.svelte index 0b9977d948..9e45c0f770 100644 --- a/frontend/src/lib/components/apps/components/display/table/SyncColumnDefs.svelte +++ b/frontend/src/lib/components/apps/components/display/table/SyncColumnDefs.svelte @@ -118,11 +118,12 @@ } }) + let keys = $derived(Object.keys(result[0] ?? []).filter((x) => x !== '__index')) + async function syncColumns() { const gridItem = findGridItem($app, id) if (gridItem && result) { - const keys = Object.keys(result[0] ?? {}) ?? [] const conf = gridItem.data.configuration.columnDefs as ColumnDefsConfiguration const newColumns: WindmillColumnDef[] = keys.map((key) => ({ @@ -171,7 +172,7 @@
No columns definition found. Columns found in data:
- {#each Object.keys(result[0] ?? []) as key} + {#each keys as key} {key} {/each}
diff --git a/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte b/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte index fc25b2e382..14729e30fe 100644 --- a/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte @@ -32,13 +32,17 @@ color="light" size="xs2" btnClasses={twMerge(loading ? ' bg-blue-100 dark:bg-blue-400' : '', 'transition-all')} - on:click={() => { + on:click={(e) => { if (buttonHover && loading) { cancelCallbacks?.forEach((cb) => cb.cancel()) } else { cancelCallbacks = $runnableComponents[id]?.cb?.map((cb) => cb()) } }} + on:pointerdown={(e) => { + e.preventDefault() + e.stopPropagation() + }} iconOnly /> {#snippet text()} diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte index 3b6eb73854..29780ce291 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte @@ -163,48 +163,8 @@ } } - // $: sendUserToast('args' + JSON.stringify(runnableInputValues) + Boolean(extraQueryParams) || args) - // $: console.log(runnableInputValues) let firstRefresh = true - // on:started={(e) => { - // console.log('started', e.detail) - // loading = true - // setJobId(e.detail) - // dispatch('started', e.detail) - // }} - // on:done={(e) => { - // lastJobId = e.detail.id - // setResult(e.detail.result, e.detail.id) - // loading = false - // dispatch('done', { id: e.detail?.id, result: e.detail?.result }) - // }} - // on:cancel={(e) => { - // let jobId = e.detail - // console.debug('cancel', jobId) - // let job = $jobsById[jobId] - // if (job && job.created_at && !job.duration_ms) { - // $jobsById[jobId] = { - // ...job, - // started_at: job.started_at ?? Date.now(), - // duration_ms: Date.now() - (job.started_at ?? job.created_at) - // } - // } - // dispatch('cancel', { id: e.detail }) - // }} - // on:running={(e) => { - // let jobId = e.detail - // let job = $jobsById[jobId] - // if (job && !job.started_at) { - // $jobsById[jobId] = { ...job, started_at: Date.now() } - // } - // }} - // on:doneError={(e) => { - // setResult({ error: e.detail.error }, e.detail.id) - // loading = false - // dispatch('doneError', { id: e.detail.id, result: e.detail.result }) - // }} - type RunnableCallback = { onDone?: (r: any) => void onCancel?: () => void diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte index 7f4dd7856a..2874422d2f 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte @@ -91,6 +91,7 @@ onSuccess?: (result: any) => void children?: import('svelte').Snippet nonRenderedPlaceholder?: import('svelte').Snippet + preventDefaultRefresh?: boolean } let { diff --git a/frontend/src/lib/components/common/layout/List.svelte b/frontend/src/lib/components/common/layout/List.svelte index 0d57af31cd..d1be35d1ce 100644 --- a/frontend/src/lib/components/common/layout/List.svelte +++ b/frontend/src/lib/components/common/layout/List.svelte @@ -1,10 +1,22 @@