From 65bacdcd7dece79e6f4aef0e265fdad76a470cd7 Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Wed, 4 Oct 2023 14:28:37 +0200 Subject: [PATCH] Tutorials improvement (#2384) * fix(frontend): fix tutorials * fix(frontend): simplify * fix(frontend): simplify * fix(frontend): fix skip all * fix(frontend): fix toggle * fix(frontend): simplify --- .../src/lib/components/FlowBuilder.svelte | 30 +++- .../components/FlowBuilderTutorials.svelte | 161 +++++++++++------- .../src/lib/components/FlowTutorials.svelte | 44 +++++ .../lib/components/flows/FlowEditor.svelte | 2 +- .../flows/content/FlowSettings.svelte | 2 +- .../flows/map/FlowModuleSchemaMap.svelte | 43 +++-- .../components/tutorials/FlowBranchAll.svelte | 20 +-- .../components/tutorials/FlowBranchOne.svelte | 20 +-- .../FlowBuilderTutorialSimpleFlow.svelte | 22 +-- .../FlowBuilderTutorialsForLoop.svelte | 20 +-- .../components/tutorials/TutorialItem.svelte | 33 ++-- .../src/lib/components/tutorials/utils.ts | 6 + 12 files changed, 251 insertions(+), 152 deletions(-) create mode 100644 frontend/src/lib/components/FlowTutorials.svelte diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 52a2ff3e32..c4edad0df6 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -14,6 +14,7 @@ copilotInfo, enterpriseLicense, hubScripts, + tutorialsToDo, userStore, workspaceStore } from '$lib/stores' @@ -56,6 +57,9 @@ import FlowCopilotInputsModal from './copilot/FlowCopilotInputsModal.svelte' import FlowBuilderTutorials from './FlowBuilderTutorials.svelte' + import FlowTutorials from './FlowTutorials.svelte' + import { tainted } from './tutorials/utils' + export let initialPath: string = '' export let selectedId: string | undefined export let initialArgs: Record = {} @@ -847,6 +851,18 @@ $: $copilotCurrentStepStore === undefined && blurCopilot() let renderCount = 0 + let flowTutorials: FlowTutorials | undefined = undefined + + $: if (!tainted($flowStore) && loading === false) { + const urlParams = new URLSearchParams(window.location.search) + const tutorial = urlParams.get('tutorial') + + if (tutorial) { + flowTutorials?.runTutorialById(tutorial) + } else if ($tutorialsToDo.includes(0)) { + flowTutorials?.runTutorialById('action') + } + } @@ -983,7 +999,12 @@ {#if $flowStateStore} - + { + renderCount += 1 + }} + /> {:else} Loading... {/if} @@ -992,3 +1013,10 @@ Flow Builder not available to operators {/if} {/key} + + { + renderCount += 1 + }} +/> diff --git a/frontend/src/lib/components/FlowBuilderTutorials.svelte b/frontend/src/lib/components/FlowBuilderTutorials.svelte index 0f9cf30c30..633cdc8a5c 100644 --- a/frontend/src/lib/components/FlowBuilderTutorials.svelte +++ b/frontend/src/lib/components/FlowBuilderTutorials.svelte @@ -3,81 +3,110 @@ import ButtonDropdown from './common/button/ButtonDropdown.svelte' import Button from './common/button/Button.svelte' - import FlowBuilderTutorialSimpleFlow from './tutorials/FlowBuilderTutorialSimpleFlow.svelte' - import FlowBuilderTutorialsForLoop from './tutorials/FlowBuilderTutorialsForLoop.svelte' - import FlowBranchOne from './tutorials/FlowBranchOne.svelte' - import FlowBranchAll from './tutorials/FlowBranchAll.svelte' import MenuItem from './common/menu/MenuItem.svelte' import { classNames } from '$lib/utils' import { resetAllTodos, skipAllTodos } from '$lib/tutorialUtils' - import { tutorialsToDo } from '$lib/stores' - import { getContext } from 'svelte' - import type { FlowEditorContext } from './flows/types' + import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte' + import TutorialItem from './tutorials/TutorialItem.svelte' + import FlowTutorials from './FlowTutorials.svelte' - const { flowStore } = getContext('FlowEditorContext') - - let flowBuilderTutorialSimpleFlow: FlowBuilderTutorialSimpleFlow | undefined = undefined - - $: tainted = - $flowStore.value.modules.length > 0 || Object.keys($flowStore?.schema?.properties).length > 0 - - let automaticallyRan: boolean = false - - $: if (!automaticallyRan && $tutorialsToDo.includes(0)) { - automaticallyRan = true - flowBuilderTutorialSimpleFlow?.runTutorial() - } + let targetTutorial: string | undefined = undefined + let flowTutorials: FlowTutorials | undefined = undefined -{#if !tainted} - - - - - - - -
- { - resetAllTodos() - }} - > -
- Reset tutorials -
-
- skipAllTodos()}> -
- Skip tutorials -
-
- - - -{/if} + + + + flowTutorials?.runTutorialById('action')} + label="Simple flow tutorial" + index={0} + id="flow-builder-tutorial-action" + /> - flowTutorials?.runTutorialById('forloop')} + label="For loops tutorial" + index={1} + id="flow-builder-tutorial-forloops" + /> + + flowTutorials?.runTutorialById('branchone')} + label="Branch one tutorial" + index={2} + id="flow-builder-tutorial-branchone" + /> + + flowTutorials?.runTutorialById('branchall')} + label="Branch all tutorial" + index={3} + id="flow-builder-tutorial-branchall" + /> + +
+ { + resetAllTodos() + }} + > +
+ Reset tutorials +
+
+ skipAllTodos()}> +
+ Skip tutorials +
+
+ + + + + { + targetTutorial = detail.detail + }} + on:skipAll={() => { + skipAllTodos() + }} + on:reload /> + { + targetTutorial = undefined + }} + on:confirmed={async () => { + window.open(`/flows/add?tutorial=${targetTutorial}&nodraft=true`, '_blank') + }} +> +
+ You need to create a new flow before starting the tutorial. +
+
+