player state and availability
This commit is contained in:
parent
047d9f6565
commit
6b95c25d9c
|
|
@ -7,7 +7,7 @@
|
|||
@implements IDisposable
|
||||
@implements KoogleApp.Services.IMyHandle<KoogleApp.Model.EventMessages.PlayerViewChangedMessage>
|
||||
|
||||
@inject IState<PlayersState> PlayersState
|
||||
@inject IState<PlayerState> PlayersState
|
||||
@* @inject SharedDataService DataService; *@
|
||||
@inject IMyEventAggregator EventAggregator;
|
||||
|
||||
|
|
@ -22,7 +22,7 @@ else
|
|||
RowClass="cursor-pointer" RowClassFunc="@SelectedRowClassFunc" T="PlayerExpense"
|
||||
OnRowClick="RowClickEvent" @ref="mudTable">
|
||||
<ToolBarContent>
|
||||
<MudText Typo="Typo.h6">Strafen @_player.Name</MudText>
|
||||
<MudText Typo="Typo.h6">Strafen @PlayersState.Value.Name</MudText>
|
||||
<MudSpacer/>
|
||||
<MudTextField @bind-Value="Search" Placeholder="Search" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" Class="mt-0"></MudTextField>
|
||||
</ToolBarContent>
|
||||
|
|
@ -48,7 +48,7 @@ else
|
|||
|
||||
|
||||
@code {
|
||||
private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||
// private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||
|
||||
private PlayerExpense selectedItem1 = null;
|
||||
private List<PlayerExpense>? _expenses = null;
|
||||
|
|
|
|||
|
|
@ -4,27 +4,38 @@
|
|||
@using KoogleApp.Services;
|
||||
@using KoogleApp.Store.Player
|
||||
|
||||
@inherits FluxorComponent
|
||||
|
||||
@inject IState<PlayersState> PlayersState
|
||||
@inject IDispatcher Dispatcher
|
||||
@* @inject IState<PlayersState> PlayersState *@
|
||||
@inject IState<PlayerState> PlayerState
|
||||
|
||||
<MudGrid>
|
||||
@if (@PlayerState.Value != null)
|
||||
{
|
||||
<MudGrid>
|
||||
|
||||
<MudItem xs="12">
|
||||
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
||||
<MudText Typo="Typo.h4">@_player?.Name</MudText>
|
||||
<MudSwitch @bind-Value="available">todo: @available</MudSwitch>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="12">
|
||||
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
||||
<MudText Typo="Typo.h4">@PlayerState.Value.Name</MudText>
|
||||
<StateSwitch TState="PlayerState"
|
||||
Color="Color.Tertiary"
|
||||
ValueSelector="@(state => state.Available)"
|
||||
OnValueChanged="@(value => Dispatcher.Dispatch(new ChangePlayerAvailableAction(PlayerState.Value.Id, value)))" />
|
||||
<MudText Typo="Typo.subtitle2">@(PlayerState.Value.Available? "anwesend": "abwesend")</MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12">
|
||||
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
||||
<PlayerExpenseList/>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
<MudItem xs="12">
|
||||
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
|
||||
<PlayerExpenseList/>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
</MudGrid>
|
||||
}
|
||||
|
||||
@code {
|
||||
private bool available = true;
|
||||
private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||
// private bool available = true;
|
||||
// private PlayerState? _player => PlayersSelector.SelectedPlayer(PlayersState.Value);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,13 +5,14 @@
|
|||
@using KoogleApp.Services
|
||||
@using KoogleApp.Store.Player
|
||||
|
||||
|
||||
@inherits FluxorComponent
|
||||
|
||||
@implements IMyHandle<PlayerViewChangedMessage>
|
||||
@implements IDisposable
|
||||
|
||||
@inject IMyEventAggregator _eventAggregator
|
||||
@inject IMyEventAggregator EventAggregator
|
||||
@inject IState<PlayersState> PlayersState
|
||||
@inject IState<PlayerState> PlayerState
|
||||
@inject IDispatcher Dispatcher
|
||||
|
||||
@* @inject SharedDataService _dataService *@
|
||||
|
|
@ -19,7 +20,6 @@
|
|||
@if (PlayersState.Value != null)
|
||||
{
|
||||
<MudList T="PlayerState" Color="@Color.Info"
|
||||
@ref="_list"
|
||||
@bind-SelectedValue="SelectedValue"
|
||||
SelectionMode="SelectionMode.SingleSelection">
|
||||
|
||||
|
|
@ -37,11 +37,13 @@
|
|||
|
||||
|
||||
@code {
|
||||
private MudList<PlayerState> _list;
|
||||
private PlayerState _selectedValue;
|
||||
|
||||
public PlayerState? SelectedValue;
|
||||
|
||||
private List<Player>? _players;
|
||||
public PlayerState? SelectedValue
|
||||
{
|
||||
get => _selectedValue;
|
||||
set => _selectedValue = value;
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
|
|
@ -51,51 +53,41 @@
|
|||
{
|
||||
Dispatcher.Dispatch(new LoadPlayersAction());
|
||||
}
|
||||
// _players = await _dataService.GetAllAsync();
|
||||
// StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnClick(MouseEventArgs obj)
|
||||
{
|
||||
Dispatcher.Dispatch(new SelectPlayerAction(SelectedValue.Id));
|
||||
// await _dataService.SetSelectedPlayerAsync(SelectedValue);
|
||||
Dispatcher.Dispatch(new SelectPlayerAction(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 });
|
||||
// }
|
||||
if (SelectedValue != null)
|
||||
{
|
||||
await EventAggregator.PublishAsync(new PlayerViewChangedMessage(SelectedValue.Id, this) { Scope = EventScope.Circuit });
|
||||
}
|
||||
}
|
||||
|
||||
public async Task HandleAsync(PlayerViewChangedMessage message)
|
||||
public Task HandleAsync(PlayerViewChangedMessage message)
|
||||
{
|
||||
// if (message.Sender == this)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// SelectedValue = await _dataService.GetSelectedPlayerAsync();
|
||||
|
||||
// StateHasChanged();
|
||||
|
||||
|
||||
|
||||
SelectedValue = PlayerState.Value;
|
||||
StateHasChanged();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
_eventAggregator.Subscribe(this);
|
||||
|
||||
EventAggregator.Subscribe(this);
|
||||
base.OnInitialized();
|
||||
}
|
||||
|
||||
|
||||
public void Dispose()
|
||||
protected override ValueTask DisposeAsyncCore(bool disposing)
|
||||
{
|
||||
_eventAggregator.Unsubscribe(this);
|
||||
EventAggregator.Unsubscribe(this);
|
||||
return base.DisposeAsyncCore(disposing);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
@inherits FluxorComponent
|
||||
|
||||
@typeparam TState
|
||||
@inject IState<TState> State
|
||||
|
||||
<MudSwitch @bind-Value="SwitchValue"
|
||||
@bind-Color="Color" />
|
||||
|
||||
@code {
|
||||
private bool SwitchValue
|
||||
{
|
||||
get => ValueSelector.Invoke(State.Value);
|
||||
set => OnValueChanged?.Invoke(value);
|
||||
}
|
||||
|
||||
[Parameter, EditorRequired]
|
||||
public Func<TState, bool> ValueSelector
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = null!;
|
||||
|
||||
[Parameter, EditorRequired]
|
||||
public Action<bool> OnValueChanged
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = null!;
|
||||
|
||||
|
||||
[Parameter]
|
||||
public Color Color { get; set; }
|
||||
|
||||
}
|
||||
|
|
@ -4,5 +4,7 @@
|
|||
|
||||
public record PlayersLoadedAction(List<Model.Player> Players);
|
||||
|
||||
public record SelectPlayerAction(int PlayerId);
|
||||
public record SelectPlayerAction(PlayerState? Player);
|
||||
|
||||
public record ChangePlayerAvailableAction(int PlayerId, bool IsAvailable);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Fluxor;
|
||||
using System;
|
||||
|
||||
namespace KoogleApp.Store.Player
|
||||
{
|
||||
|
|
@ -8,18 +9,32 @@ namespace KoogleApp.Store.Player
|
|||
public static PlayersState OnPlayersLoaded(PlayersState state, PlayersLoadedAction action)
|
||||
{
|
||||
var players = action.Players
|
||||
.Select(p => new PlayerState(p.Name, p.Id, Available: true))
|
||||
.Select(p => new PlayerState(p.Name, p.Id, Available: false))
|
||||
.ToList();
|
||||
return state with { Players = players, Loaded = true};
|
||||
}
|
||||
|
||||
[ReducerMethod]
|
||||
public static PlayersState OnSelectPlayerAction(
|
||||
PlayersState state,
|
||||
SelectPlayerAction action)
|
||||
public static PlayerState OnSelectPlayerAction(PlayerState state, SelectPlayerAction action)
|
||||
{
|
||||
return state with { SelectedPlayer = action.PlayerId };
|
||||
return action.Player;
|
||||
//return state with { Available = action.Player };
|
||||
}
|
||||
|
||||
[ReducerMethod]
|
||||
public static PlayerState OnChangePlayerAvailableAction(PlayerState state, ChangePlayerAvailableAction action)
|
||||
{
|
||||
return state with { Available = action.IsAvailable };
|
||||
}
|
||||
|
||||
[ReducerMethod]
|
||||
public static PlayersState OnChangePlayerAvailableAction(PlayersState state, ChangePlayerAvailableAction action)
|
||||
{
|
||||
var newList = new List<PlayerState>(state.Players); // Kopie erstellen
|
||||
var idx = state.Players.FindIndex(p => p.Id == action.PlayerId);
|
||||
newList[idx] = newList[idx] with { Available = action.IsAvailable }; // Element ändern
|
||||
|
||||
return state with { Players = newList };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
namespace KoogleApp.Store.Player
|
||||
{
|
||||
public class PlayersSelector
|
||||
public static class PlayersSelector
|
||||
{
|
||||
public static PlayerState? SelectedPlayer(PlayersState state)
|
||||
{
|
||||
if (state.SelectedPlayer == 0)
|
||||
return null;
|
||||
//public static PlayerState? SelectedPlayer(PlayersState state)
|
||||
//{
|
||||
// if (state. == null)
|
||||
// return null;
|
||||
|
||||
return state.Players.FirstOrDefault(_ => _.Id == state.SelectedPlayer);
|
||||
}
|
||||
// return state.Players.FirstOrDefault(_ => _.Id == state.SelectedPlayer.Id);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,16 +3,16 @@
|
|||
namespace KoogleApp.Store.Player
|
||||
{
|
||||
[FeatureState]
|
||||
public record PlayersState(bool Loaded, List<PlayerState> Players, int SelectedPlayer)
|
||||
public record PlayersState(bool Loaded, List<PlayerState> Players)
|
||||
{
|
||||
public PlayersState() : this(Loaded:false, Players: new List<PlayerState>(), SelectedPlayer:0)
|
||||
public PlayersState() : this(Loaded:false, Players: new List<PlayerState>())
|
||||
{}
|
||||
}
|
||||
|
||||
[FeatureState]
|
||||
public record PlayerState(string Name, int Id, bool Available)
|
||||
{
|
||||
public PlayerState(): this(Name:"",0,true)
|
||||
public PlayerState(): this(Name:"",0,false)
|
||||
{}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue