This commit is contained in:
Noe 2023-07-03 14:47:18 +02:00
commit 30b45281d6
20 changed files with 170 additions and 134 deletions

View File

@ -1,8 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configurations>Debug;Release;Release-Server</Configurations>
<Platforms>AnyCPU;linux-arm</Platforms>
</PropertyGroup>
<Import Project="../InnovEnergy.App.props" /> <Import Project="../InnovEnergy.App.props" />
<ItemGroup> <ItemGroup>
@ -26,4 +22,4 @@
<ProjectReference Include="../../Lib/Utils/Utils.csproj" /> <ProjectReference Include="../../Lib/Utils/Utils.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -18,17 +18,17 @@ echo -e "\n============================ Deploy ============================\n"
rsync -v \ rsync -v \
./bin/Release/$dotnet_version/linux-x64/publish/* \ ./bin/Release/$dotnet_version/linux-x64/publish/* \
ie-entwicklung@10.2.3.115:~/salimax $username@$salimax_ip:~/salimax
echo -e "\n============================ Restart Salimax sevice ============================\n" echo -e "\n============================ Restart Salimax sevice ============================\n"
ssh -tt \ ssh -tt \
ie-entwicklung@10.2.3.115 \ $username@$salimax_ip \
sudo systemctl restart salimax.service sudo systemctl restart salimax.service
echo -e "\n============================ Print service output ============================\n" echo -e "\n============================ Print service output ============================\n"
ssh -tt \ ssh -tt \
ie-entwicklung@10.2.3.115 \ $username@$salimax_ip \
journalctl -f -u salimax.service journalctl -f -u salimax.service

View File

@ -24,4 +24,16 @@ public static class Logger
_logger.LogDebug(t.ToString()); // TODO: check warning _logger.LogDebug(t.ToString()); // TODO: check warning
return t; return t;
} }
public static T LogError<T>(this T t) where T : notnull
{
_logger.LogError(t.ToString()); // TODO: check warning
return t;
}
public static T LogWarning<T>(this T t) where T : notnull
{
_logger.LogWarning(t.ToString()); // TODO: check warning
return t;
}
} }

View File

@ -249,11 +249,11 @@ internal static class Program
// Voltage Measurement Values // Voltage Measurement Values
//var inverterVoltage = new Voltage [(Int32)s.AcDc.Ac.L1.Voltage, (Int32)s.AcDc.Ac.L2.Voltage, (Int32)s.AcDc.Ac.L3.Voltage]; //var inverterVoltage = new Voltage [(Int32)s.AcDc.Ac.L1.Voltage, (Int32)s.AcDc.Ac.L2.Voltage, (Int32)s.AcDc.Ac.L3.Voltage];
//var dcLinkVoltage = s.DcDc.Dc.Link.Voltage; //var dcLinkVoltage = s.DcDc.Dc.Link.Voltage;
var dc48Voltage = s.DcDc.Dc.Battery.Voltage; var dc48Voltage = s.DcDc.Dc.Battery.Voltage.ToDisplayString();
var batteryVoltage = s.Battery.Dc.Voltage; var batteryVoltage = s.Battery.Dc.Voltage.ToDisplayString;
var batterySoc = s.Battery.Soc; var batterySoc = s.Battery.Soc.ToDisplayString();
var batteryCurrent = s.Battery.Dc.Current; var batteryCurrent = s.Battery.Dc.Current.ToDisplayString();
var batteryTemp = s.Battery.Temperature; var batteryTemp = s.Battery.Temperature.ToDisplayString();
var gridBusColumn = ColumnBox("Pv", "Grid Bus", "Load" , gridVoltageByPhase , gridLoadPower); var gridBusColumn = ColumnBox("Pv", "Grid Bus", "Load" , gridVoltageByPhase , gridLoadPower);
var islandBusColumn = ColumnBox("Pv", "Island Bus", "Load" , inverterPowerByPhase, islandLoadPower); var islandBusColumn = ColumnBox("Pv", "Island Bus", "Load" , inverterPowerByPhase, islandLoadPower);
@ -268,16 +268,16 @@ internal static class Program
var gridBox = TextBlock.AlignLeft(gridPowerByPhase).TitleBox("Grid"); var gridBox = TextBlock.AlignLeft(gridPowerByPhase).TitleBox("Grid");
var inverterBox = TextBlock.AlignLeft(inverterPowerByAcDc).TitleBox("Inverter"); var inverterBox = TextBlock.AlignLeft(inverterPowerByAcDc).TitleBox("Inverter");
var dcDcBox = TextBlock.AlignLeft(dc48Voltage).TitleBox("DC/DC"); var dcDcBox = TextBlock.AlignLeft(dc48Voltage).TitleBox("DC/DC");
var batteryAvgBox = TextBlock.AlignLeft(batteryVoltage.ToDisplayString(), var batteryAvgBox = TextBlock.AlignLeft(batteryVoltage,
batterySoc.ToDisplayString(), batterySoc,
batteryCurrent.ToDisplayString(), batteryCurrent,
batteryTemp.ToDisplayString()) batteryTemp)
.TitleBox("Battery"); .TitleBox("Battery");
//////////////////// Batteries ///////////////////////// //////////////////// Batteries /////////////////////////
IReadOnlyList<TextBlock> batteryBoxes = s.Battery var batteryBoxes = s.Battery
.Devices .Devices
.Select(CreateIndividualBattery) .Select(CreateIndividualBattery)
.ToArray(s.Battery.Devices.Count); .ToArray(s.Battery.Devices.Count);
@ -304,10 +304,13 @@ internal static class Program
private static TextBlock CreateIndividualBattery(Battery48TlRecord battery, Int32 i) private static TextBlock CreateIndividualBattery(Battery48TlRecord battery, Int32 i)
{ {
var content = TextBlock.AlignLeft(battery.Dc.Voltage.ToDisplayString(), var content = TextBlock.AlignLeft(battery.Dc.Voltage.ToDisplayString(),
battery.Soc.ToDisplayString(), battery.Soc.ToDisplayString(),
battery.Dc.Current.ToDisplayString(), battery.Dc.Current.ToDisplayString(),
battery.Temperatures.Heating); battery.Temperatures.Cells.Average.ToDisplayString(),
battery.BusCurrent.ToDisplayString(),
battery.HeatingCurrent.ToDisplayString());
var box = content.TitleBox($"Battery {i + 1}"); var box = content.TitleBox($"Battery {i + 1}");
@ -434,6 +437,5 @@ internal static class Program
Console.WriteLine(error); Console.WriteLine(error);
} }
} }
} }

View File

@ -1,4 +1,4 @@
j#!/bin/bash #!/bin/bash
host=ie-entwicklung@10.2.3.104 host=ie-entwicklung@10.2.3.104

View File

@ -9,12 +9,12 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<InvariantGlobalization>true</InvariantGlobalization> <InvariantGlobalization>true</InvariantGlobalization>
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings> <SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
<RootNamespace>Please.reload.the.project.Rider.is.stupid</RootNamespace> <!-- <RootNamespace>Please.reload.the.project.Rider.is.stupid</RootNamespace>-->
<Authors>$(Company) Team</Authors> <Authors>$(Company) Team</Authors>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(SolutionDir)' != ''"> <!-- <PropertyGroup Condition="'$(SolutionDir)' != ''">-->
<RootNamespace>$(Company).$(MSBuildProjectDirectory.Replace($(SolutionDir), "").Replace("/",".").Replace("\","."))</RootNamespace> <!-- <RootNamespace>$(Company).$(MSBuildProjectDirectory.Replace($(SolutionDir), "").Replace("/",".").Replace("\","."))</RootNamespace>-->
</PropertyGroup> <!-- </PropertyGroup>-->
</Project> </Project>

View File

@ -23,6 +23,10 @@ public partial class Battery48TlRecord
public Strings Alarms => ParseAlarms() .OrderBy(w => w).ToList(); public Strings Alarms => ParseAlarms() .OrderBy(w => w).ToList();
public Percent Soc => _Soc; public Percent Soc => _Soc;
public Current BusCurrent => _BusCurrent;
public Current HeatingCurrent => _BusCurrent - _CellsCurrent;
public readonly struct Leds_ public readonly struct Leds_
{ {
@ -65,9 +69,9 @@ public partial class Battery48TlRecord
public readonly struct Dc_ public readonly struct Dc_
{ {
public Voltage Voltage => Self._DcVoltage; public Voltage Voltage => Self._CellsVoltage;
public Current Current => Self._DcCurrent; public Current Current => Self._CellsCurrent;
public ActivePower Power => Self._DcVoltage * Self._DcCurrent; public ActivePower Power => Self._CellsVoltage * Self._CellsCurrent;
internal Dc_(Battery48TlRecord self) => Self = self; internal Dc_(Battery48TlRecord self) => Self = self;
private Battery48TlRecord Self { get; } private Battery48TlRecord Self { get; }

View File

@ -17,8 +17,10 @@ public partial class Battery48TlRecord
[InputRegister<UInt64>(1009)] private UInt64 _AlarmFlags; [InputRegister<UInt64>(1009)] private UInt64 _AlarmFlags;
[InputRegister(1013)] private UInt16 _IoStates; [InputRegister(1013)] private UInt16 _IoStates;
[InputRegister(999, Scale = 0.01)] private Double _DcVoltage; [InputRegister(999, Scale = 0.01)] private Double _CellsVoltage;
[InputRegister(1000, Scale = 0.01, Offset = -10000)] private Double _DcCurrent; [InputRegister(1001, Scale = 0.01)] private Double _BusVoltage;
[InputRegister(1000, Scale = 0.01, Offset = -10000)] private Double _CellsCurrent;
[InputRegister(1062, Scale = 0.01, Offset = -10000)] private Double _BusCurrent;
[InputRegister(1053, Scale = 0.1)] private Double _Soc; [InputRegister(1053, Scale = 0.1)] private Double _Soc;

View File

@ -5,12 +5,9 @@ import useRouteMatch from "../../hooks/useRouteMatch";
import { useIntl } from "react-intl"; import { useIntl } from "react-intl";
import { GroupContext } from "../Context/GroupContextProvider"; import { GroupContext } from "../Context/GroupContextProvider";
import { useContext } from "react"; import { useContext } from "react";
import {
AntTabs,
StyledTab,
StyledTabBlue,
} from "../../util/installation.util";
import { colors } from "../.."; import { colors } from "../..";
import InnovenergyTab from "../Layout/InnovenergyTab";
import InnovenergyTabs from "components/Layout/InnovenergyTabs";
const GroupTabs = () => { const GroupTabs = () => {
const routeMatch = useRouteMatch([ const routeMatch = useRouteMatch([
@ -27,15 +24,10 @@ const GroupTabs = () => {
return ( return (
<Box sx={{ width: "100%" }}> <Box sx={{ width: "100%" }}>
<Box sx={{}}> <Box sx={{}}>
<AntTabs <InnovenergyTabs id="group-tabs" value={routeMatch?.pattern?.path}>
value={routeMatch?.pattern?.path}
aria-label={intl.formatMessage({
id: "groupTabs",
defaultMessage: "Group tabs",
})}
>
{currentType === "Folder" ? ( {currentType === "Folder" ? (
<StyledTabBlue
<InnovenergyTab
id="styled-tab-folder" id="styled-tab-folder"
label={intl.formatMessage({ label={intl.formatMessage({
id: "folder", id: "folder",
@ -48,7 +40,9 @@ const GroupTabs = () => {
to={routes.folder + id} to={routes.folder + id}
/> />
) : ( ) : (
<StyledTabBlue
<InnovenergyTab
sx={{ bgcolor: "#90A7C5" }}
id="styled-tab-installation" id="styled-tab-installation"
label={intl.formatMessage({ label={intl.formatMessage({
id: "installation", id: "installation",
@ -65,8 +59,8 @@ const GroupTabs = () => {
/> />
)} )}
<StyledTabBlue <InnovenergyTab
sx={{ bgcolor: colors.greyLight }} sx={{ bgcolor: "#90A7C5" }}
id="styled-tab-manage-access" id="styled-tab-manage-access"
label={intl.formatMessage({ label={intl.formatMessage({
id: "manageAccess", id: "manageAccess",
@ -78,7 +72,7 @@ const GroupTabs = () => {
component={Link} component={Link}
to={routes.manageAccess + id} to={routes.manageAccess + id}
/> />
</AntTabs> </InnovenergyTabs>
</Box> </Box>
</Box> </Box>
); );

View File

@ -4,14 +4,8 @@ import { Link } from "react-router-dom";
import routes from "../../routes.json"; import routes from "../../routes.json";
import useRouteMatch from "../../hooks/useRouteMatch"; import useRouteMatch from "../../hooks/useRouteMatch";
import { useIntl } from "react-intl"; import { useIntl } from "react-intl";
import { import InnovenergyTab from "../Layout/InnovenergyTab";
AntTabs, import InnovenergyTabs from "components/Layout/InnovenergyTabs";
StyledTab,
StyledTabBlue,
StyledTabWhite,
} from "../../util/installation.util";
import { Background } from "reactflow";
import {colors} from '/home/ig/code/git_trunk/typescript/Frontend/src/index';
const InstallationTabs = () => { const InstallationTabs = () => {
const routeMatch = useRouteMatch([ const routeMatch = useRouteMatch([
@ -27,15 +21,12 @@ const InstallationTabs = () => {
return ( return (
<Box sx={{ width: "100%" }}> <Box sx={{ width: "100%" }}>
<Box sx={{}}> <Box sx={{}}>
<AntTabs <InnovenergyTabs
id="installation-tabs"
value={routeMatch?.pattern?.path ?? routes.installation + ":id"} value={routeMatch?.pattern?.path ?? routes.installation + ":id"}
aria-label={intl.formatMessage({
id: "installationTabs",
defaultMessage: "Installation tabs",
})}
> >
<StyledTabBlue
sx={{ bgcolor: colors }} <InnovenergyTab
id={"installation-tab-installation"} id={"installation-tab-installation"}
label={intl.formatMessage({ label={intl.formatMessage({
id: "installation", id: "installation",
@ -47,8 +38,7 @@ const InstallationTabs = () => {
component={Link} component={Link}
to={routes.installation + id} to={routes.installation + id}
/> />
<StyledTabWhite <InnovenergyTab
sx={{ bgcolor: colors.greyLight}}
id={"installation-tab-liveView"} id={"installation-tab-liveView"}
label={intl.formatMessage({ label={intl.formatMessage({
id: "liveView", id: "liveView",
@ -60,8 +50,7 @@ const InstallationTabs = () => {
component={Link} component={Link}
to={routes.liveView + id} to={routes.liveView + id}
/> />
<StyledTab <InnovenergyTab
sx={{ bgcolor: colors.greyLight }}
id={"installation-tab-log"} id={"installation-tab-log"}
label={intl.formatMessage({ label={intl.formatMessage({
id: "log", id: "log",
@ -71,7 +60,7 @@ const InstallationTabs = () => {
component={Link} component={Link}
to={routes.log + id} to={routes.log + id}
/> />
</AntTabs> </InnovenergyTabs>
</Box> </Box>
</Box> </Box>
); );

View File

@ -7,7 +7,6 @@ import ChevronRightIcon from "@mui/icons-material/ChevronRight";
import useRouteMatch from "../../../hooks/useRouteMatch"; import useRouteMatch from "../../../hooks/useRouteMatch";
import routes from "../../../routes.json"; import routes from "../../../routes.json";
import React from "react"; import React from "react";
import { blueGrey } from "@mui/material/colors";
import {colors} from "/home/ig/code/git_trunk/typescript/Frontend/src/index"; import {colors} from "/home/ig/code/git_trunk/typescript/Frontend/src/index";
export interface ToggleElement { export interface ToggleElement {

View File

@ -75,6 +75,7 @@ const DateRangePicker = (props: DateRangePickerProps) => {
}, },
".Mui-focused fieldset.MuiOutlinedInput-notchedOutline": { ".Mui-focused fieldset.MuiOutlinedInput-notchedOutline": {
borderColor: theme.palette.secondary.main, }, borderColor: theme.palette.secondary.main, },
}} }}
onChange={(newValue) => { onChange={(newValue) => {
if (newValue) { if (newValue) {

View File

@ -60,7 +60,7 @@ export const fetchData = (
const ScalarGraph = () => { const ScalarGraph = () => {
const timeRange = createTimes( const timeRange = createTimes(
UnixTime.now() /* .fromTicks(1682085650) */ UnixTime.now() /* .fromTicks(1682085650) */
.rangeBefore(TimeSpan.fromDays(4)), .rangeBefore(TimeSpan.fromDays(5)),
NUMBER_OF_NODES NUMBER_OF_NODES
); );
const [timeSeries, setTimeSeries] = useState<RecordSeries>([]); const [timeSeries, setTimeSeries] = useState<RecordSeries>([]);
@ -173,10 +173,8 @@ const ScalarGraph = () => {
if (checkedToggles.length > 0) { if (checkedToggles.length > 0) {
const coordinateTimeSeries = transformToGraphData(timeSeries); const coordinateTimeSeries = transformToGraphData(timeSeries);
const visibleGraphs = Object.keys(coordinateTimeSeries).filter((path) => { const visibleGraphs = Object.keys(coordinateTimeSeries).filter((path) => {
return checkedToggles.find((toggle) => toggle === path); return checkedToggles.find((toggle) => toggle === path);
}); });
if (visibleGraphs.length > 0) { if (visibleGraphs.length > 0) {
return ( return (
<div style={{ marginTop: "20px" }}> <div style={{ marginTop: "20px" }}>

View File

@ -0,0 +1,41 @@
import { styled, SxProps, Tab, Tabs, Theme, useTheme } from "@mui/material";
import { TabProps } from "@mui/material/Tab/Tab";
const InnovenergyTab = (props: any) => {
const theme = useTheme();
return (
<Tab
{...props}
disableRipple
sx={{
...props.sx,
bottom: -1,
textTransform: "uppercase",
fontWeight: theme.typography.fontWeightRegular,
fontSize: theme.typography.pxToRem(14),
marginRight: theme.spacing(1),
background: "0 0",
border: "1px solid transparent",
borderTopLeftRadius: "0.3rem",
borderTopRightRadius: "0.3rem",
padding: ".5rem 1rem",
textDecoration: "none",
transition: `color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out`,
"&.Mui-selected": {
color: "#000000",
backgroundColor: "#CCD6E4",
borderColor: "#90A7c5 #90A7c5 #F2F4F8",
marginTop: "1px",
bottom: -1,
...(props.sx ? props.sx["&.Mui-selected"] : {}),
},
"&.Mui-focusVisible": {
backgroundColor: "rgba(100, 95, 228, 0.32)",
...(props.sx ? props.sx["&.Mui-focusVisible"] : {}),
},
}}
/>
);
};
export default InnovenergyTab;

View File

@ -0,0 +1,42 @@
import { SxProps, Tabs, Theme } from "@mui/material";
import { ReactNode } from "react";
interface AntTabsProps {
id: string;
value?: string;
sx?: SxProps<Theme>;
children: ReactNode;
}
const InnovenergyTabs = (props: AntTabsProps) => {
return (
<Tabs
{...props}
sx={{
...props.sx,
borderBottom: "1px solid #90A7c5",
overflow: "visible!important",
"& div.MuiTabs-scroller": {
overflow: "visible!important",
},
"&.Mui-selected": {
color: "#000000",
backgroundColor: "red",
borderColor: `#90A7c5 #90A7c5 #fff`,
},
"& .MuiTabs-indicator": {
display: "flex",
justifyContent: "center",
backgroundColor: "transparent",
},
"&.MuiTabs-root": {
width: "100%",
},
}}
>
{props.children}
</Tabs>
);
};
export default InnovenergyTabs;

View File

@ -15,23 +15,6 @@ const ModeButtons = () => {
return ( return (
<> <>
{/* <AntTabs
value={routeMatch?.pattern?.path ?? routes.installation + ":id"}
aria-label="basic tabs example"
>
<StyledTab
icon={<ListIcon />}
value={routes.installations + routes.list + "*"}
component={Link}
to={routes.list}
/>
<StyledTab
icon={<AccountTreeIcon />}
value={routes.installations + routes.tree + "*"}
component={Link}
to={routes.tree}
/>
</AntTabs> */}
<ToggleButtonGroup <ToggleButtonGroup
id="mode-button-group" id="mode-button-group"
color="primary" color="primary"

View File

@ -2,13 +2,8 @@ import { FormattedMessage, useIntl } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import useRouteMatch from "../../hooks/useRouteMatch"; import useRouteMatch from "../../hooks/useRouteMatch";
import routes from "../../routes.json"; import routes from "../../routes.json";
import { import InnovenergyTab from "./InnovenergyTab";
AntTabs, import InnovenergyTabs from "./InnovenergyTabs";
AntTabsBig,
StyledTab,
StyledTabBig,
} from "../../util/installation.util";
import { Background } from "reactflow";
const NavigationButtons = () => { const NavigationButtons = () => {
const routeMatch = useRouteMatch([ const routeMatch = useRouteMatch([
@ -19,37 +14,11 @@ const NavigationButtons = () => {
return ( return (
<> <>
{/* <ToggleButtonGroup <InnovenergyTabs
color="primary" id="navigation-buttons-tabs"
value={routeMatch?.pattern?.path} value={routeMatch?.pattern?.path}
exclusive
sx={{ mb: 1 }}
fullWidth
> >
<ToggleButton <InnovenergyTab
value={routes.installations + "*"}
component={Link}
to={routes.installations}
>
<FormattedMessage id="installations" defaultMessage="Installations" />
</ToggleButton>
<ToggleButton
value={routes.users + "*"}
component={Link}
to={routes.users}
>
<FormattedMessage id="users" defaultMessage="Users" />
</ToggleButton>
</ToggleButtonGroup> */}
<AntTabsBig
id="navigation-buttons-group"
value={routeMatch?.pattern?.path}
aria-label={intl.formatMessage({
id: "navigationTabs",
defaultMessage: "Navigation tabs",
})}
>
<StyledTabBig
id="navigation-tab-installations" id="navigation-tab-installations"
value={routes.installations + "*"} value={routes.installations + "*"}
component={Link} component={Link}
@ -61,14 +30,14 @@ const NavigationButtons = () => {
/> />
} }
/> />
<StyledTabBig <InnovenergyTab
id="navigation-tab-users" id="navigation-tab-users"
value={routes.users + "*"} value={routes.users + "*"}
component={Link} component={Link}
to={routes.users} to={routes.users}
label={<FormattedMessage id="users" defaultMessage="Users" />} label={<FormattedMessage id="users" defaultMessage="Users" />}
/> />
</AntTabsBig> </InnovenergyTabs>
</> </>
); );
}; };

View File

@ -3,11 +3,8 @@ import { Link } from "react-router-dom";
import routes from "../../routes.json"; import routes from "../../routes.json";
import useRouteMatch from "../../hooks/useRouteMatch"; import useRouteMatch from "../../hooks/useRouteMatch";
import { useIntl } from "react-intl"; import { useIntl } from "react-intl";
import { import InnovenergyTab from "../Layout/InnovenergyTab";
AntTabs, import InnovenergyTabs from "components/Layout/InnovenergyTabs";
StyledTab,
StyledTabBlue,
} from "../../util/installation.util";
const UserTabs = () => { const UserTabs = () => {
const routeMatch = useRouteMatch([routes.users + routes.user + ":id"]); const routeMatch = useRouteMatch([routes.users + routes.user + ":id"]);
@ -17,7 +14,7 @@ const UserTabs = () => {
if (id) { if (id) {
return ( return (
<AntTabs <InnovenergyTabs
id="users-tabs" id="users-tabs"
value={routeMatch?.pattern?.path ?? routes.user + ":id"} value={routeMatch?.pattern?.path ?? routes.user + ":id"}
aria-label={intl.formatMessage({ aria-label={intl.formatMessage({
@ -25,7 +22,7 @@ const UserTabs = () => {
defaultMessage: "user tabs", defaultMessage: "user tabs",
})} })}
> >
<StyledTabBlue <InnovenergyTab
id="users-tab-user" id="users-tab-user"
label={intl.formatMessage({ label={intl.formatMessage({
id: "user", id: "user",
@ -34,8 +31,13 @@ const UserTabs = () => {
value={routes.users + routes.user + ":id"} value={routes.users + routes.user + ":id"}
component={Link} component={Link}
to={routes.user + id} to={routes.user + id}
sx={{
"&.Mui-selected": {
backgroundColor: "#CCD6E4",
},
}}
/> />
</AntTabs> </InnovenergyTabs>
); );
} }
return null; return null;

View File

@ -0,0 +1 @@
$innovenergy-orange: #F59100;

View File

@ -1,5 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"baseUrl": "src",
"target": "es5", "target": "es5",
"lib": [ "lib": [
"dom", "dom",