Newer
Older
PixelPaintWar / apps / client / src / hooks / useAppFlow.ts
import { useEffect, useState } from "react";
import { socketClient } from "../network/SocketClient";
import { ScenePhase } from "@repo/shared";
import type { ScenePhase as ScenePhaseType, Room } from "@repo/shared";

type AppFlowState = {
  scenePhase: ScenePhaseType;
  room: Room | null;
  myId: string | null;
};

export const useAppFlow = (): AppFlowState => {
  const [scenePhase, setScenePhase] = useState<ScenePhaseType>(ScenePhase.TITLE);
  const [room, setRoom] = useState<Room | null>(null);
  const [myId, setMyId] = useState<string | null>(null);

  useEffect(() => {
    socketClient.onConnect((id) => setMyId(id));
    socketClient.onRoomUpdate((updatedRoom) => {
      setRoom(updatedRoom);
      setScenePhase(ScenePhase.LOBBY);
    });
    socketClient.onGameStart(() => setScenePhase(ScenePhase.PLAYING));
  }, []);

  return { scenePhase, room, myId };
};