Add RunSequenceAction and related functionality

This commit is contained in:
2026-04-14 23:33:13 +02:00
parent 328018154c
commit 5cf32b88d1
3 changed files with 146 additions and 7 deletions

View File

@@ -46,6 +46,7 @@ export interface ProjectScheduleRoutine {
title: string;
enabled: boolean;
target: ControlTargetRef;
sequenceId: string | null;
days: ProjectScheduleDaySelection;
startHour: number;
endHour: number;
@@ -119,6 +120,22 @@ function normalizeProjectScheduleTitle(title: string | undefined): string {
return normalizedTitle;
}
function normalizeProjectScheduleSequenceId(
sequenceId: string | null | undefined
): string | null {
if (sequenceId === undefined || sequenceId === null) {
return null;
}
const normalizedSequenceId = sequenceId.trim();
if (normalizedSequenceId.length === 0) {
throw new Error("Project schedule routine sequence ids must be non-empty.");
}
return normalizedSequenceId;
}
function normalizeProjectScheduleHours(value: number, label: string): number {
assertFiniteNumber(value, label);
return normalizeTimeOfDayHours(value);
@@ -249,7 +266,16 @@ export function createProjectScheduleRoutine(
overrides: Partial<
Pick<
ProjectScheduleRoutine,
"id" | "title" | "enabled" | "target" | "days" | "startHour" | "endHour" | "priority" | "effects"
| "id"
| "title"
| "enabled"
| "target"
| "sequenceId"
| "days"
| "startHour"
| "endHour"
| "priority"
| "effects"
>
> & {
effect?: ControlEffect;
@@ -278,6 +304,7 @@ export function createProjectScheduleRoutine(
title: normalizeProjectScheduleTitle(overrides.title),
enabled: overrides.enabled ?? true,
target,
sequenceId: normalizeProjectScheduleSequenceId(overrides.sequenceId),
days: normalizeProjectScheduleDays(overrides.days),
startHour,
endHour,
@@ -308,6 +335,7 @@ export function cloneProjectScheduleRoutine(
title: routine.title,
enabled: routine.enabled,
target: cloneControlTargetRef(routine.target),
sequenceId: routine.sequenceId,
days: cloneProjectScheduleDaySelection(routine.days),
startHour: routine.startHour,
endHour: routine.endHour,
@@ -357,6 +385,7 @@ export function areProjectScheduleRoutinesEqual(
left.title === right.title &&
left.enabled === right.enabled &&
getControlTargetRefKey(left.target) === getControlTargetRefKey(right.target) &&
left.sequenceId === right.sequenceId &&
areProjectScheduleDaySelectionsEqual(left.days, right.days) &&
left.startHour === right.startHour &&
left.endHour === right.endHour &&