save schedules and playouts table page sizes (#262)

This commit is contained in:
Jason Dove
2021-06-14 13:11:49 -05:00
committed by GitHub
parent 72d967946d
commit 275f82fcc9
4 changed files with 63 additions and 16 deletions
+30 -9
View File
@@ -2,11 +2,18 @@
@using ErsatzTV.Application.Playouts
@using ErsatzTV.Application.Playouts.Commands
@using ErsatzTV.Application.Playouts.Queries
@using ErsatzTV.Application.Configuration.Commands
@using ErsatzTV.Application.Configuration.Queries
@inject IDialogService _dialog
@inject IMediator _mediator
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
<MudTable Hover="true" Dense="true" Items="_playouts" SelectedItemChanged="@(async (PlayoutNameViewModel x) => await PlayoutSelected(x))">
<MudTable Hover="true"
Dense="true"
SelectedItemChanged="@(async (PlayoutNameViewModel x) => await PlayoutSelected(x))"
@bind-RowsPerPage="@_rowsPerPage"
ServerData="@(new Func<TableState, Task<TableData<PlayoutNameViewModel>>>(ServerReload))"
@ref="_table">
<ToolBarContent>
<MudText Typo="Typo.h6">Playouts</MudText>
</ToolBarContent>
@@ -80,12 +87,16 @@
</MudContainer>
@code {
private List<PlayoutNameViewModel> _playouts;
private MudTable<PlayoutNameViewModel> _table;
private int _rowsPerPage;
private List<PlayoutItemViewModel> _selectedPlayoutItems;
private int? _selectedPlayoutId;
protected override Task OnParametersSetAsync() =>
LoadAllPlayouts();
protected override async Task OnParametersSetAsync()
{
_rowsPerPage = await _mediator.Send(new GetConfigElementByKey(ConfigElementKey.PlayoutsPageSize))
.Map(maybeRows => maybeRows.Match(ce => int.TryParse(ce.Value, out int rows) ? rows : 10, () => 10));
}
private async Task PlayoutSelected(PlayoutNameViewModel playout)
{
@@ -103,23 +114,33 @@
if (!result.Cancelled)
{
await _mediator.Send(new DeletePlayout(playout.PlayoutId));
await LoadAllPlayouts();
await _table.ReloadServerData();
}
}
private async Task RebuildPlayout(PlayoutNameViewModel playout)
{
await _mediator.Send(new BuildPlayout(playout.PlayoutId, true));
await LoadAllPlayouts();
await _table.ReloadServerData();
if (_selectedPlayoutId == playout.PlayoutId)
{
await PlayoutSelected(playout);
}
}
private async Task LoadAllPlayouts() =>
_playouts = await _mediator.Send(new GetAllPlayouts())
.Map(list => list.OrderBy(x => decimal.Parse(x.ChannelNumber)).ToList());
private async Task<TableData<PlayoutNameViewModel>> ServerReload(TableState state)
{
await _mediator.Send(new SaveConfigElementByKey(ConfigElementKey.PlayoutsPageSize, state.PageSize.ToString()));
List<PlayoutNameViewModel> playouts = await _mediator.Send(new GetAllPlayouts());
IOrderedEnumerable<PlayoutNameViewModel> sorted = playouts.OrderBy(p => decimal.Parse(p.ChannelNumber));
// TODO: properly page this data
return new TableData<PlayoutNameViewModel>
{
TotalItems = playouts.Count,
Items = sorted.Skip(state.Page * state.PageSize).Take(state.PageSize)
};
}
}
+30 -7
View File
@@ -2,11 +2,18 @@
@using ErsatzTV.Application.ProgramSchedules
@using ErsatzTV.Application.ProgramSchedules.Commands
@using ErsatzTV.Application.ProgramSchedules.Queries
@using ErsatzTV.Application.Configuration.Queries
@using ErsatzTV.Application.Configuration.Commands
@inject IDialogService _dialog
@inject IMediator _mediator
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
<MudTable Hover="true" Items="_schedules" Dense="true" SelectedItemChanged="@(async (ProgramScheduleViewModel x) => await ScheduleSelected(x))">
<MudTable Hover="true"
Dense="true"
SelectedItemChanged="@(async (ProgramScheduleViewModel x) => await ScheduleSelected(x))"
@bind-RowsPerPage="@_rowsPerPage"
ServerData="@(new Func<TableState, Task<TableData<ProgramScheduleViewModel>>>(ServerReload))"
@ref="_table">
<ToolBarContent>
<MudText Typo="Typo.h6">Schedules</MudText>
</ToolBarContent>
@@ -80,13 +87,17 @@
}
</MudContainer>
@code {
private List<ProgramScheduleViewModel> _schedules;
private MudTable<ProgramScheduleViewModel> _table;
private int _rowsPerPage;
private List<ProgramScheduleItemViewModel> _selectedScheduleItems;
private ProgramScheduleViewModel _selectedSchedule;
protected override Task OnParametersSetAsync() => LoadSchedules();
protected override async Task OnParametersSetAsync()
{
_rowsPerPage = await _mediator.Send(new GetConfigElementByKey(ConfigElementKey.SchedulesPageSize))
.Map(maybeRows => maybeRows.Match(ce => int.TryParse(ce.Value, out int rows) ? rows : 10, () => 10));
}
private async Task ScheduleSelected(ProgramScheduleViewModel schedule)
{
@@ -105,11 +116,23 @@
if (!result.Cancelled)
{
await _mediator.Send(new DeleteProgramSchedule(programSchedule.Id));
await LoadSchedules();
await _table.ReloadServerData();
}
}
private async Task<TableData<ProgramScheduleViewModel>> ServerReload(TableState state)
{
await _mediator.Send(new SaveConfigElementByKey(ConfigElementKey.SchedulesPageSize, state.PageSize.ToString()));
private async Task LoadSchedules() =>
_schedules = await _mediator.Send(new GetAllProgramSchedules()).Map(list => list.OrderBy(vm => vm.Name).ToList());
List<ProgramScheduleViewModel> schedules = await _mediator.Send(new GetAllProgramSchedules());
IOrderedEnumerable<ProgramScheduleViewModel> sorted = schedules.OrderBy(s => s.Name);
// TODO: properly page this data
return new TableData<ProgramScheduleViewModel>
{
TotalItems = schedules.Count,
Items = sorted.Skip(state.Page * state.PageSize).Take(state.PageSize)
};
}
}