Skip to content
Snippets Groups Projects
addGameToList.tsx 2.1 KiB
Newer Older
Caner's avatar
Caner committed
"use client"

import { useRouter } from "next/navigation";
Yusuf Akgül's avatar
Yusuf Akgül committed
import { startTransition } from "react";
import { Button } from "./ui/button";
Caner's avatar
Caner committed

DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
export default function AddGameToList(props: { userGameList: Number[], gameId: string }) {
Caner's avatar
Caner committed

    const router = useRouter();
    const gameId = props.gameId
DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
    let formData = { gameId: "", add: true }
Caner's avatar
Caner committed

DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
    async function removeGame(e: any) {
Caner's avatar
Caner committed
        e.preventDefault()

        formData.gameId = gameId;
DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
        formData.add = false;
Yusuf Akgül's avatar
Yusuf Akgül committed
        const response = await fetch('/api/favgameslist', {
DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
            method: 'PUT',
            body: JSON.stringify(formData)
        })
Caner's avatar
Caner committed

DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
        startTransition(() => {
            // Refresh the current route and fetch new data from the server without
            // losing client-side browser or React state.
            router.refresh();
        });
        return await response.json()
    }

    async function addGame(e: any) {
        e.preventDefault()

        formData.gameId = gameId;
        formData.add = true;
Yusuf Akgül's avatar
Yusuf Akgül committed
        const response = await fetch('/api/favgameslist', {
Caner's avatar
Caner committed
            method: 'PUT',
            body: JSON.stringify(formData)
        })

        startTransition(() => {
            // Refresh the current route and fetch new data from the server without
            // losing client-side browser or React state.
            router.refresh();
        });
        return await response.json()
    }

DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed

    let button = <div></div>;
    try {
        if (!props.userGameList.includes(parseFloat(props.gameId))) {
            button = (
                <form onSubmit={addGame}>
Yusuf Akgül's avatar
Yusuf Akgül committed
                    <Button type="submit" size="lg">
                        Add Game To List
                    </Button>
DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
                </form>
            )
        } else {
            button = (
                <form onSubmit={removeGame}>
Yusuf Akgül's avatar
Yusuf Akgül committed
                    <Button type="submit" size="lg" variant={"secondary"}>
                        Remove Game From List
                    </Button>
DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
                </form>
            )
        }
    } catch (error) {
Yusuf Akgül's avatar
Yusuf Akgül committed
        throw new Error("Failed to fetch comments");
Caner's avatar
Caner committed
    return (
DESKTOP-9FO96TP\hehexd's avatar
DESKTOP-9FO96TP\hehexd committed
        button
Caner's avatar
Caner committed
    )