Bläddra i källkod

segundo commit

master
Dieg 3 år sedan
förälder
incheckning
8d270fb631

+ 41
- 27
src/App.js Visa fil

@@ -1,45 +1,59 @@
1
-import React from 'react'
1
+import React, { useEffect } from 'react'
2 2
 import './App.css'
3
-import { Switch, Route, Redirect } from 'react-router-dom'
4
-import { useSelector } from 'react-redux'
5
-import { ThemeProvider, createMuiTheme, useMediaQuery } from '@material-ui/core'
6
-import { purple, teal } from '@material-ui/core/colors'
3
+import { Switch, Route, useHistory } from 'react-router-dom'
4
+import { ThemeProvider, createMuiTheme } from '@material-ui/core'
5
+import { red, teal } from '@material-ui/core/colors'
7 6
 
8
-import Login from './Components/Login'
9
-import Dashboard from './Components/Dashboard'
7
+import Inicio from './Screens/Inicio'
8
+import Formulario from './Screens/Formulario'
10 9
 
11 10
 function App() {
12
-	const logged = useSelector(state => state.login.logged)
11
+	const history = useHistory()
13 12
 
14
-	const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
13
+	const estado = localStorage.getItem('estado')
14
+	useEffect(
15
+		() => {
16
+			if (estado === 'pendiente') history.push('/pendiente')
17
+			if (estado === 'finalizado') history.push('/finalizado')
18
+		},
19
+		[ estado, history ]
20
+	)
15 21
 
22
+	const primaryColor = teal[300]
23
+	const secondaryColor = red[300]
16 24
 
17 25
 	const theme = createMuiTheme({
18 26
 		palette: {
19
-			type: prefersDarkMode? 'dark' : 'light',
20
-			primary: { main: prefersDarkMode? teal[300] : '#009688' },
21
-			secondary: { main: prefersDarkMode? purple[300] : purple[700] },
22
-			background: { 
23
-				default: prefersDarkMode? '#121212' : '#fafafa',
24
-				level1: prefersDarkMode? '#212121' : '#fff',
25
-				level2: prefersDarkMode? '#212121' : '#f5f5f5',
26
-				paper: prefersDarkMode? '#424242' : '#fff'
27
+			type: 'dark',
28
+			primary: { main: primaryColor },
29
+			secondary: { main: secondaryColor },
30
+			background: {
31
+				default: '#121212',
32
+				level1: '#212121',
33
+				level2: '#212121',
34
+				paper: '#424242'
27 35
 			}
28
-		}
36
+        },
37
+        props: {
38
+            MuiPaper: {
39
+                variant: 'outlined'
40
+            },
41
+            MuiButton: {
42
+                variant: 'contained',
43
+                disableElevation: true,
44
+                style: {textTransform: 'none'}
45
+            }
46
+        }
29 47
 	})
30 48
 	return (
31 49
 		<ThemeProvider theme={theme}>
32 50
 			<Switch>
33
-				<Route exact path='/'>
34
-					<Login />
51
+                <Route path='/formulario'>
52
+                    <Formulario/>
53
+                </Route>
54
+				<Route path='/'>
55
+					<Inicio />
35 56
 				</Route>
36
-				{logged ? (
37
-					<Route path='/dashboard'>
38
-						<Dashboard />
39
-					</Route>
40
-				) : (
41
-					<Redirect to='/' />
42
-				)}
43 57
 			</Switch>
44 58
 		</ThemeProvider>
45 59
 	)

+ 0
- 16
src/Components/Dashboard/index.js Visa fil

@@ -1,16 +0,0 @@
1
-import React from 'react'
2
-import { Box, makeStyles } from '@material-ui/core'
3
-
4
-const useStyles = makeStyles(theme => ({
5
-    root: {
6
-
7
-    }
8
-}))
9
-
10
-export default function Dashboard(){
11
-    const classes = useStyles()
12
-
13
-    return <Box className={classes.root}>
14
-        dashboard
15
-    </Box>
16
-}

+ 0
- 16
src/Components/Login/index.js Visa fil

@@ -1,16 +0,0 @@
1
-import React from 'react'
2
-import { Box, makeStyles } from '@material-ui/core'
3
-
4
-const useStyles = makeStyles(theme => ({
5
-    root: {
6
-
7
-    }
8
-}))
9
-
10
-export default function Login(){
11
-    const classes = useStyles()
12
-
13
-    return <Box className={classes.root}>
14
-        login
15
-    </Box>
16
-}

+ 89
- 0
src/Screens/Confirmacion.js Visa fil

@@ -0,0 +1,89 @@
1
+import React, { useState } from 'react'
2
+import {
3
+	Box,
4
+	Button,
5
+	Divider,
6
+	makeStyles,
7
+	Card,
8
+	Typography,
9
+	CardHeader,
10
+	CardActions,
11
+	CardContent
12
+} from '@material-ui/core'
13
+import { useHistory } from 'react-router-dom'
14
+
15
+const useStyles = makeStyles(theme => ({
16
+	root: {
17
+		display: 'flex',
18
+		flexDirection: 'column',
19
+		alignItems: 'center',
20
+		justifyContent: 'center',
21
+		height: '100vh',
22
+		backgroundColor: theme.palette.background.default
23
+	},
24
+	card: {
25
+		display: 'flex',
26
+		flexDirection: 'column',
27
+		alignItems: 'center',
28
+		justifyContent: 'center',
29
+		padding: '0px 30px',
30
+		minHeight: '20vh'
31
+	},
32
+	actions: {
33
+		justifyContent: 'center'
34
+	}
35
+}))
36
+
37
+export default function Confirmacion() {
38
+	const classes = useStyles()
39
+	const [ intervalId, setIntervalId ] = useState(-1)
40
+	const [ min, seg, setRestante ] = useState({min: 0, seg:0})
41
+	const enviado = localStorage.getItem('enviado') || new Date()
42
+
43
+	const history = useHistory()
44
+
45
+	const calcularRestante = () => {
46
+		const res = enviado.getTime() - new Date().getTime()
47
+		setRestante({min: 0, seg: Math.round(res / (1000 * 60 * 60))})
48
+	}
49
+
50
+	const validar = () => {
51
+		history.push('/finalizado')
52
+	}
53
+
54
+	const reenviar = () => {
55
+        setIntervalId(setInterval(calcularRestante, 1000))
56
+    }
57
+
58
+    if (seg < 0 && min <0) clearInterval(intervalId)
59
+
60
+	return (
61
+		<Box className={classes.root}>
62
+			<Card>
63
+				<CardHeader
64
+					disableTypography
65
+					title={
66
+						<Typography variant='h5' align='center'>
67
+							Validar correo
68
+						</Typography>
69
+					}
70
+				/>
71
+				<Divider />
72
+				<CardContent>
73
+					<Typography paragraph variant='h6'>
74
+						Para finalizar con el registro, ingrese el codigo que recibió en su casilla de correo
75
+					</Typography>
76
+				</CardContent>
77
+				<Divider />
78
+				<CardActions className={classes.actions}>
79
+					<Button variant='contained' color='primary' onClick={reenviar} disabled={true}>
80
+						Reenviar ({min}:{seg})
81
+					</Button>
82
+					<Button variant='contained' color='primary' onClick={validar}>
83
+						Validar
84
+					</Button>
85
+				</CardActions>
86
+			</Card>
87
+		</Box>
88
+	)
89
+}

+ 135
- 0
src/Screens/Formulario.js Visa fil

@@ -0,0 +1,135 @@
1
+import React, { useState } from 'react'
2
+import {
3
+	Box,
4
+	Button,
5
+	Divider,
6
+	makeStyles,
7
+	Card,
8
+	Typography,
9
+	CardHeader,
10
+	CardActions,
11
+	CardContent,
12
+	TextField
13
+} from '@material-ui/core'
14
+import { useHistory } from 'react-router-dom'
15
+
16
+const useStyles = makeStyles(theme => ({
17
+	root: {
18
+		display: 'flex',
19
+		flexDirection: 'column',
20
+		alignItems: 'center',
21
+		justifyContent: 'center',
22
+		height: '100vh',
23
+		backgroundColor: theme.palette.background.default
24
+	},
25
+	card: {
26
+		display: 'flex',
27
+		flexDirection: 'column',
28
+		alignItems: 'center',
29
+		justifyContent: 'center',
30
+		padding: '0px 30px',
31
+		minHeight: '20vh',
32
+		minWidth: '20vw'
33
+	},
34
+	actions: {
35
+		justifyContent: 'center'
36
+	}
37
+}))
38
+
39
+export default function Formulario() {
40
+	const classes = useStyles()
41
+	const [ { nombre, apellido, mail, confirmar, error, codigoInvalido, codigo }, setState ] = useState({
42
+		confirmar: false,
43
+		codigo: '',
44
+		nombre: '',
45
+		apellido: '',
46
+		mail: '',
47
+		error: false,
48
+		codigoInvalido: false
49
+	})
50
+
51
+	const history = useHistory()
52
+
53
+	const mailValido = () => mail.indexOf('@') !== -1 && mail.indexOf('.') !== -1
54
+
55
+	const siguiente = () => {
56
+		if (nombre && apellido && mailValido() && codigo) {
57
+			//put con los datos y ver si el colegio es valido, si no lo es, volver al formulario e indicar el error
58
+			//poner en el storage el estado de pendiente
59
+			setState(ps => ({ ...ps, confirmar: true }))
60
+		} else setState(ps => ({ ...ps, error: true }))
61
+	}
62
+
63
+	const enviar = () => {
64
+		history.push('/pendiente')
65
+	}
66
+
67
+	const fields = [
68
+		{
69
+			name: 'nombre',
70
+			value: nombre,
71
+			label: 'Nombre'
72
+		},
73
+		{
74
+			name: 'apellido',
75
+			value: apellido,
76
+			label: 'Apellido'
77
+		},
78
+		{
79
+			name: 'mail',
80
+			value: mail,
81
+			label: 'Correo',
82
+			error: error && !mailValido()
83
+		},
84
+		{
85
+			name: 'codigo',
86
+			value: codigo,
87
+			label: 'Codigo de colegio',
88
+			error: (error && !codigo) || codigoInvalido
89
+		}
90
+	]
91
+
92
+	return (
93
+		<Box className={classes.root}>
94
+			<Card>
95
+				<CardHeader
96
+					disableTypography
97
+					title={
98
+						<Typography variant='h5' align='center'>
99
+							{confirmar ? 'Confirmar datos' : 'Formulario'}
100
+						</Typography>
101
+					}
102
+				/>
103
+				<Divider />
104
+				<CardContent className={classes.card}>
105
+					{confirmar ? (
106
+						fields.map((field, i) => (
107
+							<Typography key={'ty-' + i} paragraph>
108
+								{field.label}: {field.value}
109
+							</Typography>
110
+						))
111
+					) : (
112
+						fields.map((field, i) => (
113
+							<TextField
114
+								key={'tf' + i}
115
+								error={error && !field.value}
116
+								{...field}
117
+								margin='normal'
118
+								fullWidth
119
+								required
120
+								variant='outlined'
121
+								onChange={({ target: { name, value } }) => setState(ps => ({ ...ps, [name]: value }))}
122
+							/>
123
+						))
124
+					)}
125
+				</CardContent>
126
+				<Divider />
127
+				<CardActions className={classes.actions}>
128
+					<Button variant='contained' color='primary' onClick={confirmar ? enviar : siguiente}>
129
+						{confirmar ? 'Enviar' : 'Siguiente'}
130
+					</Button>
131
+				</CardActions>
132
+			</Card>
133
+		</Box>
134
+	)
135
+}

+ 68
- 0
src/Screens/Inicio.js Visa fil

@@ -0,0 +1,68 @@
1
+import React from 'react'
2
+import {
3
+	Box,
4
+	Button,
5
+	Divider,
6
+	makeStyles,
7
+	Card,
8
+	Typography,
9
+	CardHeader,
10
+	CardActions,
11
+    CardContent
12
+} from '@material-ui/core'
13
+import { useHistory } from 'react-router-dom'
14
+
15
+const useStyles = makeStyles(theme => ({
16
+	root: {
17
+		display: 'flex',
18
+		flexDirection: 'column',
19
+		alignItems: 'center',
20
+		justifyContent: 'center',
21
+		height: '100vh',
22
+		backgroundColor: theme.palette.background.default
23
+	},
24
+	card: {
25
+		display: 'flex',
26
+		flexDirection: 'column',
27
+		alignItems: 'center',
28
+		justifyContent: 'center',
29
+        padding: '0px 30px',
30
+        minHeight: '20vh'
31
+    },
32
+    actions: {
33
+        justifyContent: 'center'
34
+    }
35
+}))
36
+
37
+export default function Inicio() {
38
+	const classes = useStyles()
39
+
40
+	const history = useHistory()
41
+
42
+	const comenzar = () => history.push('/formulario')
43
+
44
+	return (
45
+		<Box className={classes.root}>
46
+			<Card>
47
+				<CardHeader
48
+					disableTypography
49
+					title={
50
+						<Typography variant='h5' align='center'>
51
+							Bienvenido
52
+						</Typography>
53
+					}
54
+				/>
55
+				<Divider />
56
+				<CardContent>
57
+					<Typography variant='h6'>Para comenzar con el registro presione el boton de abajo</Typography>
58
+				</CardContent>
59
+				<Divider />
60
+				<CardActions className={classes.actions}>
61
+					<Button variant='contained' color='primary' onClick={comenzar}>
62
+						Comenzar
63
+					</Button>
64
+				</CardActions>
65
+			</Card>
66
+		</Box>
67
+	)
68
+}

Laddar…
Avbryt
Spara