{saveError}
+ : cronFieldError + ?{cronFieldError}
+ : cronDescription + ?{cronDescription}
+ : null} +Last checked {lastChecked} · Next check {nextCheck}
diff --git a/frontend/src/components/settings/__tests__/UpdatesSection.test.tsx b/frontend/src/components/settings/__tests__/UpdatesSection.test.tsx index 58274d5d..724283f1 100644 --- a/frontend/src/components/settings/__tests__/UpdatesSection.test.tsx +++ b/frontend/src/components/settings/__tests__/UpdatesSection.test.tsx @@ -30,6 +30,8 @@ const STATUS = { nextCheckAt: Date.now() + 115 * 60 * 1000, manualCooldownMinutes: 2, manualCooldownRemainingMs: 0, + mode: 'interval' as const, + cronExpression: null, }; beforeEach(() => { diff --git a/frontend/src/types/imageUpdates.ts b/frontend/src/types/imageUpdates.ts index a81d9334..e6a029bc 100644 --- a/frontend/src/types/imageUpdates.ts +++ b/frontend/src/types/imageUpdates.ts @@ -18,4 +18,8 @@ export interface ImageUpdateStatus { nextCheckAt: number | null; manualCooldownMinutes: number; manualCooldownRemainingMs: number; + /** Active scheduling mode. */ + mode: 'interval' | 'cron'; + /** 5-field cron expression when mode is 'cron', null otherwise. */ + cronExpression: string | null; }