Fixed types
This commit is contained in:
parent
ba7097207c
commit
f97b3a622a
3 changed files with 53 additions and 13 deletions
|
@ -23,7 +23,20 @@ export const gameIncludes = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getAnyRunningGame = (id: string) => {
|
export const getAnyGame = (gameId: string) => {
|
||||||
|
const game = prisma.game.findFirst({
|
||||||
|
where: {
|
||||||
|
NOT: {
|
||||||
|
state: "ended",
|
||||||
|
},
|
||||||
|
id: gameId,
|
||||||
|
},
|
||||||
|
...gameIncludes,
|
||||||
|
})
|
||||||
|
return game
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getAnyRunningGame = (userId: string) => {
|
||||||
const game = prisma.game.findFirst({
|
const game = prisma.game.findFirst({
|
||||||
where: {
|
where: {
|
||||||
NOT: {
|
NOT: {
|
||||||
|
@ -31,7 +44,7 @@ export const getAnyRunningGame = (id: string) => {
|
||||||
},
|
},
|
||||||
users: {
|
users: {
|
||||||
some: {
|
some: {
|
||||||
userId: id,
|
userId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,16 +2,17 @@ import BurgerMenu from "../../components/BurgerMenu"
|
||||||
import LobbyFrame from "../../components/Lobby/LobbyFrame"
|
import LobbyFrame from "../../components/Lobby/LobbyFrame"
|
||||||
import Settings from "../../components/Lobby/SettingsFrame/Settings"
|
import Settings from "../../components/Lobby/SettingsFrame/Settings"
|
||||||
import Logo from "../../components/Logo"
|
import Logo from "../../components/Logo"
|
||||||
import { Data, composeBody, getAnyRunningGame } from "../api/game/running"
|
import { composeBody, getAnyGame } from "../api/game/running"
|
||||||
import useGameState from "@lib/hooks/useGameState"
|
import useGameState from "@lib/hooks/useGameState"
|
||||||
|
import { GamePropsSchema } from "@lib/zodSchemas"
|
||||||
import classNames from "classnames"
|
import classNames from "classnames"
|
||||||
import { GetServerSideProps } from "next"
|
import { GetServerSideProps } from "next"
|
||||||
import Head from "next/head"
|
import Head from "next/head"
|
||||||
import { useState } from "react"
|
import { useState } from "react"
|
||||||
|
|
||||||
export default function Home(props: Data) {
|
export default function Home(props: GamePropsSchema) {
|
||||||
|
useGameState(props)
|
||||||
const [settings, setSettings] = useState(false)
|
const [settings, setSettings] = useState(false)
|
||||||
const { gameProps, setGameProps } = useGameState(props)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="h-full bg-theme">
|
<div className="h-full bg-theme">
|
||||||
|
@ -36,11 +37,13 @@ export default function Home(props: Data) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getServerSideProps: GetServerSideProps<Data> = async (context) => {
|
export const getServerSideProps: GetServerSideProps<GamePropsSchema> = async (
|
||||||
|
context
|
||||||
|
) => {
|
||||||
const { gameId } = context.query
|
const { gameId } = context.query
|
||||||
|
|
||||||
const gameIdString = Array.isArray(gameId) ? gameId[0] : gameId
|
const gameIdString = Array.isArray(gameId) ? gameId[0] : gameId
|
||||||
const game = await getAnyRunningGame(gameIdString ?? "")
|
const game = await getAnyGame(gameIdString ?? "")
|
||||||
if (!game)
|
if (!game)
|
||||||
return {
|
return {
|
||||||
redirect: {
|
redirect: {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import BurgerMenu from "../components/BurgerMenu"
|
import BurgerMenu from "../components/BurgerMenu"
|
||||||
import Logo from "../components/Logo"
|
import Logo from "../components/Logo"
|
||||||
import OptionButton from "../components/OptionButton"
|
import OptionButton from "../components/OptionButton"
|
||||||
|
import { authOptions } from "./api/auth/[...nextauth]"
|
||||||
import { faEye, faLeftLong } from "@fortawesome/pro-regular-svg-icons"
|
import { faEye, faLeftLong } from "@fortawesome/pro-regular-svg-icons"
|
||||||
import { faPlus, faUserPlus } from "@fortawesome/pro-solid-svg-icons"
|
import { faPlus, faUserPlus } from "@fortawesome/pro-solid-svg-icons"
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
|
||||||
|
@ -8,13 +9,15 @@ import useGameState from "@lib/hooks/useGameState"
|
||||||
import { GamePropsSchema } from "@lib/zodSchemas"
|
import { GamePropsSchema } from "@lib/zodSchemas"
|
||||||
import status from "http-status"
|
import status from "http-status"
|
||||||
import { GetServerSideProps } from "next"
|
import { GetServerSideProps } from "next"
|
||||||
|
import { Session, getServerSession } from "next-auth"
|
||||||
import { useRouter } from "next/router"
|
import { useRouter } from "next/router"
|
||||||
import { useCallback, useEffect, useState } from "react"
|
import { useCallback, useEffect, useMemo, useState } from "react"
|
||||||
import OtpInput from "react-otp-input"
|
import OtpInput from "react-otp-input"
|
||||||
import { toast } from "react-toastify"
|
import { toast } from "react-toastify"
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
q: string | string[] | undefined
|
q: string | string[] | undefined
|
||||||
|
session: Session | null
|
||||||
}
|
}
|
||||||
|
|
||||||
function isInputOnlyNumbers(input: string) {
|
function isInputOnlyNumbers(input: string) {
|
||||||
|
@ -48,11 +51,16 @@ const handleConfirmation = () => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Start({ q }: Props) {
|
export default function Start({ q, session: initSession }: Props) {
|
||||||
const [otp, setOtp] = useState("")
|
const [otp, setOtp] = useState("")
|
||||||
const { gameProps, setGameProps } = useGameState()
|
const { gameProps, setGameProps } = useGameState()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { session } = useGameState()
|
const { session: sessionUsed } = useGameState()
|
||||||
|
|
||||||
|
const session = useMemo(
|
||||||
|
() => (sessionUsed ? sessionUsed : initSession),
|
||||||
|
[sessionUsed, initSession]
|
||||||
|
)
|
||||||
|
|
||||||
const gameFetch = useCallback(
|
const gameFetch = useCallback(
|
||||||
async (pin?: string) => {
|
async (pin?: string) => {
|
||||||
|
@ -81,7 +89,7 @@ export default function Start({ q }: Props) {
|
||||||
|
|
||||||
setGameProps(res)
|
setGameProps(res)
|
||||||
|
|
||||||
await toast.promise(router.push("/lobby"), {
|
await toast.promise(router.push("/lobby/" + res.payload.game?.id), {
|
||||||
pending: {
|
pending: {
|
||||||
render: "Raum wird beigetreten",
|
render: "Raum wird beigetreten",
|
||||||
},
|
},
|
||||||
|
@ -157,7 +165,22 @@ export default function Start({ q }: Props) {
|
||||||
"Raum beitreten"
|
"Raum beitreten"
|
||||||
)}
|
)}
|
||||||
</OptionButton>
|
</OptionButton>
|
||||||
<OptionButton icon={faEye}>Zuschauen</OptionButton>
|
<OptionButton icon={faEye}>
|
||||||
|
{q === "watch" && session?.user ? (
|
||||||
|
<OtpInput
|
||||||
|
shouldAutoFocus
|
||||||
|
containerStyle={{ color: "initial" }}
|
||||||
|
value={otp}
|
||||||
|
onChange={setOtp}
|
||||||
|
numInputs={4}
|
||||||
|
placeholder="0000"
|
||||||
|
renderSeparator={<span>-</span>}
|
||||||
|
renderInput={(props) => <input {...props} />}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
"Zuschauen"
|
||||||
|
)}
|
||||||
|
</OptionButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -168,7 +191,8 @@ export default function Start({ q }: Props) {
|
||||||
export const getServerSideProps: GetServerSideProps<Props> = async (
|
export const getServerSideProps: GetServerSideProps<Props> = async (
|
||||||
context
|
context
|
||||||
) => {
|
) => {
|
||||||
|
const session = await getServerSession(context.req, context.res, authOptions)
|
||||||
const { q } = context.query
|
const { q } = context.query
|
||||||
|
|
||||||
return { props: { q } }
|
return { props: { q, session } }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue