From dac07326be9c53f63e6a239434162131e1f01e9e Mon Sep 17 00:00:00 2001
From: Daniel Derefaka <101010297+DanielDerefaka@users.noreply.github.com>
Date: Tue, 6 Jan 2026 19:56:56 +0100
Subject: [PATCH] feat(ui): group notification services into categories in
dropdown (#6616)
---
src/components/NotificationDialog.vue | 162 +++++++++++++++++---------
src/lang/en.json | 8 ++
2 files changed, 118 insertions(+), 52 deletions(-)
diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue
index 1d2902103..c0f2ed4ff 100644
--- a/src/components/NotificationDialog.vue
+++ b/src/components/NotificationDialog.vue
@@ -13,9 +13,32 @@
@@ -109,76 +132,105 @@ export default {
},
notificationNameList() {
- let regularList = {
- "alerta": "Alerta",
- "AlertNow": "AlertNow",
+ // Universal - Adapters and multi-service wrapper libraries
+ let universal = {
"apprise": this.$t("apprise"),
+ "webhook": "Webhook",
+ };
+
+ // Chat Platforms - Messaging apps and team communication tools
+ let chatPlatforms = {
"bale": "Bale",
- "Bark": "Bark",
"Bitrix24": "Bitrix24",
- "clicksendsms": "ClickSend SMS",
- "CallMeBot": "CallMeBot (WhatsApp, Telegram Call, Facebook Messanger)",
"discord": "Discord",
- "Elks": "46elks",
"GoogleChat": "Google Chat (Google Workspace)",
- "gorush": "Gorush",
- "gotify": "Gotify",
- "GrafanaOncall": "Grafana Oncall",
- "HeiiOnCall": "Heii On-Call",
- "HomeAssistant": "Home Assistant",
- "Keep": "Keep",
"Kook": "Kook",
"line": "LINE Messenger",
- "lunasea": "LunaSea",
"matrix": "Matrix",
"mattermost": "Mattermost",
"nextcloudtalk": "Nextcloud Talk",
"nostr": "Nostr",
- "ntfy": "Ntfy",
- "octopush": "Octopush",
"OneChat": "OneChat",
"OneBot": "OneBot",
- "Onesender": "Onesender",
- "Opsgenie": "Opsgenie",
- "PagerDuty": "PagerDuty",
- "PagerTree": "PagerTree",
"pumble": "Pumble",
- "pushbullet": "Pushbullet",
- "PushByTechulus": "Push by Techulus",
- "pushover": "Pushover",
- "pushy": "Pushy",
"rocket.chat": "Rocket.Chat",
"signal": "Signal",
- "SIGNL4": "SIGNL4",
"slack": "Slack",
- "squadcast": "SquadCast",
- "SMSEagle": "SMSEagle",
- "SMSPartner": "SMS Partner",
- "smtp": this.$t("smtp"),
"stackfield": "Stackfield",
"teams": "Microsoft Teams",
"telegram": "Telegram",
"threema": "Threema",
- "twilio": "Twilio",
- "Splunk": "Splunk",
- "webhook": "Webhook",
- "GoAlert": "GoAlert",
"ZohoCliq": "ZohoCliq",
- "SevenIO": "SevenIO",
+ "CallMeBot": "CallMeBot (WhatsApp, Telegram Call, Facebook Messenger)",
"whapi": "WhatsApp (Whapi)",
"evolution": "WhatsApp (Evolution)",
"waha": "WhatsApp (WAHA)",
- "gtxmessaging": "GtxMessaging",
- "Cellsynt": "Cellsynt",
- "SendGrid": "SendGrid",
- "Brevo": "Brevo",
- "Resend": "Resend",
+ };
+
+ // Push Services - Push notification services
+ let pushServices = {
+ "Bark": "Bark",
+ "gorush": "Gorush",
+ "gotify": "Gotify",
+ "lunasea": "LunaSea",
"notifery": "Notifery",
+ "ntfy": "Ntfy",
+ "pushbullet": "Pushbullet",
+ "PushByTechulus": "Push by Techulus",
+ "pushover": "Pushover",
+ "pushy": "Pushy",
"Webpush": "Webpush",
};
- // Put notifications here if it's not supported in most regions or its documentation is not in English
- let regionalList = {
+ // SMS Services - SMS and voice call providers
+ let smsServices = {
+ "clicksendsms": "ClickSend SMS",
+ "Elks": "46elks",
+ "Cellsynt": "Cellsynt",
+ "gtxmessaging": "GtxMessaging",
+ "octopush": "Octopush",
+ "Onesender": "Onesender",
+ "SevenIO": "SevenIO",
+ "SMSEagle": "SMSEagle",
+ "SMSPartner": "SMS Partner",
+ "twilio": "Twilio",
+ };
+
+ // Email - Email services
+ let email = {
+ "Brevo": "Brevo",
+ "Resend": "Resend",
+ "SendGrid": "SendGrid",
+ "smtp": this.$t("smtp"),
+ };
+
+ // Incident Management - On-call and alerting platforms
+ let incidentManagement = {
+ "alerta": "Alerta",
+ "AlertNow": "AlertNow",
+ "GoAlert": "GoAlert",
+ "GrafanaOncall": "Grafana Oncall",
+ "HeiiOnCall": "Heii On-Call",
+ "Keep": "Keep",
+ "Opsgenie": "Opsgenie",
+ "PagerDuty": "PagerDuty",
+ "PagerTree": "PagerTree",
+ "SIGNL4": "SIGNL4",
+ "Splunk": "Splunk",
+ "squadcast": "SquadCast",
+ };
+
+ // Home Automation - Smart home and IoT platforms
+ let homeAutomation = {
+ "HomeAssistant": "Home Assistant",
+ };
+
+ // Other Integrations
+ let other = {
+ };
+
+ // Regional - Not supported in most regions or documentation is not in English
+ let regional = {
"AliyunSMS": "AliyunSMS (阿里云短信服务)",
"DingDing": "DingDing (钉钉自定义机器人)",
"Feishu": "Feishu (飞书)",
@@ -199,8 +251,7 @@ export default {
"SMSPlanet": "SMSPlanet.pl"
};
- // Sort by notification name
- // No idea how, but it works
+ // Sort by notification name alphabetically
// https://stackoverflow.com/questions/1069666/sorting-object-property-by-values
let sort = (list2) => {
return Object.entries(list2)
@@ -212,18 +263,25 @@ export default {
};
return {
- regularList: sort(regularList),
- regionalList: sort(regionalList),
+ universal: sort(universal),
+ chatPlatforms: sort(chatPlatforms),
+ pushServices: sort(pushServices),
+ smsServices: sort(smsServices),
+ email: sort(email),
+ incidentManagement: sort(incidentManagement),
+ homeAutomation: sort(homeAutomation),
+ other: sort(other),
+ regional: sort(regional),
};
},
notificationFullNameList() {
let list = {};
- for (let [ key, value ] of Object.entries(this.notificationNameList.regularList)) {
- list[key] = value;
- }
- for (let [ key, value ] of Object.entries(this.notificationNameList.regionalList)) {
- list[key] = value;
+ // Combine all categories into a single list
+ for (let category of Object.values(this.notificationNameList)) {
+ for (let [ key, value ] of Object.entries(category)) {
+ list[key] = value;
+ }
}
return list;
},
diff --git a/src/lang/en.json b/src/lang/en.json
index 0a58e6dc7..fa391d93b 100644
--- a/src/lang/en.json
+++ b/src/lang/en.json
@@ -547,6 +547,14 @@
"uninstalling": "Uninstalling",
"confirmUninstallPlugin": "Are you sure want to uninstall this plugin?",
"notificationRegional": "Regional",
+ "notificationUniversal": "Universal",
+ "notificationChatPlatforms": "Chat Platforms",
+ "notificationPushServices": "Push Services",
+ "notificationSmsServices": "SMS Services",
+ "notificationEmail": "Email",
+ "notificationIncidentManagement": "Incident Management",
+ "notificationHomeAutomation": "Home Automation",
+ "notificationOther": "Other Integrations",
"Clone Monitor": "Clone Monitor",
"Clone": "Clone",
"cloneOf": "Clone of {0}",