Advertisement
12311k

Untitled

Jun 9th, 2021
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. import React, { useContext, useMemo } from 'react';
  2. import { AmountButton } from '../../ui/amount-button/amount-button';
  3. import { DeleteButton } from '../../ui/delete-button/delete-button';
  4. import styles from './product.module.css';
  5.  
  6. import { DiscountContext, TotalCostContext } from '../../services/appContext';
  7. import { DataContext } from '../../services/productsContext';
  8.  
  9. export const Product = ({ src, id, text, qty, price }) => {
  10. const { totalPrice, setTotalPrice } = useContext(TotalCostContext);
  11. const { discountState } = useContext(DiscountContext);
  12. const { data, setData } = useContext(DataContext);
  13.  
  14. const discountedPrice = useMemo(() => ((price - price * (discountState.discount / 100)) * qty).toFixed(0), [
  15. discountState,
  16. price,
  17. qty
  18. ]);
  19.  
  20. const onDelete = () => {
  21. setData(data.filter(item => item.id !== id));
  22. };
  23.  
  24. const decrease = () => {
  25. if (qty === 1) {
  26. onDelete();
  27. } else {
  28. setTotalPrice(totalPrice - price);
  29. const newData = data.map(item => {
  30. if (item.id === id) {
  31. item.qty -= 1;
  32. return item;
  33. }
  34. return item;
  35. });
  36. setData(newData);
  37. }
  38. };
  39.  
  40. const increase = () => {
  41. setTotalPrice(totalPrice + price);
  42. const newData = data.map(item => {
  43. if (item.id === id) {
  44. item.qty += 1;
  45. return item;
  46. }
  47. return item;
  48. });
  49. setData(newData);
  50. };
  51.  
  52. return (
  53. <div className={`${styles.product}`}>
  54. <img className={styles.img} src={src} alt="фото товара." />
  55. <p className={styles.text}>{text}</p>
  56. <div className={styles.amountbox}>
  57. <AmountButton onClick={decrease}>-</AmountButton>
  58. <p className={styles.amount}>{qty}</p>
  59. <AmountButton onClick={increase}>+</AmountButton>
  60. </div>
  61. <div className={styles.price}>
  62. <p className={`${styles.price} ${discountState.discount && styles.exPrice}`}>{price * qty} руб.</p>
  63. {discountState.discount && <p className={styles.price}>{discountedPrice} руб.</p>}
  64. </div>
  65. <DeleteButton onDelete={onDelete} />
  66. </div>
  67. );
  68. };
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement