Files
Account/src/features/profile/components/UserProfileForm.tsx

238 lines
6.8 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {
Box,
Typography,
Button,
TextField,
Grid,
FormControl,
InputLabel,
Select,
MenuItem,
type SelectChangeEvent,
} from '@mui/material';
import { useState, type ChangeEvent } from 'react';
export function UserProfileForm() {
const [isEditing, setIsEditing] = useState(false);
const [gender, setGender] = useState('');
const [data, setData] = useState({
firstName: 'محمد حسین',
lastName: 'برزه‌گر',
gender: 'مرد',
nationalCode: '',
});
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
setData((prev) => ({
...prev,
[e.target.name]: e.target.value,
}));
};
const toggleEdit = () => {
setIsEditing((prev) => !prev);
};
const handleChangeGender = (e: SelectChangeEvent) => {
setGender(e.target.value);
};
const displayValue = (value: string | null | undefined) => {
return value && value.trim() !== '' ? value : 'تعیین نشده';
};
return (
<div
dir="rtl"
style={{
backgroundColor: '#F5F5F5',
minHeight: '100vh',
minWidth: '100vw',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
}}
>
<Box
sx={{
width: '500px',
backgroundColor: 'white',
border: '1px solid #ccc',
borderRadius: 2,
padding: 5,
margin: '40px auto',
boxShadow: 2,
display: 'flex',
flexDirection: 'column',
gap: 2,
}}
>
<Box
sx={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
backgroundColor: isEditing ? '#ADD8E6' : '#F5F5F5',
p: 2,
borderRadius: 1,
}}
>
<Box sx={{ display: 'flex', flexDirection: 'column' }}>
<Typography
variant="h5"
sx={{ color: isEditing ? '#1976d2' : 'gray' }}
>
اطلاعات شخصی من
</Typography>
<Typography
sx={{ color: isEditing ? '#1976d2' : 'gray', fontSize: '13px' }}
>
این اطلاعات شما صرفا برای احراز هویت شما است و نزد هارمونی باقی
میماند
</Typography>
</Box>
<Button
onClick={toggleEdit}
sx={{
border: 0.5,
borderColor: '#1976d2',
borderRadius: '5px',
backgroundColor: isEditing ? '#1976d2' : 'white',
color: isEditing ? 'white' : '#1976d2',
width: '80px',
height: '30px',
}}
>
{isEditing ? 'ذخیره' : 'ویرایش'}
</Button>
</Box>
<Grid container spacing={0.5}>
<Grid item xs={12} sm={6}>
<Box sx={{ mb: 2 }}>
<Typography
variant="subtitle2"
sx={{ color: 'gray', fontSize: '14px', ml: '34vh' }}
>
نام
</Typography>
{isEditing ? (
<TextField
fullWidth
name="firstName"
label="نام"
value={data.firstName}
onChange={handleChange}
sx={{ width: '230px' }}
inputProps={{
sx: {
height: '12px',
fontSize: '16px',
fontWeight: 'bold',
direction: 'rtl',
},
}}
/>
) : (
<Typography variant="h6" sx={{ fontWeight: 'bold' }}>
{displayValue(data.firstName)}
</Typography>
)}
</Box>
<Box>
<Typography
variant="subtitle2"
sx={{ color: 'gray', fontSize: '14px' }}
>
جنسیت
</Typography>
{isEditing ? (
<FormControl sx={{ width: '230px' }}>
<InputLabel id="sex-label">جنسیت</InputLabel>
<Select
labelId="sex-label"
id="sex"
value={gender}
label="جنسیت"
onChange={handleChangeGender}
sx={{
height: '45px',
'& .MuiSelect-select': {
paddingY: '10px',
},
}}
>
<MenuItem value="female">زن</MenuItem>
<MenuItem value="male">مرد</MenuItem>
</Select>
</FormControl>
) : (
<Typography variant="h6" sx={{ fontWeight: 'bold' }}>
{displayValue(data.gender)}
</Typography>
)}
</Box>
</Grid>
<Grid item xs={12} sm={6}>
<Box sx={{ mb: 2 }}>
<Typography
variant="subtitle2"
sx={{ color: 'gray', fontSize: '14px' }}
>
نام خانوادگی
</Typography>
{isEditing ? (
<TextField
fullWidth
name="lastName"
value={data.lastName}
label="نام خانوادگی"
onChange={handleChange}
sx={{ width: '230px' }}
inputProps={{
sx: {
height: '12px',
},
}}
/>
) : (
<Typography variant="h6" sx={{ fontWeight: 'bold' }}>
{displayValue(data.lastName)}
</Typography>
)}
</Box>
<Box>
<Typography
variant="subtitle2"
sx={{ color: 'gray', fontSize: '14px' }}
>
کد ملی
</Typography>
{isEditing ? (
<TextField
fullWidth
name="nationalCode"
label="کد ملی"
value={data.nationalCode}
onChange={handleChange}
sx={{ width: '230px' }}
inputProps={{
sx: {
height: '12px',
},
}}
/>
) : (
<Typography variant="h6" sx={{ fontWeight: 'bold' }}>
{displayValue(data.nationalCode)}
</Typography>
)}
</Box>
</Grid>
</Grid>
</Box>
</div>
);
}