Files
Tarokka/app/AppContext.tsx
2025-06-25 18:09:29 -04:00

67 lines
1.5 KiB
TypeScript

'use client';
import { createContext, useContext, useState, ReactNode } from 'react';
import useSocket from '@/hooks/useSocket';
import type { GameUpdate, Tilt } from '@/types';
const AppContext = createContext<AppContext | undefined>(undefined);
const gameStart: GameUpdate = {
dmID: '',
spectatorID: '',
cards: [],
settings: {
positionBack: false,
positionFront: false,
prophecy: false,
notes: false,
cardStyle: 'color',
},
};
export interface AppContext {
gameData: GameUpdate;
noGame: boolean;
tilts: Tilt[];
flipCard: (cardIndex: number) => void;
handleSettings: (gameData: GameUpdate) => void;
redraw: (cardIndex: number) => void;
select: (cardIndex: number, cardID: string) => void;
setGameID: (gameID: string) => void;
setTilts: (tilts: Tilt[]) => void;
}
export function AppProvider({ children }: { children: ReactNode }) {
const [gameID, setGameID] = useState('');
const [noGame, setNoGame] = useState(false);
const [gameData, setGameData] = useState<GameUpdate>(gameStart);
const { flipCard, redraw, select, handleSettings } = useSocket({
gameID,
setGameData,
setNoGame,
});
const [tilts, setTilts] = useState<Tilt[]>([]);
const appInterface = {
gameData,
noGame,
tilts,
flipCard,
handleSettings,
redraw,
select,
setGameID,
setTilts,
};
return <AppContext.Provider value={appInterface}>{children}</AppContext.Provider>;
}
export function useAppContext(): AppContext {
const context = useContext(AppContext);
if (!context) throw new Error('useAppContext must be used within AppProvider');
return context;
}