BasketSidebar.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import styles from "styles/BasketSidebar.module.scss";
  2. import emptyCardImg from "images/empty_cart.svg";
  3. import GetIcon from "components/GetIcon";
  4. import {observer} from 'mobx-react';
  5. import Title from "components/Title";
  6. import clsx from "clsx";
  7. import BasketItem from "components/BasketItem";
  8. import { useRef } from "react";
  9. import cartStore from 'stores/cartStore';
  10. const BasketSidebar = () => {
  11. const container = useRef();
  12. return (
  13. <div
  14. className={clsx(styles.sidebarContainer, cartStore.isOpen ? styles.show : styles.hide)}
  15. ref={container}
  16. onClick={(event) => event.target === container.current && cartStore.setIsOpen(false)}
  17. >
  18. <div className={styles.sidebar}>
  19. <div className={styles.header}>
  20. <div className={styles.title}>
  21. <Title txt="your basket" size={20} transform="uppercase" />
  22. {<small>your basket has got {cartStore.count} items</small>}
  23. </div>
  24. <button className={styles.close} onClick={() => cartStore.setIsOpen(false)}>
  25. <GetIcon icon="BsX" size={30} />
  26. </button>
  27. </div>
  28. {cartStore.count > 0 ? (
  29. <>
  30. <div className={styles.items}>
  31. {cartStore.items?.map((item, key) => (
  32. <BasketItem data={item} key={key} />
  33. ))}
  34. </div>
  35. <div className={styles.basketTotal}>
  36. <div className={styles.total}>
  37. <Title txt="basket summary" size={23} transform="uppercase" />
  38. <GetIcon icon="BsFillCartCheckFill" size={25} />
  39. </div>
  40. <div className={styles.totalPrice}>
  41. <small>total try</small>
  42. <div className={styles.price}>
  43. <span>{cartStore.total.toFixed(2)}</span>
  44. </div>
  45. </div>
  46. <button type="button" className={styles.confirmBtn}>
  47. Confirm the basket
  48. </button>
  49. </div>
  50. </>
  51. ) : (
  52. <div className={styles.emptyBasket}>
  53. <img src={emptyCardImg} alt="" />
  54. <Title txt="your basket is empty" size={23} transform="uppercase" />
  55. </div>
  56. )}
  57. </div>
  58. </div>
  59. );
  60. };
  61. export default observer(BasketSidebar);