mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-20 08:01:35 +00:00
59 lines
1.5 KiB
Svelte
59 lines
1.5 KiB
Svelte
<script lang="ts">
|
|
import { getContext } from 'svelte'
|
|
import type { AppViewerContext, CancelablePromise, InlineScript } from '../../types'
|
|
import { Button, Kbd } from '$lib/components/common'
|
|
import { getModifierKey } from '$lib/utils'
|
|
import { Loader2 } from 'lucide-svelte'
|
|
|
|
export let id: string
|
|
export let inlineScript: InlineScript | undefined = undefined
|
|
export let runLoading = false
|
|
export let hideShortcut = false
|
|
|
|
const { runnableComponents } = getContext<AppViewerContext>('AppViewerContext')
|
|
let cancelable: CancelablePromise<void>[] | undefined = undefined
|
|
</script>
|
|
|
|
{#if $runnableComponents[id] != undefined}
|
|
{#if !runLoading}
|
|
<Button
|
|
loading={runLoading}
|
|
size="xs"
|
|
color="dark"
|
|
btnClasses="!px-2 !py-1"
|
|
on:click={async () => {
|
|
runLoading = true
|
|
try {
|
|
cancelable = $runnableComponents[id]?.cb?.map((f) => f(inlineScript))
|
|
await Promise.all(cancelable)
|
|
} catch {}
|
|
runLoading = false
|
|
}}
|
|
>
|
|
<div class="flex flex-row gap-1 items-center">
|
|
Run
|
|
{#if !hideShortcut}
|
|
<div class="flex flex-row items-center">
|
|
<Kbd small isModifier>{getModifierKey()}</Kbd>
|
|
<Kbd small><span class="text-lg font-bold">⏎</span></Kbd>
|
|
</div>
|
|
{/if}
|
|
</div>
|
|
</Button>
|
|
{:else}
|
|
<Button
|
|
size="xs"
|
|
color="red"
|
|
variant="border"
|
|
btnClasses="!px-2 !py-1.5"
|
|
on:click={async () => {
|
|
cancelable?.forEach((f) => f.cancel())
|
|
runLoading = false
|
|
}}
|
|
>
|
|
<Loader2 size={14} class="animate-spin mr-2" />
|
|
Cancel
|
|
</Button>
|
|
{/if}
|
|
{/if}
|