diff --git a/client/package-lock.json b/client/package-lock.json index dea431c..506e8a0 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -35,7 +35,8 @@ "devDependencies": { "@types/node": "^18.0.0", "@types/sequelize": "^4.28.17", - "axios": "^1.5.1" + "axios": "^1.5.1", + "prettier": "3.0.3" } }, "node_modules/@ampproject/remapping": { @@ -14389,6 +14390,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -28533,6 +28549,12 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, + "prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true + }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", diff --git a/client/package.json b/client/package.json index 573c8ef..44b585f 100644 --- a/client/package.json +++ b/client/package.json @@ -53,6 +53,7 @@ "devDependencies": { "@types/node": "^18.0.0", "@types/sequelize": "^4.28.17", - "axios": "^1.5.1" + "axios": "^1.5.1", + "prettier": "3.0.3" } } diff --git a/client/src/component/TelemetryCan.tsx b/client/src/component/TelemetryCan.tsx index d49a710..fb129c5 100644 --- a/client/src/component/TelemetryCan.tsx +++ b/client/src/component/TelemetryCan.tsx @@ -30,7 +30,6 @@ export default function TelemetryCAN({ <>

{config.title}

- {Object.keys(config.data).map((messageName: string) => { const message = config.data?.[messageName]; diff --git a/client/src/pages/LiveTelemetry.tsx b/client/src/pages/LiveTelemetry.tsx index ba9e290..c56d549 100644 --- a/client/src/pages/LiveTelemetry.tsx +++ b/client/src/pages/LiveTelemetry.tsx @@ -203,8 +203,13 @@ function LiveTelemetry() { diff --git a/client/src/pages/Strategy.tsx b/client/src/pages/Strategy.tsx index 751d79d..fff4e6a 100644 --- a/client/src/pages/Strategy.tsx +++ b/client/src/pages/Strategy.tsx @@ -20,6 +20,7 @@ import * as moment from "moment"; import { SimpleLinearRegression } from "ml-regression"; import { useSearchParams } from "react-router-dom"; import Select from "react-select"; +import * as telemetry from "../shared/sdk/telemetry"; const allShape = { bms: bmsShape, @@ -49,9 +50,12 @@ function Strategy() { const [dataKey, setDataKey] = useState( searchParams.get("key") ?? localGraph["key"] ?? "pack_sum_volt_", ); + // replace localGraph["start"] with dayBefore const [startTime, setStartTime] = useState( searchParams.get("start") ?? localGraph["start"] ?? "2023-04-16 12:00", ); + + // replace localGraph["end"] with latest date const [endTime, setEndTime] = useState( searchParams.get("end") ?? localGraph["end"] ?? "2023-04-16 12:10", ); @@ -75,6 +79,46 @@ function Strategy() { `${telemetryType}.${messageNumber}.${dataKey}`, ); + telemetry + .getAll() + .then((response) => { + //console.log(response["bms"]["rx0"]["createdAt"]); + + const responseStartTime = response.bms.rx0.createdAt; + const formattedEndTime = responseStartTime + .replace(/\.\d+/, "") + .replace("Z", ""); + + //console.log(formattedStartTime); + const formattedStartTime = + formattedEndTime.substring(0, 9) + + (+formattedEndTime[9] - 1).toString() + + formattedEndTime.substring(10); + //console.log(formattedEndTime); + setEndTime(formattedEndTime); + + setStartTime(formattedStartTime); + + // The password may needed to reset but it's actually empty so it didn't + if (localStorage.getItem("passwordNeedsSet") == "true") { + localStorage.setItem("passwordNeedsSet", "false"); + window.location.reload(); + } + }) + .catch((reason) => { + // clear username/password if it changed for some reason + if ( + reason.request.status == 402 && + (!localStorage.getItem("passwordNeedsSet") || + localStorage.getItem("passwordNeedsSet") == "false") + ) { + localStorage.setItem("passwordNeedsSet", "true"); + localStorage.setItem("username", ""); + localStorage.setItem("password", ""); + window.location.reload(); + } + }); + const handleSelectChange = (selectedOption) => { const { value } = selectedOption; const [type, num, key] = value.split(".");