spermspace

Untitled

Aug 9th, 2019
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {useState, useEffect} from 'react'
  2. import SelectTypeLanguagePrint from '../../../SelectTypeLanguagePrint/SelectTypeLanguagePrint'
  3.  
  4. const CheckListToDh = ({cards, mapCard}) => {
  5.   const [checkSelectLanguage, setCheckSelectLanguage] = useState(false)
  6.   const [selectLanguage, setSelectLanguage] = useState('')
  7.   const [ready, setReady] = useState(false)
  8.   const [cardsGroup] = useState([[],[],[],[],[],[],[],[]])
  9.   const tag = 'priceArrays' // чтобы рендерить языки в SelectTypeLanguagePrint с карт где есть цены
  10.  
  11.   // отсортировать два массива по имени карточки
  12.   // пройтись по массивам забирая нужные свойства
  13.   // вставляя их в новый массив
  14.  
  15.   const removeDuplicateItem = (arr) => {
  16.     return Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse)
  17.   }
  18.  
  19.   const cardsWithoutPrice = removeDuplicateItem(cards.sort((c, n) => {
  20.     if (c.name < n.name) return -1
  21.     if (c.name > n.name) return 1
  22.     return 0
  23.   }))
  24.  
  25.   const cardsWithPrice = removeDuplicateItem(mapCard.sort((c, n) => {
  26.     if (c.name < n.name) return -1
  27.     if (c.name > n.name) return 1
  28.     return 0
  29.   }))
  30.  
  31.   const cardsMerge = () => {
  32.     let newArr = []
  33.     for (let i = 0; i < cardsWithPrice.length; i++) {
  34.       newArr = newArr.concat({
  35.         name: cardsWithPrice[i].name,
  36.         language: cardsWithoutPrice[i] === undefined ? false : cardsWithoutPrice[i].foreignNames,
  37.         prices: cardsWithPrice[i].usd,
  38.         group: cardsWithoutPrice[i] === undefined
  39.             || cardsWithoutPrice[i].colors === undefined
  40.             || cardsWithoutPrice[i].colors.length === 0
  41.             ?
  42.             cardsWithoutPrice[i].type || cardsWithoutPrice[i].types[0]
  43.             :
  44.             cardsWithoutPrice[i].colors[0] ,
  45.         image: cardsWithPrice[i].image
  46.       })
  47.     }
  48.     // console.log(cardsWithPrice.length, cardsWithoutPrice.length)
  49.     return newArr
  50.   }
  51.   let cardsReady = cardsMerge()
  52.  
  53.   useEffect(() => {
  54.     if (cardsWithPrice.length > 0 && cardsWithoutPrice.length > 0) {
  55.       setReady(true)
  56.     }
  57.   })
  58.  
  59.   const groupCard = () => {
  60.     cardsReady.map(item => {
  61.       switch (item.group) {
  62.         case "White":
  63.           return cardsGroup[0].push(item)
  64.         case "Blue":
  65.           return cardsGroup[1].push(item)
  66.         case "Green":
  67.           return cardsGroup[2].push(item)
  68.         case "Black":
  69.           return cardsGroup[3].push(item)
  70.         case "Red":
  71.           return cardsGroup[4].push(item)
  72.         case "Land":
  73.           return cardsGroup[5].push(item)
  74.         case "Artifact":
  75.           return cardsGroup[6].push(item)
  76.         default:
  77.           return
  78.         }
  79.     })
  80.     return cardsGroup
  81.   }
  82.  
  83.   let data = groupCard()
  84.  
  85.   // console.log(removeDuplicateItem(cardsWithPrice), removeDuplicateItem(cardsWithoutPrice))
  86.   const selectL = (value) => {
  87.     setCheckSelectLanguage(true)
  88.     setSelectLanguage(value)
  89.     console.log(value)
  90.   }
  91.  
  92.   const renderCard = (i, lang) => {
  93.     console.log(data)
  94.     const groupName = data[i][0] === undefined
  95.             ?
  96.             ''
  97.             :
  98.             data[i][0].group
  99.  
  100.     const card = data.length === 0 || data[i].length !== 0 ?
  101.       data[i].map((card, index) => {
  102.       return (
  103.         <div className="card-type" key={card.id + '-' + index}>
  104.           <span className="number">{index}</span>
  105.           <span className="price">(-.--)</span>
  106.           <span className="name">
  107.               {lang !== "eng" && card.language.length !== 0
  108.                   ? card.language.map(item => {
  109.                   if (item.language === lang) {
  110.                       return item.name
  111.                   }
  112.                   if (item.language === '') {
  113.                       return card.name
  114.                   }
  115.               }) : card.name}
  116.           </span>
  117.           <span className="checkbox"></span>
  118.         </div>
  119.       )
  120.     }) : null
  121.     return (
  122.       <div className={'cards' + '-' + i} key={'cards' + '-' + i}>
  123.           <h4>{groupName}</h4>
  124.           {card ? card : null}
  125.       </div>
  126.     )
  127.   }
  128.  
  129.   const generateGroupCard = (lang) => {
  130.     let groupCardArr = []
  131.     for (let i = 0; i < data.length; i++) {
  132.       groupCardArr = groupCardArr.concat(renderCard(i, lang))
  133.     }
  134.     return groupCardArr
  135.   }
  136.  
  137.   // console.log(renderCard())
  138.  
  139.   return (
  140.     <div>
  141.       <div>
  142.         {ready ? <SelectTypeLanguagePrint cards={cardsReady} selectL={selectL} tag={tag} /> : <span>Загружаю доступные языки для печати</span>}
  143.       </div>
  144.       <div className="container d-flex card-groups">
  145.         {
  146.           ready && checkSelectLanguage ?
  147.           generateGroupCard(selectLanguage)
  148.           : ''
  149.         }
  150.       </div>
  151.     </div>
  152.   )
  153. }
  154.  
  155. export default CheckListToDh
Add Comment
Please, Sign In to add comment