mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-04 16:03:06 +00:00
0f4e3ad8e7
* use melt menu in sidebar * stop keyboard navigation for disabled items * use melt menu for FavoriteMenu and WorkspaceMenu * fix popover placement for menuButton * use melt menu for operator menu * fix notification * fix operator menu * Use melt menu in FlowJobsMenu * use melt menu for AppMenu * clean code * clean code * add use clickOutside option to Menu * use pointerdown_outside * use pointerdown_outside # Conflicts: # frontend/src/lib/components/meltComponents/Menu.svelte * use pointerdown in menus * add max-h to app dropdown menu * keep more open in operator menu * add a MenuItem component * clean * nit * nit * clean code * put conditionalMelt as utility function * remove unused Portal * Add debounce effect in operator menu * fix component jumping due to z-index * format pages * migrate dropdown to melt * feat: remove `pip` fallback option for python and ansible (#5186) * refactor!: Remove `pip` fallback option for python and ansible BREAKING CHANGE: pip was deprecated since 1.425.0 (2024-11-15) * fix errors in main.rs * fix tests * remove nsjail for pip * fix imports * fix compilation error * reinforce melt types * fix racing condition issue in closing operator menu * nit * fix id conflix with melt element * nit * clean code * use melt dropdown instead of menubar * prevent modal from closing on click outside button in menu * fix nit * nit * close dropdown when opening a new one * clean * fix z index and render --------- Co-authored-by: pyranota <92104930+pyranota@users.noreply.github.com> Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
98 lines
2.5 KiB
Svelte
98 lines
2.5 KiB
Svelte
<script lang="ts">
|
|
import { BookOpen, CheckCircle, Circle, RefreshCw, CheckCheck } from 'lucide-svelte'
|
|
import Dropdown from '$lib/components/DropdownV2.svelte'
|
|
import Button from './common/button/Button.svelte'
|
|
import { resetAllTodos, skipAllTodos } from '$lib/tutorialUtils'
|
|
import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte'
|
|
import FlowTutorials from './FlowTutorials.svelte'
|
|
import { tutorialsToDo } from '$lib/stores'
|
|
|
|
let targetTutorial: string | undefined = undefined
|
|
let flowTutorials: FlowTutorials | undefined = undefined
|
|
|
|
async function getTutorialItems() {
|
|
const tutorials = [
|
|
{ displayName: 'Simple flow tutorials', id: 'action' },
|
|
{ displayName: 'For loops tutorial', id: 'forloop' },
|
|
{ displayName: 'Branch one tutorial', id: 'branchone' },
|
|
{ displayName: 'Branch all tutorial', id: 'branchall' },
|
|
{ displayName: 'Error handler', id: 'error-handler' }
|
|
]
|
|
|
|
return [
|
|
...tutorials.map((tutorial, index) => ({
|
|
displayName: tutorial.displayName,
|
|
action: () => flowTutorials?.runTutorialById(tutorial.id),
|
|
icon: $tutorialsToDo.includes(index) ? Circle : CheckCircle,
|
|
iconColor: $tutorialsToDo.includes(index) ? undefined : 'green'
|
|
})),
|
|
{
|
|
displayName: 'Skip tutorials',
|
|
action: () => skipAllTodos(),
|
|
icon: CheckCheck
|
|
},
|
|
{
|
|
displayName: 'Reset tutorials',
|
|
action: () => resetAllTodos(),
|
|
icon: RefreshCw
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
{#key $tutorialsToDo}
|
|
<Dropdown items={getTutorialItems} class="w-fit">
|
|
<svelte:fragment slot="buttonReplacement">
|
|
<Button
|
|
nonCaptureEvent
|
|
size="xs"
|
|
color="light"
|
|
variant="border"
|
|
id="tutorials-button"
|
|
startIcon={{ icon: BookOpen }}
|
|
/>
|
|
</svelte:fragment>
|
|
</Dropdown>
|
|
{/key}
|
|
|
|
<FlowTutorials
|
|
bind:this={flowTutorials}
|
|
on:error={({ detail }) => {
|
|
targetTutorial = detail.detail
|
|
}}
|
|
on:skipAll={() => {
|
|
skipAllTodos()
|
|
}}
|
|
on:reload
|
|
/>
|
|
|
|
<ConfirmationModal
|
|
open={targetTutorial !== undefined}
|
|
title="Tutorial error"
|
|
confirmationText="Open new tab"
|
|
on:canceled={() => {
|
|
targetTutorial = undefined
|
|
}}
|
|
on:confirmed={async () => {
|
|
window.open(`/flows/add?tutorial=${targetTutorial}&nodraft=true`, '_blank')
|
|
}}
|
|
>
|
|
<div class="flex flex-col w-full space-y-4">
|
|
<span> You need to create a new flow before starting the tutorial.</span>
|
|
</div>
|
|
</ConfirmationModal>
|
|
|
|
<style global>
|
|
.driver-popover-title {
|
|
@apply leading-6 text-primary text-base;
|
|
}
|
|
|
|
.driver-popover-description {
|
|
@apply text-secondary text-sm;
|
|
}
|
|
|
|
.driver-popover {
|
|
@apply p-6 bg-surface max-w-2xl;
|
|
}
|
|
</style>
|