Projekt

Obecné

Profil

« Předchozí | Další » 

Revize b523c74d

Přidáno uživatelem Michal Schwob před asi 2 roky(ů)

Creation of administration page and user registration
re #9627

Zobrazit rozdíly:

frontend/src/features/Auth/RegisterDialog.tsx
1
import { useFormik } from "formik"
1
import { Fragment, FunctionComponent, useEffect, useState } from 'react'
2
import Dialog, { DialogProps } from '@mui/material/Dialog'
3
import {
4
    Button,
5
    DialogContent,
6
    Link,
7
    TextField,
8
    Typography,
9
} from '@mui/material'
10
import { useFormik } from 'formik'
11
import * as yup from 'yup'
12
import { useDispatch, useSelector } from 'react-redux'
13
import { Link as RouterLink, useNavigate } from 'react-router-dom'
14
import {logIn, register} from './userThunks'
15
import { RootState } from '../redux/store'
16
import { resetLoggingIn } from './userSlice'
17
import { Box } from '@mui/system'
2 18

  
3
const register = () => {
19
export interface RegisterDialogProps {
20
    maxWidth?: DialogProps['maxWidth']
21
}
22

  
23
const RegisterDialog: FunctionComponent<RegisterDialogProps> = ({
24
                                                              maxWidth,
25
                                                          }) => {
26
    const [open, setOpen] = useState(true)
27

  
28
    const dispatch = useDispatch()
29
    const navigate = useNavigate()
30
    dispatch(resetLoggingIn())
31
    const validationSchema = yup.object().shape({
32
        username: yup.string().required('Username is required'),
33
        password: yup.string().required('Password is required'),
34
        confirmationPassword: yup.string().oneOf([yup.ref('password'), null], 'Passwords must match'),
35
        email: yup.string().required('Email is required'),
36

  
37
    })
4 38

  
5
    return <></>
39
    const formik = useFormik({
40
        initialValues: {
41
            username: '',
42
            password: '',
43
            confirmationPassword: '',
44
            email: '',
45
        },
46
        validationSchema,
47
        onSubmit: () => {
48
            dispatch(
49
                register({
50
                    username: formik.values.username,
51
                    passwords: {
52
                        password: formik.values.password,
53
                        confirmationPassword: formik.values.confirmationPassword,
54
                    },
55
                    permissions: {
56
                        canRead: false,
57
                        canWrite: false,
58
                        canDelete: false,
59
                    },
60
                    email: formik.values.email,
61
                })
62
            )
63
        },
64
    })
65

  
66
    const onCancel = () => {
67
        formik.resetForm()
68
        navigate('/Administration')
69
    }
70

  
71
    return (
72
        <Fragment>
73
            <Dialog
74
                open={open}
75
                fullWidth={true}
76
                onClose={onCancel}
77
                maxWidth="md"
78
            >
79
                <Typography sx={{ ml: 2, mt: 2 }} variant="h5" fontWeight="600">
80
                    Register new user
81
                </Typography>
82
                <DialogContent>
83
                    <form onSubmit={formik.handleSubmit}>
84
                        <TextField
85
                            fullWidth
86
                            label="Name"
87
                            name="username"
88
                            sx={{ mb: 2 }}
89
                            value={formik.values.username}
90
                            onChange={formik.handleChange}
91
                            error={
92
                                Boolean(formik.errors.username) &&
93
                                formik.touched.username
94
                            }
95
                            helperText={
96
                                formik.errors.username &&
97
                                formik.touched.username &&
98
                                formik.errors.username
99
                            }
100
                        />
101
                        <TextField
102
                            fullWidth
103
                            label="E-mail"
104
                            name="email"
105
                            type="email"
106
                            sx={{ mb: 2 }}
107
                            value={formik.values.email}
108
                            onChange={formik.handleChange}
109
                            error={
110
                                Boolean(formik.errors.email) &&
111
                                formik.touched.email
112
                            }
113
                            helperText={
114
                                formik.errors.email &&
115
                                formik.touched.email &&
116
                                formik.errors.email
117
                            }
118
                        />
119
                        <TextField
120
                            fullWidth
121
                            label="Password"
122
                            name="password"
123
                            type="password"
124
                            sx={{ mb: 2 }}
125
                            value={formik.values.password}
126
                            onChange={formik.handleChange}
127
                            error={
128
                                Boolean(formik.errors.password) &&
129
                                formik.touched.password
130
                            }
131
                            helperText={
132
                                formik.errors.password &&
133
                                formik.touched.password &&
134
                                formik.errors.password
135
                            }
136
                        />
137
                        <TextField
138
                            fullWidth
139
                            label="Confirm Password"
140
                            name="confirmationPassword"
141
                            type="password"
142
                            sx={{ mb: 2 }}
143
                            value={formik.values.confirmationPassword}
144
                            onChange={formik.handleChange}
145
                            error={
146
                                Boolean(formik.errors.confirmationPassword) &&
147
                                formik.touched.confirmationPassword
148
                            }
149
                            helperText={
150
                                formik.errors.confirmationPassword &&
151
                                formik.touched.confirmationPassword &&
152
                                formik.errors.confirmationPassword
153
                            }
154
                        />
155
                        <Fragment>
156
                            <Button
157
                                sx={{mb: 2}}
158
                                type="submit"
159
                                variant="contained"
160
                                fullWidth
161
                            >
162
                                Register
163
                            </Button>
164
                        </Fragment>
165
                    </form>
166

  
167
                    <Box sx={{mb: 1}} />
168
                </DialogContent>
169
            </Dialog>
170
        </Fragment>
171
    )
6 172
}
173

  
174
export default RegisterDialog

Také k dispozici: Unified diff