From beebd2ff4752ae29f406b79c07f03d16c57a2d41 Mon Sep 17 00:00:00 2001
From: Jason Dove <1695733+jasongdove@users.noreply.github.com>
Date: Thu, 13 Nov 2025 14:28:02 -0600
Subject: [PATCH] template editor improvements
---
CHANGELOG.md | 3 +++
ErsatzTV/Pages/TemplateEditor.razor | 35 +++++++++++++++++++++--------
2 files changed, 29 insertions(+), 9 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e141cebd..f68d4ded7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -84,6 +84,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Use smaller batch size for search index updates (100, down from 1000)
- This should help newly scanned items appear in the UI more quickly
- Replace favicon and logo in background image used for error streams
+- Block schedule template editor:
+ - Auto scroll day view to block item time when adding and removing block items from template
+ - Allow keyboard selection of block groups and blocks
## [25.8.0] - 2025-10-26
### Added
diff --git a/ErsatzTV/Pages/TemplateEditor.razor b/ErsatzTV/Pages/TemplateEditor.razor
index 5c05fdea3..504a67b70 100644
--- a/ErsatzTV/Pages/TemplateEditor.razor
+++ b/ErsatzTV/Pages/TemplateEditor.razor
@@ -35,10 +35,10 @@
Block Group
-
+
@foreach (BlockGroupViewModel blockGroup in _blockGroups)
{
- @blockGroup.Name
+ @blockGroup.Name
}
@@ -46,10 +46,10 @@
Block
-
+
@foreach (BlockViewModel block in _blocks)
{
- @block.Name
+ @block.Name
}
@@ -94,7 +94,8 @@
Content
- _calendar;
public void Dispose()
{
@@ -194,12 +196,22 @@
End = item.EndTime
};
- private async Task UpdateBlockGroupItems(BlockGroupViewModel blockGroup)
+ private async Task UpdateBlockGroupItems(string blockGroupName)
{
- _selectedBlockGroup = blockGroup;
+ Option maybeBlockGroup = Optional(_blockGroups.Find(bg => bg.Name == blockGroupName));
+ foreach (var blockGroup in maybeBlockGroup)
+ {
+ _selectedBlockGroup = blockGroup;
+
+ _blocks.Clear();
+ _blocks.AddRange(await Mediator.Send(new GetBlocksByBlockGroupId(_selectedBlockGroup.Id), _cts.Token));
+ }
+ }
- _blocks.Clear();
- _blocks.AddRange(await Mediator.Send(new GetBlocksByBlockGroupId(_selectedBlockGroup.Id), _cts.Token));
+ private void UpdateSelectedBlock(string blockName)
+ {
+ _selectedBlock = _blocks.Find(bg => bg.Name == blockName);
+ InvokeAsync(StateHasChanged);
}
private void AddBlockToTemplate()
@@ -223,6 +235,8 @@
_template.Items.Add(item);
+ InvokeAsync(() => { _calendar.ScrollToTime(TimeOnly.FromDateTime(item.Start)); });
+
break;
}
@@ -235,6 +249,9 @@
if (_blockToRemove is not null)
{
_template.Items.Remove(_blockToRemove);
+
+ await InvokeAsync(() => { _calendar.ScrollToTime(TimeOnly.FromDateTime(_blockToRemove.Start)); });
+
_blockToRemove = null;
await InvokeAsync(StateHasChanged);