add playerstate
This commit is contained in:
parent
f4b8f9ea96
commit
047d9f6565
|
|
@ -2,11 +2,13 @@
|
||||||
@using KoogleApp.Model
|
@using KoogleApp.Model
|
||||||
@using KoogleApp.Model.EventMessages
|
@using KoogleApp.Model.EventMessages
|
||||||
@using KoogleApp.Services
|
@using KoogleApp.Services
|
||||||
|
@using KoogleApp.Store.Player
|
||||||
|
|
||||||
@implements IDisposable
|
@implements IDisposable
|
||||||
@implements KoogleApp.Services.IMyHandle<KoogleApp.Model.EventMessages.PlayerViewChangedMessage>
|
@implements KoogleApp.Services.IMyHandle<KoogleApp.Model.EventMessages.PlayerViewChangedMessage>
|
||||||
|
|
||||||
@inject SharedDataService DataService;
|
@inject IState<PlayersState> PlayersState
|
||||||
|
@* @inject SharedDataService DataService; *@
|
||||||
@inject IMyEventAggregator EventAggregator;
|
@inject IMyEventAggregator EventAggregator;
|
||||||
|
|
||||||
@if (_isProcessing)
|
@if (_isProcessing)
|
||||||
|
|
@ -46,9 +48,11 @@ else
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||||
|
|
||||||
private PlayerExpense selectedItem1 = null;
|
private PlayerExpense selectedItem1 = null;
|
||||||
private List<PlayerExpense>? _expenses = null;
|
private List<PlayerExpense>? _expenses = null;
|
||||||
private Player? _player = null;
|
// private Player? _player = null;
|
||||||
private List<PlayerExpense>? _Allexpenses = null;
|
private List<PlayerExpense>? _Allexpenses = null;
|
||||||
private MudTable<PlayerExpense> mudTable;
|
private MudTable<PlayerExpense> mudTable;
|
||||||
|
|
||||||
|
|
@ -77,37 +81,37 @@ else
|
||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
await LoadDataAsync();
|
// await LoadDataAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadDataAsync()
|
// private async Task LoadDataAsync()
|
||||||
{
|
// {
|
||||||
if (_isProcessing)
|
// if (_isProcessing)
|
||||||
return;
|
// return;
|
||||||
|
|
||||||
_isProcessing = true;
|
// _isProcessing = true;
|
||||||
StateHasChanged();
|
// StateHasChanged();
|
||||||
|
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
_player = await DataService.GetPlayerWithExpensesAsync();
|
// _player = await DataService.GetPlayerWithExpensesAsync();
|
||||||
if (_player != null)
|
// if (_player != null)
|
||||||
{
|
// {
|
||||||
_expenses = _player.Expenses;
|
// _expenses = _player.Expenses;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
_expenses = new List<PlayerExpense>();
|
// _expenses = new List<PlayerExpense>();
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
// }
|
||||||
finally
|
// finally
|
||||||
{
|
// {
|
||||||
_isProcessing = false;
|
// _isProcessing = false;
|
||||||
StateHasChanged();
|
// StateHasChanged();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private async Task RowClickEvent(TableRowClickEventArgs<PlayerExpense> tableRowClickEventArgs)
|
private async Task RowClickEvent(TableRowClickEventArgs<PlayerExpense> tableRowClickEventArgs)
|
||||||
{
|
{
|
||||||
|
|
@ -186,7 +190,7 @@ else
|
||||||
|
|
||||||
public async Task HandleAsync(PlayerViewChangedMessage message)
|
public async Task HandleAsync(PlayerViewChangedMessage message)
|
||||||
{
|
{
|
||||||
await LoadDataAsync();
|
// await LoadDataAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,17 @@
|
||||||
@using KoogleApp.Model
|
@using KoogleApp.Model
|
||||||
@using KoogleApp.Model.EventMessages
|
@using KoogleApp.Model.EventMessages
|
||||||
@using KoogleApp.Services;
|
@using KoogleApp.Services;
|
||||||
|
@using KoogleApp.Store.Player
|
||||||
|
|
||||||
@implements IMyHandle<PlayerViewChangedMessage>
|
|
||||||
|
|
||||||
@inject SharedDataService DataService
|
@inject IState<PlayersState> PlayersState
|
||||||
@inject IMyEventAggregator EventAggregator
|
|
||||||
|
|
||||||
<MudGrid>
|
<MudGrid>
|
||||||
|
|
||||||
<MudItem xs="12">
|
<MudItem xs="12">
|
||||||
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
||||||
Player: @_player?.Name
|
<MudText Typo="Typo.h4">@_player?.Name</MudText>
|
||||||
|
<MudSwitch @bind-Value="available">todo: @available</MudSwitch>
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
</MudItem>
|
</MudItem>
|
||||||
|
|
||||||
|
|
@ -24,34 +24,7 @@
|
||||||
</MudGrid>
|
</MudGrid>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private Player? _player;
|
private bool available = true;
|
||||||
|
private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||||
protected override void OnInitialized()
|
|
||||||
{
|
|
||||||
EventAggregator.Subscribe(this);
|
|
||||||
|
|
||||||
base.OnInitialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async ValueTask DisposeAsync()
|
|
||||||
{
|
|
||||||
EventAggregator.Unsubscribe(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
||||||
{
|
|
||||||
if (firstRender)
|
|
||||||
{
|
|
||||||
_player = await DataService.GetSelectedPlayerAsync();
|
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public async Task HandleAsync(PlayerViewChangedMessage message)
|
|
||||||
{
|
|
||||||
_player = await DataService.GetSelectedPlayerAsync();
|
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
<h3>PlayerSelect</h3>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -3,21 +3,27 @@
|
||||||
@using KoogleApp.Model.EventMessages
|
@using KoogleApp.Model.EventMessages
|
||||||
@using KoogleApp.Model.Framework
|
@using KoogleApp.Model.Framework
|
||||||
@using KoogleApp.Services
|
@using KoogleApp.Services
|
||||||
|
@using KoogleApp.Store.Player
|
||||||
|
|
||||||
|
@inherits FluxorComponent
|
||||||
|
|
||||||
@implements IMyHandle<PlayerViewChangedMessage>
|
@implements IMyHandle<PlayerViewChangedMessage>
|
||||||
@implements IDisposable
|
@implements IDisposable
|
||||||
|
|
||||||
@inject IMyEventAggregator _eventAggregator
|
@inject IMyEventAggregator _eventAggregator
|
||||||
@inject SharedDataService _dataService
|
@inject IState<PlayersState> PlayersState
|
||||||
|
@inject IDispatcher Dispatcher
|
||||||
|
|
||||||
@if (_players != null)
|
@* @inject SharedDataService _dataService *@
|
||||||
|
|
||||||
|
@if (PlayersState.Value != null)
|
||||||
{
|
{
|
||||||
<MudList T="Player" Color="@Color.Info"
|
<MudList T="PlayerState" Color="@Color.Info"
|
||||||
@ref="_list"
|
@ref="_list"
|
||||||
@bind-SelectedValue="SelectedValue"
|
@bind-SelectedValue="SelectedValue"
|
||||||
SelectionMode="SelectionMode.SingleSelection">
|
SelectionMode="SelectionMode.SingleSelection">
|
||||||
|
|
||||||
@foreach (var player in _players)
|
@foreach (var player in PlayersState.Value.Players)
|
||||||
{
|
{
|
||||||
<MudListItem Text="@player.Name"
|
<MudListItem Text="@player.Name"
|
||||||
OnClick="OnClick"
|
OnClick="OnClick"
|
||||||
|
|
@ -31,9 +37,9 @@
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private MudList<Player> _list;
|
private MudList<PlayerState> _list;
|
||||||
|
|
||||||
public Player? SelectedValue;
|
public PlayerState? SelectedValue;
|
||||||
|
|
||||||
private List<Player>? _players;
|
private List<Player>? _players;
|
||||||
|
|
||||||
|
|
@ -41,33 +47,38 @@
|
||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
_players = await _dataService.GetAllAsync();
|
if (!PlayersState.Value.Loaded)
|
||||||
StateHasChanged();
|
{
|
||||||
|
Dispatcher.Dispatch(new LoadPlayersAction());
|
||||||
|
}
|
||||||
|
// _players = await _dataService.GetAllAsync();
|
||||||
|
// StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnClick(MouseEventArgs obj)
|
private async Task OnClick(MouseEventArgs obj)
|
||||||
{
|
{
|
||||||
await _dataService.SetSelectedPlayerAsync(SelectedValue);
|
Dispatcher.Dispatch(new SelectPlayerAction(SelectedValue.Id));
|
||||||
|
// await _dataService.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)
|
// if (SelectedValue != null)
|
||||||
{
|
// {
|
||||||
await _eventAggregator.PublishAsync(new PlayerViewChangedMessage(SelectedValue.Id, this) { Scope = EventScope.Circuit });
|
// await _eventAggregator.PublishAsync(new PlayerViewChangedMessage(SelectedValue.Id, this) { Scope = EventScope.Circuit });
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task HandleAsync(PlayerViewChangedMessage message)
|
public async Task HandleAsync(PlayerViewChangedMessage message)
|
||||||
{
|
{
|
||||||
if (message.Sender == this)
|
// if (message.Sender == this)
|
||||||
{
|
// {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
SelectedValue = await _dataService.GetSelectedPlayerAsync();
|
// SelectedValue = await _dataService.GetSelectedPlayerAsync();
|
||||||
// _list.SelectedValue = SelectedValue;
|
|
||||||
StateHasChanged();
|
// StateHasChanged();
|
||||||
// await InvokeAsync(StateHasChanged);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@ using KoogleApp.Store.Game.ThrowPanel;
|
||||||
namespace KoogleApp.Store.Game.Setup
|
namespace KoogleApp.Store.Game.Setup
|
||||||
{
|
{
|
||||||
[FeatureState]
|
[FeatureState]
|
||||||
public record SetupState(ThrowMode ThrowMode, int ThrowsPerRound)
|
public record SetupState(ThrowMode ThrowMode, int ThrowsPerRound, int[] Players)
|
||||||
{
|
{
|
||||||
public SetupState() : this(ThrowMode: ThrowMode.Reposition, ThrowsPerRound:3)
|
public SetupState() : this(ThrowMode: ThrowMode.Reposition, ThrowsPerRound:3, Players:[])
|
||||||
{ }
|
{ }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace KoogleApp.Store.Player
|
||||||
|
{
|
||||||
|
public record LoadPlayersAction();
|
||||||
|
|
||||||
|
public record PlayersLoadedAction(List<Model.Player> Players);
|
||||||
|
|
||||||
|
public record SelectPlayerAction(int PlayerId);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
using Fluxor;
|
||||||
|
using KoogleApp.Data;
|
||||||
|
|
||||||
|
namespace KoogleApp.Store.Player
|
||||||
|
{
|
||||||
|
public class PlayerEffects
|
||||||
|
{
|
||||||
|
private readonly SharedDataService _dataService;
|
||||||
|
|
||||||
|
public PlayerEffects(SharedDataService dataService)
|
||||||
|
{
|
||||||
|
_dataService = dataService;
|
||||||
|
}
|
||||||
|
|
||||||
|
[EffectMethod]
|
||||||
|
public async Task HandleLoadPlayersActions(LoadPlayersAction action, IDispatcher dispatcher)
|
||||||
|
{
|
||||||
|
var players = await _dataService.GetAllAsync();
|
||||||
|
dispatcher.Dispatch(new PlayersLoadedAction(players));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
using Fluxor;
|
||||||
|
|
||||||
|
namespace KoogleApp.Store.Player
|
||||||
|
{
|
||||||
|
public class PlayersStateReducers
|
||||||
|
{
|
||||||
|
[ReducerMethod]
|
||||||
|
public static PlayersState OnPlayersLoaded(PlayersState state, PlayersLoadedAction action)
|
||||||
|
{
|
||||||
|
var players = action.Players
|
||||||
|
.Select(p => new PlayerState(p.Name, p.Id, Available: true))
|
||||||
|
.ToList();
|
||||||
|
return state with { Players = players, Loaded = true};
|
||||||
|
}
|
||||||
|
|
||||||
|
[ReducerMethod]
|
||||||
|
public static PlayersState OnSelectPlayerAction(
|
||||||
|
PlayersState state,
|
||||||
|
SelectPlayerAction action)
|
||||||
|
{
|
||||||
|
return state with { SelectedPlayer = action.PlayerId };
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
namespace KoogleApp.Store.Player
|
||||||
|
{
|
||||||
|
public class PlayersSelector
|
||||||
|
{
|
||||||
|
public static PlayerState? SelectedPlayer(PlayersState state)
|
||||||
|
{
|
||||||
|
if (state.SelectedPlayer == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return state.Players.FirstOrDefault(_ => _.Id == state.SelectedPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
using Fluxor;
|
||||||
|
|
||||||
|
namespace KoogleApp.Store.Player
|
||||||
|
{
|
||||||
|
[FeatureState]
|
||||||
|
public record PlayersState(bool Loaded, List<PlayerState> Players, int SelectedPlayer)
|
||||||
|
{
|
||||||
|
public PlayersState() : this(Loaded:false, Players: new List<PlayerState>(), SelectedPlayer:0)
|
||||||
|
{}
|
||||||
|
}
|
||||||
|
|
||||||
|
[FeatureState]
|
||||||
|
public record PlayerState(string Name, int Id, bool Available)
|
||||||
|
{
|
||||||
|
public PlayerState(): this(Name:"",0,true)
|
||||||
|
{}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue