diff --git a/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte b/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte index 891b931536..d500e9a33e 100644 --- a/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte +++ b/frontend/src/lib/components/triggers/schedules/ScheduleEditorInner.svelte @@ -121,6 +121,30 @@ let selectedPermissionedAs = $state(undefined) let preservePermissionedAs = $state(false) + let schema = $derived(draftSchema ?? runnable?.schema) + let hasRenderableSchema = $derived( + !!schema?.properties && Object.keys(schema.properties).length > 0 + ) + let hasArgs = $derived(args != undefined && Object.keys(args).length > 0) + // When the runnable input schema cannot be rendered (unavailable, empty, or + // without properties) but the schedule already has stored args, fall back to a + // raw JSON editor so existing args remain visible instead of implying the + // runnable takes no argument. + let rawArgsEditorCode: string | undefined = $state(undefined) + $effect(() => { + if (!hasRenderableSchema && hasArgs) { + if (rawArgsEditorCode === undefined) { + rawArgsEditorCode = JSON.stringify($state.snapshot(args), null, 2) + } + } else { + rawArgsEditorCode = undefined + } + }) + + function updateRawArgs({ detail }: { detail: any }) { + args = detail ?? {} + } + const saveDisabled = $derived( !allowSchedule || pathError != '' || @@ -738,6 +762,21 @@ }} />
+ {#snippet rawArgsFallback()} + + The {is_flow ? 'flow' : 'script'} input schema could not be rendered. The stored + arguments are shown below as raw JSON. + + {#await import('$lib/components/JsonEditor.svelte')} + + {:then Module} + + {/await} + {/snippet}