Initial commit

This commit is contained in:
2025-07-11 13:21:49 +00:00
commit 8a7ab3ac24
262 changed files with 28219 additions and 0 deletions
+120
View File
@@ -0,0 +1,120 @@
import React, { useEffect } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import {
Container,
Typography,
Box,
Button,
Stack,
Divider,
} from '@mui/material';
import { useAuth } from '../../contexts/AuthContext';
import { EmailSignupForm } from './EmailSignupForm';
import { EmailCredentials } from '../../services/auth/authService';
import { RegistrationService } from '../../services/auth/registrationService';
import { logger } from '../../debugConfig';
import MicrosoftIcon from '@mui/icons-material/Microsoft';
const SignupPage: React.FC = () => {
const location = useLocation();
const navigate = useNavigate();
const { user } = useAuth();
const registrationService = RegistrationService.getInstance();
// Get role from location state, default to teacher
const { role = 'teacher' } = location.state || {};
const roleDisplay = role === 'teacher' ? 'Teacher' : 'Student';
logger.debug('signup-page', '🔍 Signup page loaded', {
role,
hasUser: !!user,
});
useEffect(() => {
if (user) {
navigate('/single-player');
}
}, [user, navigate]);
const handleSignup = async (
credentials: EmailCredentials,
displayName: string
) => {
try {
const result = await registrationService.register(
credentials,
displayName
);
if (result.user) {
navigate('/single-player');
}
} catch (error) {
logger.error('signup-page', '❌ Registration failed', error);
throw error;
}
};
const switchRole = () => {
navigate('/signup', {
state: { role: role === 'teacher' ? 'student' : 'teacher' },
});
};
if (user) {
return null;
}
return (
<Container
sx={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
minHeight: '100vh',
gap: 4,
}}
>
<Typography variant="h2" component="h1" gutterBottom>
ClassroomCopilot.ai
</Typography>
<Typography variant="h4" gutterBottom>
{roleDisplay} Sign Up
</Typography>
<Box sx={{ width: '100%', maxWidth: 400 }}>
<Button
fullWidth
variant="outlined"
startIcon={<MicrosoftIcon />}
onClick={() => {}}
sx={{ mb: 3 }}
>
Sign up with Microsoft
</Button>
<Divider sx={{ my: 2 }}>OR</Divider>
<EmailSignupForm
role={`email_${role}` as 'email_teacher' | 'email_student'}
onSubmit={handleSignup}
/>
<Stack
direction="row"
spacing={2}
justifyContent="center"
sx={{ mt: 3 }}
>
<Button variant="text" onClick={switchRole}>
Switch to {role === 'teacher' ? 'Student' : 'Teacher'} Sign Up
</Button>
</Stack>
</Box>
</Container>
);
};
export default SignupPage;