Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6995 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
6993 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { axios } from '../../utils'
3
import { Container, Row } from 'react-bootstrap'
4
import { addNotification } from '../../redux/notification/notification.actions'
5
import { useDispatch, useSelector } from 'react-redux'
6
 
7
import CapsulesList from '../../components/marketplace/CapsulesList'
8
 
9
const MarketPlacePage = () => {
10
  const [capsules, setCapsules] = useState([])
11
  const [rewards, setRewards] = useState([])
12
  const [categories, setCategories] = useState([])
13
  const [searchParams, setSearchParams] = useState({
14
    search: '',
15
    category: 'capsules',
16
  })
17
  const labels = useSelector(({ intl }) => intl.labels)
18
  const dispatch = useDispatch()
19
 
20
  const handleChange = ({ target }) => {
21
    setSearchParams({ ...searchParams, [target.name]: target.value })
22
  }
23
 
24
  const load = async (
25
    _search = searchParams.search,
26
    _entity = searchParams.category
27
  ) => {
28
    axios
29
      .get(`/marketplace?search=${_search}&entity=${_entity}`)
30
      .then((response) => {
31
        const { success, data } = response.data
32
 
33
        if (!success) {
34
          dispatch(addNotification({ style: 'danger', msg: data }))
35
          return
36
        }
37
 
38
        _entity === 'capsules' ? setCapsules(data) : setRewards(data)
39
      })
40
      .catch((error) => {
41
        console.log('>>: error > ', error)
42
        dispatch(addNotification({ style: 'danger', msg: error }))
43
        throw new Error(error)
44
      })
45
  }
46
 
47
  const getCategories = async () => {
48
    const categories = await axios.get('/marketplace/categories')
49
    if (categories.data.data) {
50
      const _categories = Object.keys(categories.data.data).map((element) => {
51
        return {
52
          label: categories.data.data[element],
53
          value: element,
54
        }
55
      })
56
      setCategories(_categories)
57
    }
58
  }
59
 
60
  const checkParams = () => {
61
    const url = window.location.href
62
    const hasEntity = url.includes('?entity=')
63
    if (hasEntity) {
64
      const value = url.split('?entity=')[1]
65
      if (value) {
66
        setSearchParams({ ...searchParams, category: value })
67
      }
68
    }
69
  }
70
 
71
  useEffect(() => {
72
    getCategories()
73
    checkParams()
74
  }, [])
75
 
76
  useEffect(() => {
77
    load(searchParams.search, searchParams.category)
78
  }, [searchParams])
79
 
80
  return (
81
    <Container>
82
      <Row>
83
        <div className="form-group search_categories">
84
          <select
85
            name="category"
86
            className="form-control"
87
            value={searchParams.category}
88
            onChange={(e) => handleChange(e)}
89
          >
90
            <option disabled value="">
91
              {labels.select_category}
92
            </option>
93
            {categories.map((element, i) => (
94
              <option value={element.value} key={i}>
95
                {element.label}
96
              </option>
97
            ))}
98
          </select>
99
        </div>
100
        <div className="form-group search_input">
101
          <input
102
            type="text"
103
            name="search"
104
            className="form-control"
105
            onChange={(e) => handleChange(e)}
106
            value={searchParams.search}
107
          />
108
          <button className="search-btn">{labels.search}</button>
109
        </div>
110
      </Row>
111
      <h3 className="mt-3">
112
        {searchParams.category === 'capsules' ? 'Cápsulas' : 'Recompensas'} de
113
        Microaprendizaje
114
      </h3>
115
      <CapsulesList
116
        capsules={searchParams.category === 'capsules' ? capsules : rewards}
117
        onEnroll={load}
118
      />
119
    </Container>
120
  )
121
}
122
 
123
export default MarketPlacePage