dev
This commit is contained in:
parent
77a42808fd
commit
c629237c55
|
|
@ -1,8 +1,13 @@
|
||||||
@using KoogleApp.Data
|
@using KoogleApp.Data
|
||||||
@using KoogleApp.Model
|
@using KoogleApp.Model
|
||||||
|
@using KoogleApp.Model.EventMessages
|
||||||
|
@using KoogleApp.Services;
|
||||||
|
|
||||||
|
@implements IMyHandle<PlayerViewChangedMessage>
|
||||||
|
|
||||||
@inject SharedDataService _sharedDataService
|
@inject SharedDataService _sharedDataService
|
||||||
|
@inject IMyEventAggregator _eventAggregator
|
||||||
|
@inject SessionStorage _sessionStorage
|
||||||
|
|
||||||
<MudGrid>
|
<MudGrid>
|
||||||
|
|
||||||
|
|
@ -16,16 +21,32 @@
|
||||||
</MudGrid>
|
</MudGrid>
|
||||||
|
|
||||||
@code {
|
@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)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
_player = await _sharedDataService.GetByIdAsync(1);
|
_player = await _sessionStorage.GetSelectedPlayerAsync();
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task HandleAsync(PlayerViewChangedMessage message)
|
||||||
|
{
|
||||||
|
_player = await _sessionStorage.GetSelectedPlayerAsync();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,33 +4,39 @@
|
||||||
@using KoogleApp.Model.Framework
|
@using KoogleApp.Model.Framework
|
||||||
@using KoogleApp.Services
|
@using KoogleApp.Services
|
||||||
|
|
||||||
|
@implements IMyHandle<PlayerViewChangedMessage>
|
||||||
|
@implements IDisposable
|
||||||
|
|
||||||
@inject IMyEventAggregator _eventAggregator
|
@inject IMyEventAggregator _eventAggregator
|
||||||
@inject SharedDataService _sharedDataService
|
@inject SharedDataService _sharedDataService
|
||||||
|
@inject SessionStorage _sessionStorage
|
||||||
|
|
||||||
|
@if (_players != null)
|
||||||
|
{
|
||||||
|
<MudList T="Player" Color="@Color.Info"
|
||||||
|
@ref="_list"
|
||||||
|
@bind-SelectedValue="SelectedValue"
|
||||||
|
SelectionMode="SelectionMode.SingleSelection">
|
||||||
|
|
||||||
<MudNavMenu>
|
|
||||||
@if (_players != null)
|
|
||||||
{
|
|
||||||
@foreach (var player in _players)
|
@foreach (var player in _players)
|
||||||
{
|
{
|
||||||
<MudNavLink Match="NavLinkMatch.All" OnClick="@(async e => await OnPlayerClick(player.Id))">@player.Name</MudNavLink>
|
<MudListItem Text="@player.Name"
|
||||||
|
OnClick="OnClick"
|
||||||
|
Value="@player"/>
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</MudNavMenu>
|
</MudList>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@* <MudGrid>
|
|
||||||
|
|
||||||
<MudItem xs="12">
|
|
||||||
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
|
||||||
Players Panel
|
|
||||||
</MudPaper>
|
|
||||||
</MudItem>
|
|
||||||
|
|
||||||
|
|
||||||
</MudGrid> *@
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private List<Player> _players;
|
private MudList<Player> _list;
|
||||||
|
|
||||||
|
public Player? SelectedValue;
|
||||||
|
|
||||||
|
private List<Player>? _players;
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
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 });
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
@attribute [Authorize()]
|
@attribute [Authorize()]
|
||||||
|
|
||||||
|
@implements IAsyncDisposable
|
||||||
|
|
||||||
@inject NavigationManager Navigation
|
@inject NavigationManager Navigation
|
||||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||||
@inject IMyEventAggregator _eventAggregator
|
@inject IMyEventAggregator _eventAggregator
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,6 +8,7 @@ namespace KoogleApp.Services
|
||||||
public static IServiceCollection AddAppServices(this IServiceCollection services)
|
public static IServiceCollection AddAppServices(this IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddScopedEventAggregator();
|
services.AddScopedEventAggregator();
|
||||||
|
services.AddScoped<SessionStorage>();
|
||||||
|
|
||||||
// Memory Cache
|
// Memory Cache
|
||||||
services.AddMemoryCache();
|
services.AddMemoryCache();
|
||||||
|
|
|
||||||
|
|
@ -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<Player?> GetSelectedPlayerAsync()
|
||||||
|
{
|
||||||
|
var result = await sessionStorage.GetAsync<Player>("selectedPlayer");
|
||||||
|
return result.Success ? result.Value : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SetSelectedPlayerAsync(Player? record)
|
||||||
|
{
|
||||||
|
await sessionStorage.SetAsync("selectedPlayer", record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,11 +3,19 @@
|
||||||
"Status": {
|
"Status": {
|
||||||
"Content": "Willkommen! Starte die Zusammenarbeit."
|
"Content": "Willkommen! Starte die Zusammenarbeit."
|
||||||
},
|
},
|
||||||
"Version": 2,
|
"Version": 3,
|
||||||
"LastModified": "2025-11-03T19:09:57.4404986+01:00",
|
"LastModified": "2025-11-05T20:53:27.735651+01:00",
|
||||||
"LastModifiedBy": "test1@test.de"
|
"LastModifiedBy": "test1@test.de"
|
||||||
},
|
},
|
||||||
"UndoHistory": [
|
"UndoHistory": [
|
||||||
|
{
|
||||||
|
"Status": {
|
||||||
|
"Content": "Willkommen! Starte die Zusammenarbeit."
|
||||||
|
},
|
||||||
|
"Version": 2,
|
||||||
|
"LastModified": "2025-11-03T19:09:57.4404986+01:00",
|
||||||
|
"LastModifiedBy": "test1@test.de"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Status": {
|
"Status": {
|
||||||
"Content": "Willkommen! Starte die Zusammenarbeit."
|
"Content": "Willkommen! Starte die Zusammenarbeit."
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue