@page "/schedules/{Id:int}" @page "/schedules/add" @using ErsatzTV.Application.ProgramSchedules @using ErsatzTV.Application.ProgramSchedules.Queries @inject NavigationManager NavigationManager @inject ILogger Logger @inject ISnackbar Snackbar @inject IMediator Mediator
@(IsEdit ? "Edit Schedule" : "Add Schedule") @foreach (PlaybackOrder playbackOrder in Enum.GetValues()) { @playbackOrder } @(IsEdit ? "Save Changes" : "Add Schedule")
@code { [Parameter] public int Id { get; set; } private readonly ProgramScheduleEditViewModel _model = new(); private EditContext _editContext; private ValidationMessageStore _messageStore; protected override async Task OnParametersSetAsync() { if (IsEdit) { Option maybeProgramSchedule = await Mediator.Send(new GetProgramScheduleById(Id)); maybeProgramSchedule.Match( viewModel => { _model.Id = viewModel.Id; _model.Name = viewModel.Name; _model.MediaCollectionPlaybackOrder = viewModel.MediaCollectionPlaybackOrder; }, () => NavigationManager.NavigateTo("404")); } else { _model.Name = "New Schedule"; _model.MediaCollectionPlaybackOrder = PlaybackOrder.Shuffle; } } protected override void OnInitialized() { _editContext = new EditContext(_model); _messageStore = new ValidationMessageStore(_editContext); } private bool IsEdit => Id > 0; private async Task HandleSubmitAsync() { _messageStore.Clear(); if (_editContext.Validate()) { Seq errorMessage = IsEdit ? (await Mediator.Send(_model.ToUpdate())).LeftToSeq() : (await Mediator.Send(_model.ToCreate())).LeftToSeq(); errorMessage.HeadOrNone().Match( error => { Snackbar.Add(error.Value); Logger.LogError("Unexpected error saving schedule: {Error}", error.Value); }, () => NavigationManager.NavigateTo("/schedules")); } } }