KoogleApp/KoogleApp/Components/Dialogs/StartGameDialog.razor

99 lines
3.0 KiB
Plaintext

@using KoogleApp.Games
@using KoogleApp.Model
@using KoogleApp.Services
@using KoogleApp.Store.DayFeature
@using KoogleApp.Store.Game.Setup
@using KoogleApp.Store.Game.ThrowPanel
@using KoogleApp.Components.Controls
@using KoogleApp.Store.Player
@using Dispatcher = Fluxor.Dispatcher
@inject GameTypeService GameTypeService
@inject IState<SetupState> SetupState
@inject IState<PlayersState> PlayersState
@inject IState<DayState> DayState
@inject IDispatcher Dispatcher
<MudDialog Style="height: 800px; width:600px">
<TitleContent>
<MudText Typo="Typo.h6">
<MudIcon Icon="@Icons.Material.Filled.Start" Class="mr-3 mb-n1" />Neues Spiel starten?
</MudText>
</TitleContent>
<DialogContent>
<MudSelect T="IKnownGame" Label="Spiel" @bind-Value="_selectedGameType" HelperText="Wähle ein Spiel aus"
OpenIcon="@Icons.Material.Filled.Mode" AdornmentColor="Color.Primary">
@foreach (var item in _gameTypes)
{
<MudSelectItem T="IKnownGame" Value="@(item)">@item.Name</MudSelectItem>
}
</MudSelect>
<MudGrid>
@if (_selectedSetupComponentType is not null)
{
<MudItem xs="12">
<h4 class="mt-2">Spieleinstellungen auswählen:</h4>
</MudItem>
<MudItem xs="12">
<PlayerSelect @bind-SelectedValues="Players" />
</MudItem>
<DynamicComponent Type="_selectedSetupComponentType"/>
}
</MudGrid>
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Abbrechen</MudButton>
<MudButton Color="Color.Primary" OnClick="Start">Start</MudButton>
</DialogActions>
</MudDialog>
@code {
public IEnumerable<PlayerState> Players { get; set; }
[CascadingParameter]
private IMudDialogInstance MudDialog { get; set; }
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
_gameTypes.AddRange(GameTypeService.GetGameTypes());
Players = PlayersState.Value.Players.Where(p => DayState.Value.PlayerIds.Contains(p.Id)).ToList();
StateHasChanged();
}
}
Type? _selectedSetupComponentType => _selectedGameType?.SetupComponentType;
IKnownGame? _selectedGameType = null;
private readonly List<IKnownGame> _gameTypes = [];
public ThrowMode ThrowMode { get; set; }
[Parameter]
public string Description { get; set; } = "";
private void Cancel() => MudDialog.Cancel();
private void Start()
{
Dispatcher.Dispatch(new SetParticipatingPlayersAction(Players.Select(p => p.Id).ToArray()));
// if (!string.IsNullOrEmpty(Description))
{
// Snackbar.Add("Favorite added", Severity.Success);
MudDialog.Close(DialogResult.Ok(new StartParams(DayState.Value.Id, SetupState.Value.ThrowMode, SetupState.Value.ThrowsPerRound)));
}
}
}