diff --git a/src/components/Contexts/FleetContext.jsx b/src/components/Contexts/FleetContext.jsx
index 022efae..2173d9d 100644
--- a/src/components/Contexts/FleetContext.jsx
+++ b/src/components/Contexts/FleetContext.jsx
@@ -155,8 +155,10 @@ export const FleetProvider = ({ children }) => {
const result = await updatesApi.getCarUpdateProgress(
carUpdateIdsRef.current.join(","),
token
- );
- let pivot = result.statuses.length - 1;
+ ).catch(() => {
+ return Promise.reject();
+ });
+ let pivot = result.statuses?.length ? result.statuses.length - 1 : 0;
setFleetVehicles((fleetVehicles) => fleetVehicles.map((vehicle) => {
result.statuses.find((status, i) => {
if (vehicle.car_update_id !== status.car_update_id) {
@@ -313,7 +315,7 @@ export const FleetProvider = ({ children }) => {
useEffect(() => {
setCarUpdateIds(() => fleetVehicles
- .filter((vehicle) => vehicle.car_update_status !== "installed")
+ .filter((vehicle) => vehicle.car_update_status && vehicle.car_update_status !== "installed")
.map((vehicle) => vehicle.car_update_id));
}, [fleetVehicles, setCarUpdateIds]);
diff --git a/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap b/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap
index 5b065c6..4511aac 100644
--- a/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap
+++ b/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap
@@ -21,10 +21,9 @@ exports[`FleetVehiclesTable Render 1`] = `
class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2"
>
+
+
+
+
+
+
+
+
+
+ |
{
const [order, setOrder] = useState("desc");
const [search, setSearch] = useState("");
const [showDeleteModal, setShowDeleteModal] = useState(false);
+ const [selected, setSelected] = useState([]);
const classes = useStyles();
const { setMessage } = useStatusContext();
const {
@@ -135,6 +138,19 @@ const MainForm = ({ name }) => {
}
};
+ const handleSelect = (vin, setState) => {
+ setSelected(selected => setState
+ ? [...selected, vin]
+ : selected.filter(select => select !== vin));
+ };
+
+ const handleSelectAll = (event) => {
+ const allSelected = !event.target.checked;
+ setSelected(() => allSelected
+ ? []
+ : fleetVehicles.map((vehicle) => vehicle.vin));
+ }
+
const onDelete = async (vin) => {
try {
await deleteFleetVehicle(name, { vin: vin }, token);
@@ -188,14 +204,14 @@ const MainForm = ({ name }) => {
return (
-
-
+
+
+
+
+
@@ -207,10 +223,21 @@ const MainForm = ({ name }) => {
order={order}
columnData={tableColumns}
onSortRequest={handleSort}
+ multiSelect={true}
+ onSelectAll={handleSelectAll}
+ selectCount={selected.length}
+ rowCount={fleetVehicles.length}
/>
- {fleetVehicles && fleetVehicles.map((car) => (
- (car.vin &&
+ {fleetVehicles && fleetVehicles.map((car) => {
+ const isSelected = selected.includes(car.vin);
+ return (car.vin &&
+
+ handleSelect(car.vin, !isSelected)}
+ />
+
{(car.connected || car.connectedHMI) &&
{
{Actions(car.vin)}
)
- ))}
+ })}
diff --git a/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap b/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap
index c45ef81..54bf98f 100644
--- a/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap
+++ b/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap
@@ -20,10 +20,9 @@ exports[`VehiclesTab Render 1`] = `
class="MuiGrid-root makeStyles-root-0 MuiGrid-container MuiGrid-spacing-xs-2"
>
+
|