From aaf83859bd268e8bf8ecb382c2b39a92ddb40967 Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Tue, 17 Oct 2023 22:44:47 +0200 Subject: [PATCH] feat(frontend): app editor tutorials (#2443) * feat(frontend): wip * feat(frontend): skeleton done * feat(frontend): background runnables * feat(frontend): fix build * feat(frontend): finish background runnable tuto * feat(frontend): connection output * feat(frontend): add simple app tutorial * feat(frontend): add simple app trigger * feat(frontend): fix wording * feat(frontend): remove duplicate code * feat(frontend): wip tutorial rework * feat(frontend): Tutorial done * feat(frontend): Fix build --- .../src/lib/components/AppTutorials.svelte | 51 ++++ .../components/apps/editor/AppEditor.svelte | 9 +- .../apps/editor/AppEditorHeader.svelte | 8 + .../apps/editor/AppEditorTutorial.svelte | 127 ++++++++ .../apps/editor/ComponentHeader.svelte | 3 +- .../components/apps/editor/GridEditor.svelte | 4 +- .../apps/editor/PreviewToggle.svelte | 1 + .../componentsPanel/ComponentList.svelte | 8 +- .../components/OutputHeader.svelte | 1 + .../EmptyInlineScript.svelte | 13 +- .../InlineScriptsPanelList.svelte | 15 +- .../ComponentInputTypeEditor.svelte | 10 +- .../settingsPanel/ComponentPanel.svelte | 11 +- .../settingsPanel/InputsSpecEditor.svelte | 1 + .../settingsPanel/common/PanelSection.svelte | 2 + .../mainInput/RunnableSelector.svelte | 1 + .../script/shared/ScriptTransformer.svelte | 5 +- .../src/lib/components/common/tabs/Tab.svelte | 2 + .../toggleButton-v2/ToggleButton.svelte | 55 ++-- .../flows/map/FlowModuleSchemaMap.svelte | 7 +- .../flows/pickers/FlowScriptPicker.svelte | 3 + .../components/tutorials/FlowBranchAll.svelte | 6 +- .../components/tutorials/FlowBranchOne.svelte | 6 +- .../FlowBuilderTutorialsForLoop.svelte | 6 +- .../lib/components/tutorials/Tutorial.svelte | 14 +- .../components/tutorials/TutorialItem.svelte | 11 +- .../tutorials/app/AppTutorial.svelte | 283 ++++++++++++++++++ .../app/BackgroundRunnablesTutorial.svelte | 89 ++++++ .../tutorials/app/ConnectionTutorial.svelte | 127 ++++++++ .../app/ExpressionEvaluationTutorial.svelte | 29 ++ .../src/lib/components/tutorials/utils.ts | 88 ++++++ frontend/src/lib/tutorialUtils.ts | 8 +- 32 files changed, 937 insertions(+), 67 deletions(-) create mode 100644 frontend/src/lib/components/AppTutorials.svelte create mode 100644 frontend/src/lib/components/apps/editor/AppEditorTutorial.svelte create mode 100644 frontend/src/lib/components/tutorials/app/AppTutorial.svelte create mode 100644 frontend/src/lib/components/tutorials/app/BackgroundRunnablesTutorial.svelte create mode 100644 frontend/src/lib/components/tutorials/app/ConnectionTutorial.svelte create mode 100644 frontend/src/lib/components/tutorials/app/ExpressionEvaluationTutorial.svelte diff --git a/frontend/src/lib/components/AppTutorials.svelte b/frontend/src/lib/components/AppTutorials.svelte new file mode 100644 index 0000000000..f32c613bb3 --- /dev/null +++ b/frontend/src/lib/components/AppTutorials.svelte @@ -0,0 +1,51 @@ + + + + + + + diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte index ff42c37e03..cc36fd217f 100644 --- a/frontend/src/lib/components/apps/editor/AppEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte @@ -396,6 +396,12 @@ existingElement.innerHTML = theme } } + + let appEditorHeader: AppEditorHeader | undefined = undefined + + export function triggerTutorial() { + appEditorHeader?.toggleTutorial() + } @@ -404,7 +410,7 @@ {#if !$userStore?.operator} {#if $appStore} - + {#if $mode === 'preview'} @@ -530,6 +536,7 @@ selectedTab = 'insert' } }} + id="app-editor-component-library-tab" >
diff --git a/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte b/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte index fda5dfed57..eba2e20182 100644 --- a/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte @@ -62,6 +62,7 @@ import { secondaryMenuLeftStore, secondaryMenuRightStore } from './settingsPanel/secondaryMenu' import ButtonDropdown from '$lib/components/common/button/ButtonDropdown.svelte' import { MenuItem } from '@rgossiaux/svelte-headlessui' + import AppEditorTutorial from './AppEditorTutorial.svelte' async function hash(message) { try { @@ -432,6 +433,12 @@ } } ] + + let appEditorTutorial: AppEditorTutorial | undefined = undefined + + export function toggleTutorial() { + appEditorTutorial?.toggleTutorial() + } @@ -835,6 +842,7 @@ {/if}
+ + + + appTutorials?.runTutorialById('simpleapptutorial')} + label="App tutorial" + index={7} + /> + appTutorials?.runTutorialById('backgroundrunnables')} + label="Background runnables" + index={5} + /> + appTutorials?.runTutorialById('connection')} + label="Connection" + index={6} + /> + +
+ { + resetAllTodos() + }} + > +
+ Reset tutorials +
+
+ skipAllTodos()}> +
+ Skip tutorials +
+
+ + + + { + targetTutorial = detail.detail + }} +/> + + { + targetTutorial = undefined + }} + on:confirmed={async () => { + window.open(`/apps/add?tutorial=${targetTutorial}&nodraft=true`, '_blank') + }} +> +
+ This tutorial can only be run on a new app. +
+
+ + diff --git a/frontend/src/lib/components/apps/editor/ComponentHeader.svelte b/frontend/src/lib/components/apps/editor/ComponentHeader.svelte index fe561c68ee..2cf4fab52f 100644 --- a/frontend/src/lib/components/apps/editor/ComponentHeader.svelte +++ b/frontend/src/lib/components/apps/editor/ComponentHeader.svelte @@ -37,9 +37,10 @@ {#if connecting}
- +
diff --git a/frontend/src/lib/components/apps/editor/PreviewToggle.svelte b/frontend/src/lib/components/apps/editor/PreviewToggle.svelte index ff5dc6dea4..974c1352a1 100644 --- a/frontend/src/lib/components/apps/editor/PreviewToggle.svelte +++ b/frontend/src/lib/components/apps/editor/PreviewToggle.svelte @@ -19,5 +19,6 @@ icon={Eye} tooltip="Preview mode" disabled={loading} + id="app-editor-preview-toggle" /> diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte index 4d5537b846..40b596ba34 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/ComponentList.svelte @@ -51,7 +51,6 @@ if (!$workspaceStore) return const res = await getGroup($workspaceStore, group.path) - console.log(res) if (!res) return push(history, $app) @@ -108,21 +107,22 @@ -
- {#if componentsFiltered.reduce((acc, { components }) => acc + components.length, 0) === 0} +
+ {#if componentsFiltered.reduce((acc, { components, presets }) => acc + components.length + (Array.isArray(presets) ? presets.length : 0), 0) === 0}
No components found
{:else}
{#each componentsFiltered as { title, components, presets }, index (index)} - {#if components.length} + {#if components.length || presets?.length}
{#each components as item (item)}
@@ -222,6 +233,8 @@
+ +