feat(scheduled-tasks): add cron syntax support to task editor dialog (#1593)

Adds a 'Cron' schedule type option to the scheduled task editor, allowing
users to create and edit cron-based schedules through the UI.

- Add cron expression input with inline validation (cron-parser)
- Show next 4 upcoming run times as a preview
- Provide clickable example chips (every 5min, hourly, Monday 9am, etc.)
- Preserve cron expressions when editing existing cron tasks
- Add cron.ts utility module for validation and next-run computation
- Add i18n keys across all 8 locale files

Closes #1586

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Tom Rochette
2026-06-16 11:03:42 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent e904abda04
commit e402cd75f5
14 changed files with 341 additions and 18 deletions
+12
View File
@@ -214,6 +214,7 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.editor.scheduleType.daily": "Щодня",
"sessions.scheduledTasks.editor.scheduleType.weekly": "Щотижня",
"sessions.scheduledTasks.editor.scheduleType.once": "Одноразовий",
"sessions.scheduledTasks.editor.scheduleType.cron": "Cron",
"sessions.scheduledTasks.editor.date.label": "Дата",
"sessions.scheduledTasks.editor.date.placeholder": "Вибрати дату",
"sessions.scheduledTasks.editor.date.previousMonth": "Попередній місяць",
@@ -252,6 +253,17 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.editor.validation.atLeastOneTime": "Додайте принаймні один дійсний час",
"sessions.scheduledTasks.editor.validation.atLeastOneWeekday": "Виберіть хоча б один день тижня",
"sessions.scheduledTasks.editor.validation.timezoneRequired": "Потрібно вказати часовий пояс",
"sessions.scheduledTasks.editor.validation.cronRequired": "Потрібно вказати cron-вираз",
"sessions.scheduledTasks.editor.validation.cronInvalid": "Недійсний cron-вираз",
"sessions.scheduledTasks.editor.cronExpression.label": "Cron-вираз",
"sessions.scheduledTasks.editor.cronExpression.placeholder": "*/5 * * * *",
"sessions.scheduledTasks.editor.cronExpression.nextRuns": "Наступні запуски",
"sessions.scheduledTasks.editor.cronExpression.examples": "Приклади",
"sessions.scheduledTasks.editor.cronExpression.examples.every5min": "Кожні 5 хвилин",
"sessions.scheduledTasks.editor.cronExpression.examples.everyHour": "Щогодини",
"sessions.scheduledTasks.editor.cronExpression.examples.monday9am": "Щопонеділка о 9:00",
"sessions.scheduledTasks.editor.cronExpression.examples.9am5pm": "Щодня о 9:00 і 17:00",
"sessions.scheduledTasks.editor.cronExpression.examples.firstOfMonth": "Першого числа кожного місяця",
"multirun.launcher.title": "Новий Multi-Run",
"multirun.launcher.actions.closeEsc": "Закрити (Esc)",
"multirun.launcher.actions.cancel": "Скасувати",