525 lines
14 KiB
TypeScript
525 lines
14 KiB
TypeScript
import * as React from 'react';
|
|
import {
|
|
Button,
|
|
FormControl,
|
|
FormControlLabel,
|
|
FormLabel,
|
|
Grid,
|
|
Paper,
|
|
Radio,
|
|
RadioGroup,
|
|
TextField,
|
|
} from '@mui/material';
|
|
import { LocalizationProvider, DatePicker } from '@mui/x-date-pickers';
|
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
import { useEffect } from 'react';
|
|
import { Patient } from '../Interface/Patient';
|
|
|
|
type Props = {
|
|
handleFormSection1Data: (patient: Patient) => void;
|
|
patientDataDiplay: any;
|
|
type: string;
|
|
};
|
|
|
|
export default function PersonalSection({
|
|
handleFormSection1Data,
|
|
patientDataDiplay,
|
|
type,
|
|
}: Props) {
|
|
const [birthDateValue, setBirthDateValue] = React.useState<any>();
|
|
const [patient, setPatient] = React.useState<Patient>({
|
|
fullName: '',
|
|
homePhone: '',
|
|
cellPhone: '',
|
|
email: '',
|
|
age: '',
|
|
dateOfBirth: birthDateValue,
|
|
socialSecurityNumber: '',
|
|
mailingAddress: '',
|
|
city: '',
|
|
state: '',
|
|
zipCode: '',
|
|
gender: 'male',
|
|
});
|
|
|
|
const [errors, setErrors] = React.useState<any>({
|
|
fullNameError: false,
|
|
cellPhoneError: false,
|
|
emailError: false,
|
|
ageError: false,
|
|
mailingAddressFalse: false,
|
|
});
|
|
|
|
useEffect(() => {
|
|
handleFormSection1Data(patient);
|
|
}, [patient]);
|
|
|
|
return (
|
|
<>
|
|
<Grid container direction='row' className='section1-test-class'>
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style '
|
|
>
|
|
<TextField
|
|
variant='outlined'
|
|
label="Patient's Full Name"
|
|
name='fullName'
|
|
placeholder='Please enter your name'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.fullName
|
|
: patient.fullName
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
fullName: e.target.value,
|
|
}));
|
|
}}
|
|
onBlur={(e) => {
|
|
if (e.target.value === '') {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
fullNameError: true,
|
|
}));
|
|
} else {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
fullNameError: false,
|
|
}));
|
|
}
|
|
}}
|
|
required
|
|
error={errors.fullNameError}
|
|
helperText={errors.fullNameError ? 'Please enter your name' : ''}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
required
|
|
variant='outlined'
|
|
label='Phone Number'
|
|
name='cellPhone'
|
|
type='number'
|
|
placeholder='Please enter your cell Phone number'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.cellPhone
|
|
: patient.cellPhone
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
let value = e.target.value;
|
|
if (value[0] === '0') {
|
|
value = value.slice(1);
|
|
}
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
cellPhone: value,
|
|
}));
|
|
}}
|
|
onBlur={(e) => {
|
|
if (!/^\d{10}$/.test(e.target.value)) {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
cellPhoneError: true,
|
|
}));
|
|
} else {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
cellPhoneError: false,
|
|
}));
|
|
}
|
|
}}
|
|
error={errors.cellPhoneError}
|
|
helperText={
|
|
errors.cellPhoneError
|
|
? 'Please enter a valid 10-digit phone number'
|
|
: ''
|
|
}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
variant='outlined'
|
|
label='Home Phone Number'
|
|
name='homePhone'
|
|
type='number'
|
|
placeholder='Please enter your home phone'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.homePhone
|
|
: patient.homePhone
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
homePhone: e.target.value,
|
|
}));
|
|
}}
|
|
// error={!(/^\d{10}$/.test(patient.homePhone))}
|
|
// helperText={!(/^\d{10}$/.test(patient.homePhone)) ? "Please enter a valid 10-digit phone number" : ""}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
required
|
|
variant='outlined'
|
|
label='Email'
|
|
name='email'
|
|
placeholder='Please enter your email'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.email
|
|
: patient.email
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
email: e.target.value,
|
|
}));
|
|
}}
|
|
onBlur={(e) => {
|
|
if (!/^\S+@\S+\.\S+$/.test(e.target.value)) {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
emailError: true,
|
|
}));
|
|
} else {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
emailError: false,
|
|
}));
|
|
}
|
|
}}
|
|
error={errors.emailError}
|
|
helperText={
|
|
errors.emailError ? 'Please enter a valid email address' : ''
|
|
}
|
|
/>
|
|
</Grid>
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
required
|
|
variant='outlined'
|
|
label='Age'
|
|
name='age'
|
|
type='number'
|
|
placeholder='Please enter your age'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.age
|
|
: patient.age
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
age: e.target.value,
|
|
}));
|
|
}}
|
|
onBlur={(e) => {
|
|
if (e.target.value === '') {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
ageError: true,
|
|
}));
|
|
} else {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
ageError: false,
|
|
}));
|
|
}
|
|
}}
|
|
error={errors.ageError}
|
|
helperText={errors.ageError ? 'Please enter your age' : ''}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<FormControl>
|
|
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
|
<DatePicker
|
|
label='Date of Birth'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.dateOfBirth
|
|
: birthDateValue
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(newValue) => {
|
|
setBirthDateValue(newValue);
|
|
}}
|
|
renderInput={(params) => (
|
|
<TextField variant='outlined' {...params} />
|
|
)}
|
|
/>
|
|
</LocalizationProvider>
|
|
</FormControl>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
variant='outlined'
|
|
label='Social Security Number'
|
|
name='socialSecurityNumber'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.socialSecurityNumber
|
|
: patient.socialSecurityNumber
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
socialSecurityNumber: e.target.value,
|
|
}));
|
|
}}
|
|
// onBlur={formik.handleBlur}
|
|
// error={formik.touched.socialSecurityNumber && Boolean(formik.errors.socialSecurityNumber)}
|
|
// helperText={formik.touched.socialSecurityNumber && formik.errors.socialSecurityNumber}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
required
|
|
variant='outlined'
|
|
label='Mailing Address'
|
|
name='mailingAddress'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.mailingAddress
|
|
: patient.mailingAddress
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
mailingAddress: e.target.value,
|
|
}));
|
|
}}
|
|
onBlur={(e) => {
|
|
if (e.target.value === '') {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
mailingAddressError: true,
|
|
}));
|
|
} else {
|
|
setErrors((prevValues: any) => ({
|
|
...prevValues,
|
|
mailingAddressError: false,
|
|
}));
|
|
}
|
|
}}
|
|
error={errors.mailingAddressError}
|
|
helperText={
|
|
errors.mailingAddressError
|
|
? 'Please enter your mailing address'
|
|
: ''
|
|
}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
variant='outlined'
|
|
label='State'
|
|
name='state'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.state
|
|
: patient.state
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
state: e.target.value,
|
|
}));
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
variant='outlined'
|
|
label='City'
|
|
name='city'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.city
|
|
: patient.city
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
city: e.target.value,
|
|
}));
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style'
|
|
>
|
|
<TextField
|
|
variant='outlined'
|
|
label='Zip Code'
|
|
name='zipCode'
|
|
value={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.zipCode
|
|
: patient.zipCode
|
|
}
|
|
disabled={type == 'display'}
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
zipCode: e.target.value,
|
|
}));
|
|
}}
|
|
// onBlur={formik.handleBlur}
|
|
// error={formik.touched.zipCode && Boolean(formik.errors.zipCode)}
|
|
// helperText={formik.touched.zipCode && formik.errors.zipCode}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
xl={3}
|
|
lg={4}
|
|
md={6}
|
|
sm={12}
|
|
className='collapsable-form-style-radioButtons'
|
|
>
|
|
<FormControl>
|
|
<FormLabel>Gender</FormLabel>
|
|
<RadioGroup
|
|
aria-labelledby='demo-radio-buttons-group-label'
|
|
defaultValue={
|
|
type == 'display'
|
|
? patientDataDiplay && patientDataDiplay.gender
|
|
: patient.gender
|
|
}
|
|
name='radio-buttons-group'
|
|
onChange={(e) => {
|
|
setPatient((prevValues: any) => ({
|
|
...prevValues,
|
|
gender: e.target.value,
|
|
}));
|
|
}}
|
|
sx={{ display: 'flex', flexDirection: 'row' }}
|
|
>
|
|
<FormControlLabel
|
|
disabled={type == 'display'}
|
|
value='male'
|
|
control={<Radio />}
|
|
label='Male'
|
|
/>
|
|
<FormControlLabel
|
|
disabled={type == 'display'}
|
|
value='female'
|
|
control={<Radio />}
|
|
label='Female'
|
|
/>
|
|
</RadioGroup>
|
|
</FormControl>
|
|
</Grid>
|
|
</Grid>
|
|
</>
|
|
);
|
|
}
|