diff --git a/src/components/Cars/CANSignals/index.jsx b/src/components/Cars/CANSignals/index.jsx
index 37febbc..0dfe8bd 100644
--- a/src/components/Cars/CANSignals/index.jsx
+++ b/src/components/Cars/CANSignals/index.jsx
@@ -5,6 +5,11 @@ import {
TableCell,
TableHead,
TableRow,
+ Box,
+ FormControl,
+ InputLabel,
+ Select,
+ MenuItem,
} from "@material-ui/core";
import {
@@ -13,7 +18,7 @@ import {
} from "../../Contexts/CANSignalsContext";
const Main = ({ vin }) => {
- const { signals, setVIN } = useCANSignalContext();
+ const { signals, setVIN, queryDate, delays, delayIndex, setDelayIndex } = useCANSignalContext();
useEffect(() => {
setVIN(vin);
@@ -26,24 +31,31 @@ const Main = ({ vin }) => {
if (!signals || signals.length === 0) return
Loading...
;
return (
-
-
-
- Timestamp
- Signal
- Value
-
-
-
- {signals.map((signal, i) => (
-
- {signal.timestamp}
- {signal.signal}
- {signal.value}
+ <>
+
+ Searching every
+
+ seconds for signals sent after {queryDate}.
+
+
+
+
+ Timestamp
+ Signal
+ Value
- ))}
-
-
+
+
+ {signals.map((signal, i) => (
+
+ {signal.timestamp}
+ {signal.signal}
+ {signal.value}
+
+ ))}
+
+
+ >
);
};
@@ -53,4 +65,33 @@ const CANSignals = (props) => (
);
+const DelayController = ({
+ delays,
+ delayIndex,
+ setDelayIndex
+}) => {
+ const label = "Delay";
+ const handleChange = (event) => {
+ setDelayIndex(event.target.value);
+ }
+
+ return (
+
+ {label}
+
+
+ )
+}
+
export default CANSignals;
diff --git a/src/components/Contexts/CANSignalsContext.jsx b/src/components/Contexts/CANSignalsContext.jsx
index 30c49b8..d399159 100644
--- a/src/components/Contexts/CANSignalsContext.jsx
+++ b/src/components/Contexts/CANSignalsContext.jsx
@@ -1,8 +1,8 @@
-import React, {useContext, useState} from "react";
+import React, { useContext, useState } from "react";
import api from "../../services/vehiclesAPI";
import { LocalDateTimeString } from "../../utils/dates";
-import {useInterval} from "usehooks-ts";
+import { useInterval } from "usehooks-ts";
const CANSignalContext = React.createContext();
@@ -26,31 +26,43 @@ const transformSignals = (signals) =>
.flat();
export const CANSignalProvider = ({ token, children }) => {
+ // auto scale polling if not getting response
+ const delays = [500, 1500, 3000, 6000];
+ const [delayIndex, setDelayIndex] = useState(2);
const [vin, setVIN] = useState(null);
const [signals, setSignals] = useState([]);
- const [delay, setDelay] = useState(500);
+ const [utc, setUtc] = useState(undefined);
useInterval(
() => {
getCANSignals()
- }, vin?delay:null
- )
+ }, vin ? delays[delayIndex] : null
+ );
const getCANSignals = async () => {
try {
if (!vin) return;
- const result = await api.getCANSignals(vin, token);
- if (result.error)
+ const result = await api.getCANSignals(vin, {
+ after_utc: utc,
+ }, token);
+
+ if (result.error) {
throw new Error(`Get CAN signals error. ${result.message}`);
+ }
+
+ const mostRecentTimestamp = result.data?.[0]?.timestamp;
+ if (mostRecentTimestamp) {
+ setUtc(new Date(mostRecentTimestamp).getTime() - 50); // apply slight offset to ensure last CAN Signals sent before sleep are returned.
+ } else {
+ setUtc(new Date().getTime());
+ }
const items = transformSignals(result.data);
if (items.length > 0) {
- setDelay(500);
setSignals(items);
} else {
- setDelay(1000);
setSignals([BlankSignal("No signals")]);
}
} catch (e) {
@@ -61,8 +73,12 @@ export const CANSignalProvider = ({ token, children }) => {
return (
{children}
diff --git a/src/components/Contexts/CANSignalsContext.test.jsx b/src/components/Contexts/CANSignalsContext.test.jsx
index 57b98e8..13be103 100644
--- a/src/components/Contexts/CANSignalsContext.test.jsx
+++ b/src/components/Contexts/CANSignalsContext.test.jsx
@@ -8,7 +8,7 @@ import {
waitFor,
act,
} from "@testing-library/react";
-import {CANSignalProvider, useCANSignalContext} from "./CANSignalsContext";
+import { CANSignalProvider, useCANSignalContext } from "./CANSignalsContext";
const checkSignalsResults = (filters) => {
expect(screen.getByTestId("signals").innerHTML).toEqual(filters);
@@ -19,14 +19,15 @@ describe("CANSignalsContext", () => {
beforeEach(() => {
jest.useFakeTimers("setInterval");
const TestComp = () => {
- const { signals, setVIN } = useCANSignalContext();
+ const { signals, setVIN, setDelayIndex } = useCANSignalContext();
+ setDelayIndex(0);
return (
<>
{JSON.stringify(signals)}