import { CssBaseline, Box, Typography, TextField, FormControlLabel, Checkbox, Container, Button } from "@mui/material"; import React, { FormEvent, FormEventHandler, useContext } from "react"; import { Navigate, useSearchParams } from "react-router-dom"; import { api, apiAuthenticatedContext } from "./common"; import Cookies from 'js-cookie' import { fetchToken } from "./login"; const signUp = async (username: string, password: string, token: string) => { try { const response = await api.post(`/signup?token=${token}`, { username: username, password: password, }, { }); return response.data.access_token; } catch (error) { console.error('Error fetching token:', error); throw error; } }; export function SignupPage(props: {}) { const [apiAuthenticated, setApiAuthenticated] = useContext(apiAuthenticatedContext) const [searchParam, setSearchParam] = useSearchParams(); const token = searchParam.get('token'); if (token === null){ return } if (apiAuthenticated) { return } const handleSubmit: FormEventHandler = (event: FormEvent) => { event.preventDefault(); const data = new FormData(event.currentTarget); const usernameFormData: FormDataEntryValue | null = data.get('username'); const passwordFormData: FormDataEntryValue | null = data.get('password'); if (usernameFormData === null || passwordFormData === null){ return } const username: string = usernameFormData.toString(); const password: string = passwordFormData.toString(); signUp(username, password, token).then( () => { fetchToken(username, password, true).then( (token) => { setApiAuthenticated(true) }, (error) => { return Promise.reject(error); } ) } ) } return ( Sign up ) }