diff --git a/ErsatzTV/Pages/MovieList.razor b/ErsatzTV/Pages/MovieList.razor index 74d134695..e312f82d5 100644 --- a/ErsatzTV/Pages/MovieList.razor +++ b/ErsatzTV/Pages/MovieList.razor @@ -2,7 +2,13 @@ @page "/media/movies/page/{PageNumber:int}" @using ErsatzTV.Application.MediaCards @using ErsatzTV.Application.MediaCards.Queries +@using ErsatzTV.Application.MediaCollections +@using ErsatzTV.Application.MediaCollections.Commands +@using Unit = LanguageExt.Unit +@inject ILogger Logger +@inject ISnackbar Snackbar @inject IMediator Mediator +@inject IDialogService Dialog @inject NavigationManager NavigationManager @@ -24,7 +30,9 @@ @foreach (MovieCardViewModel card in _data.Cards.Where(d => !string.IsNullOrWhiteSpace(d.Title))) { - + } @@ -53,4 +61,28 @@ 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("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 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)); + } + } + } + } \ No newline at end of file diff --git a/ErsatzTV/Shared/MediaCard.razor b/ErsatzTV/Shared/MediaCard.razor index f6b9a13b4..6f78a7e2a 100644 --- a/ErsatzTV/Shared/MediaCard.razor +++ b/ErsatzTV/Shared/MediaCard.razor @@ -17,6 +17,13 @@
+ @if (AddToCollectionClicked.HasDelegate) + { + + } @if (DeleteClicked.HasDelegate) { DeleteClicked { get; set; } + [Parameter] + public EventCallback AddToCollectionClicked { get; set; } + private string GetPlaceholder(string sortTitle) { if (Placeholder != null)