Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
9502 stevensc 1
import React, { useState, useEffect } from 'react'
2
import axios from 'axios'
9512 stevensc 3
import { Card } from 'react-bootstrap'
9575 stevensc 4
import { LengthFilter, SearchInput, Table, TablePagination } from '../components/TableComponents'
9622 stevensc 5
import { useHistory } from 'react-router-dom'
9907 stevensc 6
import { addNotification } from '../../../redux/notification/notification.actions'
7
import { useDispatch } from 'react-redux'
9469 stevensc 8
 
9543 stevensc 9
const headers = [
10
  { key: "name", label: "Nombre", isSorteable: true },
11
  { key: "job_description", label: "Descripción de cargo", isSorteable: true },
12
  { key: "actions", label: "Acciones", isSorteable: false }
13
]
14
 
9907 stevensc 15
const MainView = ({ table_link, setActionLink, permisions, add_link, actionLink }) => {
9502 stevensc 16
 
9622 stevensc 17
  const history = useHistory()
9907 stevensc 18
  const dispatch = useDispatch()
9502 stevensc 19
  const [data, setData] = useState({})
9907 stevensc 20
  const [showDeleteModal, setShowDeleteModal] = useState(false)
9575 stevensc 21
  const [search, setSearch] = useState('')
9512 stevensc 22
  const [dataLength, setDataLength] = useState(10);
23
  const [pages, setPages] = useState({
24
    current: 1,
25
    last: 1
26
  });
9502 stevensc 27
 
28
  const getData = ({ url = '', params = {} }) => {
29
 
30
    axios.get(url, { params: { ...params } })
31
      .then(({ data }) => {
9512 stevensc 32
        if (!data.success) {
9907 stevensc 33
          dispatch(addNotification({
34
            style: "error",
35
            msg: "Ha ocurrido un error"
36
          }))
9512 stevensc 37
        }
9502 stevensc 38
 
9512 stevensc 39
        setData(data.data)
9521 stevensc 40
        setPages({ ...pages, last: Math.ceil(data.data.total / dataLength) })
9502 stevensc 41
      })
9907 stevensc 42
      .catch((err) => dispatch(addNotification({
43
        style: "error",
44
        msg: "Ha ocurrido un error"
45
      })))
9502 stevensc 46
  }
47
 
48
  useEffect(() => {
9575 stevensc 49
    getData({
50
      url: table_link,
51
      params: {
52
        search: search,
53
        length: dataLength,
54
        page: pages.current
55
      }
56
    })
57
  }, [search, dataLength, pages.current])
9502 stevensc 58
 
9469 stevensc 59
  return (
9907 stevensc 60
    <>
61
      <section className="content">
62
        <div className="container-fluid">
63
          <div className="row">
64
            <div className="col-12">
65
              <Card>
66
                <Card.Header>
67
                  <div className="row justify-content-end" style={{ gap: '10px' }}>
68
                    {
69
                      permisions.allowAdd === "1"
70
                      &&
71
                      <label
72
                        className='d-flex align-items-center'
73
                        onClick={() => {
74
                          setActionLink(add_link)
75
                          history.push('/recruitment-and-selection/vacancies/add')
76
                        }}
77
                      >
78
                        <i className="fa fa-plus mr-2" />
79
                        Agregar
80
                      </label>
81
                    }
82
                    <label className='d-flex align-items-center' onClick={() => window.location.reload()}>
83
                      <i className='fa fa-refresh mr-2' />
84
                      Actualizar
9634 stevensc 85
                    </label>
9907 stevensc 86
                  </div>
87
                  <div className="row justify-content-between align-items-center">
88
                    <LengthFilter onChange={(e) => setDataLength(e.target.value)} />
89
                    <SearchInput onChange={(e) => setSearch(e.target.value)} />
90
                  </div>
91
                </Card.Header>
92
                <Card.Body>
93
                  <Table data={data.items} headers={headers} setData={setData}>
94
                    {
95
                      data.items?.map((item, index) => (
96
                        <tr key={index}>
97
                          <td>{item.name}</td>
98
                          <td>{item.job_description}</td>
99
                          <td className='d-flex' style={{ gap: '10px' }}>
100
                            {
101
                              permisions.allowEdit === '1'
102
                              &&
103
                              <i
104
                                className='fa fa-pencil'
105
                                onClick={() => {
106
                                  setActionLink(item.actions.link_edit)
107
                                  history.push('/recruitment-and-selection/vacancies/edit')
108
                                }}
109
                                style={{ cursor: 'pointer' }}
110
                              />
111
                            }
112
                            {
113
                              permisions.allowDelete === '1'
114
                              &&
115
                              <i
116
                                className='fa fa-trash'
117
                                onClick={() => setActionLink(item.actions.link_delete)}
118
                                style={{ cursor: 'pointer' }}
119
                              />
120
                            }
121
                          </td>
122
                        </tr>
123
                      ))
124
                    }
125
                  </Table>
126
                  <div className='row justify-content-between align-items-center'>
127
                    <p className='mb-0'>
128
                      {`Mostrando registros del ${(dataLength * pages.current) - (dataLength - 1) || 0} al ${(dataLength * pages.current) - (dataLength - data.total) || 0} de un total de ${data.total || 0} registros`}
129
                    </p>
130
                    <TablePagination
131
                      onDecrement={(e) => setPages(prev => prev.current -= 1)}
132
                      onIncrement={(e) => setPages(prev => prev.current += 1)}
133
                      totalPages={pages.last}
134
                      currentPage={pages.current}
135
                    />
136
                  </div>
137
                </Card.Body>
138
              </Card>
139
            </div>
140
          </div >
9512 stevensc 141
        </div >
9907 stevensc 142
      </section >
143
      <DeleteModal
144
        url={actionLink}
145
        isOpen={showDeleteModal}
146
        closeModal={() => setShowDeleteModal(false)}
147
        title="Esta seguro de borrar esta vacante?"
148
        onComplete={() => setData({ ...data, items: data.items.filter((item) => item.actions.link_delete !== actionLink) })}
149
        message="Vacante eliminada"
150
      />
151
    </>
9469 stevensc 152
  )
9489 stevensc 153
}
154
export default MainView