Rev 7020 | Rev 7022 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'
import { axios, debounce, jsonToParams } from '../../utils'
import { useDispatch, useSelector } from 'react-redux'
import { addNotification } from '../../redux/notification/notification.actions'
import EmptySection from '../../components/UI/EmptySection'
import { Col, Container, Row } from 'react-bootstrap'
import PaginationComponent from '../../components/UI/PaginationComponent'
import SearchInput from '../../components/UI/SearchInput'
const KnowledgeAreaPage = () => {
const [knowledges, setKnowledges] = useState([])
const [knowledgesCategories, setKnowledgesCategories] = useState([])
const [search, setSearch] = useState('')
const [currentPage, setCurrentPage] = useState(1)
const [totalPages, setTotalPages] = useState(1)
const [allowAdd, setAllowAdd] = useState(false)
const labels = useSelector(({ intl }) => intl.labels)
const dispatch = useDispatch()
const getKnowledgesInfo = (search, page) => {
const urlParams = { search, page }
axios
.get(`/knowledge-area?${jsonToParams(urlParams)}`, {
headers: {
'Content-Type': 'application/json',
},
})
.then((response) => {
const { data, success } = response.data
if (!success) {
const errorMessage =
typeof data === 'string'
? data
: 'Ha ocurrido un error, por favor intente más tarde.'
dispatch(addNotification({ style: 'danger', msg: errorMessage }))
return
}
setKnowledges(data.items)
setKnowledgesCategories(data.categories)
setCurrentPage(data.page)
setTotalPages(data.total_pages)
setAllowAdd(Boolean(data.link_add))
})
.catch((error) => {
dispatch(
addNotification({
style: 'danger',
msg: 'Ha ocurrido un error, por favor intente más tarde.',
})
)
throw new Error(error)
})
}
const handleInputChange = debounce((value) => setSearch(value), 500)
useEffect(() => {
getKnowledgesInfo(search, currentPage)
}, [search, currentPage])
return (
<Container as="section" className="companies-info px-0">
<div className="company-title">
<h1 className="title mx-auto">{labels.knowledge_area_title}</h1>
{allowAdd && (
<h2 className="title cursor-pointer">{labels.knowledge_area_add}</h2>
)}
</div>
<Row className="gap-3">
<Col md="3">
<h2>{labels.categories}</h2>
<ul className="knowledge-category-list">
<li className="knowledge-category-li knowledge-category-li-selected">
<a className="knowledge-category-a" href="">
{labels.knowledge_area_category_all}
</a>
</li>
{knowledgesCategories.map((category, index) => (
<li className="knowledge-category-li" key={index}>
<a className="knowledge-category-a" href="">
{category.name}
</a>
</li>
))}
</ul>
</Col>
<Col className="px-0">
<SearchInput
onChange={handleInputChange}
placeholder={labels.search}
/>
<div className="knowledge-record-list mt-3">
{knowledges.length ? (
knowledges.map((knowledge, index) => (
<Item key={index} {...knowledge} />
))
) : (
<EmptySection
message={labels.error_no_record_matched_your_query}
/>
)}
</div>
<PaginationComponent
onChangePage={(newPage) => setCurrentPage(newPage)}
currentActivePage={currentPage}
pages={totalPages}
isRow
/>
</Col>
</Row>
</Container>
)
}
const Item = ({
link_delete,
link_view,
link_edit,
category,
description,
image,
title,
}) => {
return (
<div className="knowledge-record-card">
<a
href={link_view}
target="_blank"
className="knowledge-record-card-actions-view"
rel="noreferrer"
>
<img src={image} alt={`${title} image`} />
</a>
<div className="d-flex align-items-center justify-content-between">
{link_edit && (
<button data-link="{{>link_edit}}" className="btn-knowledge-edit">
<i className="fa fa-pencil" aria-hidden="true" />
</button>
)}
{link_delete && (
<button data-link="{{>link_delete}}" className="btn-knowledge-delete">
<i className="fa fa-trash" aria-hidden="true" />
</button>
)}
</div>
<h3>{category}</h3>
<a href={link_view} target="_blank" rel="noreferrer">
<h2>{title}</h2>
</a>
<p>{description}</p>
</div>
)
}
export default KnowledgeAreaPage