mirror of https://github.com/ErsatzTV/ErsatzTV.git
5 changed files with 45 additions and 94 deletions
@ -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)); |
||||
} |
||||
} |
||||
} |
||||
@ -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}"); |
||||
} |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue