diff --git a/apps/client/src/scenes/lobby/LobbyScene.tsx b/apps/client/src/scenes/lobby/LobbyScene.tsx index 0984df4..07e67b9 100644 --- a/apps/client/src/scenes/lobby/LobbyScene.tsx +++ b/apps/client/src/scenes/lobby/LobbyScene.tsx @@ -2,13 +2,6 @@ import { domain } from "@repo/shared"; import type { FieldSizePreset, StartGameRequestPayload, TeamAssignmentMode } from "@repo/shared"; import { config } from "@client/config"; - -/** ホスト側で管理するゲーム設定 */ -export type LobbyGameSettings = { - targetPlayerCount: number; - fieldSizePreset: FieldSizePreset; - teamAssignmentMode: TeamAssignmentMode; -}; import { socketManager } from "@client/network/SocketManager"; import { OVERLAY_BUTTON_STYLE } from "@client/scenes/shared/styles/overlayStyles"; import { GearIcon } from "./components/GearIcon"; @@ -36,6 +29,13 @@ LOBBY_WAITING_STYLE, } from "./styles/LobbyScene.styles"; +/** ホスト側で管理するゲーム設定 */ +export type LobbyGameSettings = { + targetPlayerCount: number; + fieldSizePreset: FieldSizePreset; + teamAssignmentMode: TeamAssignmentMode; +}; + const TEAM_COLOR_LABELS = ["赤チーム", "青チーム", "緑チーム", "黄チーム"] as const; /** チームIDを色名ラベルに変換する */ @@ -50,6 +50,44 @@ { value: 3, label: toTeamLabel(3) }, ]; +type TeamSelectFieldProps = { + id: string; + disabled: boolean; + value: string; + onChange: (preferredTeamId: number | null) => void; + teamFullMessage: string | null; +}; + +/** チーム選択プルダウン(ランダムモード時はdisabled) */ +const TeamSelectField = ({ id, disabled, value, onChange, teamFullMessage }: TeamSelectFieldProps) => ( +
+ + + {teamFullMessage && ( +
+ {teamFullMessage} +
+ )} +
+); + type Props = { room: domain.room.Room | null; myId: string | null; @@ -227,33 +265,13 @@ ルールを見る - {/* チーム選択プルダウン(ランダムモード時はdisabled) */} -
- - - {teamFullMessage && ( -
- {teamFullMessage} -
- )} -
+ ) : (
@@ -291,34 +309,13 @@ ルールを見る - {/* player_selectモード時のチーム選択プルダウン */} - {/* チーム選択プルダウン(ランダムモード時はdisabled) */} -
- - - {teamFullMessage && ( -
- {teamFullMessage} -
- )} -
+
)}