feat: broadcast notification target + UX improvements

Add broadcast target type that fans out notifications to multiple
child targets. Dispatch expands broadcast into children in
load_link_data() — dispatcher stays unaware. Children can be
toggled on/off via disabled_child_ids in config.

Also: dashboard provider card smaller font for names, scroll-to-form
on target edit, broadcast nav tab with counter, flag_modified fix
for JSON column updates, CLAUDE.md nav tree docs.
This commit is contained in:
2026-03-24 15:15:41 +03:00
parent 8cb836e16c
commit d8ecb60073
13 changed files with 327 additions and 102 deletions
+8
View File
@@ -34,6 +34,7 @@
"targetSlack": "Slack",
"targetNtfy": "ntfy",
"targetMatrix": "Matrix",
"targetBroadcast": "Broadcast",
"automation": "Automation",
"actions": "Actions"
},
@@ -256,6 +257,11 @@
"descSlack": "Slack channel webhooks for notifications",
"descNtfy": "ntfy push notification topics",
"descMatrix": "Matrix room destinations for notifications",
"descBroadcast": "Send to multiple targets at once",
"childTargets": "target(s)",
"selectChildTargets": "Select child targets",
"noChildTargets": "No child targets configured.",
"noChildTargetsAvailable": "Create other targets first, then add them here.",
"addTarget": "Add Target",
"cancel": "Cancel",
"type": "Type",
@@ -814,6 +820,8 @@
"syntaxError": "Syntax error",
"undefinedVar": "Unknown variable",
"line": "line",
"enable": "Enable",
"disable": "Disable",
"add": "Add",
"filterByName": "Filter by name...",
"allTypes": "All types",
+8
View File
@@ -34,6 +34,7 @@
"targetSlack": "Slack",
"targetNtfy": "ntfy",
"targetMatrix": "Matrix",
"targetBroadcast": "Рассылка",
"automation": "Автоматизация",
"actions": "Действия"
},
@@ -256,6 +257,11 @@
"descSlack": "Вебхуки каналов Slack для уведомлений",
"descNtfy": "Топики ntfy для push-уведомлений",
"descMatrix": "Комнаты Matrix для доставки уведомлений",
"descBroadcast": "Отправка сразу в несколько целей",
"childTargets": "цель(ей)",
"selectChildTargets": "Выберите дочерние цели",
"noChildTargets": "Дочерние цели не настроены.",
"noChildTargetsAvailable": "Сначала создайте другие цели, затем добавьте их сюда.",
"addTarget": "Добавить получателя",
"cancel": "Отмена",
"type": "Тип",
@@ -814,6 +820,8 @@
"syntaxError": "Ошибка синтаксиса",
"undefinedVar": "Неизвестная переменная",
"line": "строка",
"enable": "Включить",
"disable": "Выключить",
"add": "Добавить",
"filterByName": "Фильтр по имени...",
"allTypes": "Все типы",
+2
View File
@@ -106,6 +106,8 @@ export interface NotificationTarget {
chat_name?: string;
receiver_count: number;
receivers: TargetReceiver[];
/** Broadcast targets only: resolved child target summaries. */
child_targets?: { id: number; name: string; type: string; icon: string }[];
created_at: string;
}