diff --git a/ui/Puzzle.tsx b/ui/Puzzle.tsx index 0e63c06..eb609de 100644 --- a/ui/Puzzle.tsx +++ b/ui/Puzzle.tsx @@ -49,7 +49,7 @@ export default function Puzzle({ puzzle }: { puzzle: PuzzleType }) { // return; // } - formData.append('answer', data.answer); + formData.append('answer', data.answer.trim()); // formData.append('filename', 'placeholder'); // formData.append('code_file', new Blob(), 'placeholder'); diff --git a/ui/Puzzles.tsx b/ui/Puzzles.tsx index a373207..1a1aaa3 100644 --- a/ui/Puzzles.tsx +++ b/ui/Puzzles.tsx @@ -13,6 +13,7 @@ import Dialog from './Dialog'; import Icon from './Icon'; import Input from './Input'; import Select from './Select'; +import { useRouter } from 'next/navigation'; export default function Puzzles({ token }: { token: string }) { const { data: me } = useContext(UserContext); @@ -93,28 +94,30 @@ export default function Puzzles({ token }: { token: string }) { {isInEventGroup(chapter) && ( )} @@ -238,6 +241,7 @@ type GroupData = { function GroupForm({ chapter, token }: { chapter: Chapter; token: string }) { const [isJoining, setIsJoining] = useState(false); + const router = useRouter(); const { data: groups } = useGroups({ token }); @@ -256,13 +260,20 @@ function GroupForm({ chapter, token }: { chapter: Chapter; token: string }) { }); async function onSubmit(data: GroupData) { - await fetch(`${process.env.NEXT_PUBLIC_API_URL}/${isJoining ? 'groupJoin' : 'groupCreate'}`, { - method: 'POST', - body: JSON.stringify(data), - headers: { - Authorization: `Bearer ${token}` + const res = await fetch( + `${process.env.NEXT_PUBLIC_API_URL}/${isJoining ? 'groupJoin' : 'groupCreate'}`, + { + method: 'POST', + body: JSON.stringify(data), + headers: { + Authorization: `Bearer ${token}` + } } - }); + ); + // TODO: handle errors + if (res.ok) { + router.refresh(); + } } return ( diff --git a/ui/Timer.tsx b/ui/Timer.tsx index 0891a19..e056660 100644 --- a/ui/Timer.tsx +++ b/ui/Timer.tsx @@ -31,9 +31,11 @@ export function Timer({ targetDate, className }: { targetDate: Date; className?: useEffect(() => { const intervalId = setInterval(() => { const timeDifference = targetDate.getTime() - Date.now(); + const hours = Math.floor(timeDifference / (1000 * 60 * 60)); const minutes = Math.floor((timeDifference / (1000 * 60)) % 60); const seconds = Math.floor((timeDifference / 1000) % 60); + dispatch({ type: 'SET_TIME_REMAINING', payload: { hours, minutes, seconds } @@ -45,9 +47,7 @@ export function Timer({ targetDate, className }: { targetDate: Date; className?: return ( - {`${timeRemaining.hours.toString().padStart(2, '0')}:${timeRemaining.minutes - .toString() - .padStart(2, '0')}:${timeRemaining.seconds.toString().padStart(2, '0')}`} + {timeRemaining.hours}h {timeRemaining.minutes}m {timeRemaining.seconds}s ); } diff --git a/ui/ToHTML.tsx b/ui/ToHTML.tsx index def3900..33a2e73 100644 --- a/ui/ToHTML.tsx +++ b/ui/ToHTML.tsx @@ -7,11 +7,23 @@ import remarkBreaks from 'remark-breaks'; export default function ToHTML({ data, className }: { data: string; className?: string }) { return ( -
+
( - + + ), + code: ({ ...props }) => ( + ) }} remarkPlugins={[remarkGfm, remarkBreaks]} diff --git a/ui/UserAuthForm.tsx b/ui/UserAuthForm.tsx index 126fd28..20aeb80 100644 --- a/ui/UserAuthForm.tsx +++ b/ui/UserAuthForm.tsx @@ -58,8 +58,6 @@ export default function UserAuthForm() { type: 'manual', message: "Une erreur s'est produite." }); - - setIsLoading(false); } if (!isSignIn) { @@ -70,8 +68,6 @@ export default function UserAuthForm() { type: 'manual', message: "Nom d'utilisateur indisponible" }); - - setIsLoading(false); } if (!email_valid) { setError('email', { @@ -79,7 +75,6 @@ export default function UserAuthForm() { message: 'Adresse e-mail indisponible' }); } - setIsLoading(false); } } @@ -97,7 +92,6 @@ export default function UserAuthForm() { type: 'manual', message: "Nom d'utilisateur ou mot de passe incorrect" }); - setIsLoading(false); } setIsLoading(false); @@ -113,7 +107,7 @@ export default function UserAuthForm() { @@ -137,7 +131,7 @@ export default function UserAuthForm() {