diff --git a/src/components/Cars/CarSelectionTable/index.jsx b/src/components/Cars/CarSelectionTable/index.jsx
index 24d3e55..392d840 100644
--- a/src/components/Cars/CarSelectionTable/index.jsx
+++ b/src/components/Cars/CarSelectionTable/index.jsx
@@ -10,6 +10,7 @@ import {
TablePagination,
TableRow,
} from "@material-ui/core";
+import CheckCircleIcon from "@material-ui/icons/CheckCircle";
import { useVehicleContext } from "../../Contexts/VehicleContext";
import { useStatusContext } from "../../Contexts/StatusContext";
@@ -133,6 +134,14 @@ const CarSelectionTable = (props) => {
/>
+ {row.connected && (
+ <>
+
+
+ >
+ )}
{row.vin}
{row.model}
@@ -177,6 +186,7 @@ CarSelectionTable.propTypes = {
selected: PropTypes.array.isRequired,
onSelect: PropTypes.func.isRequired,
onSelectAll: PropTypes.func.isRequired,
+ connectionStatus: PropTypes.bool,
};
export default CarSelectionTable;
diff --git a/src/components/Contexts/VehicleContext.jsx b/src/components/Contexts/VehicleContext.jsx
index ef25261..4811695 100644
--- a/src/components/Contexts/VehicleContext.jsx
+++ b/src/components/Contexts/VehicleContext.jsx
@@ -39,11 +39,11 @@ export const VehicleProvider = ({ children }) => {
if (result.error) {
setVehicles([]);
throw new Error(`Get vehicles error. ${result.message}`);
- } else {
- setVehicles(result.data);
- if (result.total) {
- setTotalVehicles(result.total);
- }
+ }
+ await addConnections(result.data, token);
+ setVehicles(result.data);
+ if (result.total) {
+ setTotalVehicles(result.total);
}
} finally {
setBusy(false);
@@ -96,6 +96,30 @@ export const VehicleProvider = ({ children }) => {
}
};
+ const addConnections = async (cars, token) => {
+ const vins = cars.map((car) => car.vin);
+ const result = await api.getConnections(vins, token);
+
+ if (result.error) {
+ throw new Error(`Get connections error. ${result.message}`);
+ }
+ cars.forEach((car) => {
+ car.connected = result[car.vin] || false;
+ });
+ };
+
+ const getConnections = async (vins, token) => {
+ try {
+ setBusy(true);
+ const result = await api.getConnections(vins, token);
+ if (result.error)
+ throw new Error(`Get connections error. ${result.message}`);
+ return result;
+ } finally {
+ setBusy(false);
+ }
+ };
+
return (
{
getModels,
getYears,
sendCommand,
+ getConnections,
}}
>
{children}
diff --git a/src/components/Contexts/VehicleContext.test.jsx b/src/components/Contexts/VehicleContext.test.jsx
index efd4a7e..d45e782 100644
--- a/src/components/Contexts/VehicleContext.test.jsx
+++ b/src/components/Contexts/VehicleContext.test.jsx
@@ -133,14 +133,12 @@ describe("VehicleContext", () => {
});
});
-const expectedVehicleData = {
- data: [
- { vin: "3C4PDCBG0ET127145" },
- { vin: "1G1FP87S3GN100062" },
- { vin: "1HGCG325XYA062256" },
- { vin: "1J4GZ78YXWC160024" },
- { vin: "2C3CCAAG8CH222800" },
- { vin: "KNADM4A39C6028108" },
- { vin: "1G11C5SL9FF153507" },
- ],
-};
+const expectedVehicleData = [
+ { vin: "3C4PDCBG0ET127145", connected: true },
+ { vin: "1G1FP87S3GN100062", connected: true },
+ { vin: "1HGCG325XYA062256", connected: true },
+ { vin: "1J4GZ78YXWC160024", connected: true },
+ { vin: "2C3CCAAG8CH222800", connected: true },
+ { vin: "KNADM4A39C6028108", connected: true },
+ { vin: "1G11C5SL9FF153507", connected: true },
+];
diff --git a/src/components/Contexts/__mocks__/VehicleContext.jsx b/src/components/Contexts/__mocks__/VehicleContext.jsx
index 46dac8d..92d1ac8 100644
--- a/src/components/Contexts/__mocks__/VehicleContext.jsx
+++ b/src/components/Contexts/__mocks__/VehicleContext.jsx
@@ -25,11 +25,20 @@ export const useVehicleContext = () => ({
getYears: jest.fn(() => {
years = [2023, 2024];
}),
- sendCommand: jest.fn((vin, command, parameters, token) => ({
- vin,
+ sendCommand: jest.fn((vins, command, parameters, token) => ({
+ vins,
command,
parameters,
})),
+ getConnections: jest.fn((vins, token) => {
+ const result = {};
+
+ vins.forEach((vin) => {
+ result[vin] = true;
+ });
+
+ return result;
+ }),
});
export const setBusy = (val) => {
diff --git a/src/services/__mocks__/vehicles.js b/src/services/__mocks__/vehicles.js
index 4825e45..1f6662b 100644
--- a/src/services/__mocks__/vehicles.js
+++ b/src/services/__mocks__/vehicles.js
@@ -10,7 +10,7 @@ const data = [
];
const vehiclesAPI = {
- getVehicles: async (search, token) => { return { data: { data } }; },
+ getVehicles: async (search, token) => { return { data }; },
addVehicle: async (vehicle, token) => {
data.push(vehicle);
return vehicle;
@@ -30,6 +30,15 @@ const vehiclesAPI = {
vin, command, parameters
}
},
+ getConnections: async (vins, token) => {
+ const result = {};
+
+ vins.forEach(vin => {
+ result[vin] = true;
+ });
+
+ return result;
+ }
};
export default vehiclesAPI;
diff --git a/src/services/vehicles.js b/src/services/vehicles.js
index 4381a25..07b7ea2 100644
--- a/src/services/vehicles.js
+++ b/src/services/vehicles.js
@@ -39,6 +39,15 @@ const vehiclesAPI = {
}),
})
.then(fetchRespHandler),
+
+ getConnections: async (vins, token) => {
+ const u = `${API_ENDPOINT}/carsconnected?vins=${vins.join(",")}`
+ return fetch(u, {
+ method: "GET",
+ headers: Object.assign({ "Content-Type": "application/json" }, getAuthHeaderOptions(token)),
+ })
+ .then(fetchRespHandler)
+ },
};
export default vehiclesAPI;