import React, { useEffect, useState } from "react"; import { Link } from 'react-router-dom'; import { Grid, Table, TableBody, TableCell, TableFooter, TablePagination, TableRow, Tooltip, } from "@material-ui/core"; import AddCircleIcon from "@material-ui/icons/AddCircle"; import DeleteIcon from "@material-ui/icons/Delete"; import clsx from "clsx"; import TableHeaderSortable from "../../../../Table/HeaderSortable"; import { useUserContext } from "../../../../Contexts/UserContext" import { useStatusContext } from "../../../../Contexts/StatusContext"; import { FleetProvider, useFleetContext } from "../../../../Contexts/FleetContext" import useStyles from "../../../../useStyles"; import SearchField from "../../../../Controls/SearchField"; import { logger } from "../../../../../services/monitoring"; import { Roles, hasRole } from "../../../../../utils/roles"; import { useLocalStorage } from "../../../../useLocalStorage"; import DeleteConfirmation from "../../../../DeleteConfirmation"; const tableColumns = [ { id: "vin", label: "VIN" }, { id: "", label: "Actions" } ]; const PAGE_SIZE = "FLEET_STATUS_VEHICLES_TABLE_PAGE_SIZE"; const MainForm = ({ name }) => { const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10); const [pageIndex, setPageIndex] = useState(0); const [orderBy, setOrderBy] = useState("id"); const [order, setOrder] = useState("desc"); const [search, setSearch] = useState(""); const [showDeleteModal, setShowDeleteModal] = useState(false) const classes = useStyles(); const { setMessage } = useStatusContext(); const { fleetVehicles, totalFleetVehicles, getFleetVehicles, deleteFleetVehicle } = useFleetContext(); const { token: { idToken: { jwtToken: token } }, groups } = useUserContext(); const handleSearch = (query) => { setSearch(query); }; useEffect(() => { (async () => { try { if (!name || !token) return; await getFleetVehicles( name, { search, limit: pageSize, offset: pageSize * pageIndex, order: `${orderBy} ${order}`, }, token ); } catch (e) { setMessage(e.message); logger.warn(e.stack); } })(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [token, pageIndex, pageSize, orderBy, order, search]); const handleChangePageIndex = (event, newIndex) => { setPageIndex(newIndex); }; const handleChangePageSize = (event) => { setPageSize(parseInt(event.target.value, 10)); setPageIndex(0); }; const handleSort = (event, property) => { try { if (property === orderBy) { if (order === "asc") { setOrder("desc"); } else { setOrder("asc"); } } else { setOrderBy(property); setOrder("asc"); } } catch (e) { logger.warn(e.stack); } }; const onDelete = async (vin) => { try { await deleteFleetVehicle(name, { vin: vin }, token); setMessage(`Deleted ${vin}`) } catch (e) { setMessage(e.message); logger.warn(e.stack); } }; const Actions = (vin) => { let actions = []; if (hasRole([Roles.DELETE], groups)) { actions.push({ tip: `Delete "${vin}"`, id: vin, icon: }) } if (actions.length === 0) return ["No actions"]; return actions.map((action) => { if (action.link != null) { return ( {action.icon} ); } else { return ( onDelete(action.id)}> {action.icon} setShowDeleteModal(false)} deleteFunction={() => onDelete(action.id)} /> ); } }); }; return (
{fleetVehicles.map(vin => ( {vin} {Actions(vin)} ))}
); }; const FleetVehiclesTable = (props) => ( ); export default FleetVehiclesTable;