diff --git a/ErsatzTV/Pages/FragmentNavigationBase.cs b/ErsatzTV/Pages/FragmentNavigationBase.cs new file mode 100644 index 000000000..89513121e --- /dev/null +++ b/ErsatzTV/Pages/FragmentNavigationBase.cs @@ -0,0 +1,33 @@ +using System; +using System.Threading.Tasks; +using ErsatzTV.Extensions; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.JSInterop; + +namespace ErsatzTV.Pages +{ + public class FragmentNavigationBase : ComponentBase, IDisposable + { + [Inject] + private NavigationManager NavManager { get; set; } + + [Inject] + private IJSRuntime JsRuntime { get; set; } + + public void Dispose() => NavManager.LocationChanged -= TryFragmentNavigation; + + protected override void OnInitialized() => NavManager.LocationChanged += TryFragmentNavigation; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await NavManager.NavigateToFragmentAsync(JsRuntime); + } + } + + private async void TryFragmentNavigation(object sender, LocationChangedEventArgs args) => + await NavManager.NavigateToFragmentAsync(JsRuntime); + } +} diff --git a/ErsatzTV/Pages/Search.razor b/ErsatzTV/Pages/Search.razor index 22931bedd..32687babe 100644 --- a/ErsatzTV/Pages/Search.razor +++ b/ErsatzTV/Pages/Search.razor @@ -6,6 +6,7 @@ @using Microsoft.AspNetCore.WebUtilities @using Microsoft.Extensions.Primitives @using Unit = LanguageExt.Unit +@inherits FragmentNavigationBase @inject NavigationManager NavigationManager @inject IMediator Mediator @inject ILogger Logger @@ -13,14 +14,51 @@ @inject IDialogService Dialog @inject ChannelWriter Channel - -
- Search Results: "@_query" + +
+ @if (_selectedCards.Any()) + { + @_selectedCards.Count @(_selectedCards.Count == 1 ? "Item" : "Items") Selected +
+ + Add To Collection + + + Add To Schedule + + + Clear Selection + +
+ } + else + { + @_query + @_data.MovieCards.Count Movies + @_data.ShowCards.Count Shows + }
- +
+ @if (_data?.MovieCards.Any() == true) { - Movies + + Movies + @foreach (MovieCardViewModel card in _data.MovieCards.OrderBy(m => m.SortTitle)) @@ -37,7 +75,12 @@ @if (_data?.ShowCards.Any() == true) { - Television Shows + + Shows + @foreach (TelevisionShowCardViewModel card in _data.ShowCards.OrderBy(s => s.SortTitle)) @@ -70,7 +113,12 @@ _selectedCards = new System.Collections.Generic.HashSet(); } - private async Task SelectClicked(MovieCardViewModel movie, MouseEventArgs e) + private void ClearSelection() + { + _selectedCards.Clear(); + } + + private void SelectClicked(MovieCardViewModel movie, MouseEventArgs e) { if (_selectedCards.Contains(movie)) { diff --git a/ErsatzTV/Shared/MainLayout.razor b/ErsatzTV/Shared/MainLayout.razor index 3aac076fc..fe28e196b 100644 --- a/ErsatzTV/Shared/MainLayout.razor +++ b/ErsatzTV/Shared/MainLayout.razor @@ -73,6 +73,7 @@ { ActionDefault = "rgba(255,255,255, 0.80)", Primary = "#009000", + Secondary = "#009090", AppbarBackground = "#121212", Background = "#272727", DrawerBackground = "#1f1f1f",