From c629237c55b6567a761fe862b4cabbf5625c4b55 Mon Sep 17 00:00:00 2001 From: beo3000 Date: Thu, 6 Nov 2025 07:38:47 +0100 Subject: [PATCH] dev --- .../Components/Controls/PlayerPanel.razor | 29 +++++++- .../Components/Controls/PlayersPanel.razor | 74 ++++++++++++++----- KoogleApp/Components/Pages/Game.razor | 2 + .../EventMessages/PlayerViewChangedMessage.cs | 19 +++++ KoogleApp/Model/PlayerExpense.cs | 14 ++++ KoogleApp/Services/ServiceExtension.cs | 1 + KoogleApp/Services/SessionStorage.cs | 19 +++++ KoogleApp/appdata.json | 12 ++- 8 files changed, 147 insertions(+), 23 deletions(-) create mode 100644 KoogleApp/Model/EventMessages/PlayerViewChangedMessage.cs create mode 100644 KoogleApp/Model/PlayerExpense.cs create mode 100644 KoogleApp/Services/SessionStorage.cs diff --git a/KoogleApp/Components/Controls/PlayerPanel.razor b/KoogleApp/Components/Controls/PlayerPanel.razor index 065aa8f..581d057 100644 --- a/KoogleApp/Components/Controls/PlayerPanel.razor +++ b/KoogleApp/Components/Controls/PlayerPanel.razor @@ -1,8 +1,13 @@ @using KoogleApp.Data @using KoogleApp.Model +@using KoogleApp.Model.EventMessages +@using KoogleApp.Services; + +@implements IMyHandle @inject SharedDataService _sharedDataService - +@inject IMyEventAggregator _eventAggregator +@inject SessionStorage _sessionStorage @@ -16,16 +21,32 @@ @code { - private Player _player; + private Player? _player; + protected override void OnInitialized() + { + _eventAggregator.Subscribe(this); + } + + public async ValueTask DisposeAsync() + { + _eventAggregator.Unsubscribe(this); + } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { - _player = await _sharedDataService.GetByIdAsync(1); - + _player = await _sessionStorage.GetSelectedPlayerAsync(); + StateHasChanged(); } } + + public async Task HandleAsync(PlayerViewChangedMessage message) + { + _player = await _sessionStorage.GetSelectedPlayerAsync(); + StateHasChanged(); + } + } diff --git a/KoogleApp/Components/Controls/PlayersPanel.razor b/KoogleApp/Components/Controls/PlayersPanel.razor index cb618b4..b75eeb7 100644 --- a/KoogleApp/Components/Controls/PlayersPanel.razor +++ b/KoogleApp/Components/Controls/PlayersPanel.razor @@ -4,33 +4,39 @@ @using KoogleApp.Model.Framework @using KoogleApp.Services +@implements IMyHandle +@implements IDisposable + @inject IMyEventAggregator _eventAggregator @inject SharedDataService _sharedDataService +@inject SessionStorage _sessionStorage + +@if (_players != null) +{ + - - @if (_players != null) - { @foreach (var player in _players) { - @player.Name + } - } - + + +} -@* - - - Players Panel - - - - - *@ @code { - private List _players; + private MudList _list; + + public Player? SelectedValue; + + private List? _players; protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -41,9 +47,43 @@ } } - private async Task OnPlayerClick(int playerId) + private async Task OnClick(MouseEventArgs obj) { + await _sessionStorage.SetSelectedPlayerAsync(SelectedValue); + await _eventAggregator.PublishAsync(new GameViewChangedMessage(GameView.Player) { Scope = EventScope.Circuit }); + + if (SelectedValue != null) + { + await _eventAggregator.PublishAsync(new PlayerViewChangedMessage(SelectedValue.Id, this) { Scope = EventScope.Circuit }); + } } + public async Task HandleAsync(PlayerViewChangedMessage message) + { + if (message.Sender == this) + { + return; + } + SelectedValue = await _sessionStorage.GetSelectedPlayerAsync(); + // _list.SelectedValue = SelectedValue; + StateHasChanged(); + // await InvokeAsync(StateHasChanged); + + + } + + protected override void OnInitialized() + { + _eventAggregator.Subscribe(this); + } + + + public void Dispose() + { + _eventAggregator.Unsubscribe(this); + } + + + } diff --git a/KoogleApp/Components/Pages/Game.razor b/KoogleApp/Components/Pages/Game.razor index 4f0e60c..57a825f 100644 --- a/KoogleApp/Components/Pages/Game.razor +++ b/KoogleApp/Components/Pages/Game.razor @@ -11,6 +11,8 @@ @attribute [Authorize()] +@implements IAsyncDisposable + @inject NavigationManager Navigation @inject AuthenticationStateProvider AuthenticationStateProvider @inject IMyEventAggregator _eventAggregator diff --git a/KoogleApp/Model/EventMessages/PlayerViewChangedMessage.cs b/KoogleApp/Model/EventMessages/PlayerViewChangedMessage.cs new file mode 100644 index 0000000..71e77bf --- /dev/null +++ b/KoogleApp/Model/EventMessages/PlayerViewChangedMessage.cs @@ -0,0 +1,19 @@ +using KoogleApp.Components.Controls; +using KoogleApp.Model.Framework; + +namespace KoogleApp.Model.EventMessages +{ + public class PlayerViewChangedMessage : ScopedEventBase + { + public int PlayerId { get; set; } + + public PlayersPanel Sender { get; set; } + + public PlayerViewChangedMessage(int playerId, PlayersPanel sender) + { + Scope = EventScope.User; + PlayerId = playerId; + Sender = sender; + } + } +} diff --git a/KoogleApp/Model/PlayerExpense.cs b/KoogleApp/Model/PlayerExpense.cs new file mode 100644 index 0000000..aa07a5a --- /dev/null +++ b/KoogleApp/Model/PlayerExpense.cs @@ -0,0 +1,14 @@ +namespace KoogleApp.Model +{ + public class PlayerExpense + { + public int Id { get; set; } + + public int PlayerId { get; set; } // Foreign Key + + public string Name { get; set; } = string.Empty; + + // Navigation Property zurück zum Parent + public Player? Player { get; set; } + } +} diff --git a/KoogleApp/Services/ServiceExtension.cs b/KoogleApp/Services/ServiceExtension.cs index 8869e88..47a41bf 100644 --- a/KoogleApp/Services/ServiceExtension.cs +++ b/KoogleApp/Services/ServiceExtension.cs @@ -8,6 +8,7 @@ namespace KoogleApp.Services public static IServiceCollection AddAppServices(this IServiceCollection services) { services.AddScopedEventAggregator(); + services.AddScoped(); // Memory Cache services.AddMemoryCache(); diff --git a/KoogleApp/Services/SessionStorage.cs b/KoogleApp/Services/SessionStorage.cs new file mode 100644 index 0000000..f0d956d --- /dev/null +++ b/KoogleApp/Services/SessionStorage.cs @@ -0,0 +1,19 @@ +using KoogleApp.Model; +using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; + +namespace KoogleApp.Services +{ + public class SessionStorage(ProtectedSessionStorage sessionStorage, ProtectedLocalStorage localStorage) + { + public async Task GetSelectedPlayerAsync() + { + var result = await sessionStorage.GetAsync("selectedPlayer"); + return result.Success ? result.Value : null; + } + + public async Task SetSelectedPlayerAsync(Player? record) + { + await sessionStorage.SetAsync("selectedPlayer", record); + } + } +} diff --git a/KoogleApp/appdata.json b/KoogleApp/appdata.json index ad369e8..e2b9068 100644 --- a/KoogleApp/appdata.json +++ b/KoogleApp/appdata.json @@ -3,11 +3,19 @@ "Status": { "Content": "Willkommen! Starte die Zusammenarbeit." }, - "Version": 2, - "LastModified": "2025-11-03T19:09:57.4404986+01:00", + "Version": 3, + "LastModified": "2025-11-05T20:53:27.735651+01:00", "LastModifiedBy": "test1@test.de" }, "UndoHistory": [ + { + "Status": { + "Content": "Willkommen! Starte die Zusammenarbeit." + }, + "Version": 2, + "LastModified": "2025-11-03T19:09:57.4404986+01:00", + "LastModifiedBy": "test1@test.de" + }, { "Status": { "Content": "Willkommen! Starte die Zusammenarbeit."