You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MobileNav.tsx 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import AccountCircleIcon from '@mui/icons-material/AccountCircle';
  2. import CloseIcon from '@mui/icons-material/Close';
  3. import ShoppingCartIcon from '@mui/icons-material/ShoppingCart';
  4. import { Box, Button, Divider, Drawer, IconButton } from '@mui/material';
  5. import Image from 'next/image';
  6. import Link from 'next/link';
  7. import { CART_PAGE, PROFILE_PAGE } from '../../../constants/pages';
  8. import { NavItemMobile } from './NavItem';
  9. import { items } from './navItems';
  10. interface MobileNavProps {
  11. toggleDrawer: (toggle: boolean) => void;
  12. session: any;
  13. signOutHandler: () => void;
  14. open: boolean;
  15. totalQuantity?: number;
  16. }
  17. const MobileNav: React.FC<MobileNavProps> = ({
  18. toggleDrawer,
  19. session,
  20. signOutHandler,
  21. open,
  22. totalQuantity,
  23. }) => {
  24. return (
  25. <Drawer
  26. PaperProps={{
  27. sx: { width: { xs: '60%', sm: '50%' } },
  28. }}
  29. anchor="left"
  30. open={open}
  31. onClose={toggleDrawer.bind(null, false)}
  32. >
  33. <Box
  34. sx={{
  35. p: 2,
  36. height: 1,
  37. backgroundColor: '#fff',
  38. }}
  39. >
  40. <Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 2 }}>
  41. <IconButton disableRipple onClick={toggleDrawer(false)}>
  42. <CloseIcon color="primary" />
  43. </IconButton>
  44. {session?.user?._id && (
  45. <IconButton disableRipple onClick={signOutHandler}>
  46. <Image
  47. src="/images/logout.svg"
  48. alt="profile"
  49. width={18}
  50. height={20}
  51. />
  52. </IconButton>
  53. )}
  54. </Box>
  55. <Divider sx={{ mb: session?.user?._id ? 0 : 2 }} />
  56. {session?.user?._id && (
  57. <>
  58. <Box display="flex" flexDirection="column" sx={{ ml: 1 }}>
  59. <NavItemMobile
  60. icon={<AccountCircleIcon sx={{ color: '#664c47' }} />}
  61. toggleDrawer={toggleDrawer}
  62. name="Profile"
  63. url={PROFILE_PAGE}
  64. />
  65. </Box>
  66. <Divider sx={{ mb: 2 }} />
  67. </>
  68. )}
  69. <Box sx={{ mb: 2, ml: 1 }} display="flex" flexDirection="column">
  70. {items.map((item) => (
  71. <NavItemMobile
  72. key={item.id}
  73. icon={item.icon}
  74. toggleDrawer={toggleDrawer}
  75. name={item.name}
  76. url={item.url}
  77. />
  78. ))}
  79. <Divider sx={{}} />
  80. <NavItemMobile
  81. totalQuantity={totalQuantity}
  82. icon={<ShoppingCartIcon sx={{ color: '#664c47' }} />}
  83. toggleDrawer={toggleDrawer}
  84. name="Cart"
  85. url={CART_PAGE}
  86. />
  87. </Box>
  88. <Box
  89. sx={{
  90. display: 'flex',
  91. justifyContent: 'center',
  92. position: 'absolute',
  93. bottom: '0',
  94. left: '50%',
  95. transform: 'translate(-50%, 0)',
  96. }}
  97. >
  98. {!session?.user?._id && (
  99. <>
  100. <Link href="/auth/register">
  101. <Button
  102. onClick={toggleDrawer.bind(null, false)}
  103. variant="contained"
  104. sx={{ m: 1, width: 0.5 }}
  105. >
  106. Register
  107. </Button>
  108. </Link>
  109. <Link href="/auth">
  110. <Button
  111. onClick={toggleDrawer.bind(null, false)}
  112. variant="outlined"
  113. sx={{ m: 1, width: 0.5 }}
  114. >
  115. Login
  116. </Button>
  117. </Link>
  118. </>
  119. )}
  120. </Box>
  121. </Box>
  122. </Drawer>
  123. );
  124. };
  125. export default MobileNav;