diff --git a/frontend/src/lib/components/EditorBar.svelte b/frontend/src/lib/components/EditorBar.svelte index 23bec9c76c..0752b2acbe 100644 --- a/frontend/src/lib/components/EditorBar.svelte +++ b/frontend/src/lib/components/EditorBar.svelte @@ -86,6 +86,10 @@ iconOnly?: boolean compactHelpers?: boolean validCode?: boolean + // Asset-parse validity, when the context cares about it (pipeline + // editor). `undefined` = not applicable; `false` makes the badge red + // even if the main function parses. + validAssets?: boolean | undefined kind?: 'script' | 'trigger' | 'approval' template?: | 'pgsql' @@ -122,6 +126,7 @@ iconOnly = false, compactHelpers = false, validCode = true, + validAssets = undefined, kind = 'script', template = 'script', collabMode = false, @@ -945,8 +950,14 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
{#if compactHelpers} diff --git a/frontend/src/lib/components/ScriptEditor.svelte b/frontend/src/lib/components/ScriptEditor.svelte index 324f6829ff..0777c8be47 100644 --- a/frontend/src/lib/components/ScriptEditor.svelte +++ b/frontend/src/lib/components/ScriptEditor.svelte @@ -150,6 +150,11 @@ saveToWorkspace?: boolean watchChanges?: boolean customUi?: ScriptEditorWhitelabelCustomUi | undefined + // Pipeline editor: an asset-parse failure should also turn the + // "parsable" badge red — asset lineage is load-bearing there, so a + // green badge must mean both the main function AND the asset parse + // succeeded. + requireValidAssets?: boolean args: Record selectedTab?: 'main' | 'preprocessor' | 'diagram' hasPreprocessor?: boolean @@ -206,6 +211,7 @@ saveToWorkspace = false, watchChanges = false, customUi = undefined, + requireValidAssets = false, args = $bindable(), selectedTab = $bindable('main'), hasPreprocessor = $bindable(false), @@ -553,6 +559,12 @@ () => inferAssetsRes.current?.sql_queries, () => $workspaceStore ) + // Asset-parse validity for the editor badge. `undefined` while loading (so + // the badge doesn't flicker red); only an explicit parser error counts as + // invalid. Surfaced only when `requireValidAssets` (pipeline editor). + let validAssets = $derived( + requireValidAssets ? inferAssetsRes.current?.status !== 'error' : undefined + ) const dispatch = createEventDispatcher() @@ -1605,6 +1617,7 @@ collabLive={wsProvider?.shouldConnect} {collabMode} {validCode} + {validAssets} iconOnly={width < EDITOR_BAR_WIDTH_THRESHOLD} compactHelpers={width < EDITOR_BAR_HELPERS_COMPACT_THRESHOLD} on:collabPopup={() => (showCollabPopup = true)} diff --git a/frontend/src/lib/components/assets/AssetGraph/AssetGraphDetailsPane.svelte b/frontend/src/lib/components/assets/AssetGraph/AssetGraphDetailsPane.svelte index 71d4f85921..e5c3605033 100644 --- a/frontend/src/lib/components/assets/AssetGraph/AssetGraphDetailsPane.svelte +++ b/frontend/src/lib/components/assets/AssetGraph/AssetGraphDetailsPane.svelte @@ -1052,6 +1052,7 @@ bind:this={scriptEditorRef} showCaptures={false} noSyncFromGithub + requireValidAssets lang={script.language} path={script.path} tag={script.tag}