ilhamdev's picture
Upload folder using huggingface_hub
ece5841 verified
import React, { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom';
import { Button, Group, Stack, Text, Title } from '@mantine/core';
const Challenges = () => {
const navigate = useNavigate();
const [challenges, setChallenges] = useState([]);
const [error, setError] = useState(null);
useEffect(() => {
if (error) return;
const fetchData = async () => {
let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/challenges`;
try {
const response = await fetch(url, {
credentials: 'include'
});
const data = await response.json();
if (response.ok) {
setChallenges(data);
} else {
setError('Cannot fetch challenges')
}
} catch (error) {
console.log(error);
setError("Something went wrong")
}
}
fetchData();
}, [error])
if (!challenges || challenges.length === 0) {
return (
<React.Fragment>
<Title mt="20px" mb="10px" order={3}>Challenges</Title>
<Text>No challenges found</Text>
</React.Fragment>
)
}
if (error) {
return (
<>
<Title mt="20px" mb="10px" order={3}>Challenges</Title>
<Text>{error}</Text><Text onClick={() => setError(null)} fw={800} sx={{ cursor: 'pointer' }}>Retry</Text>
</>
)
}
return (
<div>
<Title mt="20px" mb="10px" order={3}>Challenges</Title>
<Stack>
{
challenges.map(({ id, challenger, roomID, color, timeLimit }, index) => {
console.log(challenger, roomID, color, timeLimit);
return (
<Group position='apart' key={id}>
<Text>Challenge by {challenger}</Text>
<Group position='center'>
<Button color='lime' onClick={async () => {
try {
let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/challenges/${id}`
const response = await fetch(url, { method: 'DELETE', credentials: 'include' });
console.log(id, challenger);
const resData = await response.json();
if (response.ok) {
localStorage.setItem('myColor', color === 'b' ? 'w' : 'b');
localStorage.setItem('roomID', roomID);
localStorage.setItem('opponent', challenger);
localStorage.setItem('timeLimit', timeLimit);
navigate(`/game/friend/${roomID}`);
} else {
console.log(resData)
}
} catch (err) {
setError("Something went wrong");
console.log(err);
}
}}>Accept</Button>
<Button color='gray' onClick={async () => {
try {
let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/challenges/${id}`
const response = await fetch(url, { method: 'DELETE', credentials: 'include' });
console.log(id, challenger);
if (response.ok) {
challenges.splice(index, 1);
setChallenges(challenges);
} else {
const resData = await response.json();
console.log(resData)
}
} catch (err) {
setError("Something went wrong");
console.log(err);
}
}}>Decline</Button>
</Group>
</Group>
)
})
}
</Stack>
</div>
)
}
export default Challenges