Update ProjectSchedulePane to use getRenderedRoutineTargetKey and add drag functionality

This commit is contained in:
2026-04-15 06:05:27 +02:00
parent 0397895a8d
commit ab38f7628f

View File

@@ -810,8 +810,7 @@ export function ProjectSequencerPane({
targetOptions.map((targetOption) => { targetOptions.map((targetOption) => {
const routines = Object.values(scheduler.routines) const routines = Object.values(scheduler.routines)
.filter( .filter(
(routine) => (routine) => getRenderedRoutineTargetKey(routine) === targetOption.key
getControlTargetRefKey(routine.target) === targetOption.key
) )
.sort((left, right) => left.startHour - right.startHour); .sort((left, right) => left.startHour - right.startHour);
@@ -832,10 +831,16 @@ export function ProjectSequencerPane({
</div> </div>
</div> </div>
</div> </div>
<div className="schedule-row__track"> <div
className="schedule-row__track"
data-sequencer-target-key={targetOption.key}
data-sequencer-track="true"
>
<div className="schedule-row__grid" /> <div className="schedule-row__grid" />
{routines.map((routine) => {routines.map((routine) => {
getProjectScheduleTimelineSegments(routine).map( const renderedRoutine = getRenderedRoutine(routine);
return getProjectScheduleTimelineSegments(renderedRoutine).map(
(segment) => ( (segment) => (
<button <button
key={segment.key} key={segment.key}
@@ -849,6 +854,10 @@ export function ProjectSequencerPane({
: "" : ""
} ${ } ${
routine.enabled ? "" : "schedule-block--disabled" routine.enabled ? "" : "schedule-block--disabled"
} ${
routineDragState?.routineId === routine.id
? "schedule-block--dragging"
: ""
}`.trim()} }`.trim()}
type="button" type="button"
title={`${routine.title} · ${getRoutineSummary(routine, sequences)}`} title={`${routine.title} · ${getRoutineSummary(routine, sequences)}`}
@@ -856,15 +865,32 @@ export function ProjectSequencerPane({
left: `${(segment.startHour / HOURS_PER_DAY) * 100}%`, left: `${(segment.startHour / HOURS_PER_DAY) * 100}%`,
width: `${((segment.endHour - segment.startHour) / HOURS_PER_DAY) * 100}%` width: `${((segment.endHour - segment.startHour) / HOURS_PER_DAY) * 100}%`
}} }}
onPointerDown={(event) =>
beginRoutineDrag(event, routine, "move")
}
onClick={() => onSelectRoutine(routine.id)} onClick={() => onSelectRoutine(routine.id)}
> >
<span
className="schedule-block__resize-handle schedule-block__resize-handle--start"
aria-label={`Resize start of ${routine.title}`}
onPointerDown={(event) =>
beginRoutineDrag(event, routine, "resize-start")
}
/>
<span className="schedule-block__title"> <span className="schedule-block__title">
{routine.title} {routine.title}
</span> </span>
<span
className="schedule-block__resize-handle schedule-block__resize-handle--end"
aria-label={`Resize end of ${routine.title}`}
onPointerDown={(event) =>
beginRoutineDrag(event, routine, "resize-end")
}
/>
</button> </button>
) )
) );
)} })}
</div> </div>
</div> </div>
); );