mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-24 16:01:42 +00:00
484fdfa2bc
* Improve workers page * Update group config drawer * improve dirty workergroup config * Make layout reactive * fix section animation * prevent opening dropdown while clicking New group config * migrate workers page to svelte 5 * Open drawer upon adding a worker group * nit critical alert table * improve queue metrics drawer * improve agent worker drawer * harmonize copy icon * improve agent worker doc * improve layout * Improve autoscaling event list * Improve tags managment * Remove default tags * fix npm check * Add info for agent workers * improve agent worker jwt token creation * Improve token display * nit * improve tag display * create EE component * nit * harmonize tag overflow * handle permission better * improve env var presets * handle permission for config * nit alerts * nit * Improve custom tag creation in tag select * optimistic tag addition * nit * nit * fix typo * improve workers table * Group config tags * show mismatch * fix typo * optimistic update when adding tag * do not allow to create tag when picking a tag to watch in alerts
131 lines
3.5 KiB
Svelte
131 lines
3.5 KiB
Svelte
<script lang="ts">
|
|
import type { Tweened } from 'svelte/motion'
|
|
import { Button } from '../common'
|
|
import { Bot, Hourglass, ListFilterPlus, X } from 'lucide-svelte'
|
|
import RunOption from './RunOption.svelte'
|
|
import { Popover } from '../meltComponents'
|
|
|
|
interface Props {
|
|
queue_count?: Tweened<number> | undefined
|
|
suspended_count?: Tweened<number> | undefined
|
|
success: string | undefined
|
|
small?: boolean
|
|
onJobsWaiting?: () => void
|
|
onJobsSuspended?: () => void
|
|
}
|
|
|
|
let {
|
|
queue_count = undefined,
|
|
suspended_count = undefined,
|
|
success,
|
|
small = false,
|
|
onJobsWaiting,
|
|
onJobsSuspended
|
|
}: Props = $props()
|
|
</script>
|
|
|
|
<div class="flex flex-row gap-4 items-center">
|
|
{#if small}
|
|
<Popover contentClasses="p-4" openOnHover debounceDelay={100}>
|
|
{#snippet trigger()}
|
|
<div class="relative">
|
|
<Bot size={16} />
|
|
{#if queue_count && ($queue_count ?? 0) > 0}
|
|
<div
|
|
class="absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-yellow-500 rounded-full text-white text-2xs h-4 min-w-4 px-1"
|
|
>
|
|
{queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}
|
|
</div>
|
|
{/if}
|
|
</div>
|
|
{/snippet}
|
|
|
|
{#snippet content()}
|
|
{@render queuedContent()}
|
|
{/snippet}
|
|
</Popover>
|
|
{:else}
|
|
{@render queuedContent()}
|
|
{/if}
|
|
|
|
{#if small}
|
|
<Popover
|
|
contentClasses="p-4"
|
|
openOnHover
|
|
debounceDelay={100}
|
|
disablePopup={!suspended_count || ($suspended_count ?? 0) <= 0}
|
|
>
|
|
{#snippet trigger()}
|
|
<div class="relative">
|
|
<Hourglass size={16} />
|
|
<div
|
|
class="absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-surface-secondary-inverse rounded-full text-primary-inverse text-2xs h-4 min-w-4 px-1"
|
|
>
|
|
{suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}
|
|
</div>
|
|
</div>
|
|
{/snippet}
|
|
{#snippet content()}
|
|
{@render suspendedContent()}
|
|
{/snippet}
|
|
</Popover>
|
|
{:else}
|
|
{@render suspendedContent()}
|
|
{/if}
|
|
</div>
|
|
|
|
{#snippet queuedContent()}
|
|
<RunOption label="Waiting for workers">
|
|
{#snippet tooltip()}
|
|
Jobs waiting for a worker being available to be executed
|
|
{/snippet}
|
|
<button
|
|
class={queue_count && ($queue_count ?? 0) > 0
|
|
? 'bg-yellow-500 text-white rounded-full min-w-6 h-6 flex center-center'
|
|
: ''}
|
|
onclick={() => onJobsWaiting?.()}
|
|
>
|
|
{queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}
|
|
</button>
|
|
<div class="truncate text-2xs !text-secondary mt-0.5">
|
|
<Button variant="subtle" unifiedSize="md" on:click={() => onJobsWaiting?.()}>
|
|
{#if success == 'waiting'}
|
|
<div class="flex flex-row items-center gap-1">
|
|
Reset filter
|
|
<X size={12} />
|
|
</div>
|
|
{:else}
|
|
<ListFilterPlus size={14} />
|
|
{/if}
|
|
</Button>
|
|
</div>
|
|
</RunOption>
|
|
{/snippet}
|
|
|
|
{#snippet suspendedContent()}
|
|
{#if suspended_count && ($suspended_count ?? 0) > 0}
|
|
<RunOption label="Suspended">
|
|
{#snippet tooltip()}
|
|
Jobs waiting for an event or approval before being resumed
|
|
{/snippet}
|
|
<div
|
|
class={suspended_count && ($suspended_count ?? 0) > 0
|
|
? 'bg-surface-secondary-inverse text-primary-inverse rounded-full min-w-6 h-6 flex center-center'
|
|
: ''}>{suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}</div
|
|
>
|
|
<div class="truncate text-2xs !text-secondary">
|
|
<Button unifiedSize="md" variant="subtle" on:click={() => onJobsSuspended?.()}>
|
|
{#if success == 'suspended'}
|
|
<div class="flex flex-row items-center gap-1">
|
|
Reset filter
|
|
<X size={12} />
|
|
</div>
|
|
{:else}
|
|
<ListFilterPlus size={14} />
|
|
{/if}
|
|
</Button>
|
|
</div>
|
|
</RunOption>
|
|
{/if}
|
|
{/snippet}
|