@gridsuite/commons-ui 0.169.0 → 0.171.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 +7 -0
- package/dist/components/inputs/reactHookForm/selectInputs/CountriesInput.js +13 -10
- package/dist/components/network-modifications/common/properties/propertyUtils.d.ts +1 -1
- package/dist/components/network-modifications/common/properties/propertyUtils.js +2 -2
- package/dist/components/network-modifications/index.js +7 -0
- package/dist/components/network-modifications/substation/index.d.ts +1 -0
- package/dist/components/network-modifications/substation/index.js +8 -1
- package/dist/components/network-modifications/substation/modification/SubstationModificationForm.d.ts +6 -0
- package/dist/components/network-modifications/substation/modification/SubstationModificationForm.js +89 -0
- package/dist/components/network-modifications/substation/modification/index.d.ts +9 -0
- package/dist/components/network-modifications/substation/modification/index.js +9 -0
- package/dist/components/network-modifications/substation/modification/substationModification.types.d.ts +17 -0
- package/dist/components/network-modifications/substation/modification/substationModification.types.js +1 -0
- package/dist/components/network-modifications/substation/modification/substationModification.utils.d.ts +24 -0
- package/dist/components/network-modifications/substation/modification/substationModification.utils.js +42 -0
- package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js +5 -5
- package/dist/components/parameters/loadflow/load-flow-parameters-dialog.js +8 -15
- package/dist/components/parameters/loadflow/load-flow-parameters-form.js +2 -2
- package/dist/components/parameters/loadflow/load-flow-parameters-inline.js +2 -4
- package/dist/components/parameters/loadflow/use-load-flow-parameters-form.d.ts +2 -3
- package/dist/components/parameters/loadflow/use-load-flow-parameters-form.js +33 -43
- package/dist/components/parameters/security-analysis/security-analysis-parameters-dialog.js +7 -9
- package/dist/components/parameters/security-analysis/security-analysis-parameters-form.js +1 -1
- package/dist/components/parameters/security-analysis/security-analysis-parameters-inline.js +2 -3
- package/dist/components/parameters/security-analysis/use-security-analysis-parameters-form.d.ts +1 -3
- package/dist/components/parameters/security-analysis/use-security-analysis-parameters-form.js +13 -11
- package/dist/components/parameters/sensi/sensitivity-analysis-parameters-dialog.js +6 -7
- package/dist/components/parameters/sensi/use-sensitivity-analysis-parameters.js +1 -1
- package/dist/components/parameters/short-circuit/short-circuit-parameters-dialog.js +6 -14
- package/dist/components/parameters/short-circuit/short-circuit-parameters-inline.js +1 -1
- package/dist/components/parameters/short-circuit/use-short-circuit-parameters-form.d.ts +0 -1
- package/dist/components/parameters/short-circuit/use-short-circuit-parameters-form.js +6 -6
- package/dist/hooks/use-parameters-backend.d.ts +2 -3
- package/dist/hooks/use-parameters-backend.js +33 -110
- package/dist/index.js +13 -6
- package/dist/services/index.js +2 -5
- package/dist/services/loadflow.d.ts +0 -1
- package/dist/services/loadflow.js +1 -8
- package/dist/services/security-analysis.d.ts +0 -2
- package/dist/services/security-analysis.js +2 -23
- package/dist/services/sensitivity-analysis.d.ts +0 -1
- package/dist/services/sensitivity-analysis.js +1 -8
- package/dist/translations/en/businessErrorsEn.d.ts +1 -0
- package/dist/translations/en/businessErrorsEn.js +1 -0
- package/dist/translations/en/networkModificationsEn.d.ts +2 -0
- package/dist/translations/en/networkModificationsEn.js +2 -0
- package/dist/translations/en/parameters.d.ts +0 -7
- package/dist/translations/en/parameters.js +0 -7
- package/dist/translations/fr/businessErrorsFr.d.ts +1 -0
- package/dist/translations/fr/businessErrorsFr.js +1 -0
- package/dist/translations/fr/networkModificationsFr.d.ts +2 -0
- package/dist/translations/fr/networkModificationsFr.js +2 -0
- package/dist/translations/fr/parameters.d.ts +0 -8
- package/dist/translations/fr/parameters.js +0 -8
- package/dist/utils/conversionUtils.d.ts +2 -0
- package/dist/utils/conversionUtils.js +6 -0
- package/dist/utils/index.js +4 -1
- package/dist/utils/types/index.d.ts +1 -0
- package/dist/utils/types/index.js +2 -0
- package/dist/utils/types/network-modification-types.d.ts +14 -0
- package/dist/utils/types/network-modification-types.js +8 -0
- package/dist/utils/types/parameters.type.d.ts +16 -13
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -186,6 +186,8 @@ import { copyEquipmentPropertiesForCreation, createPropertyModification, creatio
|
|
|
186
186
|
import { filledTextField, italicFontTextField, standardTextField } from "./network-modifications/common/form.utils.js";
|
|
187
187
|
import { SubstationCreationForm } from "./network-modifications/substation/creation/SubstationCreationForm.js";
|
|
188
188
|
import { substationCreationDtoToForm, substationCreationEmptyFormData, substationCreationFormSchema, substationCreationFormToDto } from "./network-modifications/substation/creation/substationCreation.utils.js";
|
|
189
|
+
import { SubstationModificationForm } from "./network-modifications/substation/modification/SubstationModificationForm.js";
|
|
190
|
+
import { substationModificationDtoToForm, substationModificationEmptyFormData, substationModificationFormSchema, substationModificationFormToDto } from "./network-modifications/substation/modification/substationModification.utils.js";
|
|
189
191
|
export {
|
|
190
192
|
ACCURACY,
|
|
191
193
|
ACTIVE,
|
|
@@ -485,6 +487,7 @@ export {
|
|
|
485
487
|
SubmitButton,
|
|
486
488
|
SubstationCreationForm,
|
|
487
489
|
SubstationLayout,
|
|
490
|
+
SubstationModificationForm,
|
|
488
491
|
SwitchInput,
|
|
489
492
|
SwitchWithLabel,
|
|
490
493
|
TAB_INFO,
|
|
@@ -583,6 +586,10 @@ export {
|
|
|
583
586
|
substationCreationEmptyFormData,
|
|
584
587
|
substationCreationFormSchema,
|
|
585
588
|
substationCreationFormToDto,
|
|
589
|
+
substationModificationDtoToForm,
|
|
590
|
+
substationModificationEmptyFormData,
|
|
591
|
+
substationModificationFormSchema,
|
|
592
|
+
substationModificationFormToDto,
|
|
586
593
|
testQuery,
|
|
587
594
|
toFloatOrNullValue,
|
|
588
595
|
toFormValuesLimitReductions,
|
|
@@ -26,16 +26,19 @@ function CountriesInput({ name, label, dataTestId }) {
|
|
|
26
26
|
getOptionLabel: translateOption,
|
|
27
27
|
fullWidth: true,
|
|
28
28
|
multiple: true,
|
|
29
|
-
renderTags: (val, getTagsProps) => val.map((code, index) =>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
renderTags: (val, getTagsProps) => val.map((code, index) => {
|
|
30
|
+
const { key, ...tagProps } = getTagsProps({ index });
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
Chip,
|
|
33
|
+
{
|
|
34
|
+
"data-testid": `${dataTestId}.${code}`,
|
|
35
|
+
size: "small",
|
|
36
|
+
label: translate(code),
|
|
37
|
+
...tagProps
|
|
38
|
+
},
|
|
39
|
+
key ?? code
|
|
40
|
+
);
|
|
41
|
+
})
|
|
39
42
|
}
|
|
40
43
|
);
|
|
41
44
|
}
|
|
@@ -8,7 +8,7 @@ export declare const emptyProperties: Properties;
|
|
|
8
8
|
export declare const createPropertyModification: (name: string, value: string | null) => Property;
|
|
9
9
|
export declare const initializedProperty: () => Property;
|
|
10
10
|
export declare const getFilledPropertiesFromModification: (properties: Property[] | undefined | null) => FilledProperty[];
|
|
11
|
-
export declare const getPropertiesFromModification: (properties: Property[] | undefined | null) => Properties;
|
|
11
|
+
export declare const getPropertiesFromModification: (properties: Property[] | undefined | null, includePreviousValue?: boolean) => Properties;
|
|
12
12
|
export declare const copyEquipmentPropertiesForCreation: (equipmentInfos: EquipmentWithProperties) => Properties;
|
|
13
13
|
export declare const mergeModificationAndEquipmentProperties: (modificationProperties: Property[], equipment: EquipmentWithProperties) => Property[];
|
|
14
14
|
export declare function getConcatenatedProperties(equipment: EquipmentWithProperties, getValues: (name: string) => any, id?: string): any;
|
|
@@ -41,13 +41,13 @@ const getFilledPropertiesFromModification = (properties) => {
|
|
|
41
41
|
};
|
|
42
42
|
}) ?? [];
|
|
43
43
|
};
|
|
44
|
-
const getPropertiesFromModification = (properties) => {
|
|
44
|
+
const getPropertiesFromModification = (properties, includePreviousValue = true) => {
|
|
45
45
|
return {
|
|
46
46
|
[FieldConstants.ADDITIONAL_PROPERTIES]: properties ? properties.map((p) => {
|
|
47
47
|
return {
|
|
48
48
|
[FieldConstants.NAME]: p[FieldConstants.NAME],
|
|
49
49
|
[FieldConstants.VALUE]: p[FieldConstants.VALUE],
|
|
50
|
-
[FieldConstants.PREVIOUS_VALUE]: p[FieldConstants.PREVIOUS_VALUE],
|
|
50
|
+
[FieldConstants.PREVIOUS_VALUE]: includePreviousValue ? p[FieldConstants.PREVIOUS_VALUE] : void 0,
|
|
51
51
|
[FieldConstants.ADDED]: p[FieldConstants.ADDED],
|
|
52
52
|
[FieldConstants.DELETION_MARK]: p[FieldConstants.DELETION_MARK]
|
|
53
53
|
};
|
|
@@ -4,10 +4,13 @@ import { copyEquipmentPropertiesForCreation, createPropertyModification, creatio
|
|
|
4
4
|
import { filledTextField, italicFontTextField, standardTextField } from "./common/form.utils.js";
|
|
5
5
|
import { SubstationCreationForm } from "./substation/creation/SubstationCreationForm.js";
|
|
6
6
|
import { substationCreationDtoToForm, substationCreationEmptyFormData, substationCreationFormSchema, substationCreationFormToDto } from "./substation/creation/substationCreation.utils.js";
|
|
7
|
+
import { SubstationModificationForm } from "./substation/modification/SubstationModificationForm.js";
|
|
8
|
+
import { substationModificationDtoToForm, substationModificationEmptyFormData, substationModificationFormSchema, substationModificationFormToDto } from "./substation/modification/substationModification.utils.js";
|
|
7
9
|
export {
|
|
8
10
|
PropertiesForm,
|
|
9
11
|
PropertyForm,
|
|
10
12
|
SubstationCreationForm,
|
|
13
|
+
SubstationModificationForm,
|
|
11
14
|
copyEquipmentPropertiesForCreation,
|
|
12
15
|
createPropertyModification,
|
|
13
16
|
creationPropertiesSchema,
|
|
@@ -27,5 +30,9 @@ export {
|
|
|
27
30
|
substationCreationEmptyFormData,
|
|
28
31
|
substationCreationFormSchema,
|
|
29
32
|
substationCreationFormToDto,
|
|
33
|
+
substationModificationDtoToForm,
|
|
34
|
+
substationModificationEmptyFormData,
|
|
35
|
+
substationModificationFormSchema,
|
|
36
|
+
substationModificationFormToDto,
|
|
30
37
|
toModificationProperties
|
|
31
38
|
};
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { SubstationCreationForm } from "./creation/SubstationCreationForm.js";
|
|
2
2
|
import { substationCreationDtoToForm, substationCreationEmptyFormData, substationCreationFormSchema, substationCreationFormToDto } from "./creation/substationCreation.utils.js";
|
|
3
|
+
import { SubstationModificationForm } from "./modification/SubstationModificationForm.js";
|
|
4
|
+
import { substationModificationDtoToForm, substationModificationEmptyFormData, substationModificationFormSchema, substationModificationFormToDto } from "./modification/substationModification.utils.js";
|
|
3
5
|
export {
|
|
4
6
|
SubstationCreationForm,
|
|
7
|
+
SubstationModificationForm,
|
|
5
8
|
substationCreationDtoToForm,
|
|
6
9
|
substationCreationEmptyFormData,
|
|
7
10
|
substationCreationFormSchema,
|
|
8
|
-
substationCreationFormToDto
|
|
11
|
+
substationCreationFormToDto,
|
|
12
|
+
substationModificationDtoToForm,
|
|
13
|
+
substationModificationEmptyFormData,
|
|
14
|
+
substationModificationFormSchema,
|
|
15
|
+
substationModificationFormToDto
|
|
9
16
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SubstationModificationInfos } from './substationModification.types';
|
|
2
|
+
interface SubstationModificationFormProps {
|
|
3
|
+
substationToModify?: SubstationModificationInfos | null;
|
|
4
|
+
}
|
|
5
|
+
export declare function SubstationModificationForm({ substationToModify }: Readonly<SubstationModificationFormProps>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
package/dist/components/network-modifications/substation/modification/SubstationModificationForm.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { TextField, Grid } from "@mui/material";
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
4
|
+
import { useWatch } from "react-hook-form";
|
|
5
|
+
import GridItem from "../../../grid/grid-item.js";
|
|
6
|
+
import "../../../overflowableText/OverflowableText.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 "../../../../utils/yupConfig.js";
|
|
12
|
+
import "react";
|
|
13
|
+
import { useLocalizedCountries } from "../../../../hooks/useLocalizedCountries.js";
|
|
14
|
+
import "notistack";
|
|
15
|
+
import "../../../inputs/reactHookForm/provider/CustomFormProvider.js";
|
|
16
|
+
import "yup";
|
|
17
|
+
import "../../../treeViewFinder/TreeViewFinder.js";
|
|
18
|
+
import "../../../inputs/reactHookForm/agGridTable/BottomRightButtons.js";
|
|
19
|
+
import "../../../customAGGrid/customAggrid.js";
|
|
20
|
+
import "ag-grid-community";
|
|
21
|
+
import "react-papaparse";
|
|
22
|
+
import "react-csv-downloader";
|
|
23
|
+
import { TextInput } from "../../../inputs/reactHookForm/text/TextInput.js";
|
|
24
|
+
import "../../../inputs/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/left_panel_close.svg?react";
|
|
28
|
+
import "@material-symbols/svg-400/outlined/add_notes.svg?react";
|
|
29
|
+
import "../../../dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
|
|
30
|
+
import { CountrySelectionInput } from "../../../inputs/reactHookForm/CountrySelectionInput.js";
|
|
31
|
+
import "@react-querybuilder/material";
|
|
32
|
+
import "../../../filter/expert/expertFilterConstants.js";
|
|
33
|
+
import "../../../inputs/reactQueryBuilder/CustomReactQueryBuilder.js";
|
|
34
|
+
import "uuid";
|
|
35
|
+
import "../../../inputs/reactQueryBuilder/PropertyValueEditor.js";
|
|
36
|
+
import "react-querybuilder";
|
|
37
|
+
import { PropertiesForm } from "../../common/properties/PropertiesForm.js";
|
|
38
|
+
import { filledTextField } from "../../common/form.utils.js";
|
|
39
|
+
import "../../common/properties/propertyUtils.js";
|
|
40
|
+
function SubstationModificationForm({ substationToModify }) {
|
|
41
|
+
const { locale } = useIntl();
|
|
42
|
+
const { translate } = useLocalizedCountries(locale);
|
|
43
|
+
const equipmentId = useWatch({ name: FieldConstants.EQUIPMENT_ID });
|
|
44
|
+
const substationIdField = /* @__PURE__ */ jsx(
|
|
45
|
+
TextField,
|
|
46
|
+
{
|
|
47
|
+
size: "small",
|
|
48
|
+
fullWidth: true,
|
|
49
|
+
label: "ID",
|
|
50
|
+
value: equipmentId ?? "",
|
|
51
|
+
InputProps: {
|
|
52
|
+
readOnly: true
|
|
53
|
+
},
|
|
54
|
+
disabled: true,
|
|
55
|
+
...filledTextField
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
const substationNameField = /* @__PURE__ */ jsx(
|
|
59
|
+
TextInput,
|
|
60
|
+
{
|
|
61
|
+
name: FieldConstants.EQUIPMENT_NAME,
|
|
62
|
+
label: "Name",
|
|
63
|
+
formProps: filledTextField,
|
|
64
|
+
previousValue: substationToModify?.name,
|
|
65
|
+
clearable: true
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
const substationCountryField = /* @__PURE__ */ jsx(
|
|
69
|
+
CountrySelectionInput,
|
|
70
|
+
{
|
|
71
|
+
name: FieldConstants.COUNTRY,
|
|
72
|
+
label: "Country",
|
|
73
|
+
formProps: filledTextField,
|
|
74
|
+
size: "small",
|
|
75
|
+
previousValue: substationToModify?.country ? translate(substationToModify.country) : ""
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
79
|
+
/* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
|
|
80
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: substationIdField }),
|
|
81
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: substationNameField }),
|
|
82
|
+
/* @__PURE__ */ jsx(GridItem, { size: 4, children: substationCountryField })
|
|
83
|
+
] }),
|
|
84
|
+
/* @__PURE__ */ jsx(PropertiesForm, { networkElementType: "substation", isModification: true })
|
|
85
|
+
] });
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
SubstationModificationForm
|
|
89
|
+
};
|
|
@@ -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 './SubstationModificationForm';
|
|
8
|
+
export * from './substationModification.types';
|
|
9
|
+
export * from './substationModification.utils';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SubstationModificationForm } from "./SubstationModificationForm.js";
|
|
2
|
+
import { substationModificationDtoToForm, substationModificationEmptyFormData, substationModificationFormSchema, substationModificationFormToDto } from "./substationModification.utils.js";
|
|
3
|
+
export {
|
|
4
|
+
SubstationModificationForm,
|
|
5
|
+
substationModificationDtoToForm,
|
|
6
|
+
substationModificationEmptyFormData,
|
|
7
|
+
substationModificationFormSchema,
|
|
8
|
+
substationModificationFormToDto
|
|
9
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { UUID } from 'node:crypto';
|
|
2
|
+
import { AttributeModification, ModificationType } from '../../../../utils';
|
|
3
|
+
import { Property } from '../../common';
|
|
4
|
+
export interface SubstationModificationInfos {
|
|
5
|
+
id: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
country: string | null;
|
|
8
|
+
properties?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export interface SubstationModificationDto {
|
|
11
|
+
uuid?: UUID;
|
|
12
|
+
equipmentId: string;
|
|
13
|
+
equipmentName?: AttributeModification<string> | null;
|
|
14
|
+
country: AttributeModification<string> | null;
|
|
15
|
+
properties?: Property[] | null;
|
|
16
|
+
type?: ModificationType;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { default as yup } from '../../../../utils/yupConfig';
|
|
2
|
+
import { SubstationModificationDto } from './substationModification.types';
|
|
3
|
+
export declare const substationModificationFormSchema: yup.ObjectSchema<{
|
|
4
|
+
equipmentID: string;
|
|
5
|
+
equipmentName: string | null | undefined;
|
|
6
|
+
country: string | null | undefined;
|
|
7
|
+
} & {
|
|
8
|
+
AdditionalProperties: {
|
|
9
|
+
previousValue?: string | null | undefined;
|
|
10
|
+
value?: string | null | undefined;
|
|
11
|
+
added: NonNullable<boolean | undefined>;
|
|
12
|
+
deletionMark: NonNullable<boolean | undefined>;
|
|
13
|
+
name: string;
|
|
14
|
+
}[] | undefined;
|
|
15
|
+
}, yup.AnyObject, {
|
|
16
|
+
equipmentID: undefined;
|
|
17
|
+
equipmentName: undefined;
|
|
18
|
+
country: undefined;
|
|
19
|
+
AdditionalProperties: "";
|
|
20
|
+
}, "">;
|
|
21
|
+
export type SubstationModificationFormData = yup.InferType<typeof substationModificationFormSchema>;
|
|
22
|
+
export declare const substationModificationEmptyFormData: SubstationModificationFormData;
|
|
23
|
+
export declare const substationModificationFormToDto: (formData: SubstationModificationFormData) => SubstationModificationDto;
|
|
24
|
+
export declare const substationModificationDtoToForm: (substationDto: SubstationModificationDto, includePreviousValues?: boolean) => SubstationModificationFormData;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import "../../../../utils/yupConfig.js";
|
|
2
|
+
import { modificationPropertiesSchema, toModificationProperties, getPropertiesFromModification } from "../../common/properties/propertyUtils.js";
|
|
3
|
+
import { FieldConstants } from "../../../../utils/constants/fieldConstants.js";
|
|
4
|
+
import { toModificationOperation } from "../../../../utils/conversionUtils.js";
|
|
5
|
+
import "../../../../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 * as yup from "yup";
|
|
11
|
+
const substationModificationFormSchema = yup.object().shape({
|
|
12
|
+
[FieldConstants.EQUIPMENT_ID]: yup.string().required(),
|
|
13
|
+
[FieldConstants.EQUIPMENT_NAME]: yup.string().nullable(),
|
|
14
|
+
[FieldConstants.COUNTRY]: yup.string().nullable()
|
|
15
|
+
}).concat(modificationPropertiesSchema);
|
|
16
|
+
const substationModificationEmptyFormData = {
|
|
17
|
+
equipmentID: "",
|
|
18
|
+
equipmentName: "",
|
|
19
|
+
country: null,
|
|
20
|
+
AdditionalProperties: []
|
|
21
|
+
};
|
|
22
|
+
const substationModificationFormToDto = (formData) => ({
|
|
23
|
+
type: ModificationType.SUBSTATION_MODIFICATION,
|
|
24
|
+
equipmentId: formData.equipmentID,
|
|
25
|
+
equipmentName: toModificationOperation(sanitizeString(formData.equipmentName)),
|
|
26
|
+
country: toModificationOperation(formData.country ?? null),
|
|
27
|
+
properties: toModificationProperties(formData)
|
|
28
|
+
});
|
|
29
|
+
const substationModificationDtoToForm = (substationDto, includePreviousValues = true) => {
|
|
30
|
+
return {
|
|
31
|
+
equipmentID: substationDto.equipmentId,
|
|
32
|
+
equipmentName: substationDto.equipmentName?.value ?? "",
|
|
33
|
+
country: substationDto.country?.value ?? null,
|
|
34
|
+
...getPropertiesFromModification(substationDto?.properties, includePreviousValues)
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export {
|
|
38
|
+
substationModificationDtoToForm,
|
|
39
|
+
substationModificationEmptyFormData,
|
|
40
|
+
substationModificationFormSchema,
|
|
41
|
+
substationModificationFormToDto
|
|
42
|
+
};
|
package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js
CHANGED
|
@@ -50,7 +50,7 @@ function DynamicMarginCalculationInline({
|
|
|
50
50
|
parametersBackend,
|
|
51
51
|
setHaveDirtyFields
|
|
52
52
|
}) {
|
|
53
|
-
const
|
|
53
|
+
const { providers, params, updateParameters, resetParameters } = parametersBackend;
|
|
54
54
|
const dynamicMarginCalculationMethods = useDynamicMarginCalculationParametersForm({
|
|
55
55
|
providers,
|
|
56
56
|
params,
|
|
@@ -71,14 +71,14 @@ function DynamicMarginCalculationInline({
|
|
|
71
71
|
setOpenResetConfirmation(false);
|
|
72
72
|
}, []);
|
|
73
73
|
const handleReset = useCallback(() => {
|
|
74
|
-
|
|
74
|
+
resetParameters();
|
|
75
75
|
setOpenResetConfirmation(false);
|
|
76
|
-
}, [
|
|
76
|
+
}, [resetParameters]);
|
|
77
77
|
const onSubmit = useCallback(
|
|
78
78
|
(formData) => {
|
|
79
|
-
|
|
79
|
+
updateParameters(toParamsInfos(formData));
|
|
80
80
|
},
|
|
81
|
-
[
|
|
81
|
+
[updateParameters]
|
|
82
82
|
);
|
|
83
83
|
const handleLoadParameter = useCallback(
|
|
84
84
|
(newParams) => {
|
|
@@ -8,7 +8,7 @@ import "../../../utils/types/equipmentType.js";
|
|
|
8
8
|
import { LANG_ENGLISH } from "../../../utils/langs.js";
|
|
9
9
|
import "@mui/icons-material";
|
|
10
10
|
import "../../../utils/yupConfig.js";
|
|
11
|
-
import { getLoadFlowDefaultLimitReductions,
|
|
11
|
+
import { getLoadFlowDefaultLimitReductions, getLoadFlowProviders, fetchLoadFlowParameters, setLoadFlowParameters, getLoadFlowSpecificParametersDescription } from "../../../services/loadflow.js";
|
|
12
12
|
import "react";
|
|
13
13
|
import "@mui/material";
|
|
14
14
|
import "react-intl";
|
|
@@ -57,20 +57,13 @@ function LoadFlowParametersEditionDialog({
|
|
|
57
57
|
language = LANG_ENGLISH,
|
|
58
58
|
isDeveloperMode = false
|
|
59
59
|
}) {
|
|
60
|
-
const parametersBackend = useParametersBackend(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
getDefaultLoadFlowProvider,
|
|
68
|
-
null,
|
|
69
|
-
fetchLoadFlowParameters,
|
|
70
|
-
setLoadFlowParameters,
|
|
71
|
-
getLoadFlowSpecificParametersDescription,
|
|
72
|
-
getLoadFlowDefaultLimitReductions
|
|
73
|
-
);
|
|
60
|
+
const parametersBackend = useParametersBackend(user, id, ComputingType.LOAD_FLOW, OptionalServicesStatus.Up, {
|
|
61
|
+
backendFetchProviders: getLoadFlowProviders,
|
|
62
|
+
backendFetchParameters: fetchLoadFlowParameters,
|
|
63
|
+
backendUpdateParameters: setLoadFlowParameters,
|
|
64
|
+
backendFetchSpecificParametersDescription: getLoadFlowSpecificParametersDescription,
|
|
65
|
+
backendFetchDefaultLimitReductions: getLoadFlowDefaultLimitReductions
|
|
66
|
+
});
|
|
74
67
|
const loadflowMethods = useLoadFlowParametersForm(parametersBackend, isDeveloperMode, id, name, description);
|
|
75
68
|
const {
|
|
76
69
|
formState: { errors, dirtyFields }
|
|
@@ -74,7 +74,7 @@ function LoadFlowParametersForm({
|
|
|
74
74
|
formattedProviders,
|
|
75
75
|
specificParametersDescriptionForProvider,
|
|
76
76
|
params,
|
|
77
|
-
|
|
77
|
+
watchProvider,
|
|
78
78
|
defaultLimitReductions,
|
|
79
79
|
paramsLoaded
|
|
80
80
|
} = loadflowMethods;
|
|
@@ -94,7 +94,7 @@ function LoadFlowParametersForm({
|
|
|
94
94
|
LoadFlowParametersContent,
|
|
95
95
|
{
|
|
96
96
|
selectedTab,
|
|
97
|
-
currentProvider:
|
|
97
|
+
currentProvider: watchProvider ?? "",
|
|
98
98
|
specificParameters: specificParametersDescriptionForProvider,
|
|
99
99
|
params,
|
|
100
100
|
defaultLimitReductions
|
|
@@ -55,7 +55,7 @@ function LoadFlowParametersInline({
|
|
|
55
55
|
setHaveDirtyFields,
|
|
56
56
|
isDeveloperMode
|
|
57
57
|
}) {
|
|
58
|
-
const
|
|
58
|
+
const { resetParameters } = parametersBackend;
|
|
59
59
|
const loadflowMethods = useLoadFlowParametersForm(parametersBackend, isDeveloperMode, null, null, null);
|
|
60
60
|
const intl = useIntl();
|
|
61
61
|
const [openCreateParameterDialog, setOpenCreateParameterDialog] = useState(false);
|
|
@@ -64,9 +64,8 @@ function LoadFlowParametersInline({
|
|
|
64
64
|
const { snackError } = useSnackMessage();
|
|
65
65
|
const executeResetAction = useCallback(() => {
|
|
66
66
|
resetParameters();
|
|
67
|
-
resetProvider();
|
|
68
67
|
setOpenResetConfirmation(false);
|
|
69
|
-
}, [resetParameters
|
|
68
|
+
}, [resetParameters]);
|
|
70
69
|
const handleResetAllClick = useCallback(() => {
|
|
71
70
|
setOpenResetConfirmation(true);
|
|
72
71
|
}, []);
|
|
@@ -79,7 +78,6 @@ function LoadFlowParametersInline({
|
|
|
79
78
|
if (newParams && newParams.length > 0) {
|
|
80
79
|
setOpenSelectParameterDialog(false);
|
|
81
80
|
fetchLoadFlowParameters(newParams[0].id).then((parameters) => {
|
|
82
|
-
loadflowMethods.setCurrentProvider(parameters.provider);
|
|
83
81
|
console.info(`loading the following loadflow parameters : ${parameters.uuid}`);
|
|
84
82
|
reset(loadflowMethods.toLoadFlowFormValues(parameters), {
|
|
85
83
|
keepDefaultValues: true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FieldErrors, UseFormReturn } from 'react-hook-form';
|
|
2
|
-
import {
|
|
2
|
+
import { SyntheticEvent } from 'react';
|
|
3
3
|
import { ObjectSchema } from 'yup';
|
|
4
4
|
import { UUID } from 'node:crypto';
|
|
5
5
|
import { TabValues } from './load-flow-parameters-utils';
|
|
@@ -22,8 +22,7 @@ export interface UseLoadFlowParametersFormReturn {
|
|
|
22
22
|
toLoadFlowFormValues: (_params: LoadFlowParametersInfos) => any;
|
|
23
23
|
formatNewParams: (formData: Record<string, any>) => LoadFlowParametersInfos;
|
|
24
24
|
params: LoadFlowParametersInfos | null;
|
|
25
|
-
|
|
26
|
-
setCurrentProvider: Dispatch<SetStateAction<string | undefined>>;
|
|
25
|
+
watchProvider: string | undefined;
|
|
27
26
|
paramsLoaded: boolean;
|
|
28
27
|
onValidationError: (errors: FieldErrors) => void;
|
|
29
28
|
onSaveInline: (formData: Record<string, any>) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useForm } from "react-hook-form";
|
|
2
2
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
3
|
-
import { useState, useCallback, useMemo,
|
|
3
|
+
import { useState, useRef, useCallback, useMemo, useEffect, useEffectEvent } from "react";
|
|
4
4
|
import { TabValues, getCommonLoadFlowParametersFormSchema, mapLimitReductions, setLimitReductions } from "./load-flow-parameters-utils.js";
|
|
5
5
|
import { PROVIDER, SPECIFIC_PARAMETERS, COMMON_PARAMETERS, VERSION_PARAMETER } from "../common/constants.js";
|
|
6
6
|
import "react/jsx-runtime";
|
|
@@ -47,30 +47,18 @@ import "../../filter/HeaderFilterForm.js";
|
|
|
47
47
|
import { getNameElementEditorSchema, getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
|
|
48
48
|
import { getDefaultSpecificParamsValues, getSpecificParametersFormSchema, getAllSpecificParametersValues, formatSpecificParameters, setSpecificParameters } from "../common/utils.js";
|
|
49
49
|
const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parametersUuid, name, description) => {
|
|
50
|
-
const
|
|
51
|
-
providers,
|
|
52
|
-
provider,
|
|
53
|
-
,
|
|
54
|
-
,
|
|
55
|
-
,
|
|
56
|
-
params,
|
|
57
|
-
,
|
|
58
|
-
updateParameters,
|
|
59
|
-
,
|
|
60
|
-
specificParamsDescriptions,
|
|
61
|
-
defaultLimitReductions
|
|
62
|
-
] = parametersBackend;
|
|
63
|
-
const [currentProvider, setCurrentProvider] = useState(params?.provider);
|
|
50
|
+
const { providers, params, updateParameters, specificParamsDescription, defaultLimitReductions } = parametersBackend;
|
|
64
51
|
const [selectedTab, setSelectedTab] = useState(TabValues.GENERAL);
|
|
65
52
|
const [limitReductionNumber, setLimitReductionNumber] = useState(0);
|
|
66
53
|
const [tabIndexesWithError, setTabIndexesWithError] = useState([]);
|
|
54
|
+
const [specificParametersDescriptionForProvider, setSpecificParametersDescriptionForProvider] = useState(() => {
|
|
55
|
+
return params?.provider && specificParamsDescription ? specificParamsDescription[params.provider] : [];
|
|
56
|
+
});
|
|
67
57
|
const { snackError } = useSnackMessage();
|
|
58
|
+
const previousWatchProviderRef = useRef(void 0);
|
|
68
59
|
const handleTabChange = useCallback((event, newValue) => {
|
|
69
60
|
setSelectedTab(newValue);
|
|
70
61
|
}, []);
|
|
71
|
-
const specificParametersDescriptionForProvider = useMemo(() => {
|
|
72
|
-
return currentProvider && specificParamsDescriptions ? specificParamsDescriptions[currentProvider] : [];
|
|
73
|
-
}, [currentProvider, specificParamsDescriptions]);
|
|
74
62
|
const specificParametersDefaultValues = useMemo(() => {
|
|
75
63
|
return getDefaultSpecificParamsValues(specificParametersDescriptionForProvider);
|
|
76
64
|
}, [specificParametersDescriptionForProvider]);
|
|
@@ -86,7 +74,7 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
86
74
|
const formMethods = useForm({
|
|
87
75
|
defaultValues: {
|
|
88
76
|
...getNameElementEditorEmptyFormData(name, description),
|
|
89
|
-
[PROVIDER]: provider,
|
|
77
|
+
[PROVIDER]: params?.provider,
|
|
90
78
|
[PARAM_LIMIT_REDUCTION]: null,
|
|
91
79
|
[COMMON_PARAMETERS]: {
|
|
92
80
|
...params?.commonParameters
|
|
@@ -100,6 +88,14 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
100
88
|
});
|
|
101
89
|
const { watch, reset } = formMethods;
|
|
102
90
|
const watchProvider = watch(PROVIDER);
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
const provider = watchProvider ?? params?.provider;
|
|
93
|
+
if (!provider || !specificParamsDescription) {
|
|
94
|
+
setSpecificParametersDescriptionForProvider([]);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
setSpecificParametersDescriptionForProvider(specificParamsDescription[provider] ?? []);
|
|
98
|
+
}, [watchProvider, params?.provider, specificParamsDescription]);
|
|
103
99
|
const toLimitReductions = useCallback(
|
|
104
100
|
(formLimits) => {
|
|
105
101
|
if (formLimits?.length === 0) {
|
|
@@ -143,6 +139,7 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
143
139
|
const toLoadFlowFormValues = useCallback(
|
|
144
140
|
(_params) => {
|
|
145
141
|
const specificParamsListForCurrentProvider = _params.specificParametersPerProvider[_params.provider];
|
|
142
|
+
const specificParametersForLoadedProvider = specificParamsDescription?.[_params.provider] ?? [];
|
|
146
143
|
return {
|
|
147
144
|
[PROVIDER]: _params.provider,
|
|
148
145
|
[PARAM_LIMIT_REDUCTION]: _params.limitReduction,
|
|
@@ -151,16 +148,16 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
151
148
|
},
|
|
152
149
|
[SPECIFIC_PARAMETERS]: {
|
|
153
150
|
...formatSpecificParameters(
|
|
154
|
-
|
|
151
|
+
specificParametersForLoadedProvider,
|
|
155
152
|
specificParamsListForCurrentProvider
|
|
156
153
|
)
|
|
157
154
|
},
|
|
158
155
|
...toFormValuesLimitReductions(_params.limitReductions)
|
|
159
156
|
};
|
|
160
157
|
},
|
|
161
|
-
[
|
|
158
|
+
[specificParamsDescription]
|
|
162
159
|
);
|
|
163
|
-
const paramsLoaded = useMemo(() => !!params && !!
|
|
160
|
+
const paramsLoaded = useMemo(() => !!params && !!watchProvider, [watchProvider, params]);
|
|
164
161
|
const formattedProviders = useMemo(() => {
|
|
165
162
|
return Object.entries(providers).filter(([key]) => !key.includes("DynaFlow") || isDeveloperMode).map(([key, value]) => ({
|
|
166
163
|
id: key,
|
|
@@ -214,28 +211,22 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
214
211
|
resetForm(params);
|
|
215
212
|
}, [paramsLoaded, params]);
|
|
216
213
|
useEffect(() => {
|
|
217
|
-
if (watchProvider
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
setLimitReductionNumber(params?.limitReductions?.at(0)?.temporaryLimitReductions?.length ?? 0);
|
|
226
|
-
}
|
|
214
|
+
if (!watchProvider || watchProvider === previousWatchProviderRef.current) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
setSpecificParameters(watchProvider, specificParamsDescription, formMethods);
|
|
218
|
+
setLimitReductions(watchProvider, defaultLimitReductions, formMethods);
|
|
219
|
+
if (watchProvider === PARAM_PROVIDER_OPENLOADFLOW) {
|
|
220
|
+
if (previousWatchProviderRef.current) {
|
|
221
|
+
setLimitReductionNumber(defaultLimitReductions?.at(0)?.temporaryLimitReductions?.length ?? 0);
|
|
227
222
|
} else {
|
|
228
|
-
setLimitReductionNumber(0);
|
|
223
|
+
setLimitReductionNumber(params?.limitReductions?.at(0)?.temporaryLimitReductions?.length ?? 0);
|
|
229
224
|
}
|
|
225
|
+
} else {
|
|
226
|
+
setLimitReductionNumber(0);
|
|
230
227
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
defaultLimitReductions,
|
|
234
|
-
formMethods,
|
|
235
|
-
params?.limitReductions,
|
|
236
|
-
specificParamsDescriptions,
|
|
237
|
-
watchProvider
|
|
238
|
-
]);
|
|
228
|
+
previousWatchProviderRef.current = watchProvider;
|
|
229
|
+
}, [defaultLimitReductions, formMethods, params?.limitReductions, specificParamsDescription, watchProvider]);
|
|
239
230
|
return {
|
|
240
231
|
formMethods,
|
|
241
232
|
formSchema,
|
|
@@ -248,8 +239,7 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
248
239
|
toLoadFlowFormValues,
|
|
249
240
|
formatNewParams,
|
|
250
241
|
params,
|
|
251
|
-
|
|
252
|
-
setCurrentProvider,
|
|
242
|
+
watchProvider,
|
|
253
243
|
paramsLoaded,
|
|
254
244
|
onValidationError,
|
|
255
245
|
onSaveInline,
|