From 0267aedf5218a5f769a06de2e918c09d8e701f4c Mon Sep 17 00:00:00 2001 From: Vishesh 'ironeagle' Bangotra Date: Tue, 11 Nov 2025 18:48:06 +0530 Subject: [PATCH] register page --- src/blog/components/Register.tsx | 114 +++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/blog/components/Register.tsx diff --git a/src/blog/components/Register.tsx b/src/blog/components/Register.tsx new file mode 100644 index 0000000..9359516 --- /dev/null +++ b/src/blog/components/Register.tsx @@ -0,0 +1,114 @@ +import * as React from 'react'; +import { Box, TextField, Button, Typography, IconButton, CircularProgress, Alert, } from '@mui/material'; +import ArrowBackRoundedIcon from '@mui/icons-material/ArrowBackRounded'; +import { useAuth } from '../providers/Author'; + +interface RegisterProps { + onBack: () => void; +} + +export default function Register({ onBack }: RegisterProps) { + const { register, loading, error, currentUser } = useAuth(); + const [username, setUsername] = React.useState(''); + const [password1, setPassword1] = React.useState(''); + const [password2, setPassword2] = React.useState(''); + const [localError, setLocalError] = React.useState(null); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setLocalError(null); + + // ✅ Local validation + if (password1 !== password2) { + setLocalError("Passwords don't match"); + return; + } + + if (password1.length < 6) { + setLocalError('Password must be at least 6 characters long'); + return; + } + + // ✅ Call backend + await register(username, password1); + }; + + if (currentUser) { + // ✅ if logged in, auto-return to the article list + onBack(); + return null; + } + + return ( + + + + + + + Sign Up + + + + Please sign up to continue + + +
+ setUsername(e.target.value)} + required + /> + setPassword1(e.target.value)} + required + /> + setPassword2(e.target.value)} + required + /> + + {(localError || error) && ( + + {localError || error} + + )} + + + +
+ ); +}