// src/Dashboard.js
import * as React from 'react';
import { createTheme, ThemeProvider, styled } from '@mui/material/styles';
import { CssBaseline, Box, AppBar, Toolbar, Typography, Drawer, List, ListItem, ListItemText, CircularProgress, Paper } from '@mui/material';
import axios from 'axios';
// Custom styled sidebar with Material UI's styled utility
const StyledDrawer = styled(Drawer)(({ theme }) => ({
'& .MuiDrawer-paper': {
background: theme.palette.primary.light,
color: theme.palette.primary.contrastText,
width: 220,
},
}));
const theme = createTheme({
palette: {
primary: { main: '#0d47a1' },
secondary: { main: '#ffb300' },
},
components: {
MuiAppBar: { styleOverrides: { root: { minHeight: 64 } } },
MuiPaper: { styleOverrides: { root: { padding: 24 } } },
},
});
export default function Dashboard() {
const [loading, setLoading] = React.useState(true);
const [data, setData] = React.useState([]);
React.useEffect(() => {
axios.get('https://jsonplaceholder.typicode.com/users')
.then((res) => {
setData(res.data);
setLoading(false);
});
}, []);
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<AppBar position="fixed">
<Toolbar>
<Typography variant="h6" sx={{ flexGrow: 1 }}>Material UI Dashboard</Typography>
</Toolbar>
</AppBar>
<StyledDrawer variant="permanent" anchor="left">
<Toolbar />
<List>
{['Overview', 'Users', 'Settings'].map((text) => (
<ListItem button key={text}>
<ListItemText primary={text} />
</ListItem>
))}
</List>
</StyledDrawer>
<Box component="main" sx={{ ml: 28, mt: 12 }}>
<Paper elevation={3}>
<Typography variant="h5" gutterBottom>User List</Typography>
{loading ? (
<CircularProgress />
) : (
<List>
{data.map((user) => (
<ListItem key={user.id}>
<ListItemText
primary={user.name}
secondary={user.email}
/>
</ListItem>
))}
</List>
)}
</Paper>
</Box>
</ThemeProvider>
);
}
import Button from '@mui/material/Button';
export default function CustomButton() {
return <Button color="secondary" variant="contained">Click Me</Button>;
}