feat: grouped nav tree with badges, dashboard events section with filtered chart

Navigation:
- Restructure flat nav into grouped tree: Notification (Trackers,
  Configs, Templates), Commands (same), Bots (Telegram), Settings
  (Common, Users)
- Collapsible groups with expand/collapse state persisted in localStorage
- Auto-expand group containing the active page
- Counter badges on groups (sum of children) and individual items
- New /api/status/counts endpoint for nav badge data
- Mobile bottom nav uses flattened key pages

Dashboard:
- Rename "Recent Events" to "Events"
- Move chart under Events section (after filters, before event list)
- Filters (event type, provider, search) now affect both the event
  list AND the chart simultaneously
- Add event_type, provider_id, search filter params to /api/status/chart
This commit is contained in:
2026-03-21 23:07:55 +03:00
parent ddcbfdaa0b
commit 2c740ff2d2
5 changed files with 366 additions and 65 deletions
+36 -12
View File
@@ -16,7 +16,17 @@
"cmdTemplateConfigs": "Cmd Templates",
"users": "Users",
"settings": "Settings",
"logout": "Logout"
"logout": "Logout",
"notification": "Notification",
"commands": "Commands",
"bots": "Bots",
"trackers": "Trackers",
"configs": "Configs",
"templates": "Templates",
"telegram": "Telegram",
"email": "Email",
"matrix": "Matrix",
"common": "Common"
},
"auth": {
"signIn": "Sign in",
@@ -39,7 +49,7 @@
"providers": "Providers",
"activeTrackers": "Active Trackers",
"targets": "Targets",
"recentEvents": "Recent Events",
"recentEvents": "Events",
"noEvents": "No events yet. Create a tracker to start monitoring.",
"loading": "Loading...",
"justNow": "just now",
@@ -253,7 +263,7 @@
"enabledCommands": "Enabled commands",
"defaultCount": "Default count",
"responseMode": "Response mode",
"modeMedia": "Media (photos)",
"modeMedia": "Media (files)",
"modeText": "Text only",
"botLocale": "Bot language",
"rateLimits": "Rate Limits",
@@ -396,13 +406,27 @@
"invalidFormat": "Invalid format string"
},
"templateVars": {
"message_assets_added": { "description": "Notification when new assets are added to an album" },
"message_assets_removed": { "description": "Notification when assets are removed from an album" },
"message_album_renamed": { "description": "Notification when an album is renamed" },
"message_album_deleted": { "description": "Notification when an album is deleted" },
"periodic_summary_message": { "description": "Periodic album summary (scheduler not yet implemented)" },
"scheduled_assets_message": { "description": "Scheduled asset delivery (scheduler not yet implemented)" },
"memory_mode_message": { "description": "\"On This Day\" memories (scheduler not yet implemented)" },
"message_assets_added": {
"description": "Notification when new assets are added to an album"
},
"message_assets_removed": {
"description": "Notification when assets are removed from an album"
},
"message_album_renamed": {
"description": "Notification when an album is renamed"
},
"message_album_deleted": {
"description": "Notification when an album is deleted"
},
"periodic_summary_message": {
"description": "Periodic album summary (scheduler not yet implemented)"
},
"scheduled_assets_message": {
"description": "Scheduled asset delivery (scheduler not yet implemented)"
},
"memory_mode_message": {
"description": "\"On This Day\" memories (scheduler not yet implemented)"
},
"album_id": "Album ID (UUID)",
"album_name": "Album name",
"album_url": "Public share URL (empty if not shared)",
@@ -544,7 +568,7 @@
"enabledCommands": "Enabled Commands",
"locale": "Locale",
"responseMode": "Response Mode",
"modeMedia": "Media (photos)",
"modeMedia": "Media (files)",
"modeText": "Text only",
"defaultCount": "Default Count",
"rateLimits": "Rate Limits",
@@ -662,4 +686,4 @@
"line": "line",
"add": "Add"
}
}
}
+36 -12
View File
@@ -16,7 +16,17 @@
"cmdTemplateConfigs": "Шаблоны команд",
"users": "Пользователи",
"settings": "Настройки",
"logout": "Выход"
"logout": "Выход",
"notification": "Уведомления",
"commands": "Команды",
"bots": "Боты",
"trackers": "Трекеры",
"configs": "Настройки",
"templates": "Шаблоны",
"telegram": "Telegram",
"email": "Email",
"matrix": "Matrix",
"common": "Общие"
},
"auth": {
"signIn": "Войти",
@@ -39,7 +49,7 @@
"providers": "Провайдеры",
"activeTrackers": "Активные трекеры",
"targets": "Получатели",
"recentEvents": "Последние события",
"recentEvents": "События",
"noEvents": "Событий пока нет. Создайте трекер для отслеживания.",
"loading": "Загрузка...",
"justNow": "только что",
@@ -253,7 +263,7 @@
"enabledCommands": "Включённые команды",
"defaultCount": "Кол-во по умолчанию",
"responseMode": "Режим ответа",
"modeMedia": "Медиа (фото)",
"modeMedia": "Медиа (файлы)",
"modeText": "Только текст",
"botLocale": "Язык бота",
"rateLimits": "Ограничения частоты",
@@ -396,13 +406,27 @@
"invalidFormat": "Некорректная строка формата"
},
"templateVars": {
"message_assets_added": { "description": "Уведомление о добавлении файлов в альбом" },
"message_assets_removed": { "description": "Уведомление об удалении файлов из альбома" },
"message_album_renamed": { "description": "Уведомление о переименовании альбома" },
"message_album_deleted": { "description": "Уведомление об удалении альбома" },
"periodic_summary_message": { "description": "Периодическая сводка альбомов (планировщик не реализован)" },
"scheduled_assets_message": { "description": "Запланированная подборка фото (планировщик не реализован)" },
"memory_mode_message": { "description": "«В этот день» — воспоминания (планировщик не реализован)" },
"message_assets_added": {
"description": "Уведомление о добавлении файлов в альбом"
},
"message_assets_removed": {
"description": "Уведомление об удалении файлов из альбома"
},
"message_album_renamed": {
"description": "Уведомление о переименовании альбома"
},
"message_album_deleted": {
"description": "Уведомление об удалении альбома"
},
"periodic_summary_message": {
"description": "Периодическая сводка альбомов (планировщик не реализован)"
},
"scheduled_assets_message": {
"description": "Запланированная подборка фото (планировщик не реализован)"
},
"memory_mode_message": {
"description": "«В этот день» — воспоминания (планировщик не реализован)"
},
"album_id": "ID альбома (UUID)",
"album_name": "Название альбома",
"album_url": "Публичная ссылка (пусто, если не расшарен)",
@@ -544,7 +568,7 @@
"enabledCommands": "Включённые команды",
"locale": "Язык",
"responseMode": "Режим ответа",
"modeMedia": "Медиа (фото)",
"modeMedia": "Медиа (файлы)",
"modeText": "Только текст",
"defaultCount": "Кол-во по умолчанию",
"rateLimits": "Ограничения частоты",
@@ -662,4 +686,4 @@
"line": "строка",
"add": "Добавить"
}
}
}