fashionAvenue / client / src / components / Header / Searchbar.jsx
Searchbar.jsx
Raw
import {
  IconButton,
  Button,
  Badge,
  SwipeableDrawer,
  Box,
  List,
  ListItem,
} from '@mui/material';
import { makeStyles } from '@mui/styles';
import MenuIcon from '@mui/icons-material/Menu';
import ShoppingCartOutlinedIcon from '@mui/icons-material/ShoppingCartOutlined';
import { useContext, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { CATEGORIES } from '../../common/constants';
import AuthContext from '../../context/AuthContext';

const useStyles = makeStyles({
  root: {
    display: 'flex',
  },
  searchbar: {
    width: '18em',
    fontSize: '13px',
    fontWeight: 600,
    color: '#717171',
  },
  count: {
    color: '#29C1BC',
    fontSize: '10px',
    fontWeight: 'bolder',
  },
  link: {
    fontSize: '12px',
    fontFamily: 'Noto Sans KR',
    textDecoration: 'none',
    color: '#717171',
    fontWeight: 500,
    padding: '0px 10px',
    border: 'solid black',
  },
  categories: { textAlign: 'center', color: 'gray', margin: '0 0 1em 0' },
  greeting: { textAlign: 'center', fontSize: '2em', padding: '1em 2em' },
});

const Searchbar = () => {
  const classes = useStyles();
  const navigate = useNavigate();
  const [isOpen, setIsOpen] = useState(false);
  const { logout, user, cartItems } = useContext(AuthContext);

  const toggleDrawer = (open) => (event) => {
    if (
      event &&
      event.type === 'keydown' &&
      (event.key === 'Tab' || event.key === 'Shift')
    ) {
      return;
    }
    setIsOpen(open);
  };

  const list = () => (
    <Box
      sx={{ width: 250 }}
      role="presentation"
      onClick={toggleDrawer(false)}
      onKeyDown={toggleDrawer(false)}
    >
      {user ? (
        <p className={classes.greeting}>Hello, {user.username}</p>
      ) : (
        <div
          style={{
            display: 'flex',
          }}
        >
          <Button onClick={() => navigate('/login')}>
            {'Please log in >'}
          </Button>
        </div>
      )}
      <p className={classes.categories}>Categories</p>
      <List>
        {CATEGORIES.map((text, index) => (
          <ListItem key={text} disablePadding>
            <Button>{text}</Button>
          </ListItem>
        ))}
      </List>
    </Box>
  );

  return (
    <div className={classes.root}>
      {/* <form>
        <Input
          name="search"
          placeholder="Search for keywords"
          className={classes.searchbar}
        />
        <IconButton type="submit">
          <SearchIcon />
        </IconButton>
  </form> */}
      <IconButton onClick={() => navigate('/cart')}>
        <Badge badgeContent={cartItems.length} color="primary">
          <ShoppingCartOutlinedIcon />
        </Badge>
      </IconButton>
      {user ? (
        <Button onClick={() => logout()}>Logout</Button>
      ) : (
        <Button onClick={() => navigate('/login')}>Login</Button>
      )}

      <IconButton onClick={toggleDrawer(true)}>
        <MenuIcon />
      </IconButton>
      <SwipeableDrawer
        anchor="right"
        open={isOpen}
        onClose={toggleDrawer(false)}
        onOpen={toggleDrawer(true)}
      >
        {list()}
      </SwipeableDrawer>
    </div>
  );
};

export default Searchbar;