
timothyandClaude Fable 5
91e23bcd57
feat(spa): wire playout delete/reset/erase + scheduling context + templates preview calendar (#210)
Adds the SPA slice for the newly-merged playout endpoints:
- api/playouts: deletePlayout, resetChannelPlayout, erasePlayoutItems,
erasePlayoutItemsAndHistory, getPlayoutItemSchedulingContext (+ types).
- PlayoutsScreen: enable per-playout Reset (channel playout reset), Delete
(danger, confirm), and erase-by-kind buttons (Block = items + items&history;
Classic/Sequential/Scripted = items&history; none for ExternalJson); replaces
the stale "no per-playout reset endpoint" block. Disable Alternate schedules
for OnDemand Classic playouts (Blazor parity).
- Per-item scheduling-context dialog (info button when hasSchedulingContext &&
id != null), rendering the decoded JSON in a scrollable <pre>.
- Playout-templates editor: "Preview calendar" toggle with a Monday-first month
grid; winning template per day computed client-side via a colocated
appliesToDate/firstMatchingIndex helper that ports
AlternateScheduleSelector.GetScheduleForDate / PlayoutTemplateEditViewModel
.AppliesToDate exactly (inclusive range, year-wrap reverse, start-day rollover,
end-day clamp, explicit-year override).
- Button gains a title prop (parity with IconButton) for the disabled-button hint.
Tests: api client URL/method assertions, PlayoutsScreen action flows
(delete/reset/erase per kind, OnDemand gating, scheduling-context dialog +
error), calendar-helper unit tests, and a preview-calendar render test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 22:30:28 +02:00
..
2026-07-09 22:10:45 +02:00
2026-07-06 22:07:36 +02:00
2026-07-02 18:36:56 +02:00
2026-07-02 18:36:56 +02:00
2026-07-07 18:37:59 +02:00
2026-07-07 19:22:49 +02:00
2026-07-09 20:00:38 +02:00
2026-07-07 12:22:30 +02:00
2026-07-06 22:07:36 +02:00
2026-07-06 22:07:36 +02:00
2026-07-02 18:36:56 +02:00
2026-07-02 18:36:56 +02:00
2026-07-08 18:26:52 +02:00
2026-07-08 18:26:52 +02:00
2026-07-04 21:14:44 +02:00
2026-07-07 19:22:49 +02:00
2026-07-07 19:22:49 +02:00
2026-07-07 19:51:11 +02:00
2026-07-07 19:51:11 +02:00
2026-07-07 14:33:01 +02:00
2026-07-07 14:33:01 +02:00
2026-07-07 14:33:01 +02:00
2026-07-07 14:33:01 +02:00
2026-07-05 23:06:08 +02:00
2026-07-07 22:56:48 +02:00
2026-07-07 22:56:48 +02:00
2026-07-08 19:58:59 +02:00
2026-07-05 19:01:05 +02:00
2026-07-07 21:42:18 +02:00
2026-07-07 21:42:18 +02:00
2026-07-07 13:42:01 +02:00
2026-07-07 13:42:01 +02:00
2026-07-07 15:39:54 +02:00
2026-07-07 15:39:54 +02:00
2026-07-07 22:56:48 +02:00
2026-07-07 22:56:48 +02:00
2026-07-07 15:39:54 +02:00
2026-07-07 15:39:54 +02:00
2026-07-08 19:58:59 +02:00
2026-07-08 19:58:59 +02:00
2026-07-09 07:52:14 +02:00
2026-07-09 07:52:14 +02:00
2026-07-08 21:09:52 +02:00
2026-07-08 21:09:52 +02:00
2026-07-07 22:11:04 +02:00
2026-07-07 22:10:57 +02:00
2026-07-09 22:30:28 +02:00
2026-07-09 22:30:28 +02:00
2026-07-08 19:58:59 +02:00
2026-07-08 19:58:59 +02:00
2026-07-07 12:44:51 +02:00
2026-07-07 15:39:54 +02:00
2026-07-07 15:39:54 +02:00
2026-07-07 09:22:50 +02:00
2026-07-07 09:22:51 +02:00
2026-07-07 18:37:59 +02:00
2026-07-07 18:37:59 +02:00
2026-07-07 15:09:30 +02:00
2026-07-07 15:09:30 +02:00
2026-07-09 00:03:26 +02:00
2026-07-09 00:03:26 +02:00
2026-07-02 08:23:19 +02:00
2026-07-07 14:33:01 +02:00
2026-07-07 14:33:01 +02:00