diff --git a/KoogleApp/Components/Controls/PlayersPanel.razor b/KoogleApp/Components/Controls/PlayersPanel.razor index e8e0b97..b9efd58 100644 --- a/KoogleApp/Components/Controls/PlayersPanel.razor +++ b/KoogleApp/Components/Controls/PlayersPanel.razor @@ -18,6 +18,14 @@ @inject IDispatcher Dispatcher @* @inject SharedDataService _dataService *@ + + + + + @if (PlayersState.Value != null) { @@ -90,6 +98,9 @@ } - + private void CreatePlayerClick(MouseEventArgs obj) + { + Dispatcher.Dispatch(new SavePlayerAction(new PlayerState("Max Musermann",0,true,PlayerStatus.Member))); + } } diff --git a/KoogleApp/Data/SharedDataService.cs b/KoogleApp/Data/SharedDataService.cs index 96d633a..4cbe039 100644 --- a/KoogleApp/Data/SharedDataService.cs +++ b/KoogleApp/Data/SharedDataService.cs @@ -84,7 +84,7 @@ namespace KoogleApp.Data return item; } - public async Task CreateAsync(Player item, string userName) + public async Task CreatePlayerAsync(Player item, string userName) { item.ModifiedBy = userName; var created = await _playerRepository.CreateAsync(item); @@ -95,7 +95,7 @@ namespace KoogleApp.Data return created; } - public async Task UpdateAsync(Player item, string userName) + public async Task UpdatePlayerAsync(Player item, string userName) { item.ModifiedBy = userName; var updated = await _playerRepository.UpdateAsync(item); diff --git a/KoogleApp/Services/ServiceExtension.cs b/KoogleApp/Services/ServiceExtension.cs index ac0bac7..b289ff9 100644 --- a/KoogleApp/Services/ServiceExtension.cs +++ b/KoogleApp/Services/ServiceExtension.cs @@ -51,8 +51,8 @@ namespace KoogleApp.Services // ENTWICKLUNG: In-Memory Repository if (uesInMemory) { - services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); } // PRODUKTION: Entity Framework Repository else diff --git a/KoogleApp/Store/Player/Actions.cs b/KoogleApp/Store/Player/Actions.cs index b57928a..055539a 100644 --- a/KoogleApp/Store/Player/Actions.cs +++ b/KoogleApp/Store/Player/Actions.cs @@ -10,4 +10,8 @@ namespace KoogleApp.Store.Player public record SelectPlayerAction(PlayerState? Player); public record ChangePlayerAvailableAction(int PlayerId, bool IsAvailable, DayState DayState, DaysState DaysState); + + public record SavePlayerAction(PlayerState Player); + + public record PlayerSavedAction(PlayerState Player); } diff --git a/KoogleApp/Store/Player/Effects.cs b/KoogleApp/Store/Player/Effects.cs index 7b8bbc6..1018d08 100644 --- a/KoogleApp/Store/Player/Effects.cs +++ b/KoogleApp/Store/Player/Effects.cs @@ -18,5 +18,32 @@ namespace KoogleApp.Store.Player var players = await _dataService.GetAllPlayersAsync(); dispatcher.Dispatch(new PlayersLoadedAction(players, action.DayState)); } + + + [EffectMethod] + public async Task HandleSavePlayerAction(SavePlayerAction action, IDispatcher dispatcher) + { + try + { + Model.Player savedData; + // Hier die Daten speichern (API-Call, DB, etc.) + if (action.Player.Id == 0) + { + savedData = await _dataService.CreatePlayerAsync(PlayersSelector.DbConvert(action.Player), "todo"); + } + else + { + savedData = await _dataService.UpdatePlayerAsync(PlayersSelector.DbConvert(action.Player), "todo"); + + } + + // Nach erfolgreichem Speichern neue Action dispatchen + dispatcher.Dispatch(new PlayerSavedAction(PlayersSelector.DbConvert(savedData))); + } + catch (Exception ex) + { + //dispatcher.Dispatch(new SaveDataFailureAction(ex.Message)); + } + } } } diff --git a/KoogleApp/Store/Player/Reducers.cs b/KoogleApp/Store/Player/Reducers.cs index eb2a08c..4387784 100644 --- a/KoogleApp/Store/Player/Reducers.cs +++ b/KoogleApp/Store/Player/Reducers.cs @@ -40,7 +40,6 @@ namespace KoogleApp.Store.Player var newList = new List(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 }; } @@ -80,5 +79,21 @@ namespace KoogleApp.Store.Player return state with { Players = lst }; } + + [ReducerMethod] + public static PlayersState OnPlayerSavedAction(PlayersState state, PlayerSavedAction action) + { + var newList = new List(state.Players); + var idx = state.Players.FindIndex(p => p.Id == action.Player.Id); + if (idx < 0) + { + newList.Add(action.Player); + } + else + { + newList[idx] = action.Player; + } + return state with { Players = newList.OrderBy(_ => _.Name).ToList() }; + } } } diff --git a/KoogleApp/Store/Player/Selectors.cs b/KoogleApp/Store/Player/Selectors.cs index 783af82..af69c5d 100644 --- a/KoogleApp/Store/Player/Selectors.cs +++ b/KoogleApp/Store/Player/Selectors.cs @@ -2,6 +2,22 @@ { public static class PlayersSelector { + public static PlayerState DbConvert(Model.Player player) + { + return new PlayerState(player.Name, player.Id, true, player.PlayerStatus); + } + + public static Model.Player DbConvert(PlayerState player) + { + return new Model.Player + { + Name = player.Name, + Id = player.Id, + PlayerStatus = player.PlayerStatus + }; + } + + //public static PlayerState? SelectedPlayer(PlayersState state) //{ // if (state. == null)