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 clsx from "clsx"; 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, multiSelect, 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]); useEffect(() => { setPageIndex(0); }, [search]); return (