From 0994edb983b921662ede27d9c04f054e8785094f Mon Sep 17 00:00:00 2001 From: Mateusz Skoczek Date: Sat, 28 Sep 2024 00:18:04 +0200 Subject: [PATCH] LoadingComponent improvement, SearchResultComponent added, some fixes --- .../MoviesControllerService.cs | 3 +- .../SeriesControllerService.cs | 3 +- .../Components/LoadingComponent.razor | 6 +- .../Components/LoadingComponent.razor.cs | 12 ++++ .../SearchPage/SearchResultComponent.razor | 55 ++++++++++++++++ .../SearchPage/SearchResultComponent.razor.cs | 56 ++++++++++++++++ .../SearchResultComponent.razor.css | 0 .../WatchIt.Website/Pages/AdminPage.razor | 4 +- .../WatchIt.Website/Pages/HomePage.razor | 5 +- .../WatchIt.Website/Pages/MediaEditPage.razor | 4 +- .../WatchIt.Website/Pages/MediaPage.razor | 4 +- .../WatchIt.Website/Pages/SearchPage.razor | 66 ++++++++++++++++++- .../WatchIt.Website/Pages/SearchPage.razor.cs | 52 +++++++++++++++ 13 files changed, 258 insertions(+), 12 deletions(-) create mode 100644 WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor.cs create mode 100644 WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor create mode 100644 WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.cs create mode 100644 WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.css diff --git a/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Movies/MoviesControllerService.cs b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Movies/MoviesControllerService.cs index 50256b0..f94ce06 100644 --- a/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Movies/MoviesControllerService.cs +++ b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Movies/MoviesControllerService.cs @@ -38,7 +38,8 @@ public class MoviesControllerService : IMoviesControllerService public async Task GetAllMovies(MovieQueryParameters query) { - IEnumerable data = await _database.MediaMovies.Select(x => new MovieResponse(x)).ToListAsync(); + IEnumerable rawData = await _database.MediaMovies.ToListAsync(); + IEnumerable data = rawData.Select(x => new MovieResponse(x)); data = query.PrepareData(data); return RequestResult.Ok(data); } diff --git a/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Series/SeriesControllerService.cs b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Series/SeriesControllerService.cs index 79527ad..15cee28 100644 --- a/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Series/SeriesControllerService.cs +++ b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Controllers/WatchIt.WebAPI.Services.Controllers.Series/SeriesControllerService.cs @@ -38,7 +38,8 @@ public class SeriesControllerService : ISeriesControllerService public async Task GetAllSeries(SeriesQueryParameters query) { - IEnumerable data = await _database.MediaSeries.Select(x => new SeriesResponse(x)).ToListAsync(); + IEnumerable rawData = await _database.MediaSeries.ToListAsync(); + IEnumerable data = rawData.Select(x => new SeriesResponse(x)); data = query.PrepareData(data); return RequestResult.Ok(data); } diff --git a/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor b/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor index a57afcc..4803ba5 100644 --- a/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor +++ b/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor @@ -1,8 +1,8 @@ -
+
-
+
-

Loading...

+

Loading...

\ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor.cs b/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor.cs new file mode 100644 index 0000000..2ab6e66 --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/LoadingComponent.razor.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components; + +namespace WatchIt.Website.Components; + +public partial class LoadingComponent : ComponentBase +{ + #region PARAMETERS + + [Parameter] public string Color { get; set; } = "dark"; + + #endregion +} \ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor b/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor new file mode 100644 index 0000000..a4a8bfc --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor @@ -0,0 +1,55 @@ +@typeparam TItem +@using Microsoft.IdentityModel.Tokens +@typeparam TQuery where TQuery : WatchIt.Common.Query.QueryParameters + + + +
+
+
+
+

@(Title)

+
+
+ @if (_loaded) + { + if (!_items.IsNullOrEmpty()) + { + for (int i = 0; i < _items.Count; i++) + { + if (i > 0) + { +
+
+
+
+
+ } +
+
+ test +
+
+ } + } + else + { +
+
+
+ No items found +
+
+
+ } + } + else + { +
+
+ +
+
+ } +
+
\ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.cs b/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.cs new file mode 100644 index 0000000..cc55aa7 --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Components; +using WatchIt.Common.Query; + +namespace WatchIt.Website.Components.SearchPage; + +public partial class SearchResultComponent : ComponentBase where TQuery : QueryParameters +{ + #region PARAMETERS + + [Parameter] public required string Title { get; set; } + [Parameter] public required TQuery Query { get; set; } + [Parameter] public Func>, Task> DownloadingTask { get; set; } + + #endregion + + + + #region FIELDS + + private bool _loaded; + + private List _items = []; + private bool _allItemsLoaded; + + + #endregion + + + + #region PRIVATE METHODS + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // INIT + Query.First = 5; + + List endTasks = new List(); + + // STEP 0 + endTasks.AddRange( + [ + DownloadingTask(Query, data => _items.AddRange(data)) + ]); + + // END + await Task.WhenAll(endTasks); + + _loaded = true; + StateHasChanged(); + } + } + + #endregion +} \ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.css b/WatchIt.Website/WatchIt.Website/Components/SearchPage/SearchResultComponent.razor.css new file mode 100644 index 0000000..e69de29 diff --git a/WatchIt.Website/WatchIt.Website/Pages/AdminPage.razor b/WatchIt.Website/WatchIt.Website/Pages/AdminPage.razor index 8946ac8..7be53a9 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/AdminPage.razor +++ b/WatchIt.Website/WatchIt.Website/Pages/AdminPage.razor @@ -37,7 +37,9 @@ {
- +
+ +
} diff --git a/WatchIt.Website/WatchIt.Website/Pages/HomePage.razor b/WatchIt.Website/WatchIt.Website/Pages/HomePage.razor index 0e9cc89..a804363 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/HomePage.razor +++ b/WatchIt.Website/WatchIt.Website/Pages/HomePage.razor @@ -1,5 +1,4 @@ @page "/" -@using WatchIt.Common.Model.Movies WatchIt @@ -98,7 +97,9 @@ {
- +
+ +
} diff --git a/WatchIt.Website/WatchIt.Website/Pages/MediaEditPage.razor b/WatchIt.Website/WatchIt.Website/Pages/MediaEditPage.razor index bcfcac0..31550b0 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/MediaEditPage.razor +++ b/WatchIt.Website/WatchIt.Website/Pages/MediaEditPage.razor @@ -382,7 +382,9 @@ {
- +
+ +
} diff --git a/WatchIt.Website/WatchIt.Website/Pages/MediaPage.razor b/WatchIt.Website/WatchIt.Website/Pages/MediaPage.razor index b6b6a6f..27b1c79 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/MediaPage.razor +++ b/WatchIt.Website/WatchIt.Website/Pages/MediaPage.razor @@ -204,7 +204,9 @@ else {
- +
+ +
} diff --git a/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor b/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor index ed6aeca..1da37d9 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor +++ b/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor @@ -1,5 +1,67 @@ -@page "/search" +@using WatchIt.Common.Model.Movies +@using WatchIt.Common.Model.Series +@using WatchIt.Common.Query +@using WatchIt.Website.Components.SearchPage +@using WatchIt.Website.Services.WebAPI.Movies + +@layout MainLayout + +@page "/search/{query}" + +WatchIt - Searching "@(Query)" -

SearchPage

\ No newline at end of file +
+ @if (_loaded) + { + if (string.IsNullOrWhiteSpace(_error)) + { +
+
+
+
+

+ Search results for phrase: "@(DecodedQuery)" +

+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ } + else + { +
+
+ +
+
+ } + } + else + { +
+
+ +
+
+ } +
\ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor.cs b/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor.cs index dbf03b0..5fa86fb 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor.cs +++ b/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor.cs @@ -1,7 +1,59 @@ +using System.Net; using Microsoft.AspNetCore.Components; +using WatchIt.Website.Layout; +using WatchIt.Website.Services.WebAPI.Movies; +using WatchIt.Website.Services.WebAPI.Series; namespace WatchIt.Website.Pages; public partial class SearchPage : ComponentBase { + #region SERVICES + + [Inject] private IMoviesWebAPIService MoviesWebAPIService { get; set; } = default!; + [Inject] private ISeriesWebAPIService SeriesWebAPIService { get; set; } = default!; + + #endregion + + + + #region FIELDS + + private bool _loaded; + private string? _error; + + #endregion + + + + #region PARAMETERS + + [Parameter] public string Query { get; set; } + + [CascadingParameter] public MainLayout Layout { get; set; } + + #endregion + + + + #region PROPERTIES + + public string DecodedQuery => WebUtility.UrlDecode(Query); + + #endregion + + + + #region PRIVATE METHODS + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _loaded = true; + StateHasChanged(); + } + } + + #endregion } \ No newline at end of file