@gridsuite/commons-ui 0.217.0 → 0.219.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/features/index.js +16 -0
  2. package/dist/features/network-modifications/battery/batteryDialog.type.d.ts +27 -0
  3. package/dist/features/network-modifications/battery/batteryDialog.type.js +1 -0
  4. package/dist/features/network-modifications/battery/index.d.ts +2 -0
  5. package/dist/features/network-modifications/battery/index.js +17 -1
  6. package/dist/features/network-modifications/battery/modification/BatteryDialogHeader.d.ts +6 -0
  7. package/dist/features/network-modifications/battery/modification/BatteryDialogHeader.js +87 -0
  8. package/dist/features/network-modifications/battery/modification/BatteryDialogTabs.d.ts +13 -0
  9. package/dist/features/network-modifications/battery/modification/BatteryDialogTabs.js +51 -0
  10. package/dist/features/network-modifications/battery/modification/BatteryDialogTabsContent.d.ts +8 -0
  11. package/dist/features/network-modifications/battery/modification/BatteryDialogTabsContent.js +177 -0
  12. package/dist/features/network-modifications/battery/modification/BatteryModificationForm.d.ts +6 -0
  13. package/dist/features/network-modifications/battery/modification/BatteryModificationForm.js +50 -0
  14. package/dist/features/network-modifications/battery/modification/batteryModification.types.d.ts +31 -0
  15. package/dist/features/network-modifications/battery/modification/batteryModification.types.js +1 -0
  16. package/dist/features/network-modifications/battery/modification/batteryModification.utils.d.ts +95 -0
  17. package/dist/features/network-modifications/battery/modification/batteryModification.utils.js +163 -0
  18. package/dist/features/network-modifications/battery/modification/batteryTabs.utils.d.ts +8 -0
  19. package/dist/features/network-modifications/battery/modification/batteryTabs.utils.js +38 -0
  20. package/dist/features/network-modifications/battery/modification/index.d.ts +13 -0
  21. package/dist/features/network-modifications/battery/modification/index.js +18 -0
  22. package/dist/features/network-modifications/index.js +16 -0
  23. package/dist/features/notifications/NotificationsProvider.js +6 -6
  24. package/dist/index.js +19 -1
  25. package/dist/redux/commonStore.d.ts +3 -0
  26. package/dist/redux/commonStore.js +10 -1
  27. package/dist/redux/index.js +4 -2
  28. package/dist/translations/en/networkModificationsEn.d.ts +6 -0
  29. package/dist/translations/en/networkModificationsEn.js +6 -0
  30. package/dist/translations/fr/networkModificationsFr.d.ts +6 -0
  31. package/dist/translations/fr/networkModificationsFr.js +6 -0
  32. package/package.json +1 -1
@@ -157,6 +157,12 @@ import { emptyModificationByAssignmentFormData, modificationByAssignmentDtoToFor
157
157
  import { DataType } from "./network-modifications/by-filter/assignment/assignment/assignment.type.js";
158
158
  import { batteryCreationDtoToForm, batteryCreationEmptyFormData, batteryCreationFormSchema, batteryCreationFormToDto } from "./network-modifications/battery/creation/batteryCreation.utils.js";
159
159
  import { BatteryCreationForm } from "./network-modifications/battery/creation/BatteryCreationForm.js";
160
+ import { batteryModificationDtoToForm, batteryModificationEmptyFormData, batteryModificationFormSchema, batteryModificationFormToDto } from "./network-modifications/battery/modification/batteryModification.utils.js";
161
+ import { BATTERY_TAB_FIELDS, BatteryDialogTab } from "./network-modifications/battery/modification/batteryTabs.utils.js";
162
+ import { BatteryDialogHeader } from "./network-modifications/battery/modification/BatteryDialogHeader.js";
163
+ import { BatteryDialogTabs } from "./network-modifications/battery/modification/BatteryDialogTabs.js";
164
+ import { BatteryDialogTabsContent } from "./network-modifications/battery/modification/BatteryDialogTabsContent.js";
165
+ import { BatteryModificationForm } from "./network-modifications/battery/modification/BatteryModificationForm.js";
160
166
  import { CHARACTERISTICS_CHOICES, SHUNT_COMPENSATOR_TYPES, computeSwitchedOnValue } from "./network-modifications/shunt-compensator/common/shuntCompensator.utils.js";
161
167
  import { CharacteristicsForm } from "./network-modifications/shunt-compensator/common/CharacteristicsForm.js";
162
168
  import { getCharacteristicsCreateFormDataFromSearchCopy, getCharacteristicsEmptyFormData, getCharacteristicsFormData, getCharacteristicsFormValidationSchema } from "./network-modifications/shunt-compensator/common/characteristicsForm.utils.js";
@@ -199,7 +205,13 @@ export {
199
205
  default2 as AuthenticationRouterErrorDisplay,
200
206
  BALANCE_TYPE,
201
207
  BASE_MODIFICATION_TABLE_COLUMNS,
208
+ BATTERY_TAB_FIELDS,
202
209
  BatteryCreationForm,
210
+ BatteryDialogHeader,
211
+ BatteryDialogTab,
212
+ BatteryDialogTabs,
213
+ BatteryDialogTabsContent,
214
+ BatteryModificationForm,
203
215
  BranchActiveReactivePowerMeasurementsForm,
204
216
  BranchConnectivityForm,
205
217
  BuildStatus,
@@ -475,6 +487,10 @@ export {
475
487
  batteryCreationEmptyFormData,
476
488
  batteryCreationFormSchema,
477
489
  batteryCreationFormToDto,
490
+ batteryModificationDtoToForm,
491
+ batteryModificationEmptyFormData,
492
+ batteryModificationFormSchema,
493
+ batteryModificationFormToDto,
478
494
  buildNewBusbarSections,
479
495
  byFilterDeletionDtoToForm,
480
496
  byFilterDeletionFormSchema,
@@ -0,0 +1,27 @@
1
+ import { ReactiveCapabilityCurvePoints, MinMaxReactiveLimitsFormInfos } from '../common/reactiveLimits/reactiveLimits.type';
2
+ import { ActivePowerControlInfos } from '../common/activePowerControl/activePowerControlForm.type';
3
+ import { ConnectablePositionFormInfos } from '../common/connectivity/connectivity.type';
4
+ import { ShortCircuitInfos } from '../common/shortCircuit/shortCircuitForm.type';
5
+ import { MeasurementInfo } from '../common/measurements/measurement.type';
6
+ export interface BatteryFormInfos {
7
+ id: string;
8
+ name: string;
9
+ maxP: number;
10
+ minP: number;
11
+ targetP: number;
12
+ targetQ: number;
13
+ connectablePosition: ConnectablePositionFormInfos;
14
+ minMaxReactiveLimits: MinMaxReactiveLimitsFormInfos;
15
+ activePowerControl: ActivePowerControlInfos;
16
+ batteryShortCircuit: ShortCircuitInfos;
17
+ reactiveCapabilityCurvePoints: ReactiveCapabilityCurvePoints[];
18
+ voltageLevelId: string;
19
+ busOrBusbarSectionId: string;
20
+ connectionDirection: string | null;
21
+ connectionName?: string | null;
22
+ connectionPosition?: number | null;
23
+ terminalConnected?: boolean | null;
24
+ measurementP: MeasurementInfo | undefined;
25
+ measurementQ: MeasurementInfo | undefined;
26
+ properties: Record<string, string> | undefined;
27
+ }
@@ -5,3 +5,5 @@
5
5
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
6
  */
7
7
  export * from './creation';
8
+ export * from './modification';
9
+ export * from './batteryDialog.type';
@@ -1,9 +1,25 @@
1
1
  import { batteryCreationDtoToForm, batteryCreationEmptyFormData, batteryCreationFormSchema, batteryCreationFormToDto } from "./creation/batteryCreation.utils.js";
2
2
  import { BatteryCreationForm } from "./creation/BatteryCreationForm.js";
3
+ import { batteryModificationDtoToForm, batteryModificationEmptyFormData, batteryModificationFormSchema, batteryModificationFormToDto } from "./modification/batteryModification.utils.js";
4
+ import { BATTERY_TAB_FIELDS, BatteryDialogTab } from "./modification/batteryTabs.utils.js";
5
+ import { BatteryDialogHeader } from "./modification/BatteryDialogHeader.js";
6
+ import { BatteryDialogTabs } from "./modification/BatteryDialogTabs.js";
7
+ import { BatteryDialogTabsContent } from "./modification/BatteryDialogTabsContent.js";
8
+ import { BatteryModificationForm } from "./modification/BatteryModificationForm.js";
3
9
  export {
10
+ BATTERY_TAB_FIELDS,
4
11
  BatteryCreationForm,
12
+ BatteryDialogHeader,
13
+ BatteryDialogTab,
14
+ BatteryDialogTabs,
15
+ BatteryDialogTabsContent,
16
+ BatteryModificationForm,
5
17
  batteryCreationDtoToForm,
6
18
  batteryCreationEmptyFormData,
7
19
  batteryCreationFormSchema,
8
- batteryCreationFormToDto
20
+ batteryCreationFormToDto,
21
+ batteryModificationDtoToForm,
22
+ batteryModificationEmptyFormData,
23
+ batteryModificationFormSchema,
24
+ batteryModificationFormToDto
9
25
  };
@@ -0,0 +1,6 @@
1
+ import { BatteryFormInfos } from '../batteryDialog.type';
2
+ export interface BatteryDialogHeaderProps {
3
+ batteryToModify?: BatteryFormInfos | null;
4
+ equipmentId?: string;
5
+ }
6
+ export declare function BatteryDialogHeader({ batteryToModify, equipmentId }: Readonly<BatteryDialogHeaderProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,87 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { Grid, TextField } from "@mui/material";
3
+ import { filledTextField } from "../../common/form.utils.js";
4
+ import "react";
5
+ import "react-hook-form";
6
+ import "../../common/properties/propertyUtils.js";
7
+ import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
8
+ import "../../../../utils/conversionUtils.js";
9
+ import "../../../../utils/types/equipmentType.js";
10
+ import "@mui/icons-material";
11
+ import "react-intl";
12
+ import "../../../../components/ui/overflowableText/OverflowableText.js";
13
+ import "localized-countries";
14
+ import "localized-countries/data/fr";
15
+ import "localized-countries/data/en";
16
+ import "notistack";
17
+ import "../../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
18
+ import "yup";
19
+ import "../../../../components/ui/treeViewFinder/TreeViewFinder.js";
20
+ import { TextInput } from "../../../../components/ui/reactHookForm/text/TextInput.js";
21
+ import "../../../../components/ui/reactHookForm/numbers/RangeInput.js";
22
+ import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
23
+ import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
24
+ import "@material-symbols/svg-400/outlined/arrows_input.svg?react";
25
+ import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
26
+ import "@material-symbols/svg-400/outlined/add_notes.svg?react";
27
+ import "../../../../components/ui/dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
28
+ import "../../../../components/ui/reactHookForm/expandableInput/ExpandableInput.js";
29
+ import "@hello-pangea/dnd";
30
+ import "../../../../components/ui/dialogs/elementSaveDialog/ElementSaveDialog.js";
31
+ import "../../../../components/ui/snackbarProvider/SnackbarProvider.js";
32
+ import "mui-nested-menu";
33
+ import "react-resizable-panels";
34
+ import "react-dom";
35
+ import "autosuggest-highlight/match";
36
+ import "autosuggest-highlight/parse";
37
+ import "clsx";
38
+ import "../../../../components/composite/filter/FilterCreationDialog.js";
39
+ import "../../../../components/composite/filter/HeaderFilterForm.js";
40
+ import "../../../../components/composite/filter/explicitNaming/ExplicitNamingFilterForm.js";
41
+ import "../../../../components/composite/filter/expert/ExpertFilterForm.js";
42
+ import "../../../../components/composite/filter/expert/ExpertFilterEditionDialog.js";
43
+ import "../../../../components/composite/filter/expert/expertFilterConstants.js";
44
+ import "react-querybuilder";
45
+ import "uuid";
46
+ import "../../../../components/composite/filter/explicitNaming/ExplicitNamingFilterEditionDialog.js";
47
+ import "../../../../components/composite/filter/utils/filterFormUtils.js";
48
+ import "@react-querybuilder/material";
49
+ import "../../../../components/composite/reactQueryBuilder/CustomReactQueryBuilder.js";
50
+ import "../../../../components/composite/reactQueryBuilder/PropertyValueEditor.js";
51
+ import "../../../../components/composite/agGridTable/BottomRightButtons.js";
52
+ import "../../../../components/composite/customAGGrid/customAggrid.js";
53
+ import "ag-grid-community";
54
+ import "react-papaparse";
55
+ import "react-csv-downloader";
56
+ import "../../common/regulatingTerminal/RegulatingTerminalForm.js";
57
+ function BatteryDialogHeader({ batteryToModify, equipmentId }) {
58
+ return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
59
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 4, children: /* @__PURE__ */ jsx(
60
+ TextField,
61
+ {
62
+ size: "small",
63
+ fullWidth: true,
64
+ label: "ID",
65
+ value: equipmentId ?? "",
66
+ InputProps: {
67
+ readOnly: true
68
+ },
69
+ disabled: true,
70
+ ...filledTextField
71
+ }
72
+ ) }),
73
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 4, children: /* @__PURE__ */ jsx(
74
+ TextInput,
75
+ {
76
+ name: FieldConstants.EQUIPMENT_NAME,
77
+ label: "Name",
78
+ formProps: filledTextField,
79
+ previousValue: batteryToModify?.name ?? void 0,
80
+ clearable: true
81
+ }
82
+ ) })
83
+ ] });
84
+ }
85
+ export {
86
+ BatteryDialogHeader
87
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) 2026, RTE (http://www.rte-france.com)
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+ */
7
+ interface BatteryDialogTabsProps {
8
+ tabIndex: number;
9
+ tabIndexesWithError: number[];
10
+ setTabIndex: (newTabIndex: number) => void;
11
+ }
12
+ export declare function BatteryDialogTabs({ tabIndex, tabIndexesWithError, setTabIndex }: Readonly<BatteryDialogTabsProps>): import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,51 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { Tabs, Tab } from "@mui/material";
3
+ import { FormattedMessage } from "react-intl";
4
+ import { BatteryDialogTab } from "./batteryTabs.utils.js";
5
+ import { getTabIndicatorStyle, getTabStyle } from "../../../parameters/parameters-style.js";
6
+ function BatteryDialogTabs({ tabIndex, tabIndexesWithError, setTabIndex }) {
7
+ return /* @__PURE__ */ jsxs(
8
+ Tabs,
9
+ {
10
+ value: tabIndex,
11
+ variant: "scrollable",
12
+ onChange: (_event, newValue) => setTabIndex(newValue),
13
+ TabIndicatorProps: {
14
+ sx: getTabIndicatorStyle(tabIndexesWithError, tabIndex)
15
+ },
16
+ children: [
17
+ /* @__PURE__ */ jsx(
18
+ Tab,
19
+ {
20
+ label: /* @__PURE__ */ jsx(FormattedMessage, { id: "ConnectivityTab" }),
21
+ sx: getTabStyle(tabIndexesWithError, BatteryDialogTab.CONNECTIVITY_TAB)
22
+ }
23
+ ),
24
+ /* @__PURE__ */ jsx(
25
+ Tab,
26
+ {
27
+ label: /* @__PURE__ */ jsx(FormattedMessage, { id: "SetpointsAndLimitsTab" }),
28
+ sx: getTabStyle(tabIndexesWithError, BatteryDialogTab.LIMITS_AND_SETPOINTS_TAB)
29
+ }
30
+ ),
31
+ /* @__PURE__ */ jsx(
32
+ Tab,
33
+ {
34
+ label: /* @__PURE__ */ jsx(FormattedMessage, { id: "SpecificTab" }),
35
+ sx: getTabStyle(tabIndexesWithError, BatteryDialogTab.SPECIFIC_TAB)
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsx(
39
+ Tab,
40
+ {
41
+ label: /* @__PURE__ */ jsx(FormattedMessage, { id: "AdditionalInformationTab" }),
42
+ sx: getTabStyle(tabIndexesWithError, BatteryDialogTab.ADDITIONAL_INFORMATION_TAB)
43
+ }
44
+ )
45
+ ]
46
+ }
47
+ );
48
+ }
49
+ export {
50
+ BatteryDialogTabs
51
+ };
@@ -0,0 +1,8 @@
1
+ import { BatteryFormInfos } from '../batteryDialog.type';
2
+ import { ConnectivityNetworkProps } from '../../common';
3
+ export interface BatteryDialogTabsContentProps extends ConnectivityNetworkProps {
4
+ batteryToModify?: BatteryFormInfos | null;
5
+ updatePreviousReactiveCapabilityCurveTable: (action: string, index: number) => void;
6
+ tabIndex: number;
7
+ }
8
+ export declare function BatteryDialogTabsContent({ batteryToModify, updatePreviousReactiveCapabilityCurveTable, tabIndex, voltageLevelOptions, PositionDiagramPane, fetchBusesOrBusbarSections, }: Readonly<BatteryDialogTabsContentProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,177 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { Box, Grid } from "@mui/material";
3
+ import { FormattedMessage } from "react-intl";
4
+ import { BatteryDialogTab } from "./batteryTabs.utils.js";
5
+ import GridSection from "../../../../components/composite/grid/grid-section.js";
6
+ import GridItem from "../../../../components/composite/grid/grid-item.js";
7
+ import { PropertiesForm } from "../../common/properties/PropertiesForm.js";
8
+ import "react";
9
+ import "react-hook-form";
10
+ import { ActivePowerAdornment, ReactivePowerAdornment } from "../../../../utils/constants/adornments.js";
11
+ import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
12
+ import "../../../../utils/conversionUtils.js";
13
+ import "../../../../utils/types/equipmentType.js";
14
+ import "@mui/icons-material";
15
+ import "../../../../components/ui/overflowableText/OverflowableText.js";
16
+ import "localized-countries";
17
+ import "localized-countries/data/fr";
18
+ import "localized-countries/data/en";
19
+ import "notistack";
20
+ import "../../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
21
+ import "yup";
22
+ import "../../../../components/ui/treeViewFinder/TreeViewFinder.js";
23
+ import { FloatInput } from "../../../../components/ui/reactHookForm/numbers/FloatInput.js";
24
+ import "../../../../components/ui/reactHookForm/numbers/RangeInput.js";
25
+ import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
26
+ import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
27
+ import "@material-symbols/svg-400/outlined/arrows_input.svg?react";
28
+ import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
29
+ import "@material-symbols/svg-400/outlined/add_notes.svg?react";
30
+ import "../../../../components/ui/dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
31
+ import "../../../../components/ui/reactHookForm/expandableInput/ExpandableInput.js";
32
+ import "@hello-pangea/dnd";
33
+ import "../../../../components/ui/dialogs/elementSaveDialog/ElementSaveDialog.js";
34
+ import "../../../../components/ui/snackbarProvider/SnackbarProvider.js";
35
+ import "mui-nested-menu";
36
+ import "react-resizable-panels";
37
+ import "../../common/properties/propertyUtils.js";
38
+ import { PowerMeasurementsForm } from "../../common/measurements/PowerMeasurementsForm.js";
39
+ import "react-dom";
40
+ import "autosuggest-highlight/match";
41
+ import "autosuggest-highlight/parse";
42
+ import "clsx";
43
+ import "../../../../components/composite/filter/FilterCreationDialog.js";
44
+ import "../../../../components/composite/filter/HeaderFilterForm.js";
45
+ import "../../../../components/composite/filter/explicitNaming/ExplicitNamingFilterForm.js";
46
+ import "../../../../components/composite/filter/expert/ExpertFilterForm.js";
47
+ import "../../../../components/composite/filter/expert/ExpertFilterEditionDialog.js";
48
+ import "../../../../components/composite/filter/expert/expertFilterConstants.js";
49
+ import "react-querybuilder";
50
+ import "uuid";
51
+ import "../../../../components/composite/filter/explicitNaming/ExplicitNamingFilterEditionDialog.js";
52
+ import "../../../../components/composite/filter/utils/filterFormUtils.js";
53
+ import "@react-querybuilder/material";
54
+ import "../../../../components/composite/reactQueryBuilder/CustomReactQueryBuilder.js";
55
+ import "../../../../components/composite/reactQueryBuilder/PropertyValueEditor.js";
56
+ import "../../../../components/composite/agGridTable/BottomRightButtons.js";
57
+ import "../../../../components/composite/customAGGrid/customAggrid.js";
58
+ import "ag-grid-community";
59
+ import "react-papaparse";
60
+ import "react-csv-downloader";
61
+ import { ConnectivityForm } from "../../common/connectivity/ConnectivityForm.js";
62
+ import { ActivePowerControlForm } from "../../common/activePowerControl/ActivePowerControlForm.js";
63
+ import { ShortCircuitForm } from "../../common/shortCircuit/ShortCircuitForm.js";
64
+ import { ReactiveLimitsForm } from "../../common/reactiveLimits/ReactiveLimitsForm.js";
65
+ import "../../common/regulatingTerminal/RegulatingTerminalForm.js";
66
+ function BatteryDialogTabsContent({
67
+ batteryToModify,
68
+ updatePreviousReactiveCapabilityCurveTable,
69
+ tabIndex,
70
+ voltageLevelOptions = [],
71
+ PositionDiagramPane,
72
+ fetchBusesOrBusbarSections
73
+ }) {
74
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
75
+ /* @__PURE__ */ jsxs(Box, { hidden: tabIndex !== BatteryDialogTab.CONNECTIVITY_TAB, children: [
76
+ /* @__PURE__ */ jsx(GridSection, { title: "Connectivity" }),
77
+ /* @__PURE__ */ jsx(
78
+ ConnectivityForm,
79
+ {
80
+ isEquipmentModification: true,
81
+ previousValues: {
82
+ connectablePosition: batteryToModify?.connectablePosition,
83
+ voltageLevelId: batteryToModify?.voltageLevelId,
84
+ busOrBusbarSectionId: batteryToModify?.busOrBusbarSectionId,
85
+ terminalConnected: batteryToModify?.terminalConnected
86
+ },
87
+ voltageLevelOptions,
88
+ PositionDiagramPane,
89
+ fetchBusesOrBusbarSections
90
+ }
91
+ )
92
+ ] }),
93
+ /* @__PURE__ */ jsxs(Box, { hidden: tabIndex !== BatteryDialogTab.LIMITS_AND_SETPOINTS_TAB, children: [
94
+ /* @__PURE__ */ jsx(GridSection, { title: "Setpoints" }),
95
+ /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
96
+ /* @__PURE__ */ jsx(GridItem, { size: 4, children: /* @__PURE__ */ jsx(
97
+ FloatInput,
98
+ {
99
+ name: FieldConstants.ACTIVE_POWER_SET_POINT,
100
+ label: "ActivePowerText",
101
+ adornment: ActivePowerAdornment,
102
+ previousValue: batteryToModify?.targetP,
103
+ clearable: true
104
+ }
105
+ ) }),
106
+ /* @__PURE__ */ jsx(GridItem, { size: 4, children: /* @__PURE__ */ jsx(
107
+ FloatInput,
108
+ {
109
+ name: FieldConstants.REACTIVE_POWER_SET_POINT,
110
+ label: "ReactivePowerText",
111
+ adornment: ReactivePowerAdornment,
112
+ previousValue: batteryToModify?.targetQ,
113
+ clearable: true
114
+ }
115
+ ) })
116
+ ] }),
117
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, paddingTop: 2, children: /* @__PURE__ */ jsx(
118
+ ActivePowerControlForm,
119
+ {
120
+ isEquipmentModification: true,
121
+ previousValues: batteryToModify?.activePowerControl
122
+ }
123
+ ) }),
124
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, children: /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
125
+ /* @__PURE__ */ jsx("h3", { children: /* @__PURE__ */ jsx(FormattedMessage, { id: "Limits" }) }),
126
+ /* @__PURE__ */ jsx("h4", { children: /* @__PURE__ */ jsx(FormattedMessage, { id: "ActiveLimits" }) })
127
+ ] }) }),
128
+ /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
129
+ /* @__PURE__ */ jsx(GridItem, { size: 4, children: /* @__PURE__ */ jsx(
130
+ FloatInput,
131
+ {
132
+ name: FieldConstants.MINIMUM_ACTIVE_POWER,
133
+ label: "MinimumActivePowerText",
134
+ adornment: ActivePowerAdornment,
135
+ previousValue: batteryToModify?.minP,
136
+ clearable: true
137
+ }
138
+ ) }),
139
+ /* @__PURE__ */ jsx(GridItem, { size: 4, children: /* @__PURE__ */ jsx(
140
+ FloatInput,
141
+ {
142
+ name: FieldConstants.MAXIMUM_ACTIVE_POWER,
143
+ label: "MaximumActivePowerText",
144
+ adornment: ActivePowerAdornment,
145
+ previousValue: batteryToModify?.maxP,
146
+ clearable: true
147
+ }
148
+ ) })
149
+ ] }),
150
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx("h4", { children: /* @__PURE__ */ jsx(FormattedMessage, { id: "ReactiveLimits" }) }) }) }),
151
+ /* @__PURE__ */ jsx(
152
+ ReactiveLimitsForm,
153
+ {
154
+ previousReactiveCapabilityCurvePoints: batteryToModify?.reactiveCapabilityCurvePoints,
155
+ previousMinMaxReactiveLimits: batteryToModify?.minMaxReactiveLimits,
156
+ updatePreviousReactiveCapabilityCurveTable
157
+ }
158
+ )
159
+ ] }),
160
+ /* @__PURE__ */ jsxs(Box, { hidden: tabIndex !== BatteryDialogTab.SPECIFIC_TAB, children: [
161
+ /* @__PURE__ */ jsx(GridSection, { title: "ShortCircuit" }),
162
+ /* @__PURE__ */ jsx(ShortCircuitForm, { previousValues: batteryToModify?.batteryShortCircuit }),
163
+ /* @__PURE__ */ jsx(GridSection, { title: "MeasurementsSection" }),
164
+ /* @__PURE__ */ jsx(
165
+ PowerMeasurementsForm,
166
+ {
167
+ activePowerMeasurement: batteryToModify?.measurementP,
168
+ reactivePowerMeasurement: batteryToModify?.measurementQ
169
+ }
170
+ )
171
+ ] }),
172
+ /* @__PURE__ */ jsx(Box, { hidden: tabIndex !== BatteryDialogTab.ADDITIONAL_INFORMATION_TAB, children: /* @__PURE__ */ jsx(PropertiesForm, { networkElementType: "battery", isModification: true }) })
173
+ ] });
174
+ }
175
+ export {
176
+ BatteryDialogTabsContent
177
+ };
@@ -0,0 +1,6 @@
1
+ import { BatteryDialogHeaderProps } from './BatteryDialogHeader';
2
+ import { BatteryDialogTabsContentProps } from './BatteryDialogTabsContent';
3
+ interface BatteryModificationFormProps extends BatteryDialogHeaderProps, Omit<BatteryDialogTabsContentProps, 'tabIndex'> {
4
+ }
5
+ export declare function BatteryModificationForm({ batteryToModify, updatePreviousReactiveCapabilityCurveTable, voltageLevelOptions, fetchBusesOrBusbarSections, PositionDiagramPane, }: Readonly<BatteryModificationFormProps>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,50 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { Grid } from "@mui/material";
3
+ import { useWatch } from "react-hook-form";
4
+ import { BatteryDialogHeader } from "./BatteryDialogHeader.js";
5
+ import { BatteryDialogTabs } from "./BatteryDialogTabs.js";
6
+ import { BatteryDialogTabsContent } from "./BatteryDialogTabsContent.js";
7
+ import { BatteryDialogTab, BATTERY_TAB_FIELDS } from "./batteryTabs.utils.js";
8
+ import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
9
+ import "../../../../utils/conversionUtils.js";
10
+ import "../../../../utils/types/equipmentType.js";
11
+ import "@mui/icons-material";
12
+ import { useTabsWithError } from "../../hooks/useTabsWithError.js";
13
+ function BatteryModificationForm({
14
+ batteryToModify,
15
+ updatePreviousReactiveCapabilityCurveTable,
16
+ voltageLevelOptions,
17
+ fetchBusesOrBusbarSections,
18
+ PositionDiagramPane
19
+ }) {
20
+ const { tabIndex, setTabIndex, tabIndexesWithError } = useTabsWithError(
21
+ BATTERY_TAB_FIELDS,
22
+ BatteryDialogTab.CONNECTIVITY_TAB
23
+ );
24
+ const equipmentId = useWatch({ name: FieldConstants.EQUIPMENT_ID });
25
+ return /* @__PURE__ */ jsxs(Grid, { container: true, direction: "column", spacing: 2, children: [
26
+ /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(BatteryDialogHeader, { batteryToModify, equipmentId }) }),
27
+ /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
28
+ BatteryDialogTabs,
29
+ {
30
+ tabIndex,
31
+ tabIndexesWithError,
32
+ setTabIndex
33
+ }
34
+ ) }),
35
+ /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
36
+ BatteryDialogTabsContent,
37
+ {
38
+ tabIndex,
39
+ batteryToModify,
40
+ voltageLevelOptions,
41
+ fetchBusesOrBusbarSections,
42
+ PositionDiagramPane,
43
+ updatePreviousReactiveCapabilityCurveTable
44
+ }
45
+ ) })
46
+ ] });
47
+ }
48
+ export {
49
+ BatteryModificationForm
50
+ };
@@ -0,0 +1,31 @@
1
+ import { AttributeModification, ModificationType } from '../../../../utils';
2
+ import { ReactiveCapabilityCurvePoints } from '../../common/reactiveLimits';
3
+ import { Property } from '../../common/properties';
4
+ export interface BatteryModificationDto {
5
+ type: ModificationType;
6
+ equipmentId: string;
7
+ equipmentName: AttributeModification<string> | null;
8
+ maxP: AttributeModification<number> | null;
9
+ minP: AttributeModification<number> | null;
10
+ targetP: AttributeModification<number> | null;
11
+ targetQ: AttributeModification<number> | null;
12
+ participate: AttributeModification<boolean> | null;
13
+ droop: AttributeModification<number> | null;
14
+ reactiveCapabilityCurve: AttributeModification<boolean> | null;
15
+ minQ: AttributeModification<number> | null;
16
+ maxQ: AttributeModification<number> | null;
17
+ reactiveCapabilityCurvePoints: ReactiveCapabilityCurvePoints[] | null;
18
+ voltageLevelId: AttributeModification<string> | null;
19
+ busOrBusbarSectionId: AttributeModification<string> | null;
20
+ connectionDirection: AttributeModification<string> | null;
21
+ connectionName: AttributeModification<string> | null;
22
+ connectionPosition: AttributeModification<number> | null;
23
+ terminalConnected: AttributeModification<boolean> | null;
24
+ pMeasurementValue: AttributeModification<number> | null;
25
+ pMeasurementValidity: AttributeModification<boolean> | null;
26
+ qMeasurementValue: AttributeModification<number> | null;
27
+ qMeasurementValidity: AttributeModification<boolean> | null;
28
+ properties: Property[] | null;
29
+ directTransX: AttributeModification<number> | null;
30
+ stepUpTransformerX: AttributeModification<number> | null;
31
+ }
@@ -0,0 +1,95 @@
1
+ import { InferType } from 'yup';
2
+ import { DeepNullable } from '../../../../utils';
3
+ import { BatteryModificationDto } from './batteryModification.types';
4
+ export declare const batteryModificationFormSchema: import('yup').ObjectSchema<NonNullable<{
5
+ transformerReactance: number | null | undefined;
6
+ directTransX: number | null | undefined;
7
+ frequencyRegulation: boolean | null | undefined;
8
+ droop: number | null | undefined;
9
+ reactivePowerSetpoint: number | null | undefined;
10
+ activePowerSetpoint: number | undefined;
11
+ equipmentID: string;
12
+ equipmentName: string | null | undefined;
13
+ maximumActivePower: number | null | undefined;
14
+ minimumActivePower: number | null | undefined;
15
+ connectivity: {
16
+ terminalConnected?: boolean | null | undefined;
17
+ connectionDirection?: string | null | undefined;
18
+ connectionName?: string | undefined;
19
+ connectionPosition?: number | null | undefined;
20
+ busOrBusbarSection: {
21
+ id?: string | undefined;
22
+ } | null;
23
+ voltageLevel: {
24
+ id?: string | undefined;
25
+ } | null;
26
+ };
27
+ reactiveLimits: {
28
+ minimumReactivePower?: number | null | undefined;
29
+ maximumReactivePower?: number | null | undefined;
30
+ reactiveCapabilityCurveTable?: {
31
+ minQ: number | null;
32
+ maxQ: number | null;
33
+ p: number | null;
34
+ }[] | null | undefined;
35
+ reactiveCapabilityCurveChoice: string;
36
+ };
37
+ stateEstimation: {
38
+ [x: string]: {
39
+ validity?: boolean | null | undefined;
40
+ value?: number | null | undefined;
41
+ };
42
+ [x: number]: {
43
+ validity?: boolean | null | undefined;
44
+ value?: number | null | undefined;
45
+ };
46
+ };
47
+ } & {
48
+ AdditionalProperties: {
49
+ previousValue?: string | null | undefined;
50
+ value?: string | null | undefined;
51
+ added: NonNullable<boolean | undefined>;
52
+ deletionMark: NonNullable<boolean | undefined>;
53
+ name: string;
54
+ }[] | undefined;
55
+ }>, import('yup').AnyObject, {
56
+ transformerReactance: undefined;
57
+ directTransX: undefined;
58
+ frequencyRegulation: undefined;
59
+ droop: undefined;
60
+ reactivePowerSetpoint: undefined;
61
+ activePowerSetpoint: undefined;
62
+ equipmentID: undefined;
63
+ equipmentName: undefined;
64
+ maximumActivePower: undefined;
65
+ minimumActivePower: undefined;
66
+ connectivity: {
67
+ voltageLevel: {
68
+ id: undefined;
69
+ };
70
+ busOrBusbarSection: {
71
+ id: undefined;
72
+ };
73
+ connectionDirection: undefined;
74
+ connectionName: undefined;
75
+ connectionPosition: undefined;
76
+ terminalConnected: undefined;
77
+ };
78
+ reactiveLimits: {
79
+ reactiveCapabilityCurveChoice: undefined;
80
+ minimumReactivePower: undefined;
81
+ maximumReactivePower: undefined;
82
+ reactiveCapabilityCurveTable: "";
83
+ };
84
+ stateEstimation: {
85
+ [x: string]: {
86
+ value: undefined;
87
+ validity: undefined;
88
+ };
89
+ };
90
+ AdditionalProperties: "";
91
+ }, "">;
92
+ export type BatteryModificationFormData = InferType<typeof batteryModificationFormSchema>;
93
+ export declare const batteryModificationEmptyFormData: DeepNullable<BatteryModificationFormData>;
94
+ export declare const batteryModificationDtoToForm: (dto: BatteryModificationDto, includePreviousValues?: boolean) => BatteryModificationFormData;
95
+ export declare const batteryModificationFormToDto: (form: BatteryModificationFormData) => BatteryModificationDto;
@@ -0,0 +1,163 @@
1
+ import { object, number, string, ref } from "yup";
2
+ import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
3
+ import { toModificationOperation } from "../../../../utils/conversionUtils.js";
4
+ import "../../../../utils/types/equipmentType.js";
5
+ import { ModificationType } from "../../../../utils/types/modificationType.js";
6
+ import "react/jsx-runtime";
7
+ import "@mui/icons-material";
8
+ import { sanitizeString } from "../../../../utils/ts-utils.js";
9
+ import "react";
10
+ import "react-hook-form";
11
+ import { modificationPropertiesSchema, getPropertiesFromModification, toModificationProperties } from "../../common/properties/propertyUtils.js";
12
+ import "@mui/material";
13
+ import "react-intl";
14
+ import "../../../../components/ui/overflowableText/OverflowableText.js";
15
+ import "localized-countries";
16
+ import "localized-countries/data/fr";
17
+ import "localized-countries/data/en";
18
+ import "notistack";
19
+ import "../../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
20
+ import "../../../../components/ui/treeViewFinder/TreeViewFinder.js";
21
+ import "../../../../components/ui/reactHookForm/numbers/RangeInput.js";
22
+ import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
23
+ import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
24
+ import "@material-symbols/svg-400/outlined/arrows_input.svg?react";
25
+ import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
26
+ import "@material-symbols/svg-400/outlined/add_notes.svg?react";
27
+ import "../../../../components/ui/dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
28
+ import "../../../../components/ui/reactHookForm/expandableInput/ExpandableInput.js";
29
+ import "@hello-pangea/dnd";
30
+ import "../../../../components/ui/dialogs/elementSaveDialog/ElementSaveDialog.js";
31
+ import "../../../../components/ui/snackbarProvider/SnackbarProvider.js";
32
+ import "mui-nested-menu";
33
+ import "react-resizable-panels";
34
+ import { getInjectionActiveReactivePowerValidationSchemaProperties, getInjectionActiveReactivePowerEmptyFormDataProperties, getInjectionActiveReactivePowerEditDataProperties } from "../../common/measurements/injectionActiveReactivePowerForm.utils.js";
35
+ import "react-dom";
36
+ import "autosuggest-highlight/match";
37
+ import "autosuggest-highlight/parse";
38
+ import "clsx";
39
+ import "../../../../components/composite/filter/FilterCreationDialog.js";
40
+ import "../../../../components/composite/filter/HeaderFilterForm.js";
41
+ import "../../../../components/composite/filter/explicitNaming/ExplicitNamingFilterForm.js";
42
+ import "../../../../components/composite/filter/expert/ExpertFilterForm.js";
43
+ import "../../../../components/composite/filter/expert/ExpertFilterEditionDialog.js";
44
+ import "../../../../components/composite/filter/expert/expertFilterConstants.js";
45
+ import "react-querybuilder";
46
+ import "uuid";
47
+ import "../../../../components/composite/filter/explicitNaming/ExplicitNamingFilterEditionDialog.js";
48
+ import "../../../../components/composite/filter/utils/filterFormUtils.js";
49
+ import "@react-querybuilder/material";
50
+ import "../../../../components/composite/reactQueryBuilder/CustomReactQueryBuilder.js";
51
+ import "../../../../components/composite/reactQueryBuilder/PropertyValueEditor.js";
52
+ import "../../../../components/composite/agGridTable/BottomRightButtons.js";
53
+ import "../../../../components/composite/customAGGrid/customAggrid.js";
54
+ import "ag-grid-community";
55
+ import "react-papaparse";
56
+ import "react-csv-downloader";
57
+ import { getSetPointsSchema, getSetPointsEmptyFormData } from "../../common/setpoints/setPoints.utils.js";
58
+ import { getConnectivityWithPositionSchema, getConnectivityWithPositionEmptyFormDataProps, getConnectivityFormDataProps } from "../../common/connectivity/connectivityForm.utils.js";
59
+ import { getActivePowerControlSchema, getActivePowerControlEmptyFormData } from "../../common/activePowerControl/activePowerControlForm.utils.js";
60
+ import { getShortCircuitFormSchema, getShortCircuitEmptyFormData, getShortCircuitFormData } from "../../common/shortCircuit/shortCircuitForm.utils.js";
61
+ import { getReactiveLimitsValidationSchema, getReactiveLimitsEmptyFormDataProps, getReactiveLimitsFormDataProps } from "../../common/reactiveLimits/reactiveLimits.utils.js";
62
+ import "../../common/regulatingTerminal/RegulatingTerminalForm.js";
63
+ const batteryModificationFormSchema = object().shape({
64
+ [FieldConstants.EQUIPMENT_ID]: string().required(),
65
+ [FieldConstants.EQUIPMENT_NAME]: string().nullable(),
66
+ [FieldConstants.MAXIMUM_ACTIVE_POWER]: number().nullable(),
67
+ [FieldConstants.MINIMUM_ACTIVE_POWER]: number().nullable().when([FieldConstants.MAXIMUM_ACTIVE_POWER], {
68
+ is: (maximumActivePower) => maximumActivePower != null,
69
+ then: (schema) => schema.max(
70
+ ref(FieldConstants.MAXIMUM_ACTIVE_POWER),
71
+ "MinActivePowerMustBeLessOrEqualToMaxActivePower"
72
+ )
73
+ }),
74
+ [FieldConstants.CONNECTIVITY]: getConnectivityWithPositionSchema(true),
75
+ [FieldConstants.REACTIVE_LIMITS]: getReactiveLimitsValidationSchema(true),
76
+ [FieldConstants.STATE_ESTIMATION]: getInjectionActiveReactivePowerValidationSchemaProperties(),
77
+ ...getSetPointsSchema(true),
78
+ ...getActivePowerControlSchema(true),
79
+ ...getShortCircuitFormSchema(true)
80
+ }).concat(modificationPropertiesSchema).required();
81
+ const batteryModificationEmptyFormData = {
82
+ equipmentID: "",
83
+ equipmentName: "",
84
+ maximumActivePower: null,
85
+ minimumActivePower: null,
86
+ connectivity: getConnectivityWithPositionEmptyFormDataProps(true),
87
+ reactiveLimits: getReactiveLimitsEmptyFormDataProps(),
88
+ ...getSetPointsEmptyFormData(true),
89
+ ...getActivePowerControlEmptyFormData(true),
90
+ AdditionalProperties: [],
91
+ ...getShortCircuitEmptyFormData(),
92
+ stateEstimation: getInjectionActiveReactivePowerEmptyFormDataProperties()
93
+ };
94
+ const batteryModificationDtoToForm = (dto, includePreviousValues = true) => {
95
+ return {
96
+ equipmentID: dto?.equipmentId,
97
+ equipmentName: dto?.equipmentName?.value ?? "",
98
+ maximumActivePower: dto?.maxP?.value ?? null,
99
+ minimumActivePower: dto?.minP?.value ?? null,
100
+ activePowerSetpoint: dto?.targetP?.value ?? void 0,
101
+ reactivePowerSetpoint: dto?.targetQ?.value ?? null,
102
+ frequencyRegulation: dto?.participate?.value ?? null,
103
+ droop: dto?.droop?.value ?? null,
104
+ connectivity: getConnectivityFormDataProps({
105
+ voltageLevelId: dto?.voltageLevelId?.value ?? null,
106
+ busbarSectionId: dto?.busOrBusbarSectionId?.value ?? null,
107
+ connectionName: dto?.connectionName?.value ?? "",
108
+ connectionDirection: dto?.connectionDirection?.value ?? null,
109
+ connectionPosition: dto?.connectionPosition?.value ?? null,
110
+ terminalConnected: dto?.terminalConnected?.value ?? null,
111
+ isEquipmentModification: true
112
+ }),
113
+ reactiveLimits: getReactiveLimitsFormDataProps({
114
+ reactiveCapabilityCurveChoice: dto?.reactiveCapabilityCurve?.value ? "CURVE" : "MINMAX",
115
+ minimumReactivePower: dto?.minQ?.value ?? null,
116
+ maximumReactivePower: dto?.maxQ?.value ?? null,
117
+ reactiveCapabilityCurvePoints: dto?.reactiveCapabilityCurvePoints ?? null
118
+ }),
119
+ stateEstimation: getInjectionActiveReactivePowerEditDataProperties(dto),
120
+ ...getShortCircuitFormData({
121
+ directTransX: dto?.directTransX?.value ?? null,
122
+ stepUpTransformerX: dto?.stepUpTransformerX?.value ?? null
123
+ }),
124
+ ...getPropertiesFromModification(dto?.properties, includePreviousValues)
125
+ };
126
+ };
127
+ const batteryModificationFormToDto = (form) => {
128
+ const isReactiveCapabilityCurveOn = form.reactiveLimits?.reactiveCapabilityCurveChoice === "CURVE";
129
+ return {
130
+ type: ModificationType.BATTERY_MODIFICATION,
131
+ equipmentId: form.equipmentID ?? "",
132
+ equipmentName: toModificationOperation(sanitizeString(form.equipmentName)),
133
+ minP: toModificationOperation(form.minimumActivePower),
134
+ maxP: toModificationOperation(form.maximumActivePower),
135
+ targetP: toModificationOperation(form.activePowerSetpoint),
136
+ targetQ: toModificationOperation(form.reactivePowerSetpoint),
137
+ participate: toModificationOperation(form.frequencyRegulation),
138
+ droop: toModificationOperation(form.droop) ?? null,
139
+ reactiveCapabilityCurve: toModificationOperation(isReactiveCapabilityCurveOn),
140
+ minQ: toModificationOperation(isReactiveCapabilityCurveOn ? null : form.reactiveLimits?.minimumReactivePower),
141
+ maxQ: toModificationOperation(isReactiveCapabilityCurveOn ? null : form.reactiveLimits?.maximumReactivePower),
142
+ reactiveCapabilityCurvePoints: isReactiveCapabilityCurveOn ? form.reactiveLimits.reactiveCapabilityCurveTable ?? null : null,
143
+ voltageLevelId: toModificationOperation(form.connectivity?.voltageLevel?.id),
144
+ busOrBusbarSectionId: toModificationOperation(form.connectivity?.busOrBusbarSection?.id),
145
+ connectionDirection: toModificationOperation(form.connectivity?.connectionDirection),
146
+ connectionName: toModificationOperation(sanitizeString(form.connectivity?.connectionName)),
147
+ connectionPosition: toModificationOperation(form.connectivity?.connectionPosition),
148
+ terminalConnected: toModificationOperation(form.connectivity?.terminalConnected),
149
+ pMeasurementValue: toModificationOperation(form.stateEstimation?.measurementP?.value),
150
+ pMeasurementValidity: toModificationOperation(form.stateEstimation?.measurementP?.validity),
151
+ qMeasurementValue: toModificationOperation(form.stateEstimation?.measurementQ?.value),
152
+ qMeasurementValidity: toModificationOperation(form.stateEstimation?.measurementQ?.validity),
153
+ properties: toModificationProperties(form) ?? null,
154
+ directTransX: toModificationOperation(form.directTransX),
155
+ stepUpTransformerX: toModificationOperation(form.transformerReactance)
156
+ };
157
+ };
158
+ export {
159
+ batteryModificationDtoToForm,
160
+ batteryModificationEmptyFormData,
161
+ batteryModificationFormSchema,
162
+ batteryModificationFormToDto
163
+ };
@@ -0,0 +1,8 @@
1
+ import { FieldConstants } from '../../../../utils/constants';
2
+ export declare enum BatteryDialogTab {
3
+ CONNECTIVITY_TAB = 0,
4
+ LIMITS_AND_SETPOINTS_TAB = 1,
5
+ SPECIFIC_TAB = 2,
6
+ ADDITIONAL_INFORMATION_TAB = 3
7
+ }
8
+ export declare const BATTERY_TAB_FIELDS: Readonly<Partial<Record<BatteryDialogTab, FieldConstants[]>>>;
@@ -0,0 +1,38 @@
1
+ import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
2
+ var BatteryDialogTab = /* @__PURE__ */ ((BatteryDialogTab2) => {
3
+ BatteryDialogTab2[BatteryDialogTab2["CONNECTIVITY_TAB"] = 0] = "CONNECTIVITY_TAB";
4
+ BatteryDialogTab2[BatteryDialogTab2["LIMITS_AND_SETPOINTS_TAB"] = 1] = "LIMITS_AND_SETPOINTS_TAB";
5
+ BatteryDialogTab2[BatteryDialogTab2["SPECIFIC_TAB"] = 2] = "SPECIFIC_TAB";
6
+ BatteryDialogTab2[BatteryDialogTab2["ADDITIONAL_INFORMATION_TAB"] = 3] = "ADDITIONAL_INFORMATION_TAB";
7
+ return BatteryDialogTab2;
8
+ })(BatteryDialogTab || {});
9
+ const BATTERY_TAB_FIELDS = {
10
+ [
11
+ 0
12
+ /* CONNECTIVITY_TAB */
13
+ ]: [FieldConstants.CONNECTIVITY],
14
+ [
15
+ 1
16
+ /* LIMITS_AND_SETPOINTS_TAB */
17
+ ]: [
18
+ FieldConstants.MINIMUM_ACTIVE_POWER,
19
+ FieldConstants.MAXIMUM_ACTIVE_POWER,
20
+ FieldConstants.REACTIVE_LIMITS,
21
+ FieldConstants.ACTIVE_POWER_SET_POINT,
22
+ FieldConstants.REACTIVE_POWER_SET_POINT,
23
+ FieldConstants.FREQUENCY_REGULATION,
24
+ FieldConstants.DROOP
25
+ ],
26
+ [
27
+ 2
28
+ /* SPECIFIC_TAB */
29
+ ]: [FieldConstants.TRANSIENT_REACTANCE, FieldConstants.TRANSFORMER_REACTANCE],
30
+ [
31
+ 3
32
+ /* ADDITIONAL_INFORMATION_TAB */
33
+ ]: [FieldConstants.ADDITIONAL_PROPERTIES]
34
+ };
35
+ export {
36
+ BATTERY_TAB_FIELDS,
37
+ BatteryDialogTab
38
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) 2026, RTE (http://www.rte-france.com)
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+ */
7
+ export * from './batteryModification.types';
8
+ export * from './batteryModification.utils';
9
+ export * from './batteryTabs.utils';
10
+ export * from './BatteryDialogHeader';
11
+ export * from './BatteryDialogTabs';
12
+ export * from './BatteryDialogTabsContent';
13
+ export * from './BatteryModificationForm';
@@ -0,0 +1,18 @@
1
+ import { batteryModificationDtoToForm, batteryModificationEmptyFormData, batteryModificationFormSchema, batteryModificationFormToDto } from "./batteryModification.utils.js";
2
+ import { BATTERY_TAB_FIELDS, BatteryDialogTab } from "./batteryTabs.utils.js";
3
+ import { BatteryDialogHeader } from "./BatteryDialogHeader.js";
4
+ import { BatteryDialogTabs } from "./BatteryDialogTabs.js";
5
+ import { BatteryDialogTabsContent } from "./BatteryDialogTabsContent.js";
6
+ import { BatteryModificationForm } from "./BatteryModificationForm.js";
7
+ export {
8
+ BATTERY_TAB_FIELDS,
9
+ BatteryDialogHeader,
10
+ BatteryDialogTab,
11
+ BatteryDialogTabs,
12
+ BatteryDialogTabsContent,
13
+ BatteryModificationForm,
14
+ batteryModificationDtoToForm,
15
+ batteryModificationEmptyFormData,
16
+ batteryModificationFormSchema,
17
+ batteryModificationFormToDto
18
+ };
@@ -89,6 +89,12 @@ import { emptyModificationByAssignmentFormData, modificationByAssignmentDtoToFor
89
89
  import { DataType } from "./by-filter/assignment/assignment/assignment.type.js";
90
90
  import { batteryCreationDtoToForm, batteryCreationEmptyFormData, batteryCreationFormSchema, batteryCreationFormToDto } from "./battery/creation/batteryCreation.utils.js";
91
91
  import { BatteryCreationForm } from "./battery/creation/BatteryCreationForm.js";
92
+ import { batteryModificationDtoToForm, batteryModificationEmptyFormData, batteryModificationFormSchema, batteryModificationFormToDto } from "./battery/modification/batteryModification.utils.js";
93
+ import { BATTERY_TAB_FIELDS, BatteryDialogTab } from "./battery/modification/batteryTabs.utils.js";
94
+ import { BatteryDialogHeader } from "./battery/modification/BatteryDialogHeader.js";
95
+ import { BatteryDialogTabs } from "./battery/modification/BatteryDialogTabs.js";
96
+ import { BatteryDialogTabsContent } from "./battery/modification/BatteryDialogTabsContent.js";
97
+ import { BatteryModificationForm } from "./battery/modification/BatteryModificationForm.js";
92
98
  import { CHARACTERISTICS_CHOICES, SHUNT_COMPENSATOR_TYPES, computeSwitchedOnValue } from "./shunt-compensator/common/shuntCompensator.utils.js";
93
99
  import { CharacteristicsForm } from "./shunt-compensator/common/CharacteristicsForm.js";
94
100
  import { getCharacteristicsCreateFormDataFromSearchCopy, getCharacteristicsEmptyFormData, getCharacteristicsFormData, getCharacteristicsFormValidationSchema } from "./shunt-compensator/common/characteristicsForm.utils.js";
@@ -99,7 +105,13 @@ import { shuntCompensatorModificationDtoToForm, shuntCompensatorModificationEmpt
99
105
  export {
100
106
  ActivePowerControlForm,
101
107
  DataType as AssignmentDataType,
108
+ BATTERY_TAB_FIELDS,
102
109
  BatteryCreationForm,
110
+ BatteryDialogHeader,
111
+ BatteryDialogTab,
112
+ BatteryDialogTabs,
113
+ BatteryDialogTabsContent,
114
+ BatteryModificationForm,
103
115
  BranchActiveReactivePowerMeasurementsForm,
104
116
  BranchConnectivityForm,
105
117
  BusbarSectionVoltageMeasurementsForm,
@@ -149,6 +161,10 @@ export {
149
161
  batteryCreationEmptyFormData,
150
162
  batteryCreationFormSchema,
151
163
  batteryCreationFormToDto,
164
+ batteryModificationDtoToForm,
165
+ batteryModificationEmptyFormData,
166
+ batteryModificationFormSchema,
167
+ batteryModificationFormToDto,
152
168
  buildNewBusbarSections,
153
169
  byFilterDeletionDtoToForm,
154
170
  byFilterDeletionFormSchema,
@@ -1,9 +1,9 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { useEffect, useMemo } from "react";
2
+ import { useSyncExternalStore, useEffect, useMemo } from "react";
3
3
  import ReconnectingWebSocket from "reconnecting-websocket";
4
4
  import { NotificationsContext } from "./contexts/NotificationsContext.js";
5
5
  import { useListenerManager } from "./hooks/useListenerManager.js";
6
- import { getUserToken } from "../../redux/commonStore.js";
6
+ import { subscribeToUserState, getUser, getUserToken } from "../../redux/commonStore.js";
7
7
  const DELAY_BEFORE_WEBSOCKET_CONNECTED = 12e3;
8
8
  function isUrlDefined(tuple) {
9
9
  return tuple[1] !== void 0;
@@ -23,15 +23,15 @@ function NotificationsProvider({ urls, children }) {
23
23
  addListener: addListenerOnReopen,
24
24
  removeListener: removeListenerOnReopen
25
25
  } = useListenerManager(urls);
26
+ const isAuthenticated = useSyncExternalStore(subscribeToUserState, () => getUser() !== null);
26
27
  useEffect(() => {
27
28
  const token = getUserToken();
28
- if (!token) {
29
+ if (!isAuthenticated || !token) {
29
30
  console.info("Skipping Notification WebSockets: no user token available");
30
31
  return void 0;
31
32
  }
32
33
  const connections = Object.entries(urls).filter(isUrlDefined).map(([urlKey, url]) => {
33
- const urlWithToken = appendTokenToUrl(url, token);
34
- const rws = new ReconnectingWebSocket(urlWithToken, [], {
34
+ const rws = new ReconnectingWebSocket(() => appendTokenToUrl(url, getUserToken() ?? ""), [], {
35
35
  // this option set the minimum duration being connected before reset the retry count to 0
36
36
  minUptime: DELAY_BEFORE_WEBSOCKET_CONNECTED
37
37
  });
@@ -49,7 +49,7 @@ function NotificationsProvider({ urls, children }) {
49
49
  return rws;
50
50
  });
51
51
  return () => connections.forEach((c) => c.close());
52
- }, [broadcastMessage, broadcastOnReopen, urls]);
52
+ }, [broadcastMessage, broadcastOnReopen, urls, isAuthenticated]);
53
53
  const contextValue = useMemo(
54
54
  () => ({
55
55
  addListenerEvent: addListenerMessage,
package/dist/index.js CHANGED
@@ -314,6 +314,12 @@ import { emptyModificationByAssignmentFormData, modificationByAssignmentDtoToFor
314
314
  import { DataType as DataType2 } from "./features/network-modifications/by-filter/assignment/assignment/assignment.type.js";
315
315
  import { batteryCreationDtoToForm, batteryCreationEmptyFormData, batteryCreationFormSchema, batteryCreationFormToDto } from "./features/network-modifications/battery/creation/batteryCreation.utils.js";
316
316
  import { BatteryCreationForm } from "./features/network-modifications/battery/creation/BatteryCreationForm.js";
317
+ import { batteryModificationDtoToForm, batteryModificationEmptyFormData, batteryModificationFormSchema, batteryModificationFormToDto } from "./features/network-modifications/battery/modification/batteryModification.utils.js";
318
+ import { BATTERY_TAB_FIELDS, BatteryDialogTab } from "./features/network-modifications/battery/modification/batteryTabs.utils.js";
319
+ import { BatteryDialogHeader } from "./features/network-modifications/battery/modification/BatteryDialogHeader.js";
320
+ import { BatteryDialogTabs } from "./features/network-modifications/battery/modification/BatteryDialogTabs.js";
321
+ import { BatteryDialogTabsContent } from "./features/network-modifications/battery/modification/BatteryDialogTabsContent.js";
322
+ import { BatteryModificationForm } from "./features/network-modifications/battery/modification/BatteryModificationForm.js";
317
323
  import { CHARACTERISTICS_CHOICES, SHUNT_COMPENSATOR_TYPES, computeSwitchedOnValue } from "./features/network-modifications/shunt-compensator/common/shuntCompensator.utils.js";
318
324
  import { CharacteristicsForm } from "./features/network-modifications/shunt-compensator/common/CharacteristicsForm.js";
319
325
  import { getCharacteristicsCreateFormDataFromSearchCopy, getCharacteristicsEmptyFormData, getCharacteristicsFormData, getCharacteristicsFormValidationSchema } from "./features/network-modifications/shunt-compensator/common/characteristicsForm.utils.js";
@@ -358,7 +364,7 @@ import { useSelectAppearance } from "./hooks/useSelectAppearance.js";
358
364
  import { OptionalServicesStatus, useParametersBackend } from "./hooks/use-parameters-backend.js";
359
365
  import { useGetLabelEquipmentTypes } from "./hooks/useGetLabelEquipmentTypes.js";
360
366
  import { LOGOUT_ERROR, RESET_AUTHENTICATION_ROUTER_ERROR, SHOW_AUTH_INFO_LOGIN, SIGNIN_CALLBACK_ERROR, UNAUTHORIZED_USER_INFO, USER, USER_VALIDATION_ERROR, resetAuthenticationRouterError, setLoggedUser, setLogoutError, setShowAuthenticationRouterLogin, setSignInCallbackError, setUnauthorizedUserInfo, setUserValidationError } from "./redux/actions/authActions.js";
361
- import { getUserToken, setCommonStore } from "./redux/commonStore.js";
367
+ import { getUser, getUserToken, setCommonStore, subscribeToUserState } from "./redux/commonStore.js";
362
368
  import { cardErrorBoundaryEn } from "./translations/en/cardErrorBoundaryEn.js";
363
369
  import { businessErrorsEn } from "./translations/en/businessErrorsEn.js";
364
370
  import { commonButtonEn } from "./translations/en/commonButtonEn.js";
@@ -446,8 +452,14 @@ export {
446
452
  BALANCE_TYPE,
447
453
  BASE_EQUIPMENTS,
448
454
  BASE_MODIFICATION_TABLE_COLUMNS,
455
+ BATTERY_TAB_FIELDS,
449
456
  Battery,
450
457
  BatteryCreationForm,
458
+ BatteryDialogHeader,
459
+ BatteryDialogTab,
460
+ BatteryDialogTabs,
461
+ BatteryDialogTabsContent,
462
+ BatteryModificationForm,
451
463
  BooleanCellRenderer,
452
464
  BooleanInput,
453
465
  BooleanNullableCellRenderer,
@@ -972,6 +984,10 @@ export {
972
984
  batteryCreationEmptyFormData,
973
985
  batteryCreationFormSchema,
974
986
  batteryCreationFormToDto,
987
+ batteryModificationDtoToForm,
988
+ batteryModificationEmptyFormData,
989
+ batteryModificationFormSchema,
990
+ batteryModificationFormToDto,
975
991
  buildNewBusbarSections,
976
992
  businessErrorsEn,
977
993
  businessErrorsFr,
@@ -1209,6 +1225,7 @@ export {
1209
1225
  getStudyUrlWithNodeUuid,
1210
1226
  getStudyUrlWithNodeUuidAndRootNetworkUuid,
1211
1227
  getSystemLanguage,
1228
+ getUser,
1212
1229
  getUserToken,
1213
1230
  getVoltageInitParameters,
1214
1231
  getVoltageInitUrl,
@@ -1323,6 +1340,7 @@ export {
1323
1340
  snackWithFallback,
1324
1341
  standardTextField,
1325
1342
  styles,
1343
+ subscribeToUserState,
1326
1344
  substationCreationDtoToForm,
1327
1345
  substationCreationEmptyFormData,
1328
1346
  substationCreationFormSchema,
@@ -4,6 +4,7 @@ export type CommonStoreState = {
4
4
  };
5
5
  interface CommonStore {
6
6
  getState(): CommonStoreState;
7
+ subscribe(listener: () => void): () => void;
7
8
  }
8
9
  /**
9
10
  * Set a copy of the reference to the store to be able to access it from this library.
@@ -11,5 +12,7 @@ interface CommonStore {
11
12
  * NB : temporary solution before refactoring the token management in the whole gridsuite stack.
12
13
  */
13
14
  export declare function setCommonStore(store: CommonStore): void;
15
+ export declare function getUser(): User | null;
14
16
  export declare function getUserToken(): string | undefined;
17
+ export declare function subscribeToUserState(listener: () => void): () => void;
15
18
  export {};
@@ -2,10 +2,19 @@ let commonStore;
2
2
  function setCommonStore(store) {
3
3
  commonStore = store;
4
4
  }
5
+ function getUser() {
6
+ return commonStore?.getState().user ?? null;
7
+ }
5
8
  function getUserToken() {
6
9
  return commonStore?.getState().user?.id_token;
7
10
  }
11
+ function subscribeToUserState(listener) {
12
+ return commonStore?.subscribe(listener) ?? (() => {
13
+ });
14
+ }
8
15
  export {
16
+ getUser,
9
17
  getUserToken,
10
- setCommonStore
18
+ setCommonStore,
19
+ subscribeToUserState
11
20
  };
@@ -1,5 +1,5 @@
1
1
  import { LOGOUT_ERROR, RESET_AUTHENTICATION_ROUTER_ERROR, SHOW_AUTH_INFO_LOGIN, SIGNIN_CALLBACK_ERROR, UNAUTHORIZED_USER_INFO, USER, USER_VALIDATION_ERROR, resetAuthenticationRouterError, setLoggedUser, setLogoutError, setShowAuthenticationRouterLogin, setSignInCallbackError, setUnauthorizedUserInfo, setUserValidationError } from "./actions/authActions.js";
2
- import { getUserToken, setCommonStore } from "./commonStore.js";
2
+ import { getUser, getUserToken, setCommonStore, subscribeToUserState } from "./commonStore.js";
3
3
  export {
4
4
  LOGOUT_ERROR,
5
5
  RESET_AUTHENTICATION_ROUTER_ERROR,
@@ -8,6 +8,7 @@ export {
8
8
  UNAUTHORIZED_USER_INFO,
9
9
  USER,
10
10
  USER_VALIDATION_ERROR,
11
+ getUser,
11
12
  getUserToken,
12
13
  resetAuthenticationRouterError,
13
14
  setCommonStore,
@@ -16,5 +17,6 @@ export {
16
17
  setShowAuthenticationRouterLogin,
17
18
  setSignInCallbackError,
18
19
  setUnauthorizedUserInfo,
19
- setUserValidationError
20
+ setUserValidationError,
21
+ subscribeToUserState
20
22
  };
@@ -220,6 +220,8 @@ export declare const networkModificationsEn: {
220
220
  Or: string;
221
221
  CreateBattery: string;
222
222
  BatteryCreationError: string;
223
+ ModifyBattery: string;
224
+ BatteryModificationError: string;
223
225
  Connectivity: string;
224
226
  ActiveLimits: string;
225
227
  ReactiveLimits: string;
@@ -228,6 +230,8 @@ export declare const networkModificationsEn: {
228
230
  Off: string;
229
231
  FrequencyRegulation: string;
230
232
  Droop: string;
233
+ Limits: string;
234
+ MinActivePowerMustBeLessOrEqualToMaxActivePower: string;
231
235
  activePowerControlTooltip: string;
232
236
  NoModification: string;
233
237
  ReactiveLimitsKindMinMax: string;
@@ -258,6 +262,8 @@ export declare const networkModificationsEn: {
258
262
  SubstationTab: string;
259
263
  ConnectivityTab: string;
260
264
  CharacteristicsTab: string;
265
+ SetpointsAndLimitsTab: string;
266
+ SpecificTab: string;
261
267
  StructureTab: string;
262
268
  AdditionalInformationTab: string;
263
269
  StateEstimationTab: string;
@@ -225,6 +225,8 @@ const networkModificationsEn = {
225
225
  Or: "or",
226
226
  CreateBattery: "Create battery",
227
227
  BatteryCreationError: "Error while creating battery",
228
+ ModifyBattery: "Modify battery",
229
+ BatteryModificationError: "Error while modifying battery",
228
230
  Connectivity: "Connectivity",
229
231
  ActiveLimits: "Active limits",
230
232
  ReactiveLimits: "Reactive limits",
@@ -233,6 +235,8 @@ const networkModificationsEn = {
233
235
  Off: "Off",
234
236
  FrequencyRegulation: "Active power regulation",
235
237
  Droop: "Droop",
238
+ Limits: "Limits",
239
+ MinActivePowerMustBeLessOrEqualToMaxActivePower: "Minimum active power value must be less than or equal to maximum active power value",
236
240
  activePowerControlTooltip: "Slack bus active power repartition key: maxP/droop, default droop = 4 (used if balanceType is PROPORTIONAL_TO_GENERATION_P_MAX)",
237
241
  NoModification: "No modification",
238
242
  ReactiveLimitsKindMinMax: "By range",
@@ -264,6 +268,8 @@ const networkModificationsEn = {
264
268
  SubstationTab: "Substation",
265
269
  ConnectivityTab: "Connectivity",
266
270
  CharacteristicsTab: "Characteristics",
271
+ SetpointsAndLimitsTab: "Setpoints & Limits",
272
+ SpecificTab: "Specific",
267
273
  StructureTab: "Structure",
268
274
  AdditionalInformationTab: "Additional information",
269
275
  StateEstimationTab: "State estimation"
@@ -220,6 +220,8 @@ export declare const networkModificationsFr: {
220
220
  Or: string;
221
221
  CreateBattery: string;
222
222
  BatteryCreationError: string;
223
+ ModifyBattery: string;
224
+ BatteryModificationError: string;
223
225
  Connectivity: string;
224
226
  ActiveLimits: string;
225
227
  ReactiveLimits: string;
@@ -228,6 +230,8 @@ export declare const networkModificationsFr: {
228
230
  Off: string;
229
231
  FrequencyRegulation: string;
230
232
  Droop: string;
233
+ Limits: string;
234
+ MinActivePowerMustBeLessOrEqualToMaxActivePower: string;
231
235
  activePowerControlTooltip: string;
232
236
  NoModification: string;
233
237
  ReactiveLimitsKindMinMax: string;
@@ -258,6 +262,8 @@ export declare const networkModificationsFr: {
258
262
  SubstationTab: string;
259
263
  ConnectivityTab: string;
260
264
  CharacteristicsTab: string;
265
+ SetpointsAndLimitsTab: string;
266
+ SpecificTab: string;
261
267
  StructureTab: string;
262
268
  AdditionalInformationTab: string;
263
269
  StateEstimationTab: string;
@@ -225,6 +225,8 @@ const networkModificationsFr = {
225
225
  Or: "ou",
226
226
  CreateBattery: "Créer une batterie",
227
227
  BatteryCreationError: "Erreur lors de la création d'une batterie",
228
+ ModifyBattery: "Modifier une batterie",
229
+ BatteryModificationError: "Erreur lors de la modification d'une batterie",
228
230
  Connectivity: "Connectivité",
229
231
  ActiveLimits: "Limites en actif",
230
232
  ReactiveLimits: "Limites en réactif",
@@ -233,6 +235,8 @@ const networkModificationsFr = {
233
235
  Off: "Désactivé",
234
236
  FrequencyRegulation: "Compensation",
235
237
  Droop: "Statisme",
238
+ Limits: "Limites",
239
+ MinActivePowerMustBeLessOrEqualToMaxActivePower: "La valeur de la puissance active min doit être inférieure ou égale à la valeur de la puissance active max",
236
240
  activePowerControlTooltip: "Clé de distribution de la puissance au nœud bilan : maxP/Statisme, statisme par défaut = 4 (valable pour le mode compensation proportionnel à la puissance maximale des groupes)",
237
241
  NoModification: "Pas de modification",
238
242
  ReactiveLimitsKindMinMax: "Par plage",
@@ -264,6 +268,8 @@ const networkModificationsFr = {
264
268
  SubstationTab: "Site",
265
269
  ConnectivityTab: "Connectivité",
266
270
  CharacteristicsTab: "Caractéristiques",
271
+ SetpointsAndLimitsTab: "Consignes & Limites",
272
+ SpecificTab: "Spécifique",
267
273
  StructureTab: "Structure",
268
274
  AdditionalInformationTab: "Compléments",
269
275
  StateEstimationTab: "Estimation d'état"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gridsuite/commons-ui",
3
- "version": "0.217.0",
3
+ "version": "0.219.0",
4
4
  "description": "common react components for gridsuite applications",
5
5
  "author": "gridsuite team",
6
6
  "homepage": "https://github.com/gridsuite",