@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; _model.KeepMultiPartEpisodesTogether = viewModel.KeepMultiPartEpisodesTogether; _model.TreatCollectionsAsShows = viewModel.TreatCollectionsAsShows; }, () => _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()) { Either result = IsEdit ? await _mediator.Send(_model.ToUpdate()) : await _mediator.Send(_model.ToCreate()); result.Match( programSchedule => { string destination = IsEdit ? "/schedules" : $"/schedules/{programSchedule.Id}/items"; _navigationManager.NavigateTo(destination); }, error => { _snackbar.Add(error.Value, Severity.Error); _logger.LogError("Unexpected error saving schedule: {Error}", error.Value); }); } } }