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"
}
}
}