Merge branch 'main' of https://git.innov.energy/Innovenergy/git_trunk
This commit is contained in:
commit
30b45281d6
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
j#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
host=ie-entwicklung@10.2.3.104
|
host=ie-entwicklung@10.2.3.104
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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; }
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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" }}>
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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"
|
||||||
|
|
|
@ -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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
$innovenergy-orange: #F59100;
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
"baseUrl": "src",
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"lib": [
|
"lib": [
|
||||||
"dom",
|
"dom",
|
||||||
|
|
Loading…
Reference in New Issue