O forms agora contém as diversas restrições e faz o step conforme a escolha do utilzador no tipo de empresa.
main
Hugo Oliveira 1 year ago
parent bb52870dd2
commit 2771eb111c

@ -7,7 +7,7 @@ import { Box, Container, Grid, Typography, Button, Stepper, Step, StepLabel } fr
import { useFormik } from 'formik'; import { useFormik } from 'formik';
import { useState } from "react"; import { useState } from "react";
import { matchIsValidTel } from 'mui-tel-input'; import { matchIsValidTel } from 'mui-tel-input';
import axios from "axios"; //import axios from "axios";
interface dados { interface dados {
@ -23,7 +23,7 @@ interface dados {
pais?: string; pais?: string;
cidade?: string; cidade?: string;
codigoPostal?: string; codigoPostal?: string;
estado: string;
nomePessoaContacto: string; nomePessoaContacto: string;
telemovelPC: string; telemovelPC: string;
@ -49,7 +49,6 @@ const initialValues: dados = {
pais: 'Portugal', pais: 'Portugal',
cidade: '', cidade: '',
codigoPostal: undefined, codigoPostal: undefined,
estado: 'Pendente',
nomePessoaContacto: '', nomePessoaContacto: '',
telemovelPC: '', telemovelPC: '',
@ -69,11 +68,9 @@ function App() {
const schemaStep1 = yup.object({ const schemaStep1 = yup.object({
tiporegisto: yup.string().required("*Por favor insira um tipo de registo registo válido"), tiporegisto: yup.string().required("*Por favor insira um tipo de registo válido"),
tipoempresa: yup.string(), representante: yup.string().required("*Por favor insira um nome válido"),
empresa: yup.string().required("*Por favor insira um nome válido"),
nif: yup.string().matches(/^[0-9]+$/, "*Por favor insira um NIF válido").length(9, "*O NIF deve ser composto por 9 dígitos"), nif: yup.string().matches(/^[0-9]+$/, "*Por favor insira um NIF válido").length(9, "*O NIF deve ser composto por 9 dígitos"),
representante: yup.string().required("*Por favor insira um representante válido"),
telemovelDP: yup.string() telemovelDP: yup.string()
.required(' ') .required(' ')
.test('is-valid-phone', "*Por favor insira um número de telemóvel válido", (value) => { .test('is-valid-phone', "*Por favor insira um número de telemóvel válido", (value) => {
@ -84,7 +81,7 @@ function App() {
.required("*Por favor insira um email válido"), .required("*Por favor insira um email válido"),
morada: yup.string(), morada: yup.string(),
andar: yup.string().matches(/^[0-9]+$/, "*Por favor insira um Andar válido"), andar: yup.string().matches(/^[0-9]+$/, "*Por favor insira um Andar válido"),
cidade: yup.string().required("*Por favor insira uma Cidade válida"), cidade: yup.string().required("*Por favor insira uma cidade válida"),
pais: yup.string(), pais: yup.string(),
codigoPostal: yup.string() codigoPostal: yup.string()
@ -139,14 +136,15 @@ function App() {
name: values.nomePessoaContacto, name: values.nomePessoaContacto,
email: values.emailPessoaContacto, email: values.emailPessoaContacto,
phone: values.telemovelPC.replace(/\s/g, ''), phone: values.telemovelPC.replace(/\s/g, ''),
}] }],
type: values.tipoempresa
}; };
console.log('Dados: ', values); console.log('Dados: ', values);
console.log('Dados API:', extractedData); console.log('Dados API:', extractedData);
try { /*try {
// Make a POST request using Axios // Make a POST request using Axios
const response = await axios.post('https://dev-hgp-sgi.streamline.pt/api/entities', extractedData); const response = await axios.post('https://dev-hgp-sgi.streamline.pt/api/entities', extractedData);
@ -155,7 +153,7 @@ function App() {
} catch (error) { } catch (error) {
// Handle errors // Handle errors
console.error('Error submitting data:', error); console.error('Error submitting data:', error);
} }*/
}; };
@ -183,8 +181,21 @@ function App() {
const [activeStep, setActiveStep] = React.useState(0); const [activeStep, setActiveStep] = React.useState(0);
const handleNext = async () => { const handleNext = async () => {
console.log(formik.values.tipoempresa);
try { try {
if (formik.values.tiporegisto == '0'){
await yup.object({
tipoempresa: yup.string().required("*Por favor insira um tipo de empresa válido"),
}).validateAt('tipoempresa', formik.values, { abortEarly: false });
}
if (formik.values.tipoempresa >= '0'){
await yup.object({
empresa: yup.string().required("*Por favor insira nome da empresa válido"),
}).validateAt('empresa', formik.values, { abortEarly: false });
}
if (activeStep === 0) { if (activeStep === 0) {
await schemaStep1.validate(formik.values, { abortEarly: false }); await schemaStep1.validate(formik.values, { abortEarly: false });
} else if (activeStep === 1) { } else if (activeStep === 1) {
@ -192,9 +203,17 @@ function App() {
} else if (activeStep === 2) { } else if (activeStep === 2) {
await schemaStep3.validate(formik.values, { abortEarly: false }); await schemaStep3.validate(formik.values, { abortEarly: false });
} }
setActiveStep(activeStep + 1); if (formik.values.tiporegisto == '1'){
setValidationErrors([]); formik.values.nomePessoaContacto = formik.values.representante;
formik.values.telemovelPC = formik.values.telemovelDP;
formik.values.emailPessoaContacto = formik.values.emailDP;
setActiveStep(activeStep + 2);
setValidationErrors([]);
}else{
setActiveStep(activeStep + 1);
setValidationErrors([]);
}
} catch (error) { } catch (error) {
const errors = (error as yup.ValidationError).errors; const errors = (error as yup.ValidationError).errors;
@ -204,9 +223,13 @@ function App() {
}; };
const handleBack = () => { const handleBack = () => {
if (formik.values.tiporegisto == '1'){
setActiveStep(activeStep - 1); setActiveStep(activeStep - 2);
setValidationErrors([]);
}else{
setActiveStep(activeStep - 1);
setValidationErrors([]);
}
}; };
return ( return (

@ -21,7 +21,10 @@ export const DadosPessoais = ( {formik}: any ) => {
const [tipoRegisto, setTipoRegisto] = useState(''); const [tipoRegisto, setTipoRegisto] = useState('');
const [smValue, setSmValue] = useState(6); const [smValue, setSmValue] = useState(12);
const [showEmpresa, setShowEmpresa] = useState(false); // State to track whether to show "Representante" field
const handleTipoRegistoChange = (event: { target: { value: SetStateAction<string>; }; }) => { const handleTipoRegistoChange = (event: { target: { value: SetStateAction<string>; }; }) => {
setTipoRegisto(event.target.value); setTipoRegisto(event.target.value);
@ -29,9 +32,9 @@ export const DadosPessoais = ( {formik}: any ) => {
const tipoempresaValue = ''; const tipoempresaValue = '';
if (event.target.value == '0') { if (event.target.value == '0') {
setSmValue(3);
} else {
setSmValue(6); setSmValue(6);
} else {
setSmValue(12);
} }
formik.setFieldValue('tiporegisto', event.target.value); formik.setFieldValue('tiporegisto', event.target.value);
@ -56,6 +59,10 @@ export const DadosPessoais = ( {formik}: any ) => {
} }
}; };
useEffect(() => {
setShowEmpresa(formik.values.tipoempresa !== ''); // Update showRepresentante based on tipoempresa field value
}, [formik.values.tipoempresa]);
const [countries, setCountries] = useState<Paises[]>([]); const [countries, setCountries] = useState<Paises[]>([]);
useEffect(() => { useEffect(() => {
@ -97,7 +104,7 @@ export const DadosPessoais = ( {formik}: any ) => {
</Grid> </Grid>
{tipoRegisto == '0' && ( {tipoRegisto == '0' && (
<Grid item xs={12} sm={3}> <Grid item xs={12} sm={6}>
<InputLabel id="labeltipoempresa">Tipo de empresa</InputLabel> <InputLabel id="labeltipoempresa">Tipo de empresa</InputLabel>
<Select <Select
{...formik.getFieldProps('tipoempresa')} {...formik.getFieldProps('tipoempresa')}
@ -109,25 +116,28 @@ export const DadosPessoais = ( {formik}: any ) => {
fullWidth fullWidth
> >
<MenuItem value={0}>Empresa</MenuItem> <MenuItem value={0}>Empresa</MenuItem>
<MenuItem value={1}>Particular</MenuItem> <MenuItem value={1}>Condomínio</MenuItem>
<MenuItem value={2}>Park</MenuItem> <MenuItem value={2}>Hotel</MenuItem>
<MenuItem value={3}>Outro</MenuItem>
</Select> </Select>
</Grid> </Grid>
)} )}
<Grid item xs={12} sm={6} sx={{ mt: 0.9 }}> {showEmpresa && (
<TextField <Grid item xs={12} sm={12}>
{...formik.getFieldProps('empresa')} <TextField
required {...formik.getFieldProps('empresa')}
id="empresa" required
name="empresa" id="empresa"
label="Nome/Empresa" name="empresa"
fullWidth label="Nome da Empresa"
variant="standard" fullWidth
error={formik.touched.empresa && Boolean(formik.errors.empresa)} variant="standard"
helperText={formik.touched.empresa && formik.errors.empresa} error={formik.touched.empresa && Boolean(formik.errors.empresa)}
/> helperText={formik.touched.empresa && formik.errors.empresa}
</Grid> />
</Grid>
)}
<Grid item xs={12} sm={6}> <Grid item xs={12} sm={6}>
<TextField <TextField
@ -136,13 +146,13 @@ export const DadosPessoais = ( {formik}: any ) => {
type='text' type='text'
id="representante" id="representante"
name="representante" name="representante"
label="Nome do representante legal (empresa)" label={tipoRegisto == '0' ? "Nome do representante da empresa" : "Nome completo"}
fullWidth fullWidth
variant="standard" variant="standard"
error={formik.touched.representante && Boolean(formik.errors.representante)} error={formik.touched.representante && Boolean(formik.errors.representante)}
helperText={formik.touched.representante && formik.errors.representante} helperText={formik.touched.representante && formik.errors.representante}
/> />
</Grid> </Grid>
<Grid item xs={12} sm={6}> <Grid item xs={12} sm={6}>
<TextField <TextField
@ -224,7 +234,7 @@ export const DadosPessoais = ( {formik}: any ) => {
{countries.map((country: Paises, index: number) => ( {countries.map((country: Paises, index: number) => (
<MenuItem key={index} value={country.name.common}> <MenuItem key={index} value={country.name.common}>
<Box sx={{ display: 'flex' }}> <Box sx={{ display: 'flex' }}>
<Avatar style={{ width: '30px', height: '20px', borderRadius: '5px', marginRight: '5px' }} src={country.flags.svg} alt={country.name.common} /> <Avatar sx={{ width: '26px', height: '18px', borderRadius: '0px', marginRight: '5px', marginTop: '2.5px', pl: 1, pr: 1 }} src={country.flags.svg} alt={country.name.common} />
{country.name.common} {country.name.common}
</Box> </Box>
</MenuItem> </MenuItem>

Loading…
Cancel
Save