Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
111 lines
3.8 KiB
TypeScript
111 lines
3.8 KiB
TypeScript
import * as React from 'react';
|
|
import Box from '@mui/material/Box';
|
|
import CssBaseline from '@mui/material/CssBaseline';
|
|
import BottomNavigation from '@mui/material/BottomNavigation';
|
|
import BottomNavigationAction from '@mui/material/BottomNavigationAction';
|
|
import RestoreIcon from '@mui/icons-material/Restore';
|
|
import FavoriteIcon from '@mui/icons-material/Favorite';
|
|
import ArchiveIcon from '@mui/icons-material/Archive';
|
|
import Paper from '@mui/material/Paper';
|
|
import List from '@mui/material/List';
|
|
import ListItemButton from '@mui/material/ListItemButton';
|
|
import ListItemAvatar from '@mui/material/ListItemAvatar';
|
|
import ListItemText from '@mui/material/ListItemText';
|
|
import Avatar from '@mui/material/Avatar';
|
|
|
|
function refreshMessages(): MessageExample[] {
|
|
const getRandomInt = (max: number) => Math.floor(Math.random() * Math.floor(max));
|
|
|
|
return Array.from(new Array(50)).map(
|
|
() => messageExamples[getRandomInt(messageExamples.length)],
|
|
);
|
|
}
|
|
|
|
export default function FixedBottomNavigation() {
|
|
const [value, setValue] = React.useState(0);
|
|
const ref = React.useRef<HTMLDivElement>(null);
|
|
const [messages, setMessages] = React.useState(() => refreshMessages());
|
|
|
|
React.useEffect(() => {
|
|
(ref.current as HTMLDivElement).ownerDocument.body.scrollTop = 0;
|
|
setMessages(refreshMessages());
|
|
}, [value, setMessages]);
|
|
|
|
return (
|
|
<Box sx={{ pb: 7 }} ref={ref}>
|
|
<CssBaseline />
|
|
<List>
|
|
{messages.map(({ primary, secondary, person }, index) => (
|
|
<ListItemButton key={index + person}>
|
|
<ListItemAvatar>
|
|
<Avatar alt="Profile Picture" src={person} />
|
|
</ListItemAvatar>
|
|
<ListItemText primary={primary} secondary={secondary} />
|
|
</ListItemButton>
|
|
))}
|
|
</List>
|
|
<Paper sx={{ position: 'fixed', bottom: 0, left: 0, right: 0 }} elevation={3}>
|
|
<BottomNavigation
|
|
showLabels
|
|
value={value}
|
|
onChange={(event, newValue) => {
|
|
setValue(newValue);
|
|
}}
|
|
>
|
|
<BottomNavigationAction label="Recents" icon={<RestoreIcon />} />
|
|
<BottomNavigationAction label="Favorites" icon={<FavoriteIcon />} />
|
|
<BottomNavigationAction label="Archive" icon={<ArchiveIcon />} />
|
|
</BottomNavigation>
|
|
</Paper>
|
|
</Box>
|
|
);
|
|
}
|
|
|
|
interface MessageExample {
|
|
primary: string;
|
|
secondary: string;
|
|
person: string;
|
|
}
|
|
|
|
const messageExamples: readonly MessageExample[] = [
|
|
{
|
|
primary: 'Brunch this week?',
|
|
secondary: "I'll be in the neighbourhood this week. Let's grab a bite to eat",
|
|
person: '/static/images/avatar/5.jpg',
|
|
},
|
|
{
|
|
primary: 'Birthday Gift',
|
|
secondary: `Do you have a suggestion for a good present for John on his work
|
|
anniversary. I am really confused & would love your thoughts on it.`,
|
|
person: '/static/images/avatar/1.jpg',
|
|
},
|
|
{
|
|
primary: 'Recipe to try',
|
|
secondary: 'I am try out this new BBQ recipe, I think this might be amazing',
|
|
person: '/static/images/avatar/2.jpg',
|
|
},
|
|
{
|
|
primary: 'Yes!',
|
|
secondary: 'I have the tickets to the ReactConf for this year.',
|
|
person: '/static/images/avatar/3.jpg',
|
|
},
|
|
{
|
|
primary: "Doctor's Appointment",
|
|
secondary: 'My appointment for the doctor was rescheduled for next Saturday.',
|
|
person: '/static/images/avatar/4.jpg',
|
|
},
|
|
{
|
|
primary: 'Discussion',
|
|
secondary: `Menus that are generated by the bottom app bar (such as a bottom
|
|
navigation drawer or overflow menu) open as bottom sheets at a higher elevation
|
|
than the bar.`,
|
|
person: '/static/images/avatar/5.jpg',
|
|
},
|
|
{
|
|
primary: 'Summer BBQ',
|
|
secondary: `Who wants to have a cookout this weekend? I just got some furniture
|
|
for my backyard and would love to fire up the grill.`,
|
|
person: '/static/images/avatar/1.jpg',
|
|
},
|
|
];
|