feat: add setup button to edit game details
This commit is contained in:
+25
-2
@@ -10,8 +10,9 @@ import {
|
||||
useCompletionModal,
|
||||
} from '@lib/state';
|
||||
import { GameService } from '@lib/data/gameService';
|
||||
import type { StandardGame, Game, EndlosGame } from '@lib/domain/types';
|
||||
import { isEndlosGame } from '@lib/domain/gameUtils';
|
||||
import type { StandardGame, Game, EndlosGame, GameSetupData } from '@lib/domain/types';
|
||||
import { applySetupData, isEndlosGame, isStandardGame } from '@lib/domain/gameUtils';
|
||||
import { validateGameSetupData } from '@lib/domain/validation';
|
||||
|
||||
import { Layout } from '@lib/ui/Layout';
|
||||
import GameListScreen from './screens/GameListScreen';
|
||||
@@ -141,6 +142,27 @@ export default function App() {
|
||||
}
|
||||
}, [navigation.currentGameId, gameState.getGameById, gameState.updateGame, validationModal.showValidation]);
|
||||
|
||||
const handleUpdateGameSetup = useCallback(async (setupData: GameSetupData) => {
|
||||
if (!navigation.currentGameId) return;
|
||||
|
||||
const game = gameState.getGameById(navigation.currentGameId);
|
||||
if (!game || !isStandardGame(game)) return;
|
||||
|
||||
const validation = validateGameSetupData(setupData);
|
||||
if (!validation.isValid) {
|
||||
validationModal.showValidation(validation.errors.join('\n'));
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const updatedGame = applySetupData(game, setupData);
|
||||
await gameState.updateGame(navigation.currentGameId, updatedGame);
|
||||
} catch (error) {
|
||||
console.error('Failed to update game setup:', error);
|
||||
validationModal.showValidation('Spieleinstellungen konnten nicht gespeichert werden.');
|
||||
}
|
||||
}, [navigation.currentGameId, gameState.getGameById, gameState.updateGame, validationModal.showValidation]);
|
||||
|
||||
const handleForfeit = async () => {
|
||||
if (!navigation.currentGameId) return;
|
||||
|
||||
@@ -294,6 +316,7 @@ export default function App() {
|
||||
onUndo={handleUndo}
|
||||
onForfeit={handleForfeit}
|
||||
onBack={navigation.showGameList}
|
||||
onUpdateGameSetup={handleUpdateGameSetup}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { h } from 'preact';
|
||||
import { Screen } from '@lib/ui/Layout';
|
||||
import GameDetail from '@lib/features/game-detail/GameDetail';
|
||||
import type { Game, EndlosGame } from '@lib/domain/types';
|
||||
import type { Game, EndlosGame, GameSetupData } from '@lib/domain/types';
|
||||
|
||||
interface GameDetailScreenProps {
|
||||
game?: Game;
|
||||
@@ -11,6 +11,7 @@ interface GameDetailScreenProps {
|
||||
onUndo: () => void;
|
||||
onForfeit: () => void;
|
||||
onBack: () => void;
|
||||
onUpdateGameSetup?: (setupData: GameSetupData) => void;
|
||||
}
|
||||
|
||||
export default function GameDetailScreen({
|
||||
@@ -21,6 +22,7 @@ export default function GameDetailScreen({
|
||||
onUndo,
|
||||
onForfeit,
|
||||
onBack,
|
||||
onUpdateGameSetup,
|
||||
}: GameDetailScreenProps) {
|
||||
if (!game) {
|
||||
return (
|
||||
@@ -40,6 +42,7 @@ export default function GameDetailScreen({
|
||||
onUndo={onUndo}
|
||||
onForfeit={onForfeit}
|
||||
onBack={onBack}
|
||||
onUpdateGameSetup={onUpdateGameSetup}
|
||||
/>
|
||||
</Screen>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user