mirror of
				https://github.com/D4M13N-D3V/comissions-app-ui.git
				synced 2025-10-31 01:25:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			166 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| // ** React Imports
 | |
| import { useState, ElementType, ChangeEvent, SyntheticEvent } from 'react'
 | |
| 
 | |
| // ** MUI Imports
 | |
| import Box from '@mui/material/Box'
 | |
| import Grid from '@mui/material/Grid'
 | |
| import Link from '@mui/material/Link'
 | |
| import Alert from '@mui/material/Alert'
 | |
| import Select from '@mui/material/Select'
 | |
| import { styled } from '@mui/material/styles'
 | |
| import MenuItem from '@mui/material/MenuItem'
 | |
| import TextField from '@mui/material/TextField'
 | |
| import Typography from '@mui/material/Typography'
 | |
| import InputLabel from '@mui/material/InputLabel'
 | |
| import AlertTitle from '@mui/material/AlertTitle'
 | |
| import IconButton from '@mui/material/IconButton'
 | |
| import CardContent from '@mui/material/CardContent'
 | |
| import FormControl from '@mui/material/FormControl'
 | |
| import Button, { ButtonProps } from '@mui/material/Button'
 | |
| 
 | |
| // ** Icons Imports
 | |
| import Close from 'mdi-material-ui/Close'
 | |
| 
 | |
| const ImgStyled = styled('img')(({ theme }) => ({
 | |
|   width: 120,
 | |
|   height: 120,
 | |
|   marginRight: theme.spacing(6.25),
 | |
|   borderRadius: theme.shape.borderRadius
 | |
| }))
 | |
| 
 | |
| const ButtonStyled = styled(Button)<ButtonProps & { component?: ElementType; htmlFor?: string }>(({ theme }) => ({
 | |
|   [theme.breakpoints.down('sm')]: {
 | |
|     width: '100%',
 | |
|     textAlign: 'center'
 | |
|   }
 | |
| }))
 | |
| 
 | |
| const ResetButtonStyled = styled(Button)<ButtonProps>(({ theme }) => ({
 | |
|   marginLeft: theme.spacing(4.5),
 | |
|   [theme.breakpoints.down('sm')]: {
 | |
|     width: '100%',
 | |
|     marginLeft: 0,
 | |
|     textAlign: 'center',
 | |
|     marginTop: theme.spacing(4)
 | |
|   }
 | |
| }))
 | |
| 
 | |
| const TabAccount = () => {
 | |
|   // ** State
 | |
|   const [openAlert, setOpenAlert] = useState<boolean>(true)
 | |
|   const [imgSrc, setImgSrc] = useState<string>('/images/avatars/1.png')
 | |
| 
 | |
|   const onChange = (file: ChangeEvent) => {
 | |
|     const reader = new FileReader()
 | |
|     const { files } = file.target as HTMLInputElement
 | |
|     if (files && files.length !== 0) {
 | |
|       reader.onload = () => setImgSrc(reader.result as string)
 | |
| 
 | |
|       reader.readAsDataURL(files[0])
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return (
 | |
|     <CardContent>
 | |
|       <form>
 | |
|         <Grid container spacing={7}>
 | |
|           <Grid item xs={12} sx={{ marginTop: 4.8, marginBottom: 3 }}>
 | |
|             <Box sx={{ display: 'flex', alignItems: 'center' }}>
 | |
|               <ImgStyled src={imgSrc} alt='Profile Pic' />
 | |
|               <Box>
 | |
|                 <ButtonStyled component='label' variant='contained' htmlFor='account-settings-upload-image'>
 | |
|                   Upload New Photo
 | |
|                   <input
 | |
|                     hidden
 | |
|                     type='file'
 | |
|                     onChange={onChange}
 | |
|                     accept='image/png, image/jpeg'
 | |
|                     id='account-settings-upload-image'
 | |
|                   />
 | |
|                 </ButtonStyled>
 | |
|                 <ResetButtonStyled color='error' variant='outlined' onClick={() => setImgSrc('/images/avatars/1.png')}>
 | |
|                   Reset
 | |
|                 </ResetButtonStyled>
 | |
|                 <Typography variant='body2' sx={{ marginTop: 5 }}>
 | |
|                   Allowed PNG or JPEG. Max size of 800K.
 | |
|                 </Typography>
 | |
|               </Box>
 | |
|             </Box>
 | |
|           </Grid>
 | |
| 
 | |
|           <Grid item xs={12} sm={6}>
 | |
|             <TextField fullWidth label='Username' placeholder='johnDoe' defaultValue='johnDoe' />
 | |
|           </Grid>
 | |
|           <Grid item xs={12} sm={6}>
 | |
|             <TextField fullWidth label='Name' placeholder='John Doe' defaultValue='John Doe' />
 | |
|           </Grid>
 | |
|           <Grid item xs={12} sm={6}>
 | |
|             <TextField
 | |
|               fullWidth
 | |
|               type='email'
 | |
|               label='Email'
 | |
|               placeholder='johnDoe@example.com'
 | |
|               defaultValue='johnDoe@example.com'
 | |
|             />
 | |
|           </Grid>
 | |
|           <Grid item xs={12} sm={6}>
 | |
|             <FormControl fullWidth>
 | |
|               <InputLabel>Role</InputLabel>
 | |
|               <Select label='Role' defaultValue='admin'>
 | |
|                 <MenuItem value='admin'>Admin</MenuItem>
 | |
|                 <MenuItem value='author'>Author</MenuItem>
 | |
|                 <MenuItem value='editor'>Editor</MenuItem>
 | |
|                 <MenuItem value='maintainer'>Maintainer</MenuItem>
 | |
|                 <MenuItem value='subscriber'>Subscriber</MenuItem>
 | |
|               </Select>
 | |
|             </FormControl>
 | |
|           </Grid>
 | |
|           <Grid item xs={12} sm={6}>
 | |
|             <FormControl fullWidth>
 | |
|               <InputLabel>Status</InputLabel>
 | |
|               <Select label='Status' defaultValue='active'>
 | |
|                 <MenuItem value='active'>Active</MenuItem>
 | |
|                 <MenuItem value='inactive'>Inactive</MenuItem>
 | |
|                 <MenuItem value='pending'>Pending</MenuItem>
 | |
|               </Select>
 | |
|             </FormControl>
 | |
|           </Grid>
 | |
|           <Grid item xs={12} sm={6}>
 | |
|             <TextField fullWidth label='Company' placeholder='ABC Pvt. Ltd.' defaultValue='ABC Pvt. Ltd.' />
 | |
|           </Grid>
 | |
| 
 | |
|           {openAlert ? (
 | |
|             <Grid item xs={12} sx={{ mb: 3 }}>
 | |
|               <Alert
 | |
|                 severity='warning'
 | |
|                 sx={{ '& a': { fontWeight: 400 } }}
 | |
|                 action={
 | |
|                   <IconButton size='small' color='inherit' aria-label='close' onClick={() => setOpenAlert(false)}>
 | |
|                     <Close fontSize='inherit' />
 | |
|                   </IconButton>
 | |
|                 }
 | |
|               >
 | |
|                 <AlertTitle>Your email is not confirmed. Please check your inbox.</AlertTitle>
 | |
|                 <Link href='/' onClick={(e: SyntheticEvent) => e.preventDefault()}>
 | |
|                   Resend Confirmation
 | |
|                 </Link>
 | |
|               </Alert>
 | |
|             </Grid>
 | |
|           ) : null}
 | |
| 
 | |
|           <Grid item xs={12}>
 | |
|             <Button variant='contained' sx={{ marginRight: 3.5 }}>
 | |
|               Save Changes
 | |
|             </Button>
 | |
|             <Button type='reset' variant='outlined' color='secondary'>
 | |
|               Reset
 | |
|             </Button>
 | |
|           </Grid>
 | |
|         </Grid>
 | |
|       </form>
 | |
|     </CardContent>
 | |
|   )
 | |
| }
 | |
| 
 | |
| export default TabAccount
 | 
