Commit fbd917d3 authored by Djordje's avatar Djordje

Add validation

parent 0a67c27a
import { TextField, Box, Typography, Button, styled, ButtonProps, Select, FormControl, InputLabel, MenuItem } from "@mui/material"; import { TextField, Box, Button, Select, FormControl, InputLabel, MenuItem } from "@mui/material";
import { red } from "@mui/material/colors";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Navigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import { getPreRegisterData } from "../../actions/data-manager"; import { getPreRegisterData, registerUser } from "../../actions/data-manager";
import { RegistrationInfo } from "../../internal-types"; import { RegistrationInfo } from "../../internal-types";
const classes = { const classes = {
...@@ -60,32 +59,43 @@ const classes = { ...@@ -60,32 +59,43 @@ const classes = {
export const RegisterForm = (): JSX.Element => { export const RegisterForm = (): JSX.Element => {
let navigate = useNavigate();
let { buildingId } = useParams(); let { buildingId } = useParams();
const [buildingUnits, setBuildingUnits] = useState([]); const [buildingUnits, setBuildingUnits] = useState([]);
const [invalidUrl, setInvalidUrl] = useState(false); const [registerInfo, setRegisterInfo] = useState<RegistrationInfo>(
const [registerInfo, setRegisterInfo] = useState<RegistrationInfo>({ name: '', lastName: '', email: '', username: '', password: '', mobile: '', units: [] }); { firstName: '', lastName: '', email: '', username: '', password: '', mobile: '', pendingBuildings: { id: buildingId!, units: [] } });
const [errorField, setErrorField] = useState('');
const [errorMessage, setErrorMessage] = useState('');
const registerCallBack = (err: any, data: any, dsp: any) => {
if (!!err) {
if (err.wrongField) {
setErrorField(err.wrongField);
setErrorMessage(err.errorMessage);
}
return;
}
navigate('../../login', { replace: true });
}
useEffect(() => { useEffect(() => {
getPreRegisterData(buildingId, (err: any, data: any, dsp: any) => { getPreRegisterData(buildingId, (err: any, data: any, dsp: any) => {
if (err) { if (err) {
setInvalidUrl(true); navigate('../register/error', { replace: true });
return; return;
} }
setBuildingUnits(data.units); setBuildingUnits(data.units);
}); });
}, []) }, [buildingId, navigate]);
useEffect(() => {
console.log(registerInfo.units)
}, [registerInfo.units])
return ( return (
<> <>
{invalidUrl && <Navigate replace to='../register/error' />}
{buildingUnits && {buildingUnits &&
<Box sx={{display: 'flex', flexDirection: 'column', gap: '20px'}}> <Box sx={{ display: 'flex', flexDirection: 'column', gap: '20px' }}>
<Box sx={{ display: 'flex', gap: '20px' }}> <Box sx={{ display: 'flex', gap: '20px' }}>
<TextField <TextField
hiddenLabel hiddenLabel
...@@ -93,10 +103,13 @@ export const RegisterForm = (): JSX.Element => { ...@@ -93,10 +103,13 @@ export const RegisterForm = (): JSX.Element => {
size='small' size='small'
label="First name" label="First name"
sx={classes.textField} sx={classes.textField}
value={registerInfo.name} value={registerInfo.firstName}
onChange={(e) => { onChange={(e) => {
setRegisterInfo({ ...registerInfo, name: e.target.value }) setRegisterInfo({ ...registerInfo, firstName: e.target.value })
}} /> }}
error={"firstName" === errorField}
helperText={"firstName" === errorField ? errorMessage : null}
/>
<TextField <TextField
hiddenLabel hiddenLabel
variant="outlined" variant="outlined"
...@@ -106,7 +119,10 @@ export const RegisterForm = (): JSX.Element => { ...@@ -106,7 +119,10 @@ export const RegisterForm = (): JSX.Element => {
value={registerInfo.lastName} value={registerInfo.lastName}
onChange={(e) => { onChange={(e) => {
setRegisterInfo({ ...registerInfo, lastName: e.target.value }) setRegisterInfo({ ...registerInfo, lastName: e.target.value })
}} /> }}
error={"lastName" === errorField}
helperText={"lastName" === errorField ? errorMessage : null}
/>
</Box> </Box>
<TextField <TextField
...@@ -118,6 +134,8 @@ export const RegisterForm = (): JSX.Element => { ...@@ -118,6 +134,8 @@ export const RegisterForm = (): JSX.Element => {
onChange={(e) => { onChange={(e) => {
setRegisterInfo({ ...registerInfo, email: e.target.value }) setRegisterInfo({ ...registerInfo, email: e.target.value })
}} }}
error={"email" === errorField}
helperText={"email" === errorField ? errorMessage : null}
/> />
<TextField <TextField
variant="outlined" variant="outlined"
...@@ -128,6 +146,8 @@ export const RegisterForm = (): JSX.Element => { ...@@ -128,6 +146,8 @@ export const RegisterForm = (): JSX.Element => {
onChange={(e) => { onChange={(e) => {
setRegisterInfo({ ...registerInfo, username: e.target.value }) setRegisterInfo({ ...registerInfo, username: e.target.value })
}} }}
error={"username" === errorField}
helperText={"username" === errorField ? errorMessage : null}
/> />
<TextField <TextField
variant="outlined" variant="outlined"
...@@ -150,24 +170,33 @@ export const RegisterForm = (): JSX.Element => { ...@@ -150,24 +170,33 @@ export const RegisterForm = (): JSX.Element => {
onChange={(e) => { onChange={(e) => {
setRegisterInfo({ ...registerInfo, mobile: e.target.value }) setRegisterInfo({ ...registerInfo, mobile: e.target.value })
}} }}
error={"mobile" === errorField}
helperText={"mobile" === errorField ? errorMessage : null}
/> />
<FormControl fullWidth size="small"> <FormControl fullWidth size="small">
<InputLabel>Select your units</InputLabel> <InputLabel>Select your units</InputLabel>
<Select <Select
label="Select your units" label="Select your units"
sx={classes.select} sx={classes.select}
value={registerInfo.units} value={registerInfo.pendingBuildings.units}
multiple multiple
onChange={(e) => { onChange={(e) => {
let units: string[] = typeof e.target.value === 'string' ? e.target.value.split(',') : e.target.value; let units: string[] = typeof e.target.value === 'string' ? e.target.value.split(',') : e.target.value;
setRegisterInfo({ ...registerInfo, units }) setRegisterInfo({ ...registerInfo, pendingBuildings: { ...registerInfo.pendingBuildings, units } })
}} }}
error={"units" === errorField}
> >
{buildingUnits.map((unit: any, index) => <MenuItem value={unit.address} key={index}>{unit.address}</MenuItem>)} {buildingUnits.map((unit: any, index) => <MenuItem value={unit} key={index}>{unit.address}</MenuItem>)}
</Select> </Select>
</FormControl> </FormControl>
<Button sx={classes.registerButton} variant='contained'>Register</Button> <Button
sx={classes.registerButton}
variant='contained'
onClick={() => {
registerUser(buildingId, registerInfo, registerCallBack);
}}
>Register</Button>
</Box> </Box>
} }
</>); </>);
......
export type RegistrationInfo = { export type RegistrationInfo = {
name: string, firstName: string,
lastName: string, lastName: string,
email: string, email: string,
username: string, username: string,
password: string, password: string,
mobile: string, mobile: string,
pendingBuildings: {
id: string,
units: string[] units: string[]
}
} }
export type LoginInfo = { export type LoginInfo = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment