mirror of
https://github.com/TurTaskProject/TurTaskWeb.git
synced 2025-12-19 14:04:07 +01:00
144 lines
4.3 KiB
JavaScript
144 lines
4.3 KiB
JavaScript
import React, { useState } from "react";
|
|
import { useNavigate } from "react-router-dom";
|
|
import axiosapi from "../../api/AuthenticationApi";
|
|
|
|
import Avatar from "@mui/material/Avatar";
|
|
import Button from "@mui/material/Button";
|
|
import CssBaseline from "@mui/material/CssBaseline";
|
|
import TextField from "@mui/material/TextField";
|
|
import FormControlLabel from "@mui/material/FormControlLabel";
|
|
import Checkbox from "@mui/material/Checkbox";
|
|
import Link from "@mui/material/Link";
|
|
import Grid from "@mui/material/Grid";
|
|
import Box from "@mui/material/Box";
|
|
import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
|
|
import Typography from "@mui/material/Typography";
|
|
import Container from "@mui/material/Container";
|
|
import { createTheme, ThemeProvider } from "@mui/material/styles";
|
|
|
|
function Copyright(props) {
|
|
return (
|
|
<Typography variant="body2" color="text.secondary" align="center" {...props}>
|
|
{"Copyright © "}
|
|
<Link color="inherit" href="https://github.com/TurTaskProject/TurTaskWeb">
|
|
TurTask
|
|
</Link>{" "}
|
|
{new Date().getFullYear()}
|
|
{"."}
|
|
</Typography>
|
|
);
|
|
}
|
|
|
|
const defaultTheme = createTheme();
|
|
|
|
export default function SignUp() {
|
|
const Navigate = useNavigate();
|
|
|
|
const [formData, setFormData] = useState({
|
|
email: "",
|
|
username: "",
|
|
password: "",
|
|
});
|
|
const [error, setError] = useState(null);
|
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
|
|
const handleSubmit = async e => {
|
|
e.preventDefault();
|
|
setIsSubmitting(true);
|
|
setError(null);
|
|
|
|
try {
|
|
axiosapi.createUser(formData);
|
|
} catch (error) {
|
|
console.error("Error creating user:", error);
|
|
setError("Registration failed. Please try again.");
|
|
} finally {
|
|
setIsSubmitting(false);
|
|
}
|
|
Navigate("/login");
|
|
};
|
|
|
|
const handleChange = e => {
|
|
const { name, value } = e.target;
|
|
setFormData({ ...formData, [name]: value });
|
|
};
|
|
|
|
return (
|
|
<ThemeProvider theme={defaultTheme}>
|
|
<Container component="main" maxWidth="xs">
|
|
<CssBaseline />
|
|
<Box
|
|
sx={{
|
|
marginTop: 8,
|
|
display: "flex",
|
|
flexDirection: "column",
|
|
alignItems: "center",
|
|
}}>
|
|
<Avatar sx={{ m: 1, bgcolor: "secondary.main" }}>
|
|
<LockOutlinedIcon />
|
|
</Avatar>
|
|
<Typography component="h1" variant="h5">
|
|
Sign up
|
|
</Typography>
|
|
<Box component="form" noValidate onSubmit={handleSubmit} sx={{ mt: 3 }}>
|
|
<Grid container spacing={2}>
|
|
<Grid item xs={12}>
|
|
<TextField
|
|
required
|
|
fullWidth
|
|
id="email"
|
|
label="Email Address"
|
|
name="email"
|
|
autoComplete="email"
|
|
onChange={handleChange}
|
|
/>
|
|
</Grid>
|
|
<Grid item xs={12}>
|
|
<TextField
|
|
autoComplete="username"
|
|
name="Username"
|
|
required
|
|
fullWidth
|
|
id="Username"
|
|
label="Username"
|
|
autoFocus
|
|
onChange={handleChange}
|
|
/>
|
|
</Grid>
|
|
<Grid item xs={12}>
|
|
<TextField
|
|
required
|
|
fullWidth
|
|
name="password"
|
|
label="Password"
|
|
type="password"
|
|
id="password"
|
|
autoComplete="new-password"
|
|
onChange={handleChange}
|
|
/>
|
|
</Grid>
|
|
<Grid item xs={12}>
|
|
<FormControlLabel
|
|
control={<Checkbox value="allowExtraEmails" color="primary" />}
|
|
label="I want to receive inspiration, marketing promotions and updates via email."
|
|
/>
|
|
</Grid>
|
|
</Grid>
|
|
<Button type="submit" fullWidth variant="contained" sx={{ mt: 3, mb: 2 }}>
|
|
Sign Up
|
|
</Button>
|
|
<Grid container justifyContent="flex-end">
|
|
<Grid item>
|
|
<Link href="#" variant="body2">
|
|
Already have an account? Sign in
|
|
</Link>
|
|
</Grid>
|
|
</Grid>
|
|
</Box>
|
|
</Box>
|
|
<Copyright sx={{ mt: 5 }} />
|
|
</Container>
|
|
</ThemeProvider>
|
|
);
|
|
}
|