From 1da3e1f0a008c6cdb6f80a32e8a4425f25df4996 Mon Sep 17 00:00:00 2001 From: Egamorf Date: Fri, 9 May 2025 01:30:50 +0200 Subject: [PATCH] Add game add button in detail --- .../Pages/Detail/GameDetail.razor | 16 ++++- .../Pages/Detail/GameDetail.razor.cs | 7 ++- .../Pages/Detail/GameDetail.razor.css | 8 ++- .../Components/GameCreationForm.razor.css | 17 ++++++ .../Pages/Games/Games.razor | 2 +- .../Pages/Games/Games.razor.cs | 35 ++--------- .../Shared/Components/GameBaseComponent.cs | 59 +++++++++++++++++++ 7 files changed, 108 insertions(+), 36 deletions(-) create mode 100644 src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/GameBaseComponent.cs diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor index 9682b3f..052f459 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor @@ -1,14 +1,22 @@ @page "/Detail/{GameId:int}" @using GameIdeas.BlazorApp.Helpers +@using GameIdeas.BlazorApp.Pages.Games.Components +@using GameIdeas.BlazorApp.Shared.Components +@using GameIdeas.BlazorApp.Shared.Components.ButtonAdd @using GameIdeas.BlazorApp.Shared.Components.Header @using GameIdeas.BlazorApp.Shared.Components.Interest +@using GameIdeas.BlazorApp.Shared.Components.Popup @using GameIdeas.BlazorApp.Shared.Components.ReadMore @using GameIdeas.BlazorApp.Shared.Constants @using GameIdeas.Shared.Constants + +@inherits GameBaseComponent @layout MainLayout - +
+ +
@@ -97,4 +105,8 @@
-
\ No newline at end of file + + + + + \ No newline at end of file diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.cs b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.cs index 035976c..6fc36a7 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.cs +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.cs @@ -6,7 +6,7 @@ namespace GameIdeas.BlazorApp.Pages.Detail; public partial class GameDetail { - [Inject] private IGameGateway GameGateway { get; set; } = default!; + [Inject] private NavigationManager NavigationManager { get; set; } = default!; [Parameter] public int GameId { get; set; } private GameDetailDto Game = new(); @@ -16,4 +16,9 @@ public partial class GameDetail Game = await GameGateway.GetGameById(GameId); await base.OnInitializedAsync(); } + + private void HandleSubmitNewGame() + { + NavigationManager.NavigateTo("/"); + } } \ No newline at end of file diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.css b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.css index 430cb0f..af35504 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.css +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Detail/GameDetail.razor.css @@ -90,7 +90,13 @@ background: var(--input-selected); } -@media screen and (min-width: 700px) and (max-width: 1000px) { +.button { + display: flex; + width: 100%; + justify-content: end; +} + +@media screen and (max-width: 1000px) { .section { padding: 20px; } diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Components/GameCreationForm.razor.css b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Components/GameCreationForm.razor.css index b512d37..4d3a824 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Components/GameCreationForm.razor.css +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Components/GameCreationForm.razor.css @@ -118,3 +118,20 @@ .buttons button:hover { background: var(--violet-selected); } + +@media screen and (max-width: 400px) { + .input-game { + grid-template-columns: auto 1fr; + } + + #label-description { + width: auto !important; + } +} + +@media screen and (max-width: 700px) { + .game-form { + flex-direction: column; + gap: 8px; + } +} \ No newline at end of file diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor index 995bafd..f64a2ae 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor @@ -6,7 +6,7 @@ @using GameIdeas.BlazorApp.Shared.Components.Header @using GameIdeas.BlazorApp.Shared.Components.Popup @using GameIdeas.Resources - +@inherits GameBaseComponent @layout MainLayout @ResourcesKey.GamesIdeas diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor.cs b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor.cs index 3a334de..73e72b5 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor.cs +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Games.razor.cs @@ -1,22 +1,15 @@ using GameIdeas.BlazorApp.Pages.Games.Filter; -using GameIdeas.BlazorApp.Pages.Games.Gateways; -using GameIdeas.BlazorApp.Shared.Components.Popup; +using GameIdeas.BlazorApp.Shared.Components; using GameIdeas.BlazorApp.Shared.Models; using GameIdeas.Shared.Dto; using GameIdeas.Shared.Enum; -using Microsoft.AspNetCore.Components; namespace GameIdeas.BlazorApp.Pages.Games; -public partial class Games +public partial class Games : GameBaseComponent { - [Inject] private IGameGateway GameGateway { get; set; } = default!; - private DisplayType DisplayType = DisplayType.List; private GameFilterParams GameFilter = new(); - private Popup? ManualAddPopup; - private bool IsLoading = false; - private CategoriesDto? Categories; private IEnumerable GamesDto = []; private int CurrentPage; @@ -33,32 +26,12 @@ public partial class Games await base.OnInitializedAsync(); } - private void HandleAddClicked(AddType addType) - { - switch (addType) - { - case AddType.Manual: - ManualAddPopup?.Open(); - break; - case AddType.Auto: - break; - default: - break; - } - } - private void HandleBackdropManualAddClicked() - { - ManualAddPopup?.Close(); - } - private async Task HandleFetchDatas(bool loadCategories = true, bool displayLoader = true) + private async Task HandleFetchDatas(bool displayLoader = true) { try { IsLoading = displayLoader; - if (loadCategories) - Categories = await GameGateway.FetchCategories(); - GamesDto = await GameGateway.FetchGames(GameFilter, CurrentPage); } catch (Exception) @@ -73,6 +46,6 @@ public partial class Games private async Task HandleFilterChanged(GameFilterParams args) { GameFilter = args; - await HandleFetchDatas(loadCategories: false, displayLoader: false); + await HandleFetchDatas(false); } } \ No newline at end of file diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/GameBaseComponent.cs b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/GameBaseComponent.cs new file mode 100644 index 0000000..c06b794 --- /dev/null +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/GameBaseComponent.cs @@ -0,0 +1,59 @@ +using GameIdeas.BlazorApp.Pages.Games.Filter; +using GameIdeas.BlazorApp.Pages.Games.Gateways; +using GameIdeas.BlazorApp.Shared.Models; +using GameIdeas.Shared.Dto; +using Microsoft.AspNetCore.Components; + +namespace GameIdeas.BlazorApp.Shared.Components; + +public class GameBaseComponent : ComponentBase +{ + [Inject] protected IGameGateway GameGateway { get; set; } = default!; + + protected Popup.Popup? ManualAddPopup; + protected CategoriesDto? Categories; + protected bool IsLoading = false; + + protected override async Task OnInitializedAsync() + { + await HandleFetchCategories(); + await base.OnInitializedAsync(); + } + + private async Task HandleFetchCategories() + { + try + { + IsLoading = true; + + Categories = await GameGateway.FetchCategories(); + } + catch (Exception) + { + throw; + } + finally + { + IsLoading = false; + } + } + + protected void HandleAddClicked(AddType addType) + { + switch (addType) + { + case AddType.Manual: + ManualAddPopup?.Open(); + break; + case AddType.Auto: + break; + default: + break; + } + } + + protected void HandleBackdropManualAddClicked() + { + ManualAddPopup?.Close(); + } +}