dev
This commit is contained in:
parent
77a42808fd
commit
c629237c55
|
|
@ -1,8 +1,13 @@
|
|||
@using KoogleApp.Data
|
||||
@using KoogleApp.Model
|
||||
@using KoogleApp.Model.EventMessages
|
||||
@using KoogleApp.Services;
|
||||
|
||||
@implements IMyHandle<PlayerViewChangedMessage>
|
||||
|
||||
@inject SharedDataService _sharedDataService
|
||||
|
||||
@inject IMyEventAggregator _eventAggregator
|
||||
@inject SessionStorage _sessionStorage
|
||||
|
||||
<MudGrid>
|
||||
|
||||
|
|
@ -16,16 +21,32 @@
|
|||
</MudGrid>
|
||||
|
||||
@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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,33 +4,39 @@
|
|||
@using KoogleApp.Model.Framework
|
||||
@using KoogleApp.Services
|
||||
|
||||
@implements IMyHandle<PlayerViewChangedMessage>
|
||||
@implements IDisposable
|
||||
|
||||
@inject IMyEventAggregator _eventAggregator
|
||||
@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)
|
||||
{
|
||||
<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 {
|
||||
private List<Player> _players;
|
||||
private MudList<Player> _list;
|
||||
|
||||
public Player? SelectedValue;
|
||||
|
||||
private List<Player>? _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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
@attribute [Authorize()]
|
||||
|
||||
@implements IAsyncDisposable
|
||||
|
||||
@inject NavigationManager Navigation
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||
@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)
|
||||
{
|
||||
services.AddScopedEventAggregator();
|
||||
services.AddScoped<SessionStorage>();
|
||||
|
||||
// Memory Cache
|
||||
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": {
|
||||
"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."
|
||||
|
|
|
|||
Loading…
Reference in New Issue