feat: collapsible chart, paginator controls, localized template slots

- Dashboard chart collapsible with state persisted in localStorage
- Events per page user-controlled (5/10/20/50) via select, persisted
- Paginator rendered both above and below event list (shared snippet)
- Removed viewport-based page size calculation
- Template slot descriptions localized (templateSlot.* i18n keys)
- Preview As target selector expanded: email, discord, slack added
- Tighter event item spacing
This commit is contained in:
2026-03-24 23:36:41 +03:00
parent 21d8ef712a
commit 337276113d
5 changed files with 188 additions and 61 deletions
+5 -2
View File
@@ -105,8 +105,11 @@ export const chatActionItems = (): GridItem[] => [
// --- Preview target type ---
export const previewTargetTypeItems = (): GridItem[] => [
{ value: 'telegram', icon: 'mdiSend', label: t('targets.typeTelegram'), desc: t('gridDesc.previewTelegram') },
{ value: 'webhook', icon: 'mdiWebhook', label: t('targets.typeWebhook'), desc: t('gridDesc.previewWebhook') },
{ value: 'telegram', icon: 'mdiSend', label: 'Telegram', desc: t('gridDesc.previewTelegram') },
{ value: 'webhook', icon: 'mdiWebhook', label: 'Webhook', desc: t('gridDesc.previewWebhook') },
{ value: 'email', icon: 'mdiEmailOutline', label: 'Email', desc: t('gridDesc.previewEmail') },
{ value: 'discord', icon: 'mdiChat', label: 'Discord', desc: t('gridDesc.previewDiscord') },
{ value: 'slack', icon: 'mdiSlack', label: 'Slack', desc: t('gridDesc.previewSlack') },
];
// --- Provider type items (derived from descriptor registry) ---
+47
View File
@@ -60,6 +60,7 @@
"activeTrackers": "Active Trackers",
"targets": "Targets",
"recentEvents": "Events",
"chart": "Event chart",
"noEvents": "No events yet. Create a tracker to start monitoring.",
"loading": "Loading...",
"justNow": "just now",
@@ -837,6 +838,49 @@
"noFilterResults": "No items match the current filter.",
"redirecting": "Redirecting..."
},
"templateSlot": {
"message_assets_added": "New assets added to album",
"message_assets_removed": "Assets removed from album",
"message_collection_renamed": "Album renamed",
"message_collection_deleted": "Album deleted",
"message_sharing_changed": "Sharing status changed",
"periodic_summary_message": "Periodic album summary",
"scheduled_assets_message": "Scheduled asset delivery",
"memory_mode_message": "On This Day memories",
"message_push": "Code pushed to repository",
"message_issue_opened": "Issue opened",
"message_issue_closed": "Issue closed",
"message_issue_commented": "Comment on issue",
"message_pr_opened": "Pull request opened",
"message_pr_closed": "Pull request closed",
"message_pr_merged": "Pull request merged",
"message_pr_commented": "Comment on pull request",
"message_release_published": "Release published",
"message_scheduled_message": "Scheduled message",
"message_card_created": "Card created",
"message_card_updated": "Card updated",
"message_card_moved": "Card moved between lists",
"message_card_deleted": "Card deleted",
"message_card_commented": "Comment added to card",
"message_comment_updated": "Comment updated",
"message_board_created": "Board created",
"message_board_updated": "Board updated",
"message_board_deleted": "Board deleted",
"message_list_created": "List created",
"message_list_updated": "List updated",
"message_list_deleted": "List deleted",
"message_attachment_created": "Attachment added to card",
"message_card_label_added": "Label added to card",
"message_task_completed": "Task completed",
"message_ups_online": "UPS back on mains power",
"message_ups_on_battery": "UPS switched to battery",
"message_ups_low_battery": "Battery critically low",
"message_ups_battery_restored": "Battery charge recovered",
"message_ups_comms_lost": "Communication with UPS lost",
"message_ups_comms_restored": "Communication with UPS restored",
"message_ups_replace_battery": "Battery needs replacement",
"message_ups_overload": "UPS load exceeded capacity"
},
"gridDesc": {
"sortNone": "No sorting applied",
"sortDate": "Sort by creation date",
@@ -874,6 +918,9 @@
"chatActionRecordVoice": "Show recording voice...",
"previewTelegram": "Preview with Telegram HTML format",
"previewWebhook": "Preview as plain text",
"previewEmail": "Preview with email HTML format",
"previewDiscord": "Preview with Discord markdown",
"previewSlack": "Preview with Slack markdown",
"providerImmich": "Self-hosted photo server",
"providerGitea": "Self-hosted Git service",
"providerPlanka": "Self-hosted Kanban board",
+47
View File
@@ -60,6 +60,7 @@
"activeTrackers": "Активные трекеры",
"targets": "Получатели",
"recentEvents": "События",
"chart": "График событий",
"noEvents": "Событий пока нет. Создайте трекер для отслеживания.",
"loading": "Загрузка...",
"justNow": "только что",
@@ -837,6 +838,49 @@
"noFilterResults": "Нет элементов, соответствующих фильтру.",
"redirecting": "Перенаправление..."
},
"templateSlot": {
"message_assets_added": "Новые файлы добавлены в альбом",
"message_assets_removed": "Файлы удалены из альбома",
"message_collection_renamed": "Альбом переименован",
"message_collection_deleted": "Альбом удалён",
"message_sharing_changed": "Статус общего доступа изменён",
"periodic_summary_message": "Периодическая сводка альбома",
"scheduled_assets_message": "Запланированная отправка файлов",
"memory_mode_message": "Воспоминания «В этот день»",
"message_push": "Код отправлен в репозиторий",
"message_issue_opened": "Issue открыт",
"message_issue_closed": "Issue закрыт",
"message_issue_commented": "Комментарий к issue",
"message_pr_opened": "Pull request открыт",
"message_pr_closed": "Pull request закрыт",
"message_pr_merged": "Pull request слит",
"message_pr_commented": "Комментарий к pull request",
"message_release_published": "Релиз опубликован",
"message_scheduled_message": "Запланированное сообщение",
"message_card_created": "Карточка создана",
"message_card_updated": "Карточка обновлена",
"message_card_moved": "Карточка перемещена",
"message_card_deleted": "Карточка удалена",
"message_card_commented": "Комментарий к карточке",
"message_comment_updated": "Комментарий обновлён",
"message_board_created": "Доска создана",
"message_board_updated": "Доска обновлена",
"message_board_deleted": "Доска удалена",
"message_list_created": "Список создан",
"message_list_updated": "Список обновлён",
"message_list_deleted": "Список удалён",
"message_attachment_created": "Вложение добавлено",
"message_card_label_added": "Метка добавлена к карточке",
"message_task_completed": "Задача выполнена",
"message_ups_online": "ИБП на сетевом питании",
"message_ups_on_battery": "ИБП перешёл на батарею",
"message_ups_low_battery": "Батарея критически разряжена",
"message_ups_battery_restored": "Заряд батареи восстановлен",
"message_ups_comms_lost": "Связь с ИБП потеряна",
"message_ups_comms_restored": "Связь с ИБП восстановлена",
"message_ups_replace_battery": "Батарея требует замены",
"message_ups_overload": "ИБП перегружен"
},
"gridDesc": {
"sortNone": "Без сортировки",
"sortDate": "По дате создания",
@@ -874,6 +918,9 @@
"chatActionRecordVoice": "Показать «записывает голос...»",
"previewTelegram": "Предпросмотр в формате Telegram HTML",
"previewWebhook": "Предпросмотр как текст",
"previewEmail": "Предпросмотр в формате Email HTML",
"previewDiscord": "Предпросмотр в формате Discord",
"previewSlack": "Предпросмотр в формате Slack",
"providerImmich": "Фотосервер для самостоятельного размещения",
"providerGitea": "Git-сервер для самостоятельного размещения",
"providerPlanka": "Канбан-доска для самостоятельного размещения",