diff --git a/apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts b/apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts index 2c96157e831f6..4d888cb986295 100644 --- a/apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts +++ b/apps/web/src/components/settings/scheduledTasksSettings.logic.test.ts @@ -180,6 +180,16 @@ describe("fixed-time scheduled tasks", () => { }); expect(draft.timeOfDay).toBe("09:05"); }); + + it("keeps a fixed run time and rejects a cleared one", () => { + const draft = taskToDraft({ + ...legacyTask, + schedule: { type: "fixed_time", timeOfDay: "14:30" }, + }); + expect(scheduleFromDraft(draft)).toEqual({ type: "fixed_time", timeOfDay: "14:30" }); + // A native time input reports "" when it is cleared or only partly filled. + expect(scheduleFromDraft({ ...draft, timeOfDay: "" })).toBeNull(); + }); }); describe("scheduled task destination", () => { diff --git a/apps/web/src/components/settings/scheduledTasksSettings.logic.ts b/apps/web/src/components/settings/scheduledTasksSettings.logic.ts index 26d83da69f428..4c29699ee7eb4 100644 --- a/apps/web/src/components/settings/scheduledTasksSettings.logic.ts +++ b/apps/web/src/components/settings/scheduledTasksSettings.logic.ts @@ -123,6 +123,8 @@ export function scheduleDraftErrors(draft: DraftState) { ]; return []; } + if (draft.scheduleMode === "fixed" && !draft.timeOfDay) + return [{ title: "Invalid run time", description: "Pick a time." }]; if (draft.scheduleMode !== "webhook") return []; if (parseMaxDeliveryAge(draft.maxDeliveryAgeMinutes) === undefined) return [ @@ -233,7 +235,7 @@ export function scheduleFromDraft(draft: DraftState): ScheduledTaskUpsertSchedul const selectedEveryDay = draft.weekdays.size === 0 || draft.weekdays.size === 7; return { type: "fixed_time", - timeOfDay: draft.timeOfDay || "09:00", + timeOfDay: draft.timeOfDay, ...(selectedEveryDay ? {} : { weekdays: [...draft.weekdays].toSorted() }), }; }