Browse Source

remove episode page

pull/56/head
Jason Dove 5 years ago
parent
commit
ace0a78e0d
  1. 22
      ErsatzTV/Extensions/NavigationManagerExtensions.cs
  2. 2
      ErsatzTV/Pages/CollectionItems.razor
  3. 84
      ErsatzTV/Pages/TelevisionEpisode.razor
  4. 19
      ErsatzTV/Pages/TelevisionEpisodeList.razor
  5. 12
      ErsatzTV/Pages/_Host.cshtml

22
ErsatzTV/Extensions/NavigationManagerExtensions.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
namespace ErsatzTV.Extensions
{
public static class NavigationManagerExtensions
{
public static ValueTask NavigateToFragmentAsync(this NavigationManager navigationManager, IJSRuntime jSRuntime)
{
Uri uri = navigationManager.ToAbsoluteUri(navigationManager.Uri);
if (uri.Fragment.Length == 0)
{
return default;
}
return jSRuntime.InvokeVoidAsync("blazorHelpers.scrollToFragment", uri.Fragment.Substring(1));
}
}
}

2
ErsatzTV/Pages/CollectionItems.razor

@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
@foreach (TelevisionEpisodeCardViewModel card in _data.EpisodeCards.OrderBy(e => e.Aired))
{
<MediaCard Data="@card"
Link="@($"/media/tv/episodes/{card.EpisodeId}")"
Link="@($"/media/tv/seasons/{card.SeasonId}#episode-{card.EpisodeId}")"
Title="@card.ShowTitle"
Subtitle="@card.Title"
ContainerClass="media-card-episode-container mx-2"

84
ErsatzTV/Pages/TelevisionEpisode.razor

@ -1,84 +0,0 @@ @@ -1,84 +0,0 @@
@page "/media/tv/episodes/{EpisodeId:int}"
@using ErsatzTV.Application.Television
@using ErsatzTV.Application.Television.Queries
@using ErsatzTV.Application.MediaCollections
@using ErsatzTV.Application.MediaCollections.Commands
@inject IMediator Mediator
@inject IDialogService Dialog
@inject NavigationManager NavigationManager
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
<MudContainer MaxWidth="MaxWidth.Large">
<MudBreadcrumbs Items="_breadcrumbs" Class="mb-6"></MudBreadcrumbs>
<MudCard Class="mb-6">
<div style="display: flex; flex-direction: row;">
@if (!string.IsNullOrWhiteSpace(_episode.Poster))
{
<MudPaper style="display: flex; flex-direction: column">
<MudCardMedia Image="@($"/artwork/thumbnails/{_episode.Poster}")" Style="flex-grow: 1; height: 220px; width: 392px;"/>
</MudPaper>
}
<MudCardContent Class="ml-3">
<div style="display: flex; flex-direction: column; height: 100%">
<MudText Typo="Typo.h4">@_episode.Title</MudText>
<MudText Typo="Typo.subtitle1" Class="mb-6 mud-text-secondary">@_season.Name</MudText>
<MudText Style="flex-grow: 1">@_episode.Plot</MudText>
<div class="mt-6">
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="@AddToCollection">
Add To Collection
</MudButton>
</div>
</div>
</MudCardContent>
</div>
</MudCard>
</MudContainer>
</MudContainer>
@code {
[Parameter]
public int EpisodeId { get; set; }
private TelevisionEpisodeViewModel _episode;
private TelevisionSeasonViewModel _season;
private List<BreadcrumbItem> _breadcrumbs;
protected override Task OnParametersSetAsync() => RefreshData();
private async Task RefreshData()
{
await Mediator.Send(new GetTelevisionEpisodeById(EpisodeId))
.IfSomeAsync(vm => _episode = vm);
await Mediator.Send(new GetTelevisionSeasonById(_episode.SeasonId))
.IfSomeAsync(vm => _season = vm);
_breadcrumbs = new List<BreadcrumbItem>
{
new("TV Shows", "/media/tv/shows"),
new($"{_season.Title} ({_season.Year})", $"/media/tv/shows/{_season.ShowId}"),
new(_season.Name, $"/media/tv/seasons/{_episode.SeasonId}"),
new($"Episode {_episode.Episode}", null, true)
};
}
private async Task AddToCollection()
{
var parameters = new DialogParameters { { "EntityType", "episode" }, { "EntityName", _episode.Title } };
var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall };
IDialogReference dialog = Dialog.Show<AddToCollectionDialog>("Add To Collection", parameters, options);
DialogResult result = await dialog.Result;
if (!result.Cancelled && result.Data is MediaCollectionViewModel collection)
{
await Mediator.Send(new AddEpisodeToCollection(collection.Id, EpisodeId));
NavigationManager.NavigateTo($"/media/collections/{collection.Id}");
}
}
}

19
ErsatzTV/Pages/TelevisionEpisodeList.razor

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
@using ErsatzTV.Application.MediaCollections.Commands
@using ErsatzTV.Application.ProgramSchedules
@using ErsatzTV.Application.ProgramSchedules.Commands
@using ErsatzTV.Extensions
@using Unit = LanguageExt.Unit
@inject IMediator Mediator
@inject ILogger<TelevisionEpisodeList> Logger
@ -14,6 +15,7 @@ @@ -14,6 +15,7 @@
@inject IDialogService Dialog
@inject NavigationManager NavigationManager
@inject ChannelWriter<IBackgroundServiceRequest> Channel
@inject IJSRuntime JsRuntime
<MudContainer MaxWidth="MaxWidth.False" Style="padding: 0" Class="fanart-container">
<div class="fanart-tint"></div>
@ -57,7 +59,7 @@ @@ -57,7 +59,7 @@
@foreach (TelevisionEpisodeCardViewModel episode in _data.Cards)
{
<MudCard Class="mb-6">
<div style="display: flex; flex-direction: row;">
<div id="@($"episode-{episode.EpisodeId}")" style="display: flex; flex-direction: row; scroll-margin-top: 85px">
@if (!string.IsNullOrWhiteSpace(episode.Poster))
{
<MudPaper style="display: flex; flex-direction: column">
@ -95,7 +97,13 @@ @@ -95,7 +97,13 @@
private TelevisionEpisodeCardResultsViewModel _data;
private List<BreadcrumbItem> _breadcrumbs;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await NavigationManager.NavigateToFragmentAsync(JsRuntime);
}
}
protected override Task OnParametersSetAsync() => RefreshData();
@ -105,13 +113,6 @@ @@ -105,13 +113,6 @@
.IfSomeAsync(vm => _season = vm);
_data = await Mediator.Send(new GetTelevisionEpisodeCards(SeasonId, _pageNumber, _pageSize));
// _breadcrumbs = new List<BreadcrumbItem>
// {
// new("TV Shows", "/media/tv/shows"),
// new($"{_season.Title} ({_season.Year})", ),
// new(_season.Name, null, true)
// };
}
private async Task AddToCollection()

12
ErsatzTV/Pages/_Host.cshtml

@ -35,5 +35,17 @@ @@ -35,5 +35,17 @@
<script src="_framework/blazor.server.js"></script>
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script type="text/javascript">
window.blazorHelpers = {
scrollToFragment: (elementId) => {
const element = document.getElementById(elementId);
if (element) {
element.scrollIntoView({
behavior: 'smooth'
});
}
}
};
</script>
</body>
</html>
Loading…
Cancel
Save