Advertisement
Guest User

Untitled

a guest
Nov 5th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from "react";
  2. import "./App.scss";
  3. import Main from "../Main/Main";
  4. import PoeService from "../Services/Service";
  5. import Nav from "../Nav/Nav";
  6. import { Context } from "../Services/Context";
  7. import { NavLink } from "react-router-dom";
  8.  
  9. function App() {
  10.   const filterElements = [
  11.     { elem: "None", src: null },
  12.     { elem: "Armour", src: `armour` },
  13.     { elem: "Watchstones", src: `watchstones` },
  14.     { elem: "Weapons", src: `weapon` },
  15.     { elem: "Currency", src: `currency` },
  16.     { elem: "Fragments", src: `fragment` },
  17.     { elem: "Essences", src: `essence` },
  18.     { elem: "Flasks", src: `flask` },
  19.     { elem: "Gems", src: `gem` },
  20.   ];
  21.   const [activeBtn, setActiveBtn] = React.useState(null); //активная конпка в фильтре предметов
  22.   let [item, setItem] = React.useState(null); //предметы для рендера
  23.   let [type, setType] = React.useState(null); //тип, что рендерить броня, оружие итд
  24.   const [itemDetails, setItemDetails] = React.useState({
  25.     id: null,
  26.     name: ``,
  27.     icon: ``,
  28.     price: ``,
  29.   });
  30.   let service = new PoeService();
  31.   //Получаем предметы
  32.   const getItems = (object) => {
  33.     service.getItem(object).then((i) => {
  34.       setItem(i);
  35.     });
  36.   };
  37.   React.useEffect(() => {
  38.     let canceled = false;
  39.     !canceled && getItems(type);
  40.     return () => {
  41.       canceled = true;
  42.     };
  43.   }, [type]);
  44.   //Рендер всех предметов
  45.   const renderItems = (arr) => {
  46.     if (arr) {
  47.       return arr.map(({ id, name, icon, exalted }) => {
  48.         return (
  49.           <li
  50.             className="item"
  51.             key={id}
  52.             onClick={() => {
  53.               setItemDetails({
  54.                 ...itemDetails,
  55.                 id: id,
  56.                 name: name,
  57.                 icon: icon,
  58.                 price: exalted,
  59.               });
  60.             }}
  61.           >
  62.             <NavLink
  63.               to={`items/${id}`}>
  64.             <img src={icon} alt="img"></img>
  65.                 <p>{name}</p>
  66.             </NavLink>
  67.             <p>Price:{exalted}ex</p>
  68.           </li>
  69.         );
  70.       });
  71.     }
  72.   };
  73.   //Рендер выбраного предмета
  74.   const renderItemPage = (arr) => {
  75.     return (
  76.       <section className="item-detail-container">
  77.         <h1>{arr.name}</h1>
  78.         <h2>Price: {arr.price}ex</h2>
  79.         <img src={arr.icon} alt="img"></img>
  80.       </section>
  81.     );
  82.   };
  83.   //рендер фильтр-панели
  84.   const renderFilterElements = (arr) => {
  85.     return arr.map((i, ind) => {
  86.       return (
  87.         <button
  88.           onClick={() => {
  89.             setType(i.src);
  90.             setActiveBtn(ind);
  91.           }}
  92.           className={`btn-elem button ${activeBtn === ind ? `active` : ``}`}
  93.           key={ind}
  94.         >
  95.           {i.elem}
  96.         </button>
  97.       );
  98.     });
  99.   };
  100.  
  101.   return (
  102.     <Context.Provider
  103.       value={{
  104.         renderItems,
  105.         item,
  106.         renderFilterElements,
  107.         filterElements,
  108.         type,
  109.         renderItemPage,
  110.         itemDetails,
  111.       }}
  112.     >
  113.       <div className="App">
  114.         <Nav />
  115.         <Main />
  116.       </div>
  117.     </Context.Provider>
  118.   );
  119. }
  120.  
  121. export default App;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement