diff --git a/csharp/App/Backend/db.sqlite b/csharp/App/Backend/db.sqlite index 7e80aca63..08f80b97b 100644 Binary files a/csharp/App/Backend/db.sqlite and b/csharp/App/Backend/db.sqlite differ diff --git a/csharp/InnovEnergy.props b/csharp/InnovEnergy.props index ad3d9ebef..b1a90c16d 100644 --- a/csharp/InnovEnergy.props +++ b/csharp/InnovEnergy.props @@ -9,10 +9,12 @@ net6.0 true false - $([System.Text.RegularExpressions.Regex]::Match($(MSBuildProjectExtensionsPath), "[/\\]csharp[/\\].*[/\\]obj").ToString().Replace("/",".").Replace("\\",".").Replace(".csharp", $(Company)).Replace(".obj", "")) + Please.reload.the.project.Rider.is.stupid $(Company) Team - - - + + $(Company).$(MSBuildProjectDirectory.Replace($(SolutionDir), "").Replace("/",".").Replace("\",".")) + + + \ No newline at end of file diff --git a/typescript/Frontend/package-lock.json b/typescript/Frontend/package-lock.json index d89f522fe..d36bf3040 100644 --- a/typescript/Frontend/package-lock.json +++ b/typescript/Frontend/package-lock.json @@ -42,7 +42,6 @@ "react-plotly.js": "^2.6.0", "react-router-dom": "^6.8.0", "react-scripts": "5.0.1", - "react-window": "^1.8.9", "reactflow": "^11.5.6", "rxjs": "^7.8.0", "sass": "^1.58.3", @@ -17199,11 +17198,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -20585,22 +20579,6 @@ "react-dom": ">=16.13" } }, - "node_modules/react-window": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz", - "integrity": "sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - }, - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/reactflow": { "version": "11.5.6", "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.5.6.tgz", @@ -38023,11 +38001,6 @@ "fs-monkey": "^1.0.3" } }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -40347,15 +40320,6 @@ "debounce": "^1.2.1" } }, - "react-window": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz", - "integrity": "sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - } - }, "reactflow": { "version": "11.5.6", "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.5.6.tgz", diff --git a/typescript/Frontend/package.json b/typescript/Frontend/package.json index defbad19b..900de2c7a 100644 --- a/typescript/Frontend/package.json +++ b/typescript/Frontend/package.json @@ -37,7 +37,6 @@ "react-plotly.js": "^2.6.0", "react-router-dom": "^6.8.0", "react-scripts": "5.0.1", - "react-window": "^1.8.9", "reactflow": "^11.5.6", "rxjs": "^7.8.0", "sass": "^1.58.3", diff --git a/typescript/Frontend/src/components/Context/LogContextProvider.tsx b/typescript/Frontend/src/components/Context/LogContextProvider.tsx index 349ed883a..6b09c5672 100644 --- a/typescript/Frontend/src/components/Context/LogContextProvider.tsx +++ b/typescript/Frontend/src/components/Context/LogContextProvider.tsx @@ -1,33 +1,48 @@ -import { createContext, ReactNode, SetStateAction, useState } from "react"; -import { TreeElement, ToggleElement } from "../Installations/Log/CheckboxTree"; +import { createContext, ReactNode, useState } from "react"; +import { TreeElement } from "../Installations/Log/CheckboxTree"; import React from "react"; interface LogContextProviderProps { toggles: TreeElement[] | null; setToggles: (value: TreeElement[]) => void; - checkedToggles: ToggleElement | null; - setCheckedToggles: React.Dispatch>; + checkedToggles: string[]; + setChecked: (newValue: string) => void; + removeChecked: (value: string) => void; } export const LogContext = createContext({ toggles: [], setToggles: () => {}, - checkedToggles: {}, - setCheckedToggles: () => {}, + checkedToggles: [], + setChecked: () => {}, + removeChecked: () => {}, }); const LogContextProvider = ({ children }: { children: ReactNode }) => { const [toggles, setToggles] = useState(null); - const [checkedToggles, setCheckedToggles] = useState( - null - ); + const [checkedToggles, setCheckedToggles] = useState([]); + + const setChecked = (newValue: string) => { + if (checkedToggles.length === 5) { + const removedChecked = checkedToggles.slice(1); + setCheckedToggles([...removedChecked, newValue]); + } else { + setCheckedToggles([...checkedToggles, newValue]); + } + }; + + const removeChecked = (value: string) => { + setCheckedToggles(checkedToggles.filter((toggle) => toggle !== value)); + }; + return ( {children} diff --git a/typescript/Frontend/src/components/Installations/Log/CheckboxTree.tsx b/typescript/Frontend/src/components/Installations/Log/CheckboxTree.tsx index f9d658042..ca46c11ed 100644 --- a/typescript/Frontend/src/components/Installations/Log/CheckboxTree.tsx +++ b/typescript/Frontend/src/components/Installations/Log/CheckboxTree.tsx @@ -20,7 +20,8 @@ export interface TreeElement { } const CheckboxTree = () => { - const { toggles, setCheckedToggles, checkedToggles } = useContext(LogContext); + const { toggles, setChecked, checkedToggles, removeChecked } = + useContext(LogContext); const routeMatch = useRouteMatch([ routes.installations + routes.list + routes.log + ":id", ]); @@ -29,29 +30,17 @@ const CheckboxTree = () => { return element.children.length > 0 ? renderTree(element.children) : null; }; - const handleCheckChildren = (children: TreeElement[], checked?: boolean) => { - if (children.length > 0) { - children.forEach((child) => { - setCheckedToggles((prevState) => { - return { - ...prevState, - [child.id]: !checked, - }; - }); - if (child.children.length > 0) { - handleCheckChildren(child.children, checked); - } - }); - } - }; - const handleClick = ( event: React.MouseEvent, element: TreeElement, - checked?: boolean + checked?: string ) => { - event.stopPropagation(); - handleCheckChildren([element], checked); + if (checked) { + removeChecked(element.id); + } else { + event.stopPropagation(); + setChecked(element.id); + } }; const handleExpandClick = ( @@ -62,7 +51,7 @@ const CheckboxTree = () => { const renderTree = (data: TreeElement[]): ReactNode => { return data.map((element) => { - const checked = checkedToggles?.[element.id]; + const checked = checkedToggles.find((toggle) => element.id === toggle); const splitName = element.name.split("/"); return ( { onClick={handleExpandClick} label={ <> - handleClick(e, element, checked)} - /> + {element.children.length === 0 && ( + handleClick(e, element, checked)} + /> + )} {splitName[splitName.length - 1]} } sx={{ - ".MuiTreeItem-content": { paddingY: "5px" }, + ".MuiTreeItem-content": { paddingY: "5px", minHeight: "52px" }, }} > {getNodes(element)} diff --git a/typescript/Frontend/src/components/Installations/Log/ScalarGraph.tsx b/typescript/Frontend/src/components/Installations/Log/ScalarGraph.tsx index f62a55487..334688921 100644 --- a/typescript/Frontend/src/components/Installations/Log/ScalarGraph.tsx +++ b/typescript/Frontend/src/components/Installations/Log/ScalarGraph.tsx @@ -3,7 +3,6 @@ import { DataRecord, RecordSeries } from "../../../dataCache/data"; import { GraphData, createTimes, - flattenToggles, getTreeElements, isNumeric, parseCsv, @@ -11,21 +10,13 @@ import { transformToBarGraphData, } from "../../../util/graph.util"; import { TimeRange, TimeSpan, UnixTime } from "../../../dataCache/time"; -import { - memo, - useCallback, - useContext, - useEffect, - useMemo, - useState, -} from "react"; +import { useCallback, useContext, useEffect, useMemo, useState } from "react"; import { BehaviorSubject, startWith, throttleTime, withLatestFrom } from "rxjs"; import { S3Access } from "../../../dataCache/S3/S3Access"; import DataCache, { FetchResult } from "../../../dataCache/dataCache"; import { LogContext } from "../../Context/LogContextProvider"; import { isDefined } from "../../../dataCache/utils/maybe"; import { Data, Layout, PlotRelayoutEvent } from "plotly.js"; -import { VariableSizeList as List, areEqual } from "react-window"; import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; import { FormattedMessage } from "react-intl"; import DateRangePicker from "./DateRangePicker"; @@ -34,462 +25,6 @@ import { Alert } from "@mui/material"; const NUMBER_OF_NODES = 100; -export const testData = `/AcDc/SystemControl/Alarms;; -/AcDc/SystemControl/CommunicationTimeout;00:00:10; -/AcDc/SystemControl/SystemConfig;AcDcAndDcDc; -/AcDc/SystemControl/ResetAlarmsAndWarnings;False; -/AcDc/SystemControl/TargetSlave;0; -/AcDc/SystemControl/UseSlaveIdForAddressing;False; -/AcDc/SystemControl/ReferenceFrame;Producer; -/AcDc/SystemControl/SlaveErrorHandling;Relaxed; -/AcDc/SystemControl/SubSlaveErrorHandling;Strict; -/AcDc/SystemControl/PowerSetPointActivation;Immediate; -/AcDc/SystemControl/PowerSetPointTrigger;Wait; -/AcDc/SystemControl/DeviceState;Operation; -/AcDc/SystemControl/NumberOfConnectedSlaves;2; -/AcDc/SystemControl/NumberOfConnectedSubSlaves;0; -/AcDc/SystemControl/Warnings;; -/AcDc/Devices/1/Status/Ac/L1/Voltage;0;V -/AcDc/Devices/1/Status/Ac/L1/Current;0;A -/AcDc/Devices/1/Status/Ac/L1/Power/Apparent;0;VA -/AcDc/Devices/1/Status/Ac/L1/Power/Active;0;W -/AcDc/Devices/1/Status/Ac/L1/Power/Reactive;0;var -/AcDc/Devices/1/Status/Ac/L1/Power/Phi;0;rad -/AcDc/Devices/1/Status/Ac/L1/Power/CosPhi;1; -/AcDc/Devices/1/Status/Ac/L2/Voltage;0;V -/AcDc/Devices/1/Status/Ac/L2/Current;0;A -/AcDc/Devices/1/Status/Ac/L2/Power/Apparent;0;VA -/AcDc/Devices/1/Status/Ac/L2/Power/Active;0;W -/AcDc/Devices/1/Status/Ac/L2/Power/Reactive;0;var -/AcDc/Devices/1/Status/Ac/L2/Power/Phi;0;rad -/AcDc/Devices/1/Status/Ac/L2/Power/CosPhi;1; -/AcDc/Devices/1/Status/Ac/L3/Voltage;0;V -/AcDc/Devices/1/Status/Ac/L3/Current;0;A -/AcDc/Devices/1/Status/Ac/L3/Power/Apparent;0;VA -/AcDc/Devices/1/Status/Ac/L3/Power/Active;0;W -/AcDc/Devices/1/Status/Ac/L3/Power/Reactive;0;var -/AcDc/Devices/1/Status/Ac/L3/Power/Phi;0;rad -/AcDc/Devices/1/Status/Ac/L3/Power/CosPhi;1; -/AcDc/Devices/1/Status/Ac/Power/Apparent;0;VA -/AcDc/Devices/1/Status/Ac/Power/Active;0;W -/AcDc/Devices/1/Status/Ac/Power/Reactive;0;var -/AcDc/Devices/1/Status/Ac/Power/Phi;0;rad -/AcDc/Devices/1/Status/Ac/Power/CosPhi;1; -/AcDc/Devices/1/Status/Ac/Frequency;0;Hz -/AcDc/Devices/1/Status/Dc/Voltage;0;V -/AcDc/Devices/1/Status/Dc/Current;0;A -/AcDc/Devices/1/Status/Dc/Power;0;W -/AcDc/Devices/1/Status/PowerLimitedBy;Nothing; -/AcDc/Devices/1/Status/InverterState/Current;Idle; -/AcDc/Devices/1/Status/InverterState/OnLastAlarm;Idle; -/AcDc/Devices/1/Status/ActiveGridType;GridTied400V50Hz; -/AcDc/Devices/1/Status/Voltage/Intern/DcUpperHalf;0;V -/AcDc/Devices/1/Status/Voltage/Intern/DcLowerHalf;0;V -/AcDc/Devices/1/Status/Voltage/Intern/NToPe;0;V -/AcDc/Devices/1/Status/Voltage/Extern/DcUpperHalf;0;V -/AcDc/Devices/1/Status/Voltage/Extern/DcLowerHalf;0;V -/AcDc/Devices/1/Status/Voltage/Extern/NToPe;0;V -/AcDc/Devices/1/Status/Temperature/InletAir;0;°C -/AcDc/Devices/1/Status/Temperature/IgbtL1;0;°C -/AcDc/Devices/1/Status/Temperature/IgbtL2;0;°C -/AcDc/Devices/1/Status/Temperature/IgbtL3;0;°C -/AcDc/Devices/1/Status/Temperature/IgbtBalancer;0;°C -/AcDc/Devices/1/Status/OverloadCapacity/L1;0;% -/AcDc/Devices/1/Status/OverloadCapacity/L2;0;% -/AcDc/Devices/1/Status/OverloadCapacity/L3;0;% -/AcDc/Devices/1/Status/Nominal/AcFrequency;50;Hz -/AcDc/Devices/1/Status/Nominal/AcVoltage;400;V -/AcDc/Devices/1/Status/Nominal/Power;25000;W -/AcDc/Devices/1/Status/Alarms;; -/AcDc/Devices/1/Status/Warnings;; -/AcDc/Devices/1/Control/Ac/PhaseControl;Symmetric; -/AcDc/Devices/1/Control/Ac/GridType;GridTied400V50Hz; -/AcDc/Devices/1/Control/Ac/IslandMode/FrequencyOffset;0;Hz -/AcDc/Devices/1/Control/Ac/IslandMode/VoltageAdjustmentFactor;100;% -/AcDc/Devices/1/Control/Dc/ReferenceVoltage;750;V -/AcDc/Devices/1/Control/Dc/MinVoltage;730;V -/AcDc/Devices/1/Control/Dc/MaxVoltage;770;V -/AcDc/Devices/1/Control/Dc/PrechargeConfig;PrechargeDcWithSystemCtl; -/AcDc/Devices/1/Control/PowerStageEnable;True; -/AcDc/Devices/1/Control/ResetAlarmsAndWarnings;False; -/AcDc/Devices/2/Status/Ac/L1/Voltage;0;V -/AcDc/Devices/2/Status/Ac/L1/Current;0;A -/AcDc/Devices/2/Status/Ac/L1/Power/Apparent;0;VA -/AcDc/Devices/2/Status/Ac/L1/Power/Active;0;W -/AcDc/Devices/2/Status/Ac/L1/Power/Reactive;0;var -/AcDc/Devices/2/Status/Ac/L1/Power/Phi;0;rad -/AcDc/Devices/2/Status/Ac/L1/Power/CosPhi;1; -/AcDc/Devices/2/Status/Ac/L2/Voltage;0;V -/AcDc/Devices/2/Status/Ac/L2/Current;0;A -/AcDc/Devices/2/Status/Ac/L2/Power/Apparent;0;VA -/AcDc/Devices/2/Status/Ac/L2/Power/Active;0;W -/AcDc/Devices/2/Status/Ac/L2/Power/Reactive;0;var -/AcDc/Devices/2/Status/Ac/L2/Power/Phi;0;rad -/AcDc/Devices/2/Status/Ac/L2/Power/CosPhi;1; -/AcDc/Devices/2/Status/Ac/L3/Voltage;0;V -/AcDc/Devices/2/Status/Ac/L3/Current;0;A -/AcDc/Devices/2/Status/Ac/L3/Power/Apparent;0;VA -/AcDc/Devices/2/Status/Ac/L3/Power/Active;0;W -/AcDc/Devices/2/Status/Ac/L3/Power/Reactive;0;var -/AcDc/Devices/2/Status/Ac/L3/Power/Phi;0;rad -/AcDc/Devices/2/Status/Ac/L3/Power/CosPhi;1; -/AcDc/Devices/2/Status/Ac/Power/Apparent;0;VA -/AcDc/Devices/2/Status/Ac/Power/Active;0;W -/AcDc/Devices/2/Status/Ac/Power/Reactive;0;var -/AcDc/Devices/2/Status/Ac/Power/Phi;0;rad -/AcDc/Devices/2/Status/Ac/Power/CosPhi;1; -/AcDc/Devices/2/Status/Ac/Frequency;0;Hz -/AcDc/Devices/2/Status/Dc/Voltage;0;V -/AcDc/Devices/2/Status/Dc/Current;0;A -/AcDc/Devices/2/Status/Dc/Power;0;W -/AcDc/Devices/2/Status/PowerLimitedBy;Nothing; -/AcDc/Devices/2/Status/InverterState/Current;Idle; -/AcDc/Devices/2/Status/InverterState/OnLastAlarm;Idle; -/AcDc/Devices/2/Status/ActiveGridType;GridTied400V50Hz; -/AcDc/Devices/2/Status/Voltage/Intern/DcUpperHalf;0;V -/AcDc/Devices/2/Status/Voltage/Intern/DcLowerHalf;0;V -/AcDc/Devices/2/Status/Voltage/Intern/NToPe;0;V -/AcDc/Devices/2/Status/Voltage/Extern/DcUpperHalf;0;V -/AcDc/Devices/2/Status/Voltage/Extern/DcLowerHalf;0;V -/AcDc/Devices/2/Status/Voltage/Extern/NToPe;0;V -/AcDc/Devices/2/Status/Temperature/InletAir;0;°C -/AcDc/Devices/2/Status/Temperature/IgbtL1;0;°C -/AcDc/Devices/2/Status/Temperature/IgbtL2;0;°C -/AcDc/Devices/2/Status/Temperature/IgbtL3;0;°C -/AcDc/Devices/2/Status/Temperature/IgbtBalancer;0;°C -/AcDc/Devices/2/Status/OverloadCapacity/L1;0;% -/AcDc/Devices/2/Status/OverloadCapacity/L2;0;% -/AcDc/Devices/2/Status/OverloadCapacity/L3;0;% -/AcDc/Devices/2/Status/Nominal/AcFrequency;50;Hz -/AcDc/Devices/2/Status/Nominal/AcVoltage;400;V -/AcDc/Devices/2/Status/Nominal/Power;25000;W -/AcDc/Devices/2/Status/Alarms;; -/AcDc/Devices/2/Status/Warnings;; -/AcDc/Devices/2/Control/Ac/PhaseControl;Symmetric; -/AcDc/Devices/2/Control/Ac/GridType;GridTied400V50Hz; -/AcDc/Devices/2/Control/Ac/IslandMode/FrequencyOffset;0;Hz -/AcDc/Devices/2/Control/Ac/IslandMode/VoltageAdjustmentFactor;100;% -/AcDc/Devices/2/Control/Dc/ReferenceVoltage;750;V -/AcDc/Devices/2/Control/Dc/MinVoltage;730;V -/AcDc/Devices/2/Control/Dc/MaxVoltage;770;V -/AcDc/Devices/2/Control/Dc/PrechargeConfig;PrechargeDcWithSystemCtl; -/AcDc/Devices/2/Control/PowerStageEnable;True; -/AcDc/Devices/2/Control/ResetAlarmsAndWarnings;False; -/AcDc/Alarms;; -/AcDc/Warnings;; -/AcDc/Ac/L1/Voltage;0;V -/AcDc/Ac/L1/Current;0;A -/AcDc/Ac/L1/Power/Apparent;0;VA -/AcDc/Ac/L1/Power/Active;0;W -/AcDc/Ac/L1/Power/Reactive;0;var -/AcDc/Ac/L1/Power/Phi;0;rad -/AcDc/Ac/L1/Power/CosPhi;1; -/AcDc/Ac/L2/Voltage;0;V -/AcDc/Ac/L2/Current;0;A -/AcDc/Ac/L2/Power/Apparent;0;VA -/AcDc/Ac/L2/Power/Active;0;W -/AcDc/Ac/L2/Power/Reactive;0;var -/AcDc/Ac/L2/Power/Phi;0;rad -/AcDc/Ac/L2/Power/CosPhi;1; -/AcDc/Ac/L3/Voltage;0;V -/AcDc/Ac/L3/Current;0;A -/AcDc/Ac/L3/Power/Apparent;0;VA -/AcDc/Ac/L3/Power/Active;0;W -/AcDc/Ac/L3/Power/Reactive;0;var -/AcDc/Ac/L3/Power/Phi;0;rad -/AcDc/Ac/L3/Power/CosPhi;1; -/AcDc/Ac/Power/Apparent;0;VA -/AcDc/Ac/Power/Active;0;W -/AcDc/Ac/Power/Reactive;0;var -/AcDc/Ac/Power/Phi;0;rad -/AcDc/Ac/Power/CosPhi;1; -/AcDc/Ac/Frequency;0;Hz -/AcDc/Dc/Voltage;0;V -/AcDc/Dc/Current;0;A -/AcDc/Dc/Power;0;W -/DcDc/Dc/Link/Voltage;0;V -/DcDc/Dc/Link/Current;0;A -/DcDc/Dc/Link/Power;0;W -/DcDc/Dc/Battery/Voltage;0;V -/DcDc/Dc/Battery/Current;0;A -/DcDc/Dc/Battery/Power;0;W -/DcDc/SystemControl/Alarms;; -/DcDc/SystemControl/CommunicationTimeout;00:00:10; -/DcDc/SystemControl/SystemConfig;DcDcOnly; -/DcDc/SystemControl/ResetAlarmsAndWarnings;False; -/DcDc/SystemControl/TargetSlave;0; -/DcDc/SystemControl/UseSlaveIdForAddressing;False; -/DcDc/SystemControl/ReferenceFrame;Producer; -/DcDc/SystemControl/SlaveErrorHandling;Relaxed; -/DcDc/SystemControl/SubSlaveErrorHandling;Strict; -/DcDc/SystemControl/PowerSetPointActivation;Immediate; -/DcDc/SystemControl/PowerSetPointTrigger;Wait; -/DcDc/SystemControl/DeviceState;Operation; -/DcDc/SystemControl/NumberOfConnectedSlaves;2; -/DcDc/SystemControl/NumberOfConnectedSubSlaves;0; -/DcDc/SystemControl/Warnings;; -/DcDc/Devices/1/Status/Dc/Link/Voltage;0;V -/DcDc/Devices/1/Status/Dc/Link/Current;0;A -/DcDc/Devices/1/Status/Dc/Link/Power;0;W -/DcDc/Devices/1/Status/Dc/Battery/Voltage;0;V -/DcDc/Devices/1/Status/Dc/Battery/Current;0;A -/DcDc/Devices/1/Status/Dc/Battery/Power;0;W -/DcDc/Devices/1/Status/OverloadCapacity;0;% -/DcDc/Devices/1/Status/Temperature/InletAir;0;°C -/DcDc/Devices/1/Status/Temperature/HighVoltageModule;0;°C -/DcDc/Devices/1/Status/Temperature/LowVoltageModule;0;°C -/DcDc/Devices/1/Status/PowerLimitedBy;; -/DcDc/Devices/1/Status/Alarms;; -/DcDc/Devices/1/Status/Warnings;; -/DcDc/Devices/1/Control/Vcc/EndPointCurrent;50;A -/DcDc/Devices/1/Control/Vcc/EndPointVoltage;50;V -/DcDc/Devices/1/Control/Vcc/StartPointCurrent;5;A -/DcDc/Devices/1/Control/VoltageLimits/MinBatteryVoltageAlarm;0;V -/DcDc/Devices/1/Control/VoltageLimits/MaxBatteryVoltageAlarm;60;V -/DcDc/Devices/1/Control/VoltageLimits/MinBatteryVoltage;42;V -/DcDc/Devices/1/Control/VoltageLimits/MaxBatteryVoltage;57;V -/DcDc/Devices/1/Control/DroopControl/ReferenceVoltage;750;V -/DcDc/Devices/1/Control/DroopControl/LowerVoltage;55;V -/DcDc/Devices/1/Control/DroopControl/UpperVoltage;55;V -/DcDc/Devices/1/Control/DroopControl/VoltageDeadband;0;V -/DcDc/Devices/1/Control/CurrentControl/CurrentSetpoint;0;A -/DcDc/Devices/1/Control/CurrentControl/MaxCurrentChangePerMs;100;A -/DcDc/Devices/1/Control/MaxDcPower;5;W -/DcDc/Devices/1/Control/ControlMode;VoltageDroop; -/DcDc/Devices/1/Control/ResetAlarmsAndWarnings;False; -/DcDc/Devices/1/Control/PowerStageEnable;True; -/DcDc/Devices/2/Status/Dc/Link/Voltage;0;V -/DcDc/Devices/2/Status/Dc/Link/Current;0;A -/DcDc/Devices/2/Status/Dc/Link/Power;0;W -/DcDc/Devices/2/Status/Dc/Battery/Voltage;0;V -/DcDc/Devices/2/Status/Dc/Battery/Current;0;A -/DcDc/Devices/2/Status/Dc/Battery/Power;0;W -/DcDc/Devices/2/Status/OverloadCapacity;0;% -/DcDc/Devices/2/Status/Temperature/InletAir;0;°C -/DcDc/Devices/2/Status/Temperature/HighVoltageModule;0;°C -/DcDc/Devices/2/Status/Temperature/LowVoltageModule;0;°C -/DcDc/Devices/2/Status/PowerLimitedBy;; -/DcDc/Devices/2/Status/Alarms;; -/DcDc/Devices/2/Status/Warnings;; -/DcDc/Devices/2/Control/Vcc/EndPointCurrent;50;A -/DcDc/Devices/2/Control/Vcc/EndPointVoltage;50;V -/DcDc/Devices/2/Control/Vcc/StartPointCurrent;5;A -/DcDc/Devices/2/Control/VoltageLimits/MinBatteryVoltageAlarm;0;V -/DcDc/Devices/2/Control/VoltageLimits/MaxBatteryVoltageAlarm;60;V -/DcDc/Devices/2/Control/VoltageLimits/MinBatteryVoltage;42;V -/DcDc/Devices/2/Control/VoltageLimits/MaxBatteryVoltage;57;V -/DcDc/Devices/2/Control/DroopControl/ReferenceVoltage;750;V -/DcDc/Devices/2/Control/DroopControl/LowerVoltage;55;V -/DcDc/Devices/2/Control/DroopControl/UpperVoltage;55;V -/DcDc/Devices/2/Control/DroopControl/VoltageDeadband;0;V -/DcDc/Devices/2/Control/CurrentControl/CurrentSetpoint;0;A -/DcDc/Devices/2/Control/CurrentControl/MaxCurrentChangePerMs;100;A -/DcDc/Devices/2/Control/MaxDcPower;5;W -/DcDc/Devices/2/Control/ControlMode;VoltageDroop; -/DcDc/Devices/2/Control/ResetAlarmsAndWarnings;False; -/DcDc/Devices/2/Control/PowerStageEnable;True; -/DcDc/Alarms;; -/DcDc/Warnings;; -/Battery/Dc/Voltage;51.898;V -/Battery/Dc/Current;0.21000000000000002;A -/Battery/Dc/Power;10.898580000000003;W -/Battery/Eoc;True; -/Battery/Warnings;; -/Battery/Alarms;; -/Battery/Soc;99.9;% -/Battery/Devices/1/Dc/Voltage;51.69;V -/Battery/Devices/1/Dc/Current;0.05;A -/Battery/Devices/1/Dc/Power;2.5845000000000002;W -/Battery/Devices/1/Leds/Blue;Off; -/Battery/Devices/1/Leds/Red;Off; -/Battery/Devices/1/Leds/Green;On; -/Battery/Devices/1/Leds/Amber;Off; -/Battery/Devices/1/Temperatures/Heating;True; -/Battery/Devices/1/Temperatures/Board;46.5;°C -/Battery/Devices/1/Temperatures/Cells/Center;249.9;°C -/Battery/Devices/1/Temperatures/Cells/Left;249.5;°C -/Battery/Devices/1/Temperatures/Cells/Right;249.5;°C -/Battery/Devices/1/Temperatures/State;Operation; -/Battery/Devices/1/ConnectedToDcBus;True; -/Battery/Devices/1/Eoc;True; -/Battery/Devices/1/Warnings;; -/Battery/Devices/1/Alarms;; -/Battery/Devices/1/Soc;100;% -/Battery/Devices/1/MaxChargePower;5418.875;W -/Battery/Devices/1/MaxDischargePower;-4668.75;W -/Battery/Devices/2/Dc/Voltage;51.49;V -/Battery/Devices/2/Dc/Current;0.02;A -/Battery/Devices/2/Dc/Power;1.0298;W -/Battery/Devices/2/Leds/Blue;Off; -/Battery/Devices/2/Leds/Red;Off; -/Battery/Devices/2/Leds/Green;On; -/Battery/Devices/2/Leds/Amber;Off; -/Battery/Devices/2/Temperatures/Heating;True; -/Battery/Devices/2/Temperatures/Board;55;°C -/Battery/Devices/2/Temperatures/Cells/Center;251.4;°C -/Battery/Devices/2/Temperatures/Cells/Left;249.8;°C -/Battery/Devices/2/Temperatures/Cells/Right;254.2;°C -/Battery/Devices/2/Temperatures/State;Operation; -/Battery/Devices/2/ConnectedToDcBus;True; -/Battery/Devices/2/Eoc;True; -/Battery/Devices/2/Warnings;; -/Battery/Devices/2/Alarms;; -/Battery/Devices/2/Soc;100;% -/Battery/Devices/2/MaxChargePower;5398.95;W -/Battery/Devices/2/MaxDischargePower;-4648.900000000001;W -/Battery/Devices/3/Dc/Voltage;52.2;V -/Battery/Devices/3/Dc/Current;0.02;A -/Battery/Devices/3/Dc/Power;1.044;W -/Battery/Devices/3/Leds/Blue;Off; -/Battery/Devices/3/Leds/Red;Off; -/Battery/Devices/3/Leds/Green;On; -/Battery/Devices/3/Leds/Amber;Off; -/Battery/Devices/3/Temperatures/Heating;True; -/Battery/Devices/3/Temperatures/Board;47.5;°C -/Battery/Devices/3/Temperatures/Cells/Center;250.5;°C -/Battery/Devices/3/Temperatures/Cells/Left;249.8;°C -/Battery/Devices/3/Temperatures/Cells/Right;251.4;°C -/Battery/Devices/3/Temperatures/State;Operation; -/Battery/Devices/3/ConnectedToDcBus;True; -/Battery/Devices/3/Eoc;True; -/Battery/Devices/3/Warnings;; -/Battery/Devices/3/Alarms;; -/Battery/Devices/3/Soc;100;% -/Battery/Devices/3/MaxChargePower;5469.95;W -/Battery/Devices/3/MaxDischargePower;-4719.900000000001;W -/Battery/Devices/4/Dc/Voltage;51.94;V -/Battery/Devices/4/Dc/Current;0.03;A -/Battery/Devices/4/Dc/Power;1.5581999999999998;W -/Battery/Devices/4/Leds/Blue;Off; -/Battery/Devices/4/Leds/Red;Off; -/Battery/Devices/4/Leds/Green;On; -/Battery/Devices/4/Leds/Amber;Off; -/Battery/Devices/4/Temperatures/Heating;True; -/Battery/Devices/4/Temperatures/Board;47;°C -/Battery/Devices/4/Temperatures/Cells/Center;250;°C -/Battery/Devices/4/Temperatures/Cells/Left;249.8;°C -/Battery/Devices/4/Temperatures/Cells/Right;252.1;°C -/Battery/Devices/4/Temperatures/State;Operation; -/Battery/Devices/4/ConnectedToDcBus;False; -/Battery/Devices/4/Eoc;True; -/Battery/Devices/4/Warnings;; -/Battery/Devices/4/Alarms;; -/Battery/Devices/4/Soc;99.9;% -/Battery/Devices/4/MaxChargePower;5443.925;W -/Battery/Devices/4/MaxDischargePower;-4693.849999999999;W -/Battery/Devices/5/Dc/Voltage;52.17;V -/Battery/Devices/5/Dc/Current;0.09;A -/Battery/Devices/5/Dc/Power;4.6953;W -/Battery/Devices/5/Leds/Blue;Off; -/Battery/Devices/5/Leds/Red;Off; -/Battery/Devices/5/Leds/Green;On; -/Battery/Devices/5/Leds/Amber;Off; -/Battery/Devices/5/Temperatures/Heating;True; -/Battery/Devices/5/Temperatures/Board;48.5;°C -/Battery/Devices/5/Temperatures/Cells/Center;250.6;°C -/Battery/Devices/5/Temperatures/Cells/Left;249.8;°C -/Battery/Devices/5/Temperatures/Cells/Right;250.8;°C -/Battery/Devices/5/Temperatures/State;Operation; -/Battery/Devices/5/ConnectedToDcBus;True; -/Battery/Devices/5/Eoc;True; -/Battery/Devices/5/Warnings;; -/Battery/Devices/5/Alarms;; -/Battery/Devices/5/Soc;100;% -/Battery/Devices/5/MaxChargePower;5466.775;W -/Battery/Devices/5/MaxDischargePower;-4716.55;W -/GridMeter/Ac/L1/Voltage;243;V -/GridMeter/Ac/L1/Current;-12.360750198364258;A -/GridMeter/Ac/L1/Power/Apparent;3009.25;VA -/GridMeter/Ac/L1/Power/Active;-2969;W -/GridMeter/Ac/L1/Power/Reactive;502;var -/GridMeter/Ac/L1/Power/Phi;2.974096306323614;rad -/GridMeter/Ac/L1/Power/CosPhi;-0.9860052513602484; -/GridMeter/Ac/L2/Voltage;243.60000610351562;V -/GridMeter/Ac/L2/Current;-12.548500061035156;A -/GridMeter/Ac/L2/Power/Apparent;3043;VA -/GridMeter/Ac/L2/Power/Active;-3033;W -/GridMeter/Ac/L2/Power/Reactive;351;var -/GridMeter/Ac/L2/Power/Phi;3.026378172298827;rad -/GridMeter/Ac/L2/Power/CosPhi;-0.9933701504473591; -/GridMeter/Ac/L3/Voltage;244.39999389648438;V -/GridMeter/Ac/L3/Current;-13.57349967956543;A -/GridMeter/Ac/L3/Power/Apparent;3317;VA -/GridMeter/Ac/L3/Power/Active;-3313;W -/GridMeter/Ac/L3/Power/Reactive;-73.25;var -/GridMeter/Ac/L3/Power/Phi;-3.1194863851016974;rad -/GridMeter/Ac/L3/Power/CosPhi;-0.9997556663972327; -/GridMeter/Ac/Power/Apparent;9347.579101697936;VA -/GridMeter/Ac/Power/Active;-9315;W -/GridMeter/Ac/Power/Reactive;779.75;var -/GridMeter/Ac/Power/Phi;3.058078286561564;rad -/GridMeter/Ac/Power/CosPhi;-0.9965147016844159; -/GridMeter/Ac/Frequency;50;Hz -/CriticalLoad/Ac/L1/Voltage;244;V -/CriticalLoad/Ac/L1/Current;0;A -/CriticalLoad/Ac/L1/Power/Apparent;0;VA -/CriticalLoad/Ac/L1/Power/Active;0;W -/CriticalLoad/Ac/L1/Power/Reactive;0;var -/CriticalLoad/Ac/L1/Power/Phi;0;rad -/CriticalLoad/Ac/L1/Power/CosPhi;1; -/CriticalLoad/Ac/L2/Voltage;243;V -/CriticalLoad/Ac/L2/Current;0;A -/CriticalLoad/Ac/L2/Power/Apparent;0;VA -/CriticalLoad/Ac/L2/Power/Active;0;W -/CriticalLoad/Ac/L2/Power/Reactive;0;var -/CriticalLoad/Ac/L2/Power/Phi;0;rad -/CriticalLoad/Ac/L2/Power/CosPhi;1; -/CriticalLoad/Ac/L3/Voltage;245.6999969482422;V -/CriticalLoad/Ac/L3/Current;0;A -/CriticalLoad/Ac/L3/Power/Apparent;0;VA -/CriticalLoad/Ac/L3/Power/Active;0;W -/CriticalLoad/Ac/L3/Power/Reactive;0;var -/CriticalLoad/Ac/L3/Power/Phi;0;rad -/CriticalLoad/Ac/L3/Power/CosPhi;1; -/CriticalLoad/Ac/Power/Apparent;0;VA -/CriticalLoad/Ac/Power/Active;0;W -/CriticalLoad/Ac/Power/Reactive;0;var -/CriticalLoad/Ac/Power/Phi;0;rad -/CriticalLoad/Ac/Power/CosPhi;1; -/CriticalLoad/Ac/Frequency;50;Hz -/Relays/K1AcInIsConnectedToGrid;True; -/Relays/K2AcInIsConnectedToAcOut;True; -/Relays/K3Inverter1IsConnectedToAcOut;True; -/Relays/K3Inverter2IsConnectedToAcOut;True; -/Relays/K3Inverter3IsConnectedToAcOut;True; -/Relays/K3Inverter4IsConnectedToAcOut;True; -/Relays/FiWarning;False; -/Relays/FiError;False; -/Relays/K2ConnectAcInToAcOut;True; -/Relays/K3InvertersAreConnectedToAcOut;True; -/Mppt/Dc/Voltage;772.454;V -/Mppt/Dc/Current;10.655000000000001;A -/Mppt/Dc/Power;8230.497370000001;W -/Mppt/Strings/1/Voltage;690.09;V -/Mppt/Strings/1/Current;3.221;A -/Mppt/Strings/1/Power;2222.7798900000003;W -/Mppt/Strings/2/Voltage;599.549;V -/Mppt/Strings/2/Current;3.23;A -/Mppt/Strings/2/Power;1936.54327;W -/Mppt/Strings/3/Voltage;695.46;V -/Mppt/Strings/3/Current;3.371;A -/Mppt/Strings/3/Power;2344.39566;W -/Mppt/Strings/4/Voltage;623.849;V -/Mppt/Strings/4/Current;2.868;A -/Mppt/Strings/4/Power;1789.198932;W -/Config/MinSoc;20; -/Config/LastEoc;0; -/Config/PConstant;0.5; -/Config/ForceChargePower;1000000; -/Config/ForceDischargePower;-1000000; -/Config/MaxInverterPower;32000; -/Config/GridSetPoint;0; -/Config/SelfDischargePower;200; -/Config/HoldSocZone;1; -/Config/ControllerPConstant;0.5; -/SystemState/Message;Panic: Unknown State!; -/SystemState/Id;100; -/LoadOnDc/Power;100;`; - const s3Access = new S3Access( "saliomameiringen", "sos-ch-dk-2", @@ -510,7 +45,6 @@ export const fetchData = ( return Promise.resolve(FetchResult.notAvailable); } else if (r.status === 200) { const text = await r.text(); - console.log("csv", parseCsv(text)); return parseCsv(text); } else { console.error("unexpected status code"); @@ -533,11 +67,9 @@ const ScalarGraph = () => { timeRange[0].toDate(), timeRange[timeRange.length - 1].toDate(), ]); - const [uiRevision, setUiRevision] = useState(Math.random()); const [plotTitles, setPlotTitles] = useState([]); - const { toggles, setToggles, setCheckedToggles, checkedToggles } = - useContext(LogContext); + const { toggles, setToggles, checkedToggles } = useContext(LogContext); const times$ = useMemo(() => new BehaviorSubject(timeRange), []); @@ -556,7 +88,6 @@ const ScalarGraph = () => { if (toggles === null && toggleValues && toggleValues.value) { const treeElements = getTreeElements(toggleValues.value); setToggles(treeElements); - setCheckedToggles(flattenToggles(treeElements)); } }); return () => subscription.unsubscribe(); @@ -628,113 +159,95 @@ const ScalarGraph = () => { const range0 = new Date(xaxisRange0); const range1 = new Date(xaxisRange1); setRange([range0, range1]); - setUiRevision(Math.random()); getCacheSeries(range0, range1); } }, [getCacheSeries] ); - const Row = memo((props: any) => { - const { data, index, style } = props; - const visibleGraphs = Object.keys(data).filter((path) => { - return checkedToggles ? checkedToggles[path] : false; - }); - if (data[visibleGraphs[index]]) { - const isScalar = isNumeric(data[visibleGraphs[index]].y[0]); - const graphData = isScalar - ? [ - { - ...data[visibleGraphs[index]], - type: "scatter", - mode: "lines+markers", - fill: "tozeroy", - }, - ] - : transformToBarGraphData(data[visibleGraphs[index]]); - const barGraphLayout: Partial = !isScalar - ? { - bargap: 0, - barmode: "stack", - barnorm: "percent", + const renderGraphs = () => { + if (checkedToggles.length > 0) { + const coordinateTimeSeries = transformToGraphData(timeSeries); + const visibleGraphs = Object.keys(coordinateTimeSeries).filter((path) => { + console.log('checkedToggles',coordinateTimeSeries, checkedToggles) + return checkedToggles.find((toggle) => toggle === path) } - : {}; - return ( -
- -
); + console.log('visibleGraphs', visibleGraphs) + if (visibleGraphs.length > 0) { + return ( +
+ + + + {visibleGraphs.map((path) => { + const isScalar = isNumeric(coordinateTimeSeries[path].y[0]); + const data = isScalar + ? [ + { + ...coordinateTimeSeries[path], + type: "scatter", + mode: "lines", + fill: "tozeroy", + }, + ] + : transformToBarGraphData(coordinateTimeSeries[path]); + const barGraphLayout: Partial = !isScalar + ? { + bargap: 0, + barmode: "stack", + barnorm: "percent", + } + : {}; + console.log("graphdata", coordinateTimeSeries); + return ( + + ); + })} +
+ ); + } } - return null; - }, areEqual); - - if ( - checkedToggles && - Object.keys(checkedToggles).find((toggle) => { - return checkedToggles[toggle]; - }) - ) { - const coordinateTimeSeries = transformToGraphData(timeSeries); return ( -
- - - - checkedToggles[toggle] - ).length - 1 - } - itemSize={() => 500} - width="100%" - itemData={coordinateTimeSeries} - > - {Row} - -
+ + + ); - } + }; - return ( - - - - ); + return <>{renderGraphs()}; }; export default ScalarGraph; diff --git a/typescript/Frontend/src/components/Installations/Log/TopologyBox.tsx b/typescript/Frontend/src/components/Installations/Log/TopologyBox.tsx index c73b9e3ea..3eb85a039 100644 --- a/typescript/Frontend/src/components/Installations/Log/TopologyBox.tsx +++ b/typescript/Frontend/src/components/Installations/Log/TopologyBox.tsx @@ -1,79 +1,79 @@ -import { Box } from "@mui/material"; -import { getBoxColor } from "../../../util/graph.util"; +import {Box} from "@mui/material"; +import {getBoxColor} from "../../../util/graph.util"; export type BoxData = { - label: string; - values: (string | number)[]; - unit: string; + label: string; + values: (string | number)[]; + unit: string; }; export type TopologyBoxProps = { - title?: string; - data?: BoxData; + title?: string; + data?: BoxData; }; const isInt = (value: number) => { - return value % 1 === 0; + return value % 1 === 0; }; export const BOX_SIZE = 85; const TopologyBox = (props: TopologyBoxProps) => { - const { titleColor, boxColor } = getBoxColor(props.title); - if (props.title === "Battery") console.log(props.data?.values, "data"); - return ( - -

- {props.title} -

-
- {props.data && ( - <> - {props.data.values.map((value, index) => { - return ( -

{`${ - props.data && props.data.values.length === 3 - ? "L" + (index + 1) + " " - : "" - }${ - !isInt(Number(value)) ? Number(value).toPrecision(4) : value - }${props.data?.unit}`}

- ); - })} - - )} -
-
- ); + const {titleColor, boxColor} = getBoxColor(props.title); + return ( + +

+ {props.title} +

+
+ {props.data && ( + <> + {props.data.values.map((value, index) => { + return ( +

{`${ + props.data && props.data.values.length === 3 + ? "L" + (index + 1) + " " + : "" + }${ + !isInt(Number(value)) ? Number(value).toPrecision(4) : value + }${props.data?.unit}`}

+ ); + })} + + )} +
+
+ ); }; export default TopologyBox; diff --git a/typescript/Frontend/src/components/Installations/Log/TopologyFlow.tsx b/typescript/Frontend/src/components/Installations/Log/TopologyFlow.tsx index d3def8fb3..4f3912382 100644 --- a/typescript/Frontend/src/components/Installations/Log/TopologyFlow.tsx +++ b/typescript/Frontend/src/components/Installations/Log/TopologyFlow.tsx @@ -9,7 +9,6 @@ export type TopologyFlowProps = { hidden?: boolean; }; const TopologyFlow = (props: TopologyFlowProps) => { - console.log("amount", props.amount, props.data?.values); const length = Math.abs((props.amount ?? 1) * BOX_SIZE); const values = props.data?.values; return ( diff --git a/typescript/Frontend/src/dataCache/dataCache.ts b/typescript/Frontend/src/dataCache/dataCache.ts index c23a1966d..3bfeda572 100644 --- a/typescript/Frontend/src/dataCache/dataCache.ts +++ b/typescript/Frontend/src/dataCache/dataCache.ts @@ -109,7 +109,6 @@ export default class DataCache> { //What about string nodes? like Alarms for (const k of Object.keys(dataBefore)) { const beforeData = dataBefore[k].value; - console.log(dataAfter[k]); const afterData = Number(dataAfter[k].value); let foo = interpolated[k]; if (foo) { diff --git a/typescript/Frontend/src/util/graph.util.tsx b/typescript/Frontend/src/util/graph.util.tsx index 34f5cde19..9df5afb52 100644 --- a/typescript/Frontend/src/util/graph.util.tsx +++ b/typescript/Frontend/src/util/graph.util.tsx @@ -1,7 +1,6 @@ import { Datum, TypedArray } from "plotly.js"; import { TreeElement, - ToggleElement, } from "../components/Installations/Log/CheckboxTree"; import { TimeRange, UnixTime } from "../dataCache/time"; import { DataPoint, DataRecord } from "../dataCache/data"; @@ -143,7 +142,6 @@ export const extractTopologyValues = ( const values = topologyPaths[topologyKey as keyof TopologyValues].map( (topologyPath) => timeSeriesValue[topologyPath] ); - console.log("values", values, topologyKey); switch (topologyKey as keyof TopologyValues) { case "gridToAcInConnection": topologyValues = [ @@ -153,7 +151,6 @@ export const extractTopologyValues = ( default: topologyValues = values.map((element) => element.value); } - console.log("topologyValues", topologyValues); return { ...acc, [topologyKey]: { @@ -200,8 +197,9 @@ export const parseCsv = (text: string): DataRecord => { }); const x = y .map((fields) => { - if (isNaN(Number(fields[1]))) { - console.log("fields", fields[1]); + if (fields[0] === "/AcDc/Warnings") + console.log("warnings", fields[1], isNaN(+fields[1])); + if (isNaN(Number(fields[1])) || fields[1] === "") { return { [fields[0]]: { value: fields[1], unit: fields[2] } }; } return { [fields[0]]: { value: parseFloat(fields[1]), unit: fields[2] } }; @@ -210,17 +208,6 @@ export const parseCsv = (text: string): DataRecord => { return x; }; -export const flattenToggles = (toggles: TreeElement[]): ToggleElement => { - return toggles.reduce((acc, current) => { - if (current.children.length > 0) { - acc[current.id] = false; - return { ...acc, ...flattenToggles(current.children) }; - } - acc[current.id] = false; - return acc; - }, {} as ToggleElement); -}; - export const insertTreeElements = ( children: TreeElement[] = [], [head, ...tail]: string[] @@ -291,7 +278,7 @@ export const transformToBarGraphData = (data: GraphCoordinates) => { marker: { color: stringToColor(split) }, type: "bar", name: split, - showlegend: !foundName, + showlegend: split.length > 0 ? !foundName : false, } as any; }); }