Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7021 | Rev 7023 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7015 stevensc 1
import React, { useEffect, useState } from 'react'
7020 stevensc 2
import { axios, debounce, jsonToParams } from '../../utils'
7015 stevensc 3
import { useDispatch, useSelector } from 'react-redux'
4
import { addNotification } from '../../redux/notification/notification.actions'
7019 stevensc 5
import EmptySection from '../../components/UI/EmptySection'
7020 stevensc 6
import { Col, Container, Row } from 'react-bootstrap'
7
import PaginationComponent from '../../components/UI/PaginationComponent'
8
import SearchInput from '../../components/UI/SearchInput'
7015 stevensc 9
 
7020 stevensc 10
const KnowledgeAreaPage = () => {
7015 stevensc 11
  const [knowledges, setKnowledges] = useState([])
12
  const [knowledgesCategories, setKnowledgesCategories] = useState([])
7020 stevensc 13
  const [search, setSearch] = useState('')
14
  const [currentPage, setCurrentPage] = useState(1)
15
  const [totalPages, setTotalPages] = useState(1)
16
  const [allowAdd, setAllowAdd] = useState(false)
7015 stevensc 17
  const labels = useSelector(({ intl }) => intl.labels)
18
  const dispatch = useDispatch()
19
 
7020 stevensc 20
  const getKnowledgesInfo = (search, page) => {
21
    const urlParams = { search, page }
7015 stevensc 22
    axios
7021 stevensc 23
      .get(`/knowledge-area?${jsonToParams(urlParams)}`, {
7015 stevensc 24
        headers: {
25
          'Content-Type': 'application/json',
26
        },
27
      })
28
      .then((response) => {
7019 stevensc 29
        const { data, success } = response.data
30
 
31
        if (!success) {
32
          const errorMessage =
33
            typeof data === 'string'
34
              ? data
35
              : 'Ha ocurrido un error, por favor intente más tarde.'
36
 
37
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
38
          return
39
        }
40
 
41
        setKnowledges(data.items)
7020 stevensc 42
        setKnowledgesCategories(data.categories)
43
        setCurrentPage(data.page)
44
        setTotalPages(data.total_pages)
45
        setAllowAdd(Boolean(data.link_add))
7015 stevensc 46
      })
47
      .catch((error) => {
48
        dispatch(
49
          addNotification({
50
            style: 'danger',
51
            msg: 'Ha ocurrido un error, por favor intente más tarde.',
52
          })
53
        )
54
        throw new Error(error)
55
      })
7020 stevensc 56
  }
7015 stevensc 57
 
7022 stevensc 58
  const handleInputChange = debounce((e) => setSearch(e.target.value), 500)
7020 stevensc 59
 
60
  useEffect(() => {
61
    getKnowledgesInfo(search, currentPage)
62
  }, [search, currentPage])
63
 
7015 stevensc 64
  return (
7020 stevensc 65
    <Container as="section" className="companies-info px-0">
7015 stevensc 66
      <div className="company-title">
67
        <h1 className="title mx-auto">{labels.knowledge_area_title}</h1>
7020 stevensc 68
        {allowAdd && (
7021 stevensc 69
          <h2 className="title cursor-pointer">{labels.knowledge_area_add}</h2>
7015 stevensc 70
        )}
71
      </div>
72
 
7020 stevensc 73
      <Row className="gap-3">
74
        <Col md="3">
7021 stevensc 75
          <h2>{labels.categories}</h2>
7020 stevensc 76
          <ul className="knowledge-category-list">
7021 stevensc 77
            <li className="knowledge-category-li knowledge-category-li-selected">
78
              <a className="knowledge-category-a" href="">
79
                {labels.knowledge_area_category_all}
80
              </a>
81
            </li>
7015 stevensc 82
            {knowledgesCategories.map((category, index) => (
83
              <li className="knowledge-category-li" key={index}>
84
                <a className="knowledge-category-a" href="">
85
                  {category.name}
86
                </a>
87
              </li>
88
            ))}
89
          </ul>
7020 stevensc 90
        </Col>
7015 stevensc 91
 
7020 stevensc 92
        <Col className="px-0">
93
          <SearchInput
94
            onChange={handleInputChange}
95
            placeholder={labels.search}
96
          />
7015 stevensc 97
 
7019 stevensc 98
          <div className="knowledge-record-list mt-3">
99
            {knowledges.length ? (
100
              knowledges.map((knowledge, index) => (
101
                <Item key={index} {...knowledge} />
102
              ))
103
            ) : (
104
              <EmptySection
105
                message={labels.error_no_record_matched_your_query}
106
              />
107
            )}
108
          </div>
7020 stevensc 109
          <PaginationComponent
110
            onChangePage={(newPage) => setCurrentPage(newPage)}
111
            currentActivePage={currentPage}
112
            pages={totalPages}
113
            isRow
114
          />
115
        </Col>
116
      </Row>
117
    </Container>
7015 stevensc 118
  )
119
}
120
 
7019 stevensc 121
const Item = ({
122
  link_delete,
123
  link_view,
124
  link_edit,
125
  category,
126
  description,
127
  image,
128
  title,
129
}) => {
130
  return (
131
    <div className="knowledge-record-card">
132
      <a
133
        href={link_view}
134
        target="_blank"
135
        className="knowledge-record-card-actions-view"
136
        rel="noreferrer"
137
      >
138
        <img src={image} alt={`${title} image`} />
139
      </a>
140
      <div className="d-flex align-items-center justify-content-between">
141
        {link_edit && (
142
          <button data-link="{{>link_edit}}" className="btn-knowledge-edit">
143
            <i className="fa fa-pencil" aria-hidden="true" />
144
          </button>
145
        )}
146
 
147
        {link_delete && (
148
          <button data-link="{{>link_delete}}" className="btn-knowledge-delete">
149
            <i className="fa fa-trash" aria-hidden="true" />
150
          </button>
151
        )}
152
      </div>
153
      <h3>{category}</h3>
154
      <a href={link_view} target="_blank" rel="noreferrer">
155
        <h2>{title}</h2>
156
      </a>
157
      <p>{description}</p>
158
    </div>
159
  )
160
}
161
 
7015 stevensc 162
export default KnowledgeAreaPage