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)