import * as React from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Divider from '@mui/material/Divider'; import FormLabel from '@mui/material/FormLabel'; import FormControl from '@mui/material/FormControl'; import Link from '@mui/material/Link'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; import { useTheme } from '@mui/material/styles'; import GroupAddIcon from '@mui/icons-material/GroupAdd'; import ForgotPassword from '../ForgotPassword'; import Card from '../Card'; import { createUser, fetchGroupByCode, fetchUser } from '../../serverApi'; import { observer } from 'mobx-react-lite'; import { useStore } from '../../Store'; const SignIn = observer(() => { const [emailInput, setEmailInput] = React.useState(''); const [emailError, setEmailError] = React.useState(''); const [groupInput, setGroupInput] = React.useState(''); const [groupError, setGroupError] = React.useState(''); const [open, setOpen] = React.useState(false); const [loading, setLoading] = React.useState(false); const {setLoggedIn, setCurrentView, setGroup, setUser} = useStore(); const theme = useTheme(); React.useEffect(() => { const params = new URLSearchParams(window.location.search); const groupParam = params.get('gruppe'); if (groupParam) { setGroupInput(groupParam); } }, []); const handleClickOpen = () => { setOpen(true); }; const handleClose = () => { setOpen(false); }; const handleEnterGroup = async (event: React.MouseEvent) => { event.preventDefault(); if (!isMailValid() || !isGroupValid()) return; setLoading(true); try { const groupData = await fetchGroupByCode(groupInput); if (!groupData) { setGroupError('Gruppencode existiert nicht.'); return; } let user = await fetchUser(emailInput); if (!user) { user = await createUser(emailInput); if (!user) throw new Error('Error creating user'); } await cookieStore.set('user', JSON.stringify(user)); await cookieStore.set('group', JSON.stringify(groupData)); setGroup(groupData); setUser(user); setLoggedIn(true); setCurrentView('group'); } catch (error) { console.error('Error during sign-in process:', error); } finally { setLoading(false); } }; const isMailValid = (): boolean => { let isValid = true; if (!/\S+@\S+\.\S+/.test(emailInput)) { setEmailError('Bitte gib eine gültige E-Mail Adresse ein.'); isValid = false; } else { setEmailError(''); } return isValid; }; const isGroupValid = (): boolean => { let isValid = true; if (!/^[A-Z0-9]{6}$/.test(groupInput)) { setGroupError('Bitte gib einen gültigen Gruppencode ein.'); isValid = false; } else { setGroupError(''); } return isValid; }; const handleClickNewGroup = () => { setCurrentView('newGroup'); } return (
{'Gruppe beitreten'} E-Mail setEmailInput(event.target.value)} value={emailInput} color={emailError ? 'error' : 'primary'} /> {'Gruppencode'} setGroupInput(event.target.value.toUpperCase())} value={groupInput} color={groupError ? 'error' : 'primary'} /> {'Gruppencode vergessen?'} oder
); }); export default SignIn;