From bcdff7d6f19eca381690b3abdf0bb5debb73c4c3 Mon Sep 17 00:00:00 2001 From: Guillaume Bouvignies Date: Fri, 13 Oct 2023 11:34:39 -0700 Subject: [PATCH] Filter script kinds in the backend (#2450) --- backend/windmill-api/openapi-deref.yaml | 4 ++-- backend/windmill-api/openapi.yaml | 4 ++-- backend/windmill-api/src/scripts.rs | 11 +++++++++-- backend/windmill-common/src/scripts.rs | 2 +- .../lib/components/ErrorOrRecoveryHandler.svelte | 2 +- frontend/src/lib/components/ScriptPicker.svelte | 13 +------------ .../lib/components/flows/pickers/PickScript.svelte | 2 +- .../flows/pickers/WorkspaceScriptPicker.svelte | 2 +- 8 files changed, 18 insertions(+), 22 deletions(-) diff --git a/backend/windmill-api/openapi-deref.yaml b/backend/windmill-api/openapi-deref.yaml index 3ee84662e6..824b865d8b 100644 --- a/backend/windmill-api/openapi-deref.yaml +++ b/backend/windmill-api/openapi-deref.yaml @@ -3820,10 +3820,10 @@ paths: in: query schema: type: boolean - - name: kind + - name: kinds description: | (default regardless) - script kind + script kinds to filter, split by comma in: query schema: type: string diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index def0af0af2..671d05506f 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -2773,10 +2773,10 @@ paths: in: query schema: type: boolean - - name: kind + - name: kinds description: | (default regardless) - script kind + script kinds to filter, split by comma in: query schema: type: string diff --git a/backend/windmill-api/src/scripts.rs b/backend/windmill-api/src/scripts.rs index e0582e5cd2..f35174d53e 100644 --- a/backend/windmill-api/src/scripts.rs +++ b/backend/windmill-api/src/scripts.rs @@ -218,8 +218,15 @@ async fn list_scripts( if let Some(it) = &lq.is_template { sqlb.and_where_eq("is_template", it); } - if let Some(k) = &lq.kind { - sqlb.and_where_eq("kind", "?".bind(&k.to_lowercase())); + if let Some(kinds_val) = &lq.kinds { + let lowercased_kinds: Vec = kinds_val + .split(",") + .map(&str::to_lowercase) + .map(sql_builder::quote) + .collect(); + if lowercased_kinds.len() > 0 { + sqlb.and_where_in("kind", lowercased_kinds.as_slice()); + } } if lq.starred_only.unwrap_or(false) { sqlb.and_where_is_not_null("favorite.path"); diff --git a/backend/windmill-common/src/scripts.rs b/backend/windmill-common/src/scripts.rs index af17eae543..1da85d5446 100644 --- a/backend/windmill-common/src/scripts.rs +++ b/backend/windmill-common/src/scripts.rs @@ -231,7 +231,7 @@ pub struct ListScriptQuery { pub order_by: Option, pub order_desc: Option, pub is_template: Option, - pub kind: Option, + pub kinds: Option, pub starred_only: Option, } diff --git a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte index 69265fb5cd..a35966ac5c 100644 --- a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte +++ b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte @@ -169,7 +169,7 @@ ({ value: script.path, label: `${script.path}${script.summary ? ` | ${truncate(script.summary, 20)}` : ''}` }) ) - } else { - items = (await ScriptService.listScripts({ workspace: $workspaceStore! })).filter( - (script) => kinds.includes(script.kind) - ).map( - (script) => ({ - value: script.path, - label: `${script.path}${script.summary ? ` | ${truncate(script.summary, 20)}` : ''}` - }) - ) - } } else { items = $hubScripts?.map((x) => ({ diff --git a/frontend/src/lib/components/flows/pickers/PickScript.svelte b/frontend/src/lib/components/flows/pickers/PickScript.svelte index 1161e29373..1e6bcff260 100644 --- a/frontend/src/lib/components/flows/pickers/PickScript.svelte +++ b/frontend/src/lib/components/flows/pickers/PickScript.svelte @@ -14,7 +14,7 @@ const dispatch = createEventDispatcher() async function loadItems(): Promise { - return await ScriptService.listScripts({ workspace: $workspaceStore!, kind }) + return await ScriptService.listScripts({ workspace: $workspaceStore!, kinds: kind }) } diff --git a/frontend/src/lib/components/flows/pickers/WorkspaceScriptPicker.svelte b/frontend/src/lib/components/flows/pickers/WorkspaceScriptPicker.svelte index f50bbf05ba..671d9c5a53 100644 --- a/frontend/src/lib/components/flows/pickers/WorkspaceScriptPicker.svelte +++ b/frontend/src/lib/components/flows/pickers/WorkspaceScriptPicker.svelte @@ -29,7 +29,7 @@ $: $workspaceStore && kind && loadItems() async function loadItems(): Promise { - items = await ScriptService.listScripts({ workspace: $workspaceStore!, kind, isTemplate }) + items = await ScriptService.listScripts({ workspace: $workspaceStore!, kinds: kind, isTemplate }) } let ownerFilter: string | undefined = undefined