Browse Source

add movie to collection from paged view

pull/34/head
Jason Dove 5 years ago
parent
commit
edcadd06da
  1. 34
      ErsatzTV/Pages/MovieList.razor
  2. 10
      ErsatzTV/Shared/MediaCard.razor

34
ErsatzTV/Pages/MovieList.razor

@ -2,7 +2,13 @@
@page "/media/movies/page/{PageNumber:int}" @page "/media/movies/page/{PageNumber:int}"
@using ErsatzTV.Application.MediaCards @using ErsatzTV.Application.MediaCards
@using ErsatzTV.Application.MediaCards.Queries @using ErsatzTV.Application.MediaCards.Queries
@using ErsatzTV.Application.MediaCollections
@using ErsatzTV.Application.MediaCollections.Commands
@using Unit = LanguageExt.Unit
@inject ILogger<MovieList> Logger
@inject ISnackbar Snackbar
@inject IMediator Mediator @inject IMediator Mediator
@inject IDialogService Dialog
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
<MudContainer MaxWidth="MaxWidth.Small" Class="mb-6" Style="max-width: 300px"> <MudContainer MaxWidth="MaxWidth.Small" Class="mb-6" Style="max-width: 300px">
@ -24,7 +30,9 @@
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid"> <MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@foreach (MovieCardViewModel card in _data.Cards.Where(d => !string.IsNullOrWhiteSpace(d.Title))) @foreach (MovieCardViewModel card in _data.Cards.Where(d => !string.IsNullOrWhiteSpace(d.Title)))
{ {
<MediaCard Data="@card" Link="@($"/media/movies/{card.MovieId}")"/> <MediaCard Data="@card"
Link="@($"/media/movies/{card.MovieId}")"
AddToCollectionClicked="@AddToCollection"/>
} }
</MudContainer> </MudContainer>
@ -53,4 +61,28 @@
private void NextPage() => NavigationManager.NavigateTo($"/media/movies/page/{PageNumber + 1}"); private void NextPage() => NavigationManager.NavigateTo($"/media/movies/page/{PageNumber + 1}");
private async Task AddToCollection(MediaCardViewModel card)
{
if (card is MovieCardViewModel movie)
{
var parameters = new DialogParameters { { "EntityType", "movie" }, { "EntityName", movie.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)
{
var request = new AddMovieToCollection(collection.Id, movie.MovieId);
Either<BaseError, Unit> addResult = await Mediator.Send(request);
addResult.Match(
Left: error =>
{
Snackbar.Add($"Unexpected error adding movie to collection: {error.Value}");
Logger.LogError("Unexpected error adding movie to collection: {Error}", error.Value);
},
Right: _ => Snackbar.Add($"Added {movie.Title} to collection {collection.Name}", Severity.Success));
}
}
}
} }

10
ErsatzTV/Shared/MediaCard.razor

@ -17,6 +17,13 @@
<div class="media-card-overlay" style=""> <div class="media-card-overlay" style="">
<MudButton Link="@Link" Style="height: 100%; width: 100%"> <MudButton Link="@Link" Style="height: 100%; width: 100%">
</MudButton> </MudButton>
@if (AddToCollectionClicked.HasDelegate)
{
<MudIconButton Color="Color.Tertiary"
Icon="@Icons.Material.Filled.PlaylistAdd"
Style="bottom: 0; position: absolute; left: 0;"
OnClick="@(() => AddToCollectionClicked.InvokeAsync(Data))"/>
}
@if (DeleteClicked.HasDelegate) @if (DeleteClicked.HasDelegate)
{ {
<MudIconButton Color="Color.Tertiary" <MudIconButton Color="Color.Tertiary"
@ -78,6 +85,9 @@
[Parameter] [Parameter]
public EventCallback<MediaCardViewModel> DeleteClicked { get; set; } public EventCallback<MediaCardViewModel> DeleteClicked { get; set; }
[Parameter]
public EventCallback<MediaCardViewModel> AddToCollectionClicked { get; set; }
private string GetPlaceholder(string sortTitle) private string GetPlaceholder(string sortTitle)
{ {
if (Placeholder != null) if (Placeholder != null)

Loading…
Cancel
Save