@gridsuite/commons-ui 0.208.0 → 0.209.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.
- package/dist/components/index.js +12 -2
- package/dist/components/inputs/reactHookForm/booleans/RadioInput.js +1 -1
- package/dist/components/network-modification-table/renderers/name-cell.d.ts +2 -1
- package/dist/components/network-modification-table/renderers/name-cell.js +136 -19
- package/dist/components/network-modifications/battery/creation/BatteryCreationForm.d.ts +4 -0
- package/dist/components/network-modifications/battery/creation/BatteryCreationForm.js +105 -0
- package/dist/components/network-modifications/battery/creation/batteryCreation.types.d.ts +26 -0
- package/dist/components/network-modifications/battery/creation/batteryCreation.types.js +1 -0
- package/dist/components/network-modifications/battery/creation/batteryCreation.utils.d.ts +79 -0
- package/dist/components/network-modifications/battery/creation/batteryCreation.utils.js +145 -0
- package/dist/components/network-modifications/battery/creation/index.d.ts +9 -0
- package/dist/components/network-modifications/battery/creation/index.js +9 -0
- package/dist/components/network-modifications/battery/index.d.ts +7 -0
- package/dist/components/network-modifications/battery/index.js +9 -0
- package/dist/components/network-modifications/common/index.js +5 -2
- package/dist/components/network-modifications/common/reactiveLimits/index.js +5 -2
- package/dist/components/network-modifications/common/reactiveLimits/reactiveCapabilityCurve/index.js +2 -1
- package/dist/components/network-modifications/common/reactiveLimits/reactiveCapabilityCurve/reactiveCapability.utils.d.ts +10 -1
- package/dist/components/network-modifications/common/reactiveLimits/reactiveCapabilityCurve/reactiveCapability.utils.js +26 -24
- package/dist/components/network-modifications/common/reactiveLimits/reactiveLimits.type.d.ts +3 -3
- package/dist/components/network-modifications/common/reactiveLimits/reactiveLimits.utils.d.ts +33 -0
- package/dist/components/network-modifications/common/reactiveLimits/reactiveLimits.utils.js +68 -34
- package/dist/components/network-modifications/index.d.ts +1 -0
- package/dist/components/network-modifications/index.js +12 -2
- package/dist/index.js +12 -2
- package/dist/translations/en/networkModificationsEn.d.ts +10 -0
- package/dist/translations/en/networkModificationsEn.js +10 -0
- package/dist/translations/fr/networkModificationsFr.d.ts +10 -0
- package/dist/translations/fr/networkModificationsFr.js +10 -0
- package/dist/utils/types/network-modification-metadata.d.ts +1 -0
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -215,10 +215,10 @@ import { getActivePowerControlEmptyFormData, getActivePowerControlSchema } from
|
|
|
215
215
|
import { ActivePowerControlForm } from "./network-modifications/common/activePowerControl/ActivePowerControlForm.js";
|
|
216
216
|
import { getShortCircuitEmptyFormData, getShortCircuitFormData, getShortCircuitFormSchema } from "./network-modifications/common/shortCircuit/shortCircuitForm.utils.js";
|
|
217
217
|
import { ShortCircuitForm } from "./network-modifications/common/shortCircuit/ShortCircuitForm.js";
|
|
218
|
-
import { INSERT, REMOVE, getReactiveCapabilityCurveValidationSchema, getRowEmptyFormData, setCurrentReactiveCapabilityCurveTable, setSelectedReactiveLimits, toReactiveCapabilityCurveChoiceForGeneratorCreation, toReactiveCapabilityCurveChoiceForGeneratorModification } from "./network-modifications/common/reactiveLimits/reactiveCapabilityCurve/reactiveCapability.utils.js";
|
|
218
|
+
import { INSERT, REMOVE, getReactiveCapabilityCurveValidationSchema, getReactiveCapabilityCurveValidationSchemaArray, getRowEmptyFormData, setCurrentReactiveCapabilityCurveTable, setSelectedReactiveLimits, toReactiveCapabilityCurveChoiceForGeneratorCreation, toReactiveCapabilityCurveChoiceForGeneratorModification } from "./network-modifications/common/reactiveLimits/reactiveCapabilityCurve/reactiveCapability.utils.js";
|
|
219
219
|
import { ReactiveCapabilityCurveRowForm } from "./network-modifications/common/reactiveLimits/reactiveCapabilityCurve/ReactiveCapabilityCurveRowForm.js";
|
|
220
220
|
import { ReactiveCapabilityCurveTableForm } from "./network-modifications/common/reactiveLimits/reactiveCapabilityCurve/ReactiveCapabilityCurveTableForm.js";
|
|
221
|
-
import { REACTIVE_LIMIT_TYPES, getReactiveLimitsEmptyFormData, getReactiveLimitsFormData, getReactiveLimitsSchema, getReactiveLimitsValidationSchema } from "./network-modifications/common/reactiveLimits/reactiveLimits.utils.js";
|
|
221
|
+
import { REACTIVE_LIMIT_TYPES, getReactiveLimitsEmptyFormData, getReactiveLimitsEmptyFormDataProps, getReactiveLimitsFormData, getReactiveLimitsFormDataProps, getReactiveLimitsSchema, getReactiveLimitsValidationSchema } from "./network-modifications/common/reactiveLimits/reactiveLimits.utils.js";
|
|
222
222
|
import { ReactiveLimitsForm } from "./network-modifications/common/reactiveLimits/ReactiveLimitsForm.js";
|
|
223
223
|
import { getHvdcLccDeletionSchema } from "./network-modifications/equipmentDeletion/hvdcLccDeletion/hvdcLccDeletion.utils.js";
|
|
224
224
|
import { ShuntCompensatorSelectionForm } from "./network-modifications/equipmentDeletion/hvdcLccDeletion/ShuntCompensatorSelectionForm.js";
|
|
@@ -255,6 +255,8 @@ import { EQUIPMENT_TYPE_ORDER, byFilterDeletionDtoToForm, byFilterDeletionFormSc
|
|
|
255
255
|
import { ModificationByAssignmentForm } from "./network-modifications/by-filter/assignment/modification-by-assignment-form.js";
|
|
256
256
|
import { emptyModificationByAssignmentFormData, modificationByAssignmentDtoToForm, modificationByAssignmentFormSchema, modificationByAssignmentFormToDto } from "./network-modifications/by-filter/assignment/modificationByAssignment.utils.js";
|
|
257
257
|
import { DataType as DataType2 } from "./network-modifications/by-filter/assignment/assignment/assignment.type.js";
|
|
258
|
+
import { batteryCreationDtoToForm, batteryCreationEmptyFormData, batteryCreationFormSchema, batteryCreationFormToDto } from "./network-modifications/battery/creation/batteryCreation.utils.js";
|
|
259
|
+
import { BatteryCreationForm } from "./network-modifications/battery/creation/BatteryCreationForm.js";
|
|
258
260
|
import { BuildStatusChip } from "./node/build-status-chip.js";
|
|
259
261
|
import { BuildStatus } from "./node/constant.js";
|
|
260
262
|
import { COLUMNS_WITHOUT_BORDER, DEPTH_CELL_WIDTH, DROP_FORBIDDEN_INDICATOR_BOTTOM, DROP_FORBIDDEN_INDICATOR_TOP, DROP_INDICATOR_BOTTOM, DROP_INDICATOR_TOP, MODIFICATION_ROW_HEIGHT, createCellBorderColor, createCellContentWrapperSx, createCellStyle, createEditDescriptionStyle, createHeaderCellStyle, createModificationNameCellStyle, createNameCellLabelBoxSx, createNameCellRootStyle, createRootNetworkChipCellSx, createRowSx, networkModificationTableStyles } from "./network-modification-table/network-modification-table-styles.js";
|
|
@@ -290,6 +292,7 @@ export {
|
|
|
290
292
|
AutocompleteWithFavorites,
|
|
291
293
|
BALANCE_TYPE,
|
|
292
294
|
BASE_MODIFICATION_TABLE_COLUMNS,
|
|
295
|
+
BatteryCreationForm,
|
|
293
296
|
BooleanCellRenderer,
|
|
294
297
|
BooleanInput,
|
|
295
298
|
BooleanNullableCellRenderer,
|
|
@@ -676,6 +679,10 @@ export {
|
|
|
676
679
|
VoltageLevelModificationForm,
|
|
677
680
|
WRITE_SLACK_BUS,
|
|
678
681
|
alertThresholdMarks,
|
|
682
|
+
batteryCreationDtoToForm,
|
|
683
|
+
batteryCreationEmptyFormData,
|
|
684
|
+
batteryCreationFormSchema,
|
|
685
|
+
batteryCreationFormToDto,
|
|
679
686
|
buildNewBusbarSections,
|
|
680
687
|
byFilterDeletionDtoToForm,
|
|
681
688
|
byFilterDeletionFormSchema,
|
|
@@ -771,8 +778,11 @@ export {
|
|
|
771
778
|
getPropertyValue,
|
|
772
779
|
getRangeInputSchema,
|
|
773
780
|
getReactiveCapabilityCurveValidationSchema,
|
|
781
|
+
getReactiveCapabilityCurveValidationSchemaArray,
|
|
774
782
|
getReactiveLimitsEmptyFormData,
|
|
783
|
+
getReactiveLimitsEmptyFormDataProps,
|
|
775
784
|
getReactiveLimitsFormData,
|
|
785
|
+
getReactiveLimitsFormDataProps,
|
|
776
786
|
getReactiveLimitsSchema,
|
|
777
787
|
getReactiveLimitsValidationSchema,
|
|
778
788
|
getReactivePowerSetPointSchema,
|
|
@@ -6,7 +6,7 @@ import { FieldLabel } from "../utils/FieldLabel.js";
|
|
|
6
6
|
function RadioInput({ name, label, id, options, formProps }) {
|
|
7
7
|
const {
|
|
8
8
|
field: { onChange, value }
|
|
9
|
-
} = useController({ name });
|
|
9
|
+
} = useController({ name, defaultValue: "" });
|
|
10
10
|
return /* @__PURE__ */ jsxs(FormControl, { children: [
|
|
11
11
|
label && /* @__PURE__ */ jsx(FormLabel, { id: id ?? label, children: /* @__PURE__ */ jsx(FormattedMessage, { id: label }) }),
|
|
12
12
|
/* @__PURE__ */ jsx(RadioGroup, { row: true, "aria-labelledby": id ?? label, value, onChange, ...formProps, children: options.map((option) => /* @__PURE__ */ jsx(
|
|
@@ -2,6 +2,7 @@ import { Row } from '@tanstack/react-table';
|
|
|
2
2
|
import { ComposedModificationMetadata } from '../../../utils';
|
|
3
3
|
interface NameCellProps {
|
|
4
4
|
row: Row<ComposedModificationMetadata>;
|
|
5
|
+
onEditNameCell?: (modification: ComposedModificationMetadata, newName: string) => void;
|
|
5
6
|
}
|
|
6
|
-
export declare function NameCell({ row }: Readonly<NameCellProps>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function NameCell({ row, onEditNameCell }: Readonly<NameCellProps>): import("react/jsx-runtime").JSX.Element;
|
|
7
8
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useMemo } from "react";
|
|
2
|
+
import { useCallback, useMemo, useState, useRef } from "react";
|
|
3
3
|
import { useIntl } from "react-intl";
|
|
4
|
-
import { useTheme, Box, IconButton } from "@mui/material";
|
|
4
|
+
import { useTheme, Box, IconButton, InputBase } from "@mui/material";
|
|
5
5
|
import { KeyboardArrowDown, KeyboardArrowRight } from "@mui/icons-material";
|
|
6
6
|
import { CustomTooltip } from "../../tooltip/CustomTooltip.js";
|
|
7
7
|
import { networkModificationTableStyles, createNameCellLabelBoxSx, createModificationNameCellStyle, createNameCellRootStyle } from "../network-modification-table-styles.js";
|
|
@@ -16,11 +16,21 @@ import "localized-countries";
|
|
|
16
16
|
import "localized-countries/data/fr";
|
|
17
17
|
import "localized-countries/data/en";
|
|
18
18
|
import "notistack";
|
|
19
|
-
|
|
19
|
+
const MIN_CHAR_WIDTH = 30;
|
|
20
|
+
function measureTextPx(text, font) {
|
|
21
|
+
const ctx = document.createElement("canvas").getContext("2d");
|
|
22
|
+
if (ctx) {
|
|
23
|
+
ctx.font = font;
|
|
24
|
+
return ctx.measureText(text).width;
|
|
25
|
+
}
|
|
26
|
+
return text.length * 8;
|
|
27
|
+
}
|
|
28
|
+
function NameCell({ row, onEditNameCell }) {
|
|
20
29
|
const intl = useIntl();
|
|
21
30
|
const theme = useTheme();
|
|
22
31
|
const { computeLabel } = useModificationLabelComputer();
|
|
23
32
|
const { depth } = row;
|
|
33
|
+
const isComposite = isCompositeModification(row.original);
|
|
24
34
|
const getModificationLabel = useCallback(
|
|
25
35
|
(modification, formatBold = true) => {
|
|
26
36
|
return intl.formatMessage(
|
|
@@ -31,17 +41,87 @@ function NameCell({ row }) {
|
|
|
31
41
|
[computeLabel, intl]
|
|
32
42
|
);
|
|
33
43
|
const label = useMemo(() => getModificationLabel(row.original), [getModificationLabel, row.original]);
|
|
44
|
+
const compositeName = useMemo(() => {
|
|
45
|
+
if (!isComposite) {
|
|
46
|
+
return "";
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
return JSON.parse(row.original.messageValues)?.name ?? "";
|
|
50
|
+
} catch {
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
}, [isComposite, row.original.messageValues]);
|
|
54
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
55
|
+
const [draftName, setDraftName] = useState("");
|
|
56
|
+
const [inputBaseWidthPx, setInputBaseWidthPx] = useState(null);
|
|
57
|
+
const labelRef = useRef(null);
|
|
58
|
+
const inputRef = useRef(null);
|
|
59
|
+
const isEditingRef = useRef(false);
|
|
60
|
+
const stopEditing = useCallback(() => {
|
|
61
|
+
isEditingRef.current = false;
|
|
62
|
+
setIsEditing(false);
|
|
63
|
+
setInputBaseWidthPx(null);
|
|
64
|
+
}, []);
|
|
65
|
+
const handleBlur = useCallback(() => {
|
|
66
|
+
if (!isEditingRef.current) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const trimmed = draftName.trim();
|
|
70
|
+
if (trimmed !== "" && trimmed !== compositeName) {
|
|
71
|
+
onEditNameCell?.(row.original, trimmed);
|
|
72
|
+
}
|
|
73
|
+
stopEditing();
|
|
74
|
+
}, [compositeName, draftName, onEditNameCell, row.original, stopEditing]);
|
|
75
|
+
const handleLabelClick = useCallback(
|
|
76
|
+
(e) => {
|
|
77
|
+
e.stopPropagation();
|
|
78
|
+
setDraftName(compositeName);
|
|
79
|
+
if (labelRef.current) {
|
|
80
|
+
const style = globalThis.getComputedStyle(labelRef.current);
|
|
81
|
+
const font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;
|
|
82
|
+
const px = compositeName.length >= MIN_CHAR_WIDTH ? measureTextPx(compositeName, font) + 20 : measureTextPx("a".repeat(MIN_CHAR_WIDTH), font) + 20;
|
|
83
|
+
setInputBaseWidthPx(px);
|
|
84
|
+
}
|
|
85
|
+
isEditingRef.current = true;
|
|
86
|
+
setIsEditing(true);
|
|
87
|
+
requestAnimationFrame(() => {
|
|
88
|
+
inputRef.current?.focus();
|
|
89
|
+
inputRef.current?.select();
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
[compositeName]
|
|
93
|
+
);
|
|
94
|
+
const handleKeyDown = useCallback(
|
|
95
|
+
(e) => {
|
|
96
|
+
if (e.key === "Enter") {
|
|
97
|
+
const trimmed = draftName.trim();
|
|
98
|
+
if (trimmed !== "" && trimmed !== compositeName) {
|
|
99
|
+
onEditNameCell?.(row.original, trimmed);
|
|
100
|
+
}
|
|
101
|
+
stopEditing();
|
|
102
|
+
inputRef.current?.blur();
|
|
103
|
+
} else if (e.key === "Escape") {
|
|
104
|
+
stopEditing();
|
|
105
|
+
inputRef.current?.blur();
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
[compositeName, draftName, onEditNameCell, row.original, stopEditing]
|
|
109
|
+
);
|
|
34
110
|
const renderDepthBox = () => {
|
|
35
111
|
const depthLevelCount = depth;
|
|
36
|
-
return Array.from({ length: depthLevelCount }, (_, i) => /* @__PURE__ */ jsx(
|
|
37
|
-
DepthBox,
|
|
38
|
-
{
|
|
39
|
-
firstLevel: i === 0,
|
|
40
|
-
displayAsFolder: isCompositeModification(row.original) && i === depthLevelCount - 1
|
|
41
|
-
},
|
|
42
|
-
i
|
|
43
|
-
));
|
|
112
|
+
return Array.from({ length: depthLevelCount }, (_, i) => /* @__PURE__ */ jsx(DepthBox, { firstLevel: i === 0, displayAsFolder: isComposite && i === depthLevelCount - 1 }, i));
|
|
44
113
|
};
|
|
114
|
+
const compositeReadModeProps = isComposite ? {
|
|
115
|
+
ref: labelRef,
|
|
116
|
+
onClick: handleLabelClick,
|
|
117
|
+
sx: {
|
|
118
|
+
cursor: "text",
|
|
119
|
+
"&:hover": {
|
|
120
|
+
textDecoration: "underline dotted",
|
|
121
|
+
textDecorationColor: theme.palette.text.secondary
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} : {};
|
|
45
125
|
return /* @__PURE__ */ jsxs(
|
|
46
126
|
Box,
|
|
47
127
|
{
|
|
@@ -52,7 +132,7 @@ function NameCell({ row }) {
|
|
|
52
132
|
children: [
|
|
53
133
|
renderDepthBox(),
|
|
54
134
|
/* @__PURE__ */ jsxs(Box, { sx: networkModificationTableStyles.nameCellInnerRow, children: [
|
|
55
|
-
|
|
135
|
+
isComposite && /* @__PURE__ */ jsx(Box, { sx: networkModificationTableStyles.nameCellTogglerBox, children: /* @__PURE__ */ jsx(
|
|
56
136
|
IconButton,
|
|
57
137
|
{
|
|
58
138
|
size: "small",
|
|
@@ -65,16 +145,53 @@ function NameCell({ row }) {
|
|
|
65
145
|
children: row.getIsExpanded() ? /* @__PURE__ */ jsx(KeyboardArrowDown, { fontSize: "small" }) : /* @__PURE__ */ jsx(KeyboardArrowRight, { fontSize: "small" })
|
|
66
146
|
}
|
|
67
147
|
) }),
|
|
68
|
-
/* @__PURE__ */ jsx(Box, { sx: createNameCellLabelBoxSx(row.getIsExpanded(), depth), children:
|
|
148
|
+
/* @__PURE__ */ jsx(Box, { sx: createNameCellLabelBoxSx(row.getIsExpanded(), depth), children: isComposite && isEditing ? /* @__PURE__ */ jsx(
|
|
69
149
|
Box,
|
|
70
150
|
{
|
|
71
|
-
sx: mergeSx(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
151
|
+
sx: mergeSx(networkModificationTableStyles.modificationLabel, {
|
|
152
|
+
display: "inline-flex",
|
|
153
|
+
width: inputBaseWidthPx ? `${inputBaseWidthPx}px` : `${MIN_CHAR_WIDTH}ch`,
|
|
154
|
+
maxWidth: "100%",
|
|
155
|
+
flexShrink: 0
|
|
156
|
+
}),
|
|
157
|
+
children: /* @__PURE__ */ jsx(
|
|
158
|
+
InputBase,
|
|
159
|
+
{
|
|
160
|
+
inputRef,
|
|
161
|
+
value: draftName,
|
|
162
|
+
onChange: (e) => setDraftName(e.target.value),
|
|
163
|
+
onBlur: handleBlur,
|
|
164
|
+
onKeyDown: handleKeyDown,
|
|
165
|
+
onMouseDown: (e) => e.stopPropagation(),
|
|
166
|
+
sx: {
|
|
167
|
+
width: "100%",
|
|
168
|
+
fontSize: "inherit",
|
|
169
|
+
fontFamily: "inherit",
|
|
170
|
+
color: "inherit",
|
|
171
|
+
"& .MuiInputBase-input": {
|
|
172
|
+
border: `1px solid ${theme.palette.primary.main}`,
|
|
173
|
+
borderRadius: `${theme.shape.borderRadius}px`,
|
|
174
|
+
backgroundColor: theme.palette.background.paper
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
)
|
|
76
179
|
}
|
|
77
|
-
)
|
|
180
|
+
) : (
|
|
181
|
+
/* Read mode */
|
|
182
|
+
/* @__PURE__ */ jsx(CustomTooltip, { disableFocusListener: true, disableTouchListener: true, title: label, children: /* @__PURE__ */ jsx(
|
|
183
|
+
Box,
|
|
184
|
+
{
|
|
185
|
+
...compositeReadModeProps,
|
|
186
|
+
sx: mergeSx(
|
|
187
|
+
networkModificationTableStyles.modificationLabel,
|
|
188
|
+
createModificationNameCellStyle(row.original.activated),
|
|
189
|
+
compositeReadModeProps.sx
|
|
190
|
+
),
|
|
191
|
+
children: label
|
|
192
|
+
}
|
|
193
|
+
) })
|
|
194
|
+
) })
|
|
78
195
|
] })
|
|
79
196
|
]
|
|
80
197
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ConnectivityNetworkProps } from '../../common';
|
|
2
|
+
export interface BatteryCreationFormProps extends ConnectivityNetworkProps {
|
|
3
|
+
}
|
|
4
|
+
export declare function BatteryCreationForm({ voltageLevelOptions, fetchBusesOrBusbarSections, PositionDiagramPane, }: Readonly<BatteryCreationFormProps>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Grid } from "@mui/material";
|
|
3
|
+
import { filledTextField } from "../../common/form.utils.js";
|
|
4
|
+
import { PropertiesForm } from "../../common/properties/PropertiesForm.js";
|
|
5
|
+
import "react";
|
|
6
|
+
import "react-hook-form";
|
|
7
|
+
import { ActivePowerAdornment } from "../../../../utils/constants/adornments.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 "../../../../utils/yupConfig.js";
|
|
13
|
+
import "react-intl";
|
|
14
|
+
import "../../../overflowableText/OverflowableText.js";
|
|
15
|
+
import "localized-countries";
|
|
16
|
+
import "localized-countries/data/fr";
|
|
17
|
+
import "localized-countries/data/en";
|
|
18
|
+
import "notistack";
|
|
19
|
+
import "../../../inputs/reactHookForm/provider/CustomFormProvider.js";
|
|
20
|
+
import "yup";
|
|
21
|
+
import "../../../treeViewFinder/TreeViewFinder.js";
|
|
22
|
+
import "../../../inputs/reactHookForm/agGridTable/BottomRightButtons.js";
|
|
23
|
+
import "../../../customAGGrid/customAggrid.js";
|
|
24
|
+
import "ag-grid-community";
|
|
25
|
+
import "react-papaparse";
|
|
26
|
+
import "react-csv-downloader";
|
|
27
|
+
import { FloatInput } from "../../../inputs/reactHookForm/numbers/FloatInput.js";
|
|
28
|
+
import { TextInput } from "../../../inputs/reactHookForm/text/TextInput.js";
|
|
29
|
+
import "../../../inputs/reactHookForm/numbers/RangeInput.js";
|
|
30
|
+
import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
|
|
31
|
+
import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
|
|
32
|
+
import "@material-symbols/svg-400/outlined/arrows_input.svg?react";
|
|
33
|
+
import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
|
|
34
|
+
import "@material-symbols/svg-400/outlined/add_notes.svg?react";
|
|
35
|
+
import "../../../dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
|
|
36
|
+
import "../../../inputs/reactHookForm/expandableInput/ExpandableInput.js";
|
|
37
|
+
import "@react-querybuilder/material";
|
|
38
|
+
import "../../../filter/expert/expertFilterConstants.js";
|
|
39
|
+
import "../../../inputs/reactQueryBuilder/CustomReactQueryBuilder.js";
|
|
40
|
+
import "uuid";
|
|
41
|
+
import "../../../inputs/reactQueryBuilder/PropertyValueEditor.js";
|
|
42
|
+
import "react-querybuilder";
|
|
43
|
+
import "../../common/properties/propertyUtils.js";
|
|
44
|
+
import GridSection from "../../../grid/grid-section.js";
|
|
45
|
+
import { SetPointsForm } from "../../common/setpoints/SetPointsForm.js";
|
|
46
|
+
import { ConnectivityForm } from "../../common/connectivity/ConnectivityForm.js";
|
|
47
|
+
import { ActivePowerControlForm } from "../../common/activePowerControl/ActivePowerControlForm.js";
|
|
48
|
+
import { ShortCircuitForm } from "../../common/shortCircuit/ShortCircuitForm.js";
|
|
49
|
+
import GridItem from "../../../grid/grid-item.js";
|
|
50
|
+
import { ReactiveLimitsForm } from "../../common/reactiveLimits/ReactiveLimitsForm.js";
|
|
51
|
+
function BatteryCreationForm({
|
|
52
|
+
voltageLevelOptions,
|
|
53
|
+
fetchBusesOrBusbarSections,
|
|
54
|
+
PositionDiagramPane
|
|
55
|
+
}) {
|
|
56
|
+
const batteryIdField = /* @__PURE__ */ jsx(TextInput, { name: FieldConstants.EQUIPMENT_ID, label: "ID", formProps: { autoFocus: true, ...filledTextField } });
|
|
57
|
+
const batteryNameField = /* @__PURE__ */ jsx(TextInput, { name: FieldConstants.EQUIPMENT_NAME, label: "Name", formProps: filledTextField });
|
|
58
|
+
const connectivityForm = /* @__PURE__ */ jsx(
|
|
59
|
+
ConnectivityForm,
|
|
60
|
+
{
|
|
61
|
+
voltageLevelOptions,
|
|
62
|
+
PositionDiagramPane,
|
|
63
|
+
fetchBusesOrBusbarSections
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
const maximumActivePowerField = /* @__PURE__ */ jsx(
|
|
67
|
+
FloatInput,
|
|
68
|
+
{
|
|
69
|
+
name: FieldConstants.MAXIMUM_ACTIVE_POWER,
|
|
70
|
+
label: "MaximumActivePowerText",
|
|
71
|
+
adornment: ActivePowerAdornment
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
const minimumActivePowerField = /* @__PURE__ */ jsx(
|
|
75
|
+
FloatInput,
|
|
76
|
+
{
|
|
77
|
+
name: FieldConstants.MINIMUM_ACTIVE_POWER,
|
|
78
|
+
label: "MinimumActivePowerText",
|
|
79
|
+
adornment: ActivePowerAdornment
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
83
|
+
/* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
|
|
84
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: batteryIdField }),
|
|
85
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: batteryNameField })
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ jsx(GridSection, { title: "Connectivity" }),
|
|
88
|
+
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, children: /* @__PURE__ */ jsx(GridItem, { size: 12, children: connectivityForm }) }),
|
|
89
|
+
/* @__PURE__ */ jsx(GridSection, { title: "ActiveLimits" }),
|
|
90
|
+
/* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
|
|
91
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: minimumActivePowerField }),
|
|
92
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: maximumActivePowerField })
|
|
93
|
+
] }),
|
|
94
|
+
/* @__PURE__ */ jsx(GridSection, { title: "ReactiveLimits" }),
|
|
95
|
+
/* @__PURE__ */ jsx(ReactiveLimitsForm, {}),
|
|
96
|
+
/* @__PURE__ */ jsx(SetPointsForm, {}),
|
|
97
|
+
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, paddingTop: 2, children: /* @__PURE__ */ jsx(ActivePowerControlForm, {}) }),
|
|
98
|
+
/* @__PURE__ */ jsx(GridSection, { title: "ShortCircuit" }),
|
|
99
|
+
/* @__PURE__ */ jsx(ShortCircuitForm, {}),
|
|
100
|
+
/* @__PURE__ */ jsx(PropertiesForm, { networkElementType: "battery" })
|
|
101
|
+
] });
|
|
102
|
+
}
|
|
103
|
+
export {
|
|
104
|
+
BatteryCreationForm
|
|
105
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Property, ReactiveCapabilityCurvePoints } from '../../common';
|
|
2
|
+
import { ModificationType } from '../../../../utils';
|
|
3
|
+
export interface BatteryCreationDto {
|
|
4
|
+
type: ModificationType;
|
|
5
|
+
equipmentId: string;
|
|
6
|
+
equipmentName: string | null;
|
|
7
|
+
minP: number;
|
|
8
|
+
maxP: number;
|
|
9
|
+
reactiveCapabilityCurve?: boolean | null;
|
|
10
|
+
targetP: number;
|
|
11
|
+
targetQ: number;
|
|
12
|
+
voltageLevelId: string | null;
|
|
13
|
+
busOrBusbarSectionId: string | null;
|
|
14
|
+
reactiveCapabilityCurvePoints: ReactiveCapabilityCurvePoints[] | null;
|
|
15
|
+
directTransX: number | null;
|
|
16
|
+
stepUpTransformerX: number | null;
|
|
17
|
+
participate: boolean | null;
|
|
18
|
+
droop: number | null;
|
|
19
|
+
maxQ: number | null;
|
|
20
|
+
minQ: number | null;
|
|
21
|
+
connectionDirection: string | null;
|
|
22
|
+
connectionName?: string | null;
|
|
23
|
+
connectionPosition?: number | null;
|
|
24
|
+
terminalConnected?: boolean | null;
|
|
25
|
+
properties: Property[] | null;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { InferType } from 'yup';
|
|
2
|
+
import { DeepNullable } from '../../../../utils';
|
|
3
|
+
import { BatteryCreationDto } from './batteryCreation.types';
|
|
4
|
+
export declare const batteryCreationFormSchema: 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;
|
|
14
|
+
minimumActivePower: number;
|
|
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
|
+
} & {
|
|
38
|
+
AdditionalProperties: {
|
|
39
|
+
previousValue?: string | null | undefined;
|
|
40
|
+
added: NonNullable<boolean | undefined>;
|
|
41
|
+
deletionMark: NonNullable<boolean | undefined>;
|
|
42
|
+
name: string;
|
|
43
|
+
value: string;
|
|
44
|
+
}[] | undefined;
|
|
45
|
+
}>, import('yup').AnyObject, {
|
|
46
|
+
transformerReactance: undefined;
|
|
47
|
+
directTransX: undefined;
|
|
48
|
+
frequencyRegulation: undefined;
|
|
49
|
+
droop: undefined;
|
|
50
|
+
reactivePowerSetpoint: undefined;
|
|
51
|
+
activePowerSetpoint: undefined;
|
|
52
|
+
equipmentID: undefined;
|
|
53
|
+
equipmentName: undefined;
|
|
54
|
+
maximumActivePower: undefined;
|
|
55
|
+
minimumActivePower: undefined;
|
|
56
|
+
connectivity: {
|
|
57
|
+
voltageLevel: {
|
|
58
|
+
id: undefined;
|
|
59
|
+
};
|
|
60
|
+
busOrBusbarSection: {
|
|
61
|
+
id: undefined;
|
|
62
|
+
};
|
|
63
|
+
connectionDirection: undefined;
|
|
64
|
+
connectionName: undefined;
|
|
65
|
+
connectionPosition: undefined;
|
|
66
|
+
terminalConnected: undefined;
|
|
67
|
+
};
|
|
68
|
+
reactiveLimits: {
|
|
69
|
+
reactiveCapabilityCurveChoice: undefined;
|
|
70
|
+
minimumReactivePower: undefined;
|
|
71
|
+
maximumReactivePower: undefined;
|
|
72
|
+
reactiveCapabilityCurveTable: "";
|
|
73
|
+
};
|
|
74
|
+
AdditionalProperties: "";
|
|
75
|
+
}, "">;
|
|
76
|
+
export type BatteryCreationFormData = InferType<typeof batteryCreationFormSchema>;
|
|
77
|
+
export declare const batteryCreationEmptyFormData: DeepNullable<BatteryCreationFormData>;
|
|
78
|
+
export declare const batteryCreationDtoToForm: (dto: BatteryCreationDto) => BatteryCreationFormData;
|
|
79
|
+
export declare const batteryCreationFormToDto: (form: BatteryCreationFormData) => BatteryCreationDto;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { object, number, string } from "yup";
|
|
2
|
+
import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
|
|
3
|
+
import { YUP_REQUIRED } from "../../../../utils/constants/translationKeys.js";
|
|
4
|
+
import "../../../../utils/conversionUtils.js";
|
|
5
|
+
import { UNDEFINED_CONNECTION_DIRECTION } from "../../../../utils/types/equipmentType.js";
|
|
6
|
+
import { ModificationType } from "../../../../utils/types/modificationType.js";
|
|
7
|
+
import "react/jsx-runtime";
|
|
8
|
+
import "@mui/icons-material";
|
|
9
|
+
import { sanitizeString } from "../../../../utils/ts-utils.js";
|
|
10
|
+
import "../../../../utils/yupConfig.js";
|
|
11
|
+
import { getConnectivityWithPositionSchema, getConnectivityWithPositionEmptyFormDataProps, getConnectivityFormDataProps } from "../../common/connectivity/connectivityForm.utils.js";
|
|
12
|
+
import "@mui/material";
|
|
13
|
+
import "react";
|
|
14
|
+
import "react-intl";
|
|
15
|
+
import "../../../overflowableText/OverflowableText.js";
|
|
16
|
+
import "react-hook-form";
|
|
17
|
+
import "localized-countries";
|
|
18
|
+
import "localized-countries/data/fr";
|
|
19
|
+
import "localized-countries/data/en";
|
|
20
|
+
import "notistack";
|
|
21
|
+
import "../../../inputs/reactHookForm/provider/CustomFormProvider.js";
|
|
22
|
+
import "../../../treeViewFinder/TreeViewFinder.js";
|
|
23
|
+
import "../../../inputs/reactHookForm/agGridTable/BottomRightButtons.js";
|
|
24
|
+
import "../../../customAGGrid/customAggrid.js";
|
|
25
|
+
import "ag-grid-community";
|
|
26
|
+
import "react-papaparse";
|
|
27
|
+
import "react-csv-downloader";
|
|
28
|
+
import "../../../inputs/reactHookForm/numbers/RangeInput.js";
|
|
29
|
+
import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
|
|
30
|
+
import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
|
|
31
|
+
import "@material-symbols/svg-400/outlined/arrows_input.svg?react";
|
|
32
|
+
import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
|
|
33
|
+
import "@material-symbols/svg-400/outlined/add_notes.svg?react";
|
|
34
|
+
import "../../../dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
|
|
35
|
+
import "../../../inputs/reactHookForm/expandableInput/ExpandableInput.js";
|
|
36
|
+
import "@react-querybuilder/material";
|
|
37
|
+
import "../../../filter/expert/expertFilterConstants.js";
|
|
38
|
+
import "../../../inputs/reactQueryBuilder/CustomReactQueryBuilder.js";
|
|
39
|
+
import "uuid";
|
|
40
|
+
import "../../../inputs/reactQueryBuilder/PropertyValueEditor.js";
|
|
41
|
+
import "react-querybuilder";
|
|
42
|
+
import { creationPropertiesSchema, getFilledPropertiesFromModification, toModificationProperties } from "../../common/properties/propertyUtils.js";
|
|
43
|
+
import { getSetPointsSchema, getSetPointsEmptyFormData } from "../../common/setpoints/setPoints.utils.js";
|
|
44
|
+
import { getActivePowerControlSchema, getActivePowerControlEmptyFormData } from "../../common/activePowerControl/activePowerControlForm.utils.js";
|
|
45
|
+
import { getShortCircuitFormSchema, getShortCircuitEmptyFormData, getShortCircuitFormData } from "../../common/shortCircuit/shortCircuitForm.utils.js";
|
|
46
|
+
import { getReactiveLimitsValidationSchema, getReactiveLimitsEmptyFormDataProps, getReactiveLimitsFormDataProps } from "../../common/reactiveLimits/reactiveLimits.utils.js";
|
|
47
|
+
const batteryCreationFormSchema = object().shape({
|
|
48
|
+
[FieldConstants.EQUIPMENT_ID]: string().required(YUP_REQUIRED),
|
|
49
|
+
[FieldConstants.EQUIPMENT_NAME]: string().nullable(),
|
|
50
|
+
[FieldConstants.MAXIMUM_ACTIVE_POWER]: number().nullable().required(YUP_REQUIRED).test("max-greater-than-min", "ActiveLimitsMinMaxInvalid", function checkMaxGreaterThanMin(value) {
|
|
51
|
+
const min = this.parent[FieldConstants.MINIMUM_ACTIVE_POWER];
|
|
52
|
+
if (value != null && min != null) {
|
|
53
|
+
return value >= min;
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}),
|
|
57
|
+
[FieldConstants.MINIMUM_ACTIVE_POWER]: number().nullable().required(YUP_REQUIRED).test("min-less-than-max", "ActiveLimitsMinMaxInvalid", function checkMinLessThanMax(value) {
|
|
58
|
+
const max = this.parent[FieldConstants.MAXIMUM_ACTIVE_POWER];
|
|
59
|
+
if (value != null && max != null) {
|
|
60
|
+
return value <= max;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}),
|
|
64
|
+
[FieldConstants.CONNECTIVITY]: getConnectivityWithPositionSchema(false),
|
|
65
|
+
[FieldConstants.REACTIVE_LIMITS]: getReactiveLimitsValidationSchema(),
|
|
66
|
+
...getSetPointsSchema(),
|
|
67
|
+
...getActivePowerControlSchema(),
|
|
68
|
+
...getShortCircuitFormSchema()
|
|
69
|
+
}).concat(creationPropertiesSchema).required(YUP_REQUIRED);
|
|
70
|
+
const batteryCreationEmptyFormData = {
|
|
71
|
+
equipmentID: "",
|
|
72
|
+
equipmentName: "",
|
|
73
|
+
maximumActivePower: null,
|
|
74
|
+
minimumActivePower: null,
|
|
75
|
+
connectivity: getConnectivityWithPositionEmptyFormDataProps(),
|
|
76
|
+
reactiveLimits: getReactiveLimitsEmptyFormDataProps(),
|
|
77
|
+
AdditionalProperties: [],
|
|
78
|
+
...getSetPointsEmptyFormData(),
|
|
79
|
+
...getActivePowerControlEmptyFormData(),
|
|
80
|
+
...getShortCircuitEmptyFormData()
|
|
81
|
+
};
|
|
82
|
+
const batteryCreationDtoToForm = (dto) => {
|
|
83
|
+
return {
|
|
84
|
+
equipmentID: dto.equipmentId,
|
|
85
|
+
equipmentName: dto.equipmentName ?? "",
|
|
86
|
+
maximumActivePower: dto.maxP,
|
|
87
|
+
minimumActivePower: dto.minP,
|
|
88
|
+
activePowerSetpoint: dto.targetP,
|
|
89
|
+
reactivePowerSetpoint: dto.targetQ,
|
|
90
|
+
frequencyRegulation: dto.participate,
|
|
91
|
+
droop: dto.droop,
|
|
92
|
+
connectivity: getConnectivityFormDataProps({
|
|
93
|
+
voltageLevelId: dto.voltageLevelId,
|
|
94
|
+
busbarSectionId: dto.busOrBusbarSectionId,
|
|
95
|
+
connectionDirection: dto.connectionDirection,
|
|
96
|
+
connectionName: dto.connectionName,
|
|
97
|
+
connectionPosition: dto.connectionPosition,
|
|
98
|
+
terminalConnected: dto.terminalConnected
|
|
99
|
+
}),
|
|
100
|
+
reactiveLimits: getReactiveLimitsFormDataProps({
|
|
101
|
+
reactiveCapabilityCurveChoice: dto?.reactiveCapabilityCurve ? "CURVE" : "MINMAX",
|
|
102
|
+
minimumReactivePower: dto?.minQ,
|
|
103
|
+
maximumReactivePower: dto?.maxQ,
|
|
104
|
+
reactiveCapabilityCurvePoints: dto?.reactiveCapabilityCurve ? dto?.reactiveCapabilityCurvePoints : null
|
|
105
|
+
}),
|
|
106
|
+
AdditionalProperties: getFilledPropertiesFromModification(dto.properties),
|
|
107
|
+
...getShortCircuitFormData({
|
|
108
|
+
directTransX: dto.directTransX,
|
|
109
|
+
stepUpTransformerX: dto.stepUpTransformerX
|
|
110
|
+
})
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
const batteryCreationFormToDto = (form) => {
|
|
114
|
+
const isReactiveCapabilityCurveOn = form.reactiveLimits.reactiveCapabilityCurveChoice === "CURVE";
|
|
115
|
+
return {
|
|
116
|
+
type: ModificationType.BATTERY_CREATION,
|
|
117
|
+
equipmentId: form.equipmentID,
|
|
118
|
+
equipmentName: sanitizeString(form.equipmentName),
|
|
119
|
+
voltageLevelId: form.connectivity.voltageLevel?.id ?? "",
|
|
120
|
+
busOrBusbarSectionId: form.connectivity.busOrBusbarSection?.id ?? "",
|
|
121
|
+
connectionDirection: form.connectivity.connectionDirection ?? UNDEFINED_CONNECTION_DIRECTION,
|
|
122
|
+
connectionName: sanitizeString(form.connectivity.connectionName),
|
|
123
|
+
connectionPosition: form.connectivity.connectionPosition,
|
|
124
|
+
terminalConnected: form.connectivity.terminalConnected,
|
|
125
|
+
properties: toModificationProperties(form),
|
|
126
|
+
minP: form.minimumActivePower,
|
|
127
|
+
maxP: form.maximumActivePower,
|
|
128
|
+
reactiveCapabilityCurve: isReactiveCapabilityCurveOn,
|
|
129
|
+
minQ: isReactiveCapabilityCurveOn ? null : form.reactiveLimits.minimumReactivePower ?? null,
|
|
130
|
+
maxQ: isReactiveCapabilityCurveOn ? null : form.reactiveLimits.maximumReactivePower ?? null,
|
|
131
|
+
reactiveCapabilityCurvePoints: isReactiveCapabilityCurveOn ? form.reactiveLimits.reactiveCapabilityCurveTable ?? null : null,
|
|
132
|
+
targetP: form.activePowerSetpoint ?? 0,
|
|
133
|
+
targetQ: form.reactivePowerSetpoint ?? 0,
|
|
134
|
+
participate: form.frequencyRegulation ?? null,
|
|
135
|
+
droop: form.droop ?? null,
|
|
136
|
+
directTransX: form.directTransX ?? null,
|
|
137
|
+
stepUpTransformerX: form.transformerReactance ?? null
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
export {
|
|
141
|
+
batteryCreationDtoToForm,
|
|
142
|
+
batteryCreationEmptyFormData,
|
|
143
|
+
batteryCreationFormSchema,
|
|
144
|
+
batteryCreationFormToDto
|
|
145
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
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 './batteryCreation.types';
|
|
8
|
+
export * from './batteryCreation.utils';
|
|
9
|
+
export * from './BatteryCreationForm';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { batteryCreationDtoToForm, batteryCreationEmptyFormData, batteryCreationFormSchema, batteryCreationFormToDto } from "./batteryCreation.utils.js";
|
|
2
|
+
import { BatteryCreationForm } from "./BatteryCreationForm.js";
|
|
3
|
+
export {
|
|
4
|
+
BatteryCreationForm,
|
|
5
|
+
batteryCreationDtoToForm,
|
|
6
|
+
batteryCreationEmptyFormData,
|
|
7
|
+
batteryCreationFormSchema,
|
|
8
|
+
batteryCreationFormToDto
|
|
9
|
+
};
|