strat-gameplay-webapp/frontend-sba/types/index.ts
Cal Corum 453280487c CLAUDE: Integrate XCheckWizard into GameplayPanel and wire up WebSocket/store
Step 7 of x-check interactive workflow implementation:

Frontend Integration:
- GameplayPanel.vue: Add x_check_result_pending workflow state, show XCheckWizard when decision_phase is awaiting_x_check_result, handle interactive vs read-only mode based on active_team_id
- store/game.ts: Add xCheckData and decideData state, add needsXCheckResult/needsDecide* getters, add set/clear actions for x-check and decide data
- useWebSocket.ts: Handle decision_required events with x_check_result/decide_advance/decide_throw/decide_speed_check types, route to appropriate store actions, clear x-check/decide data on play_resolved
- useGameActions.ts: Add submitXCheckResult(), submitDecideAdvance(), submitDecideThrow(), submitDecideResult() action wrappers
- types: Export XCheckData, DecideAdvanceData, DecideThrowData, DecideSpeedCheckData, PendingXCheck, and new WebSocket request types

Type fixes:
- XCheckData: Allow readonly arrays for d6_individual and chart_row (store returns readonly refs)
- GameplayPanel: Add userTeamId prop for determining interactive mode

Tests: 460 passing, 28 failing (GameplayPanel.spec.ts needs Pinia setup - pre-existing issue)

Next: Step 8 - End-to-end testing of basic x-check flow (no DECIDE)
2026-02-07 17:43:17 -06:00

133 lines
2.6 KiB
TypeScript

/**
* Type Definitions Index
*
* Central export point for all TypeScript types.
* Import types from this file throughout the application.
*
* @example
* import type { GameState, SbaPlayer, TypedSocket } from '~/types'
*/
// Game types
export type {
GameStatus,
InningHalf,
GameMode,
GameVisibility,
LeagueId,
DecisionPhase,
LineupPlayerState,
GameState,
DefensiveDecision,
OffensiveDecision,
RollData,
PlayOutcome,
RunnerAdvancement,
PlayResult,
XCheckResult,
DecisionPrompt,
ManualOutcomeSubmission,
GameListItem,
CreateGameRequest,
CreateGameResponse,
// X-Check workflow types
XCheckData,
DecideAdvanceData,
DecideThrowData,
DecideSpeedCheckData,
PendingXCheck,
} from './game'
// Player types
export type {
SbaPlayer,
Lineup,
TeamLineup,
BenchPlayer,
LineupDataResponse,
SubstitutionType,
SubstitutionRequest,
SubstitutionResult,
SubstitutionErrorCode,
SubstitutionError,
} from './player'
// WebSocket types
export type {
SocketAuth,
ClientToServerEvents,
ServerToClientEvents,
TypedSocket,
// Request types
JoinGameRequest,
LeaveGameRequest,
DefensiveDecisionRequest,
OffensiveDecisionRequest,
RollDiceRequest,
SubmitManualOutcomeRequest,
PinchHitterRequest,
DefensiveReplacementRequest,
PitchingChangeRequest,
GetLineupRequest,
GetBoxScoreRequest,
RequestGameStateRequest,
// X-Check workflow request types
SubmitXCheckResultRequest,
SubmitDecideAdvanceRequest,
SubmitDecideThrowRequest,
SubmitDecideResultRequest,
// Event types
ConnectedEvent,
GameJoinedEvent,
UserConnectedEvent,
UserDisconnectedEvent,
DefensiveDecisionSubmittedEvent,
OffensiveDecisionSubmittedEvent,
DiceRolledEvent,
OutcomeAcceptedEvent,
InningChangeEvent,
GameEndedEvent,
SubstitutionConfirmedEvent,
BoxScoreDataEvent,
BattingStatLine,
PitchingStatLine,
GameStateSyncEvent,
ErrorEvent,
OutcomeRejectedEvent,
InvalidActionEvent,
ConnectionErrorEvent,
} from './websocket'
// API types
export type {
ApiError,
PaginatedResponse,
GameFilters,
DiscordAuthResponse,
DiscordUser,
JwtPayload,
Team,
UserTeamsResponse,
CreateGameRequestData,
CreateGameResponseData,
GetGameResponse,
GetActiveGamesResponse,
GetCompletedGamesResponse,
PlayHistoryItem,
GetPlayHistoryResponse,
DeleteGameResponse,
DiscordCallbackRequest,
DiscordCallbackResponse,
GetCurrentUserResponse,
RefreshTokenRequest,
RefreshTokenResponse,
} from './api'
// Schedule types
export type {
SbaCurrent,
SbaScheduledGame,
GetCurrentResponse,
GetScheduleGamesResponse,
} from './schedule'