From e969af9e44d1b4409064080e8662552ee3e262e8 Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Thu, 19 Jan 2023 14:52:32 +0100 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20add=20support=20for=20backgro?= =?UTF-8?q?und=20scripts=20+=20add=20FormButtonCo=E2=80=A6=20(#1124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(frontend): add support for background scripts + add FormButtonComponnet * feat(frontend): add background script fields * feat(frontend): Handle deletion + display of results * feat(frontend): Fix background script ids: Runnable ids needs to be valid js expression, because they are used in the evaluator. * feat(frontend): add a portal to display modal * feat(frontend): fix build * feat(frontend): Add missing props * feat(frontend): Fix run button + add tooltip + fix icon --- frontend/package-lock.json | 11 + frontend/package.json | 3 +- .../apps/components/HiddenComponent.svelte | 28 +++ .../apps/components/buttons/AppButton.svelte | 4 +- .../apps/components/form/AppFormButton.svelte | 159 +++++++++++++ .../apps/editor/ComponentEditor.svelte | 7 + .../components/apps/editor/GridEditor.svelte | 13 ++ .../apps/editor/SettingsPanel.svelte | 17 +- .../apps/editor/componentsPanel/data.ts | 208 +++++++++++------- .../editor/contextPanel/ContextPanel.svelte | 2 + .../InlineScriptEditor.svelte | 5 +- .../InlineScriptsPanel.svelte | 30 ++- .../InlineScriptsPanelList.svelte | 63 +++++- .../settingsPanel/ComponentPanel.svelte | 2 +- .../mainInput/RunnableSelector.svelte | 29 +-- frontend/src/lib/components/apps/types.ts | 41 ++-- frontend/src/lib/components/apps/utils.ts | 83 +++++-- .../ConfirmationModal.svelte | 9 +- .../UnsavedConfirmationModal.svelte | 8 +- .../lib/components/common/modal/Modal.svelte | 76 +++++++ .../(root)/(logged)/apps/add/+page.svelte | 3 +- 21 files changed, 644 insertions(+), 157 deletions(-) create mode 100644 frontend/src/lib/components/apps/components/HiddenComponent.svelte create mode 100644 frontend/src/lib/components/apps/components/form/AppFormButton.svelte create mode 100644 frontend/src/lib/components/common/modal/Modal.svelte diff --git a/frontend/package-lock.json b/frontend/package-lock.json index bf32b04a43..ca3e1b96f2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -24,6 +24,7 @@ "monaco-yaml": "^4.0.2", "svelte-autosize": "^1.0.1", "svelte-chartjs": "^3.1.0", + "svelte-portal": "^2.2.0", "svelte-select": "^5.0.2", "vscode-ws-jsonrpc": "^2.0.1" }, @@ -6256,6 +6257,11 @@ "svelte": ">=3" } }, + "node_modules/svelte-portal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/svelte-portal/-/svelte-portal-2.2.0.tgz", + "integrity": "sha512-jhtZWtD6cUE2nMw46dJ5VXWYiqnER+JH+V/BmNBQ5fNP/YdsJCpJi+DemUy9msklqGb0f+wLhJPBtKHLWQvzjg==" + }, "node_modules/svelte-preprocess": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz", @@ -11548,6 +11554,11 @@ "dev": true, "requires": {} }, + "svelte-portal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/svelte-portal/-/svelte-portal-2.2.0.tgz", + "integrity": "sha512-jhtZWtD6cUE2nMw46dJ5VXWYiqnER+JH+V/BmNBQ5fNP/YdsJCpJi+DemUy9msklqGb0f+wLhJPBtKHLWQvzjg==" + }, "svelte-preprocess": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index dd5bc7b8f4..910f271e1f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,8 +21,8 @@ "@sveltejs/package": "^1.0.1", "@tailwindcss/forms": "^0.5.3", "@tailwindcss/typography": "^0.5.8", - "@types/vscode": "~1.74.0", "@types/node": "^18.11.18", + "@types/vscode": "~1.74.0", "@typescript-eslint/eslint-plugin": "^5.46.1", "@typescript-eslint/parser": "^5.48.0", "@windmill-labs/svelvet": "^4.0.20", @@ -77,6 +77,7 @@ "monaco-yaml": "^4.0.2", "svelte-autosize": "^1.0.1", "svelte-chartjs": "^3.1.0", + "svelte-portal": "^2.2.0", "svelte-select": "^5.0.2", "vscode-ws-jsonrpc": "^2.0.1" }, diff --git a/frontend/src/lib/components/apps/components/HiddenComponent.svelte b/frontend/src/lib/components/apps/components/HiddenComponent.svelte new file mode 100644 index 0000000000..ab76911659 --- /dev/null +++ b/frontend/src/lib/components/apps/components/HiddenComponent.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte index 262961aa65..4908997a94 100644 --- a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte +++ b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte @@ -86,11 +86,11 @@ e?.stopPropagation() window.dispatchEvent(new Event('pointerup')) }} - on:click={(e) => { + on:click={async (e) => { e?.stopPropagation() e?.preventDefault() ownClick = true - runnableComponent?.runComponent() + await runnableComponent?.runComponent() if (recomputeIds) { recomputeIds.forEach((id) => { diff --git a/frontend/src/lib/components/apps/components/form/AppFormButton.svelte b/frontend/src/lib/components/apps/components/form/AppFormButton.svelte new file mode 100644 index 0000000000..30166c49a2 --- /dev/null +++ b/frontend/src/lib/components/apps/components/form/AppFormButton.svelte @@ -0,0 +1,159 @@ + + + + + + + + + { + open = false + }} + on:confirmed={() => { + open = false + }} + > + +
+
+ {#if noInputs} +
+ Run forms are associated with a runnable that has user inputs. +
+ Once a script or flow is chosen, set some Runnable Inputs to + + User Input + + +
+ {/if} +
+
+ +
+
+
+
+
+ + + {#if errorsMessage} +
{errorsMessage}
+ {/if} + +
diff --git a/frontend/src/lib/components/apps/editor/ComponentEditor.svelte b/frontend/src/lib/components/apps/editor/ComponentEditor.svelte index ee3ed634f8..9ea8e17bf4 100644 --- a/frontend/src/lib/components/apps/editor/ComponentEditor.svelte +++ b/frontend/src/lib/components/apps/editor/ComponentEditor.svelte @@ -19,6 +19,7 @@ import AppTimeseries from '../components/dataDisplay/AppTimeseries.svelte' import AppHtml from '../components/dataDisplay/AppHtml.svelte' import AppSliderInputs from '../components/numberInputs/AppSliderInputs.svelte' + import AppFormButton from '../components/form/AppFormButton.svelte' import VegaLiteHtml from '../components/dataDisplay/VegaLiteHtml.svelte' export let component: AppComponent @@ -124,6 +125,12 @@ bind:componentInput={component.componentInput} bind:staticOutputs={$staticOutputs[component.id]} /> + {:else if component.type === 'formbuttoncomponent'} + {:else if component.type === 'checkboxcomponent'} {:else if component.type === 'textinputcomponent'} diff --git a/frontend/src/lib/components/apps/editor/GridEditor.svelte b/frontend/src/lib/components/apps/editor/GridEditor.svelte index f6dfab6164..1a46fd32c3 100644 --- a/frontend/src/lib/components/apps/editor/GridEditor.svelte +++ b/frontend/src/lib/components/apps/editor/GridEditor.svelte @@ -8,6 +8,7 @@ import RecomputeAllComponents from './RecomputeAllComponents.svelte' import type { Policy } from '$lib/gen' + import HiddenComponent from '../components/HiddenComponent.svelte' export let policy: Policy @@ -176,6 +177,18 @@ +{#each $app.hiddenInlineScripts as script, index} + {#if script} + + {/if} +{/each} +