Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7019 | Rev 7021 | 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
7020 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
 
7020 stevensc 58
  const handleInputChange = debounce((value) => setSearch(value), 500)
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 && (
7015 stevensc 69
          <h2 className="title cursor-pointer" id="knowledge-add-a">
70
            {labels.knowledge_area_add}
71
          </h2>
72
        )}
73
      </div>
74
 
7020 stevensc 75
      <Row className="gap-3">
76
        <Col md="3">
77
          <h2 className="knowledge-category-a">
78
            {labels.knowledge_area_category_all}
79
          </h2>
80
          <ul className="knowledge-category-list">
7015 stevensc 81
            {knowledgesCategories.map((category, index) => (
82
              <li className="knowledge-category-li" key={index}>
83
                <a className="knowledge-category-a" href="">
84
                  {category.name}
85
                </a>
86
              </li>
87
            ))}
88
          </ul>
7020 stevensc 89
        </Col>
7015 stevensc 90
 
7020 stevensc 91
        <Col className="px-0">
92
          <SearchInput
93
            onChange={handleInputChange}
94
            placeholder={labels.search}
95
          />
7015 stevensc 96
 
7019 stevensc 97
          <div className="knowledge-record-list mt-3">
98
            {knowledges.length ? (
99
              knowledges.map((knowledge, index) => (
100
                <Item key={index} {...knowledge} />
101
              ))
102
            ) : (
103
              <EmptySection
104
                message={labels.error_no_record_matched_your_query}
105
              />
106
            )}
107
          </div>
7020 stevensc 108
          <PaginationComponent
109
            onChangePage={(newPage) => setCurrentPage(newPage)}
110
            currentActivePage={currentPage}
111
            pages={totalPages}
112
            isRow
113
          />
114
        </Col>
115
      </Row>
116
    </Container>
7015 stevensc 117
  )
118
}
119
 
7019 stevensc 120
const Item = ({
121
  link_delete,
122
  link_view,
123
  link_edit,
124
  category,
125
  description,
126
  image,
127
  title,
128
}) => {
129
  return (
130
    <div className="knowledge-record-card">
131
      <a
132
        href={link_view}
133
        target="_blank"
134
        className="knowledge-record-card-actions-view"
135
        rel="noreferrer"
136
      >
137
        <img src={image} alt={`${title} image`} />
138
      </a>
139
      <div className="d-flex align-items-center justify-content-between">
140
        {link_edit && (
141
          <button data-link="{{>link_edit}}" className="btn-knowledge-edit">
142
            <i className="fa fa-pencil" aria-hidden="true" />
143
          </button>
144
        )}
145
 
146
        {link_delete && (
147
          <button data-link="{{>link_delete}}" className="btn-knowledge-delete">
148
            <i className="fa fa-trash" aria-hidden="true" />
149
          </button>
150
        )}
151
      </div>
152
      <h3>{category}</h3>
153
      <a href={link_view} target="_blank" rel="noreferrer">
154
        <h2>{title}</h2>
155
      </a>
156
      <p>{description}</p>
157
    </div>
158
  )
159
}
160
 
7015 stevensc 161
export default KnowledgeAreaPage