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시',
'sessions.scheduledTasks.editor.cronExpression.examples.9am5pm': '매일 오전 9시와 오후 5시',
'sessions.scheduledTasks.editor.cronExpression.examples.firstOfMonth': '매월 1일',
'multirun.launcher.title': '새 다중 실행',
'multirun.launcher.actions.closeEsc': '닫기(Esc)',
'multirun.launcher.actions.cancel': '취소',