mirror of
https://github.com/randyjc/Rahoot.git
synced 2026-03-13 20:15:35 +01:00
fix points and username after restoring session
This commit is contained in:
@@ -13,13 +13,15 @@ import { usePlayerStore } from "@rahoot/web/stores/player"
|
|||||||
import { useQuestionStore } from "@rahoot/web/stores/question"
|
import { useQuestionStore } from "@rahoot/web/stores/question"
|
||||||
import { GAME_STATE_COMPONENTS } from "@rahoot/web/utils/constants"
|
import { GAME_STATE_COMPONENTS } from "@rahoot/web/utils/constants"
|
||||||
import { useParams, useRouter } from "next/navigation"
|
import { useParams, useRouter } from "next/navigation"
|
||||||
|
import { useEffect } from "react"
|
||||||
import toast from "react-hot-toast"
|
import toast from "react-hot-toast"
|
||||||
|
|
||||||
const Game = () => {
|
const Game = () => {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { socket } = useSocket()
|
const { socket } = useSocket()
|
||||||
const { gameId: gameIdParam }: { gameId?: string } = useParams()
|
const { gameId: gameIdParam }: { gameId?: string } = useParams()
|
||||||
const { status, setPlayer, setGameId, setStatus, reset } = usePlayerStore()
|
const { status, player, setPlayer, setGameId, setStatus, reset } =
|
||||||
|
usePlayerStore()
|
||||||
const { setQuestionStates } = useQuestionStore()
|
const { setQuestionStates } = useQuestionStore()
|
||||||
|
|
||||||
useEvent("connect", () => {
|
useEvent("connect", () => {
|
||||||
@@ -57,10 +59,29 @@ const Game = () => {
|
|||||||
try {
|
try {
|
||||||
localStorage.removeItem("last_game_id")
|
localStorage.removeItem("last_game_id")
|
||||||
localStorage.removeItem("last_username")
|
localStorage.removeItem("last_username")
|
||||||
|
localStorage.removeItem("last_points")
|
||||||
} catch {}
|
} catch {}
|
||||||
toast.error(message)
|
toast.error(message)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Hydrate username/points for footer immediately after refresh
|
||||||
|
useEffect(() => {
|
||||||
|
if (player?.username) return
|
||||||
|
try {
|
||||||
|
const name = localStorage.getItem("last_username")
|
||||||
|
const ptsRaw = localStorage.getItem("last_points")
|
||||||
|
const pts = ptsRaw ? Number(ptsRaw) : undefined
|
||||||
|
if (name || typeof pts === "number") {
|
||||||
|
setPlayer({
|
||||||
|
username: name || undefined,
|
||||||
|
points: pts,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}, [player?.username, setPlayer])
|
||||||
|
|
||||||
if (!gameIdParam) {
|
if (!gameIdParam) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,11 +35,24 @@ export const usePlayerStore = create<PlayerStore<StatusDataMap>>((set) => ({
|
|||||||
|
|
||||||
setGameId: (gameId) => set({ gameId }),
|
setGameId: (gameId) => set({ gameId }),
|
||||||
|
|
||||||
setPlayer: (player: PlayerState) => set({ player }),
|
setPlayer: (player: PlayerState) => {
|
||||||
|
try {
|
||||||
|
if (player.username) localStorage.setItem("last_username", player.username)
|
||||||
|
if (typeof player.points === "number") {
|
||||||
|
localStorage.setItem("last_points", String(player.points))
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
set({ player })
|
||||||
|
},
|
||||||
login: (username) =>
|
login: (username) =>
|
||||||
set((state) => ({
|
set((state) => {
|
||||||
player: { ...state.player, username },
|
try {
|
||||||
})),
|
localStorage.setItem("last_username", username)
|
||||||
|
} catch {}
|
||||||
|
return {
|
||||||
|
player: { ...state.player, username },
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
join: (gameId) => {
|
join: (gameId) => {
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
@@ -48,12 +61,22 @@ export const usePlayerStore = create<PlayerStore<StatusDataMap>>((set) => ({
|
|||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
|
|
||||||
updatePoints: (points) =>
|
updatePoints: (points) => {
|
||||||
|
try {
|
||||||
|
localStorage.setItem("last_points", String(points))
|
||||||
|
} catch {}
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
player: { ...state.player, points },
|
player: { ...state.player, points },
|
||||||
})),
|
}))
|
||||||
|
},
|
||||||
|
|
||||||
setStatus: (name, data) => set({ status: createStatus(name, data) }),
|
setStatus: (name, data) => set({ status: createStatus(name, data) }),
|
||||||
|
|
||||||
reset: () => set(initialState),
|
reset: () => {
|
||||||
|
try {
|
||||||
|
localStorage.removeItem("last_username")
|
||||||
|
localStorage.removeItem("last_points")
|
||||||
|
} catch {}
|
||||||
|
set(initialState)
|
||||||
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
Reference in New Issue
Block a user