diff --git a/frontend/src/lib/common.ts b/frontend/src/lib/common.ts index f1503a9d2c..a010ac00d0 100644 --- a/frontend/src/lib/common.ts +++ b/frontend/src/lib/common.ts @@ -1,8 +1,10 @@ +import type { Script } from "./gen" + export type OwnerKind = 'group' | 'user' export type ActionKind = 'Create' | 'Update' | 'Delete' | 'Execute' -export type SupportedLanguage = 'deno' | 'python3' | 'go' | 'bash' +export type SupportedLanguage = Script.language export interface SchemaProperty { type: string | undefined diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 24bc72af37..c3f0b6d4bd 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -188,7 +188,7 @@ - + @@ -241,9 +241,11 @@ -
- +
+
+ +
diff --git a/frontend/src/lib/components/InputTransformForm.svelte b/frontend/src/lib/components/InputTransformForm.svelte index c40e1b9447..da602db015 100644 --- a/frontend/src/lib/components/InputTransformForm.svelte +++ b/frontend/src/lib/components/InputTransformForm.svelte @@ -67,6 +67,7 @@ arg.expr = getDefaultExpr(undefined, previousModuleId, rawValue) arg.type = 'javascript' propertyType = 'javascript' + monaco?.setCode(arg.expr) } } @@ -92,8 +93,8 @@ {#if arg != undefined} -
-
+
+
{/if}
-
- { - const staticTemplate = isStaticTemplate(inputCat) - if (e.detail === 'javascript') { - arg.expr = getDefaultExpr( - argName, - previousModuleId, - staticTemplate ? `\`${arg.value ?? ''}\`` : arg.value - ) +
+
+ { + const staticTemplate = isStaticTemplate(inputCat) + if (e.detail === 'javascript') { + arg.expr = getDefaultExpr( + argName, + previousModuleId, + staticTemplate + ? `\`${arg.value ?? ''}\`` + : arg.value + ? JSON.stringify(arg.value, null, 4) + : '' + ) - arg.value = undefined - propertyType = 'javascript' - arg.type = 'javascript' - } else { - arg.value = staticTemplate ? codeToStaticTemplate(arg.expr) : undefined - arg.expr = undefined - propertyType = 'static' - if (!isStaticTemplate) { - arg.type = 'static' + arg.value = undefined + propertyType = 'javascript' + arg.type = 'javascript' } else { - setPropertyType(arg.value) + arg.value = staticTemplate ? codeToStaticTemplate(arg.expr) : undefined + arg.expr = undefined + propertyType = 'static' + if (!isStaticTemplate) { + arg.type = 'static' + } else { + setPropertyType(arg.value) + } } - } - }} - > - {#if isStaticTemplate(inputCat)} - Template - {:else} - Static - {/if} + }} + > + {#if isStaticTemplate(inputCat)} + Template + {:else} + Static + {/if} - - Dynamic (JS) - - + + Dynamic (JS) + + +
+
+ +
-
diff --git a/frontend/src/lib/components/SchemaEditor.svelte b/frontend/src/lib/components/SchemaEditor.svelte index 0f9397a42b..bbec06a9c5 100644 --- a/frontend/src/lib/components/SchemaEditor.svelte +++ b/frontend/src/lib/components/SchemaEditor.svelte @@ -135,12 +135,17 @@ } function changePosition(i: number, up: boolean): any { + isAnimated = true + setTimeout(() => { + isAnimated = false + }, 500) const entries = Object.entries(schema.properties) var element = entries[i] entries.splice(i, 1) entries.splice(up ? i - 1 : i + 1, 0, element) schema.properties = Object.fromEntries(entries) } + let isAnimated = false
@@ -148,8 +153,8 @@
changePosition(i, true)} + class="text-lg mr-2 {isAnimated ? 'invisible' : ''}" + > + ↑ {/if} {#if i < Object.keys(schema.properties).length - 1} - changePosition(i, false)} + class="text-lg mr-2 {isAnimated ? 'invisible' : ''}">↓ {/if} diff --git a/frontend/src/lib/components/ScriptBuilder.svelte b/frontend/src/lib/components/ScriptBuilder.svelte index b3c8875615..4670fd7608 100644 --- a/frontend/src/lib/components/ScriptBuilder.svelte +++ b/frontend/src/lib/components/ScriptBuilder.svelte @@ -19,14 +19,21 @@ import { faChevronDown, faChevronUp, faPen, faSave } from '@fortawesome/free-solid-svg-icons' import Breadcrumb from './common/breadcrumb/Breadcrumb.svelte' import Toggle from './Toggle.svelte' + import LanguageIcon from './common/languageIcons/LanguageIcon.svelte' + import type { SupportedLanguage } from '$lib/common' export let script: Script export let initialPath: string = '' export let template: 'pgsql' | 'script' = 'script' export let initialArgs: Record = {} + const langs: [string, SupportedLanguage][] = [ + ['Typescript (Deno)', Script.language.DENO], + ['Python 3.11', Script.language.PYTHON3], + ['Go', Script.language.GO], + ['Bash', Script.language.BASH] + ] let viewScriptKind = script.kind !== Script.kind.SCRIPT - let viewTemplate = script.kind !== Script.kind.SCRIPT && script.language == Script.language.DENO let pathError = '' @@ -185,18 +192,36 @@ />

Language

-
- initContent(e.detail, script.kind, template)} - bind:value={script.language} - /> +
+ {#each langs as [label, lang]} + {@const isPicked = script.language == lang && template == 'script'} + + {/each} +

Advanced

@@ -206,7 +231,7 @@ endIcon={{ icon: viewScriptKind ? faChevronUp : faChevronDown }} on:click={() => (viewScriptKind = !viewScriptKind)} > - Specialize the script as a specific module kind for flows + Tag this script as having a specific purpose inside flows
{#if viewScriptKind} @@ -249,31 +274,6 @@ />
{/if} - {#if script.language == 'deno' && script.kind == Script.kind.SCRIPT} -
-
- {#if viewTemplate} -
- initContent(script.language, script.kind, e.detail)} - bind:value={template} - /> -
- {/if} - {/if}
(hidden = !hidden) - + import type { SupportedLanguage } from '$lib/common' + import PostgresIcon from '$lib/components/icons/PostgresIcon.svelte' import type { SvelteComponent } from 'svelte' import { BashIcon, GoIcon, PythonIcon, TypeScriptIcon } from './' - export let lang: SupportedLanguage + export let lang: SupportedLanguage | 'pgsql' export let width = 16 export let height = 16 export let scale = 1 - const langToComponent: Record = { + const langToComponent: Record = { go: GoIcon, python3: PythonIcon, deno: TypeScriptIcon, - bash: BashIcon + bash: BashIcon, + pgsql: PostgresIcon } diff --git a/frontend/src/lib/components/common/menu/Menu.svelte b/frontend/src/lib/components/common/menu/Menu.svelte index dbd24e0d84..3d529e7796 100644 --- a/frontend/src/lib/components/common/menu/Menu.svelte +++ b/frontend/src/lib/components/common/menu/Menu.svelte @@ -1,8 +1,8 @@
-
(show = !show)} on:click> + +
(show = !show)}>
{#if show}