Rev 15314 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState, useEffect } from "react";import axios from "axios";import { Card } from "react-bootstrap";import {LengthFilter,SearchInput,TablePagination,} from "../../components/TableComponents";import { addNotification } from "../../../redux/notification/notification.actions";import { useDispatch } from "react-redux";import DeleteModal from "../../../shared/DeleteModal";import Table from "../../../shared/content-table/Table";import TableRow from "../../../shared/content-table/TableRow";const headers = [{ key: "name", label: "Nombre", isSorteable: true },{ key: "job_description", label: "Descripción de cargo", isSorteable: true },{ key: "status", label: "Estatus", isSorteable: true },{ key: "actions", label: "Acciones", isSorteable: false },];const MainView = ({table_link,setActionLink,permisions,add_link,setAction,}) => {const dispatch = useDispatch();const [showDeleteModal, setShowDeleteModal] = useState(false);const [deleteLink, setDeleteLink] = useState("");const [items, setItems] = useState([]);const [total, setTotal] = useState(0);const [search, setSearch] = useState("");const [startItem, setStartItem] = useState(1);const [lastItem, setLastItem] = useState(10);const [dataLength, setDataLength] = useState(10);const [pages, setPages] = useState({current: 1,last: 1,});const getData = ({ url = "", params = {} }) => {axios.get(url, { params: { ...params } }).then(({ data }) => {if (!data.success) {dispatch(addNotification({style: "danger",msg: "Ha ocurrido un error",}));}setItems(data.data.items);setTotal(data.data.total);setPages({ ...pages, last: Math.ceil(data.data.total / dataLength) });}).catch(() =>dispatch(addNotification({style: "danger",msg: "Ha ocurrido un error",})));};useEffect(() => {getData({url: table_link,params: {search: search,length: dataLength,start: pages.current,},});}, [search, dataLength, pages.current]);useEffect(() => {if (pages.current > 1) {setStartItem(dataLength * (pages.current - 1) + 1);} else {setStartItem(1);}}, [pages.current]);useEffect(() => {if (items) {if (startItem > 1) {setLastItem(startItem + (items.length - 1));} else {setLastItem(items.length);}}}, [items]);const handleSort = (result) => setItems(result);const handleEdit = (url) => {setActionLink(url);setAction("edit");};const handleDelete = (url) => {setDeleteLink(url);setShowDeleteModal(true);};return (<><section className="content"><div className="container-fluid"><div className="row"><div className="col-12"><Card><Card.Header><divclassName="row justify-content-end"style={{ gap: "10px" }}>{permisions.allowAdd && (<labelclassName="d-flex align-items-center"onClick={() => {setActionLink(add_link);setAction("add");}}style={{ cursor: "pointer" }}><i className="fa fa-plus mr-2" />Agregar</label>)}<labelclassName="d-flex align-items-center"onClick={() =>getData({url: table_link,params: {search: search,length: dataLength,page: pages.current,},})}style={{ cursor: "pointer" }}><i className="fa fa-refresh mr-2" />Actualizar</label></div><div className="row justify-content-between align-items-center"><LengthFilteronChange={(e) => setDataLength(e.target.value)}/><SearchInput onChange={(e) => setSearch(e.target.value)} /></div></Card.Header><Card.Body><div className="table-responsive"><Table data={items} headers={headers} setData={handleSort}>{() =>items.map((item, index) => (<TableRowkey={index}item={item}editOptions={{permission: permisions.allowEdit,icon: (value) => (<iclassName="fa fa-pencil cursor-pointer"onClick={() => handleEdit(value)}/>),}}deleteOptions={{permission: permisions.allowDelete,icon: (value) => (<iclassName="fa fa-trash cursor-pointer"onClick={() => handleDelete(value)}/>),}}/>))}</Table></div><div className="row justify-content-between align-items-center"><p className="mb-0">{`Mostrando registros del ${startItem} al ${lastItem} de un total de ${total} registros`}</p><TablePaginationonDecrement={() =>setPages({ ...pages, current: pages.current - 1 })}onIncrement={() =>setPages({ ...pages, current: pages.current + 1 })}totalPages={pages.last}currentPage={pages.current}/></div></Card.Body></Card></div></div></div></section><DeleteModalurl={deleteLink}isOpen={showDeleteModal}closeModal={() => setShowDeleteModal(false)}title="¿Está seguro de borrar esta vacante?"onComplete={() =>setItems(items.filter((item) => item.actions.link_delete !== deleteLink))}message="Vacante eliminada"/></>);};export default MainView;