import React, { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import PropTypes from "prop-types"; import { Checkbox, Table, TableBody, TableCell, TableFooter, TablePagination, TableRow, } from "@material-ui/core"; import { useVehicleContext } from "../../Contexts/VehicleContext"; import { useStatusContext } from "../../Contexts/StatusContext"; import { LocalDateTimeString } from "../../../utils/dates"; import TableHeaderSortable from "../../Table/HeaderSortable"; import { logger } from "../../../services/monitoring"; import ConnectedIcon from "../../Controls/ConnectedIcon"; import ECUList from "../../Controls/ECUList"; const tableColumns = [ { id: "vin", label: "VIN", }, { id: "model", label: "Model", }, { id: "year", label: "Year", }, { id: "trim", label: "Trim", }, { id: "created_at", label: "Created", }, { id: "updated_at", label: "Updated", }, ]; const CarSelectionTable = (props) => { const { token, classes, search, selected, onSelect, onSelectAll } = props; const [pageSize, setPageSize] = useState(10); const [pageIndex, setPageIndex] = useState(0); const [orderBy, setOrderBy] = useState("vin"); const [order, setOrder] = useState("asc"); const { getVehicles, vehicles, totalVehicles } = useVehicleContext(); const { setMessage } = useStatusContext(); const { search: searchTerm } = search; const sortHandler = (event, property) => { if (property === orderBy) { if (order === "asc") { setOrder("desc"); } else { setOrder("asc"); } } else { setOrderBy(property); setOrder("asc"); } }; const handleChangePageIndex = (event, newIndex) => { setPageIndex(newIndex); }; const handleChangePageSize = (event) => { setPageSize(parseInt(event.target.value, 10)); setPageIndex(0); }; const handleSelectAll = (event) => { if (!onSelectAll) return; const newSelected = []; if (event.target.checked) { vehicles.forEach((car) => { newSelected.push(car.vin); }); } onSelectAll(newSelected); }; const handleSelect = (event, key) => { if (!onSelect) return; onSelect(event, key); }; useEffect(() => { const options = { limit: pageSize, offset: pageSize * pageIndex, order: `${orderBy} ${order}`, }; (async () => { try { await getVehicles(Object.assign(options, search), token); } catch (e) { setMessage(e.message); logger.warn(e.stack); } })(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [pageIndex, pageSize, orderBy, order, search, token]); return (
{vehicles.map((row) => { const isSelected = selected.indexOf(row.vin) !== -1; return ( handleSelect(event, row.vin)} /> {row.vin} {row.ecu_list && ( <>
)}
{row.model} {row.year} {row.trim || ""} {LocalDateTimeString(row.created)} {LocalDateTimeString(row.updated)}
); })}
); }; CarSelectionTable.propTypes = { token: PropTypes.string.isRequired, classes: PropTypes.object.isRequired, search: PropTypes.object.isRequired, selected: PropTypes.array.isRequired, onSelect: PropTypes.func.isRequired, onSelectAll: PropTypes.func.isRequired, connectionStatus: PropTypes.bool, }; export default CarSelectionTable;