From f1cd5c07367212c8877689f0491ebd62e9809076 Mon Sep 17 00:00:00 2001 From: Yinyin Liu Date: Tue, 24 Mar 2026 12:12:34 +0100 Subject: [PATCH] scribe data from Information tab for configuration tab --- .../src/content/dashboards/Log/graph.util.tsx | 1 + .../SodistoreHomeConfiguration.tsx | 169 +++++++++--------- typescript/frontend-marios2/src/lang/de.json | 5 + typescript/frontend-marios2/src/lang/en.json | 5 + typescript/frontend-marios2/src/lang/fr.json | 5 + typescript/frontend-marios2/src/lang/it.json | 5 + 6 files changed, 101 insertions(+), 89 deletions(-) diff --git a/typescript/frontend-marios2/src/content/dashboards/Log/graph.util.tsx b/typescript/frontend-marios2/src/content/dashboards/Log/graph.util.tsx index e74ca9df3..ff7f7badf 100644 --- a/typescript/frontend-marios2/src/content/dashboards/Log/graph.util.tsx +++ b/typescript/frontend-marios2/src/content/dashboards/Log/graph.util.tsx @@ -702,6 +702,7 @@ export type ConfigurationValues = { batteriesCountPerInverter: number[]; clusterNumber: number; PvNumber: number; + pvCountPerInverter: number[]; controlPermission:boolean; // For sodistoreHome-Sinexcel: TimeChargeDischarge mode diff --git a/typescript/frontend-marios2/src/content/dashboards/SodiohomeInstallations/SodistoreHomeConfiguration.tsx b/typescript/frontend-marios2/src/content/dashboards/SodiohomeInstallations/SodistoreHomeConfiguration.tsx index 2eee428e3..29e61be00 100644 --- a/typescript/frontend-marios2/src/content/dashboards/SodiohomeInstallations/SodistoreHomeConfiguration.tsx +++ b/typescript/frontend-marios2/src/content/dashboards/SodiohomeInstallations/SodistoreHomeConfiguration.tsx @@ -5,6 +5,7 @@ import { CardContent, CircularProgress, Container, + Divider, FormControl, Grid, IconButton, @@ -25,6 +26,7 @@ import axiosConfig from '../../../Resources/axiosConfig'; import { UserContext } from '../../../contexts/userContext'; import { ProductIdContext } from '../../../contexts/ProductIdContextProvider'; import { I_Installation } from 'src/interfaces/InstallationTypes'; +import { INSTALLATION_PRESETS } from '../Information/installationSetupUtils'; import { LocalizationProvider } from '@mui/x-date-pickers'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import {DateTimePicker } from '@mui/x-date-pickers'; @@ -106,6 +108,8 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) { batteriesCount: props.values.Config.BatteriesCount, clusterNumber: props.values.Config.ClusterNumber ?? 1, PvNumber: props.values.Config.PvNumber ?? 0, + pvCountPerInverter: (props.values.Config as any).PvCountPerInverter + ?? Array(inverterNum).fill(props.values.Config.PvNumber ?? 0), timeChargeandDischargePower: props.values.Config?.TimeChargeandDischargePower ?? 0, startTimeChargeandDischargeDayandTime: (() => { const raw = props.values.Config?.StartTimeChargeandDischargeDayandTime; @@ -251,6 +255,7 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) { batteriesCount: formValues.batteriesCountPerInverter?.[0] ?? formValues.batteriesCount, clusterNumber:formValues.clusterNumber, PvNumber:formValues.PvNumber, + pvCountPerInverter: formValues.pvCountPerInverter, timeChargeandDischargePower: formValues.timeChargeandDischargePower, startTimeChargeandDischargeDayandTime: formValues.startTimeChargeandDischargeDayandTime ? new Date(formValues.startTimeChargeandDischargeDayandTime.getTime() - formValues.startTimeChargeandDischargeDayandTime.getTimezoneOffset() * 60000) @@ -416,7 +421,7 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) { sx={{ transform: "scale(1.4)", marginLeft: "15px" }} /> } - + sx={{ ml: 0 }} label={ -
- { - setFormDirty(true); - const raw = e.target.value; - if (raw === '') { - setFormValues((prev) => ({ ...prev, inverterNumber: '' as any })); - return; - } - const parsed = parseInt(raw); - if (isNaN(parsed) || parsed < 1) return; - const currentArr = formValues.batteriesCountPerInverter || [1]; - const newArr = Array.from({ length: parsed }, (_, i) => currentArr[i] ?? 1); - setFormValues((prev) => ({ - ...prev, - inverterNumber: parsed, - batteriesCountPerInverter: newArr, - })); - }} - fullWidth - /> -
- - {Array.from({ length: formValues.inverterNumber ?? 1 }, (_, i) => ( -
- { - setFormDirty(true); - const raw = e.target.value; - if (raw === '') { - setFormValues((prev) => { - const arr = [...(prev.batteriesCountPerInverter || [1])]; - arr[i] = '' as any; - return { ...prev, batteriesCountPerInverter: arr }; - }); - return; - } - const parsed = parseInt(raw); - if (isNaN(parsed) || parsed < 1) return; - setFormValues((prev) => { - const arr = [...(prev.batteriesCountPerInverter || [1])]; - arr[i] = parsed; - return { ...prev, batteriesCountPerInverter: arr }; - }); - }} - fullWidth - /> -
- ))} - {device === 4 && ( <> -
- - } - name="clusterNumber" - value={formValues.clusterNumber} - onChange={handleChange} - fullWidth - /> -
- -
- - } - name="PvNumber" - value={formValues.PvNumber} - onChange={handleChange} - fullWidth - /> -
+ + + + )} + {device === 4 && (() => { + const preset = INSTALLATION_PRESETS[props.installation.installationModel]; + const inverterCount = preset ? preset.length : 1; + const pvStrings = (props.installation.pvStringsPerInverter || '') + .split(',') + .map((s) => s.trim()) + .filter((s) => s !== ''); + + return ( + <> +
+ +
+ + {preset && preset.map((clusters, i) => { + const batteriesInInverter = clusters.reduce((a, b) => a + b, 0); + return ( +
+ +
+ ); + })} + + {Array.from({ length: inverterCount }, (_, i) => ( +
+ +
+ ))} + + ); + })()} + + {device === 4 && ( + <> + + + + + + )}
{/*
+ {device === 4 && ( + <> + + + + + + )} +