add playerstate
This commit is contained in:
parent
f4b8f9ea96
commit
047d9f6565
|
|
@ -2,11 +2,13 @@
|
|||
@using KoogleApp.Model
|
||||
@using KoogleApp.Model.EventMessages
|
||||
@using KoogleApp.Services
|
||||
@using KoogleApp.Store.Player
|
||||
|
||||
@implements IDisposable
|
||||
@implements KoogleApp.Services.IMyHandle<KoogleApp.Model.EventMessages.PlayerViewChangedMessage>
|
||||
|
||||
@inject SharedDataService DataService;
|
||||
@inject IState<PlayersState> PlayersState
|
||||
@* @inject SharedDataService DataService; *@
|
||||
@inject IMyEventAggregator EventAggregator;
|
||||
|
||||
@if (_isProcessing)
|
||||
|
|
@ -46,9 +48,11 @@ else
|
|||
|
||||
|
||||
@code {
|
||||
private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||
|
||||
private PlayerExpense selectedItem1 = null;
|
||||
private List<PlayerExpense>? _expenses = null;
|
||||
private Player? _player = null;
|
||||
// private Player? _player = null;
|
||||
private List<PlayerExpense>? _Allexpenses = null;
|
||||
private MudTable<PlayerExpense> mudTable;
|
||||
|
||||
|
|
@ -77,37 +81,37 @@ else
|
|||
{
|
||||
if (firstRender)
|
||||
{
|
||||
await LoadDataAsync();
|
||||
// await LoadDataAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadDataAsync()
|
||||
{
|
||||
if (_isProcessing)
|
||||
return;
|
||||
// private async Task LoadDataAsync()
|
||||
// {
|
||||
// if (_isProcessing)
|
||||
// return;
|
||||
|
||||
_isProcessing = true;
|
||||
StateHasChanged();
|
||||
// _isProcessing = true;
|
||||
// StateHasChanged();
|
||||
|
||||
try
|
||||
{
|
||||
_player = await DataService.GetPlayerWithExpensesAsync();
|
||||
if (_player != null)
|
||||
{
|
||||
_expenses = _player.Expenses;
|
||||
}
|
||||
else
|
||||
{
|
||||
_expenses = new List<PlayerExpense>();
|
||||
}
|
||||
// try
|
||||
// {
|
||||
// _player = await DataService.GetPlayerWithExpensesAsync();
|
||||
// if (_player != null)
|
||||
// {
|
||||
// _expenses = _player.Expenses;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// _expenses = new List<PlayerExpense>();
|
||||
// }
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isProcessing = false;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
// }
|
||||
// finally
|
||||
// {
|
||||
// _isProcessing = false;
|
||||
// StateHasChanged();
|
||||
// }
|
||||
// }
|
||||
|
||||
private async Task RowClickEvent(TableRowClickEventArgs<PlayerExpense> tableRowClickEventArgs)
|
||||
{
|
||||
|
|
@ -186,7 +190,7 @@ else
|
|||
|
||||
public async Task HandleAsync(PlayerViewChangedMessage message)
|
||||
{
|
||||
await LoadDataAsync();
|
||||
// await LoadDataAsync();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,17 +2,17 @@
|
|||
@using KoogleApp.Model
|
||||
@using KoogleApp.Model.EventMessages
|
||||
@using KoogleApp.Services;
|
||||
@using KoogleApp.Store.Player
|
||||
|
||||
@implements IMyHandle<PlayerViewChangedMessage>
|
||||
|
||||
@inject SharedDataService DataService
|
||||
@inject IMyEventAggregator EventAggregator
|
||||
@inject IState<PlayersState> PlayersState
|
||||
|
||||
<MudGrid>
|
||||
|
||||
<MudItem xs="12">
|
||||
<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>
|
||||
</MudItem>
|
||||
|
||||
|
|
@ -24,34 +24,7 @@
|
|||
</MudGrid>
|
||||
|
||||
@code {
|
||||
private Player? _player;
|
||||
|
||||
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();
|
||||
}
|
||||
private bool available = true;
|
||||
private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
<h3>PlayerSelect</h3>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
||||
|
|
@ -3,21 +3,27 @@
|
|||
@using KoogleApp.Model.EventMessages
|
||||
@using KoogleApp.Model.Framework
|
||||
@using KoogleApp.Services
|
||||
@using KoogleApp.Store.Player
|
||||
|
||||
@inherits FluxorComponent
|
||||
|
||||
@implements IMyHandle<PlayerViewChangedMessage>
|
||||
@implements IDisposable
|
||||
|
||||
@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"
|
||||
@bind-SelectedValue="SelectedValue"
|
||||
SelectionMode="SelectionMode.SingleSelection">
|
||||
|
||||
@foreach (var player in _players)
|
||||
@foreach (var player in PlayersState.Value.Players)
|
||||
{
|
||||
<MudListItem Text="@player.Name"
|
||||
OnClick="OnClick"
|
||||
|
|
@ -31,9 +37,9 @@
|
|||
|
||||
|
||||
@code {
|
||||
private MudList<Player> _list;
|
||||
private MudList<PlayerState> _list;
|
||||
|
||||
public Player? SelectedValue;
|
||||
public PlayerState? SelectedValue;
|
||||
|
||||
private List<Player>? _players;
|
||||
|
||||
|
|
@ -41,33 +47,38 @@
|
|||
{
|
||||
if (firstRender)
|
||||
{
|
||||
_players = await _dataService.GetAllAsync();
|
||||
StateHasChanged();
|
||||
if (!PlayersState.Value.Loaded)
|
||||
{
|
||||
Dispatcher.Dispatch(new LoadPlayersAction());
|
||||
}
|
||||
// _players = await _dataService.GetAllAsync();
|
||||
// StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
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 });
|
||||
|
||||
if (SelectedValue != null)
|
||||
{
|
||||
await _eventAggregator.PublishAsync(new PlayerViewChangedMessage(SelectedValue.Id, this) { 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 _dataService.GetSelectedPlayerAsync();
|
||||
// _list.SelectedValue = SelectedValue;
|
||||
StateHasChanged();
|
||||
// await InvokeAsync(StateHasChanged);
|
||||
// if (message.Sender == this)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// SelectedValue = await _dataService.GetSelectedPlayerAsync();
|
||||
|
||||
// StateHasChanged();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ using KoogleApp.Store.Game.ThrowPanel;
|
|||
namespace KoogleApp.Store.Game.Setup
|
||||
{
|
||||
[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