diff --git a/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Panels/UsersSearchResultPanelComponent.razor b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Panels/UsersSearchResultPanelComponent.razor new file mode 100644 index 0000000..cb5dd8e --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Panels/UsersSearchResultPanelComponent.razor @@ -0,0 +1,77 @@ +@using Blazorise.Extensions +@using WatchIt.Website.Components.Pages.SearchPage.Subcomponents + + + +
+
+
+
+

Users

+
+
+ @if (_loaded) + { + if (!_items.IsNullOrEmpty()) + { + for (int i = 0; i < _items.Count; i++) + { + if (i > 0) + { +
+
+
+
+
+ } +
+
+ @{ + int iCopy = i; + } + +
+
+ } + if (!_allItemsLoaded) + { +
+
+
+ +
+
+
+ } + } + else + { +
+
+
+ No items found +
+
+
+ } + } + else + { +
+
+ +
+
+ } +
+
\ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Panels/UsersSearchResultPanelComponent.razor.cs b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Panels/UsersSearchResultPanelComponent.razor.cs new file mode 100644 index 0000000..42b7197 --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Panels/UsersSearchResultPanelComponent.razor.cs @@ -0,0 +1,97 @@ +using Microsoft.AspNetCore.Components; +using WatchIt.Common.Model.Accounts; +using WatchIt.Website.Services.Client.Accounts; + +namespace WatchIt.Website.Components.Pages.SearchPage.Panels; + +public partial class UsersSearchResultPanelComponent : ComponentBase +{ + #region SERVICES + + [Inject] private IAccountsClientService AccountsClientService { get; set; } = default!; + + #endregion + + + + #region PARAMETERS + + [Parameter] public required string Query { get; set; } + + #endregion + + + + #region FIELDS + + private bool _loaded; + + private AccountQueryParameters _query = new AccountQueryParameters + { + First = 5 + }; + + private List _items = []; + private bool _allItemsLoaded; + private bool _itemsLoading; + + #endregion + + + + #region PRIVATE METHODS + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // INIT + _query.Username = Query; + + List endTasks = new List(); + + // STEP 0 + endTasks.AddRange( + [ + AccountsClientService.GetAccounts(_query, data => + { + _items.AddRange(data); + if (data.Count() < 5) + { + _allItemsLoaded = true; + } + else + { + _query.After = 5; + } + }) + ]); + + // END + await Task.WhenAll(endTasks); + + _loaded = true; + StateHasChanged(); + } + } + + private async Task DownloadItems() + { + _itemsLoading = true; + await AccountsClientService.GetAccounts(_query, data => + { + _items.AddRange(data); + if (data.Count() < 5) + { + _allItemsLoaded = true; + } + else + { + _query.After += 5; + } + _itemsLoading = false; + }); + } + + #endregion +} \ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Subcomponents/UserSearchResultItemComponent.razor b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Subcomponents/UserSearchResultItemComponent.razor new file mode 100644 index 0000000..dc936c9 --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Subcomponents/UserSearchResultItemComponent.razor @@ -0,0 +1,7 @@ + +
+ +

@(Item.Username)

+
+
\ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Subcomponents/UserSearchResultItemComponent.razor.cs b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Subcomponents/UserSearchResultItemComponent.razor.cs new file mode 100644 index 0000000..b81a075 --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/Pages/SearchPage/Subcomponents/UserSearchResultItemComponent.razor.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Components; +using WatchIt.Common.Model.Accounts; + +namespace WatchIt.Website.Components.Pages.SearchPage.Subcomponents; + +public partial class UserSearchResultItemComponent : ComponentBase +{ + #region PROPERTIES + + [Parameter] public required AccountResponse Item { get; set; } + + #endregion +} \ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Layout/MainLayout.razor.cs b/WatchIt.Website/WatchIt.Website/Layout/MainLayout.razor.cs index 76d3d6c..d0df615 100644 --- a/WatchIt.Website/WatchIt.Website/Layout/MainLayout.razor.cs +++ b/WatchIt.Website/WatchIt.Website/Layout/MainLayout.razor.cs @@ -121,7 +121,7 @@ public partial class MainLayout : LayoutComponentBase if (!string.IsNullOrWhiteSpace(_searchbarText)) { string query = WebUtility.UrlEncode(_searchbarText); - NavigationManager.NavigateTo($"/search/{query}"); + NavigationManager.NavigateTo($"/search/{query}", true); } } diff --git a/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor b/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor index 7e30b8f..afcbd75 100644 --- a/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor +++ b/WatchIt.Website/WatchIt.Website/Pages/SearchPage.razor @@ -1,3 +1,4 @@ +@using System.Net @using WatchIt.Common.Model.Movies @using WatchIt.Common.Model.Persons @using WatchIt.Common.Model.Series @@ -15,7 +16,7 @@

- Search results for phrase: "@(DecodedQuery)" + Search results for phrase: "@(WebUtility.UrlDecode(Query))"

@@ -27,7 +28,7 @@ NameSource="@(item => item.Title)" AdditionalNameInfoSource="@(item => item.ReleaseDate.HasValue ? $" ({item.ReleaseDate.Value.Year})" : null)" RatingSource="@(item => item.Rating)" - Query="@(new MovieQueryParameters { Title = DecodedQuery, OrderBy = "rating.count" })" + Query="@(new MovieQueryParameters { Title = WebUtility.UrlDecode(Query), OrderBy = "rating.count" })" ItemDownloadingTask="@(MoviesClientService.GetAllMovies)" PictureDownloadingTask="@((id, action) => MediaClientService.GetMediaPoster(id, action))" PosterPlaceholder="/assets/media_poster.png" @@ -43,7 +44,7 @@ NameSource="@(item => item.Title)" AdditionalNameInfoSource="@(item => item.ReleaseDate.HasValue ? $" ({item.ReleaseDate.Value.Year})" : null)" RatingSource="@(item => item.Rating)" - Query="@(new SeriesQueryParameters { Title = DecodedQuery, OrderBy = "rating.count" })" + Query="@(new SeriesQueryParameters { Title = WebUtility.UrlDecode(Query), OrderBy = "rating.count" })" ItemDownloadingTask="@(SeriesClientService.GetAllSeries)" PictureDownloadingTask="@((id, action) => MediaClientService.GetMediaPoster(id, action))" PosterPlaceholder="/assets/media_poster.png" @@ -58,9 +59,10 @@ IdSource="@(item => item.Id)" NameSource="@(item => item.Name)" RatingSource="@(item => item.Rating)" - Query="@(new PersonQueryParameters { Name = DecodedQuery, OrderBy = "rating.count" })" + Query="@(new PersonQueryParameters { Name = WebUtility.UrlDecode(Query), OrderBy = "rating.count" })" ItemDownloadingTask="@(PersonsClientService.GetAllPersons)" PictureDownloadingTask="@((id, action) => PersonsClientService.GetPersonPhoto(id, action))" PosterPlaceholder="/assets/person_poster.png" GetGlobalRatingMethod="@((id, action) => PersonsClientService.GetPersonGlobalRating(id, action))"/> + \ No newline at end of file