diff --git a/frontend/src/lib/components/EntitySelect.svelte b/frontend/src/lib/components/EntitySelect.svelte index 50861e6..8727041 100644 --- a/frontend/src/lib/components/EntitySelect.svelte +++ b/frontend/src/lib/components/EntitySelect.svelte @@ -15,6 +15,8 @@ allowNone = false, noneLabel = '—', disabled = false, + size = 'default', + onselect, }: { items: EntityItem[]; value: string | number | null; @@ -22,6 +24,8 @@ allowNone?: boolean; noneLabel?: string; disabled?: boolean; + size?: 'sm' | 'default'; + onselect?: (value: string | number | null) => void; } = $props(); let open = $state(false); @@ -59,6 +63,7 @@ function selectItem(item: EntityItem) { value = item.value || null; + onselect?.(value); closePalette(); } @@ -97,7 +102,7 @@ - + {/each} + + +
{#each commandSlots as slot}
@@ -257,8 +295,8 @@ {/if}
{ form.slots[slot.name] = v; validateSlot(slot.name, v); }} + value={getSlotValue(slot.name)} + onchange={(v: string) => { setSlotValue(slot.name, v); validateSlot(slot.name, v); }} rows={3} errorLine={slotErrorLines[slot.name] || null} /> diff --git a/frontend/src/routes/notification-trackers/LinkedTargetsSection.svelte b/frontend/src/routes/notification-trackers/LinkedTargetsSection.svelte index 34b6d44..b845eb9 100644 --- a/frontend/src/routes/notification-trackers/LinkedTargetsSection.svelte +++ b/frontend/src/routes/notification-trackers/LinkedTargetsSection.svelte @@ -3,6 +3,8 @@ import { t } from '$lib/i18n'; import MdiIcon from '$lib/components/MdiIcon.svelte'; import IconButton from '$lib/components/IconButton.svelte'; + import EntitySelect from '$lib/components/EntitySelect.svelte'; + import type { EntityItem } from '$lib/components/EntitySelect.svelte'; import type { Tracker, NotificationTarget, TrackingConfig, TemplateConfig } from '$lib/types'; interface Props { @@ -44,6 +46,23 @@ onchangeNewTrackingConfig, onchangeNewTemplateConfig, }: Props = $props(); + + function toItems(configs: any[]): EntityItem[] { + return configsForTracker(configs).map(c => ({ + value: c.id, + label: c.name, + icon: c.icon || '', + })); + } + + const trackingConfigItems = $derived(toItems(trackingConfigs)); + const templateConfigItems = $derived(toItems(templateConfigs)); + const targetItems = $derived(unlinkedTargets.map(tgt => ({ + value: tgt.id, + label: tgt.name, + icon: tgt.icon || (tgt.type === 'telegram' ? 'mdiSend' : 'mdiWebhook'), + desc: tgt.type, + })));
@@ -61,18 +80,16 @@ {/if}
- - +
+ onupdateLink(tt, 'tracking_config_id', Number(v) || null)} /> +
+
+ onupdateLink(tt, 'template_config_id', Number(v) || null)} /> +
onopenTestMenu(tt.id, e)} @@ -91,24 +108,21 @@ {#if unlinkedTargets.length > 0}
- - - +
+ onchangeNewTarget(Number(v) || 0)} /> +
+
+ onchangeNewTrackingConfig(Number(v) || 0)} /> +
+
+ onchangeNewTemplateConfig(Number(v) || 0)} /> +