@gridsuite/commons-ui 0.250.0 → 0.251.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/features/index.js +4 -0
- package/dist/features/parameters/common/hook/use-tabs.d.ts +3 -1
- package/dist/features/parameters/common/hook/use-tabs.js +21 -15
- package/dist/features/parameters/index.d.ts +1 -0
- package/dist/features/parameters/index.js +4 -0
- package/dist/features/parameters/loadflow/load-flow-parameters-utils.d.ts +3 -2
- package/dist/features/parameters/loadflow/load-flow-parameters-utils.js +22 -3
- package/dist/features/parameters/loadflow/use-load-flow-parameters-form.js +14 -29
- package/dist/features/parameters/network-visualizations/network-visualizations-parameters-dialog.js +1 -0
- package/dist/features/parameters/network-visualizations/network-visualizations-parameters-inline.js +1 -1
- package/dist/features/parameters/network-visualizations/use-network-visualizations-parameters-form.d.ts +3 -1
- package/dist/features/parameters/network-visualizations/use-network-visualizations-parameters-form.js +19 -6
- package/dist/features/parameters/security-analysis/constants.d.ts +3 -3
- package/dist/features/parameters/security-analysis/constants.js +3 -3
- package/dist/features/parameters/security-analysis/security-analysis-parameters-content.d.ts +4 -6
- package/dist/features/parameters/security-analysis/security-analysis-parameters-content.js +26 -30
- package/dist/features/parameters/security-analysis/security-analysis-parameters-dialog.js +2 -1
- package/dist/features/parameters/security-analysis/security-analysis-parameters-form.js +1 -3
- package/dist/features/parameters/security-analysis/security-analysis-parameters-inline.js +4 -1
- package/dist/features/parameters/security-analysis/security-analysis-parameters-utils.d.ts +2 -0
- package/dist/features/parameters/security-analysis/security-analysis-parameters-utils.js +54 -0
- package/dist/features/parameters/security-analysis/use-security-analysis-parameters-form.d.ts +8 -1
- package/dist/features/parameters/security-analysis/use-security-analysis-parameters-form.js +21 -2
- package/dist/features/parameters/sensi/sensitivity-parameters-selector.js +9 -8
- package/dist/features/parameters/short-circuit/short-circuit-icc-cluster-table-cell.js +1 -1
- package/dist/features/parameters/short-circuit/short-circuit-parameters-utils.d.ts +1 -0
- package/dist/features/parameters/short-circuit/short-circuit-parameters-utils.js +27 -2
- package/dist/features/parameters/short-circuit/use-short-circuit-parameters-form.js +15 -24
- package/dist/features/parameters/voltage-init/use-voltage-init-parameters-form.js +19 -18
- package/dist/features/parameters/voltage-init/voltage-init-form-utils.d.ts +2 -0
- package/dist/features/parameters/voltage-init/voltage-init-form-utils.js +14 -1
- package/dist/features/parameters/voltage-init/voltage-init-parameters-dialog.js +1 -0
- package/dist/features/parameters/voltage-init/voltage-init-parameters-form.js +27 -38
- package/dist/features/parameters/voltage-init/voltage-init-parameters-inline.js +1 -1
- package/dist/features/process-configs/security-analysis/update-sa-process-config.js +2 -0
- package/dist/index.js +4 -0
- package/package.json +1 -1
package/dist/features/index.js
CHANGED
|
@@ -69,6 +69,7 @@ import { CONTINGENCIES_LIST_INFOS, CONTINGENCIES_START_TIME, SCENARIO_DURATION }
|
|
|
69
69
|
import { DynamicSecurityAnalysisInline } from "./parameters/dynamic-security-analysis/dynamic-security-analysis-inline.js";
|
|
70
70
|
import { ACCURACY, ACTIVE, CALCULATION_TYPE, LOADS_VARIATIONS, LOAD_FILTERS, LOAD_INCREASE_START_TIME, LOAD_INCREASE_STOP_TIME, LOAD_MODELS_RULE, MARGIN_CALCULATION_START_TIME, START_TIME, STOP_TIME, VARIATION } from "./parameters/dynamic-margin-calculation/constants.js";
|
|
71
71
|
import { DynamicMarginCalculationInline } from "./parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js";
|
|
72
|
+
import { getTabIndicatorStyle, getTabStyle, parametersStyles } from "./parameters/parameters-style.js";
|
|
72
73
|
import { filledTextField, italicFontTextField, standardTextField } from "./network-modifications/common/form.utils.js";
|
|
73
74
|
import { PropertiesForm } from "./network-modifications/common/properties/PropertiesForm.js";
|
|
74
75
|
import { PropertyForm } from "./network-modifications/common/properties/PropertyForm.js";
|
|
@@ -719,6 +720,8 @@ export {
|
|
|
719
720
|
getShortCircuitEmptyFormData,
|
|
720
721
|
getShortCircuitFormData,
|
|
721
722
|
getShortCircuitFormSchema,
|
|
723
|
+
getTabIndicatorStyle,
|
|
724
|
+
getTabStyle,
|
|
722
725
|
getVoltageRegulationEmptyFormData,
|
|
723
726
|
getVoltageRegulationSchema,
|
|
724
727
|
handlePostSortRows,
|
|
@@ -765,6 +768,7 @@ export {
|
|
|
765
768
|
networkModificationTableStyles,
|
|
766
769
|
newEquipmentDeletionDto,
|
|
767
770
|
onlyStartedGeneratorsOptions,
|
|
771
|
+
parametersStyles,
|
|
768
772
|
removeUuidsFromTree,
|
|
769
773
|
sanitizeLimitNames,
|
|
770
774
|
sanitizeLimitsGroups,
|
|
@@ -2,6 +2,7 @@ import { SyntheticEvent } from 'react';
|
|
|
2
2
|
import { FieldErrors } from 'react-hook-form';
|
|
3
3
|
export type UseTabsReturn<TTabValue extends string> = {
|
|
4
4
|
selectedTab: TTabValue;
|
|
5
|
+
setSelectedTab: (selectedTab: TTabValue) => void;
|
|
5
6
|
tabsWithError: TTabValue[];
|
|
6
7
|
onTabChange: (event: SyntheticEvent, newValue: TTabValue) => void;
|
|
7
8
|
onError: (errors: FieldErrors) => void;
|
|
@@ -10,5 +11,6 @@ export type UseTabsProps<TTabValue extends string> = {
|
|
|
10
11
|
defaultTab: TTabValue;
|
|
11
12
|
tabEnum: Record<string, TTabValue>;
|
|
12
13
|
errors: FieldErrors;
|
|
14
|
+
tabFields?: Record<TTabValue, string[]>;
|
|
13
15
|
};
|
|
14
|
-
export declare function useTabs<TTabValue extends string>({ defaultTab, tabEnum, errors, }: Readonly<UseTabsProps<TTabValue>>): UseTabsReturn<TTabValue>;
|
|
16
|
+
export declare function useTabs<TTabValue extends string>({ defaultTab, tabEnum, errors, tabFields, }: Readonly<UseTabsProps<TTabValue>>): UseTabsReturn<TTabValue>;
|
|
@@ -1,43 +1,48 @@
|
|
|
1
1
|
import { useState, useCallback } from "react";
|
|
2
|
+
import { get } from "react-hook-form";
|
|
2
3
|
import { isObjectEmpty } from "../../../../utils/functions.js";
|
|
3
4
|
function useTabs({
|
|
4
5
|
defaultTab,
|
|
5
6
|
tabEnum,
|
|
6
|
-
errors
|
|
7
|
+
errors,
|
|
8
|
+
tabFields
|
|
7
9
|
}) {
|
|
8
10
|
const [selectedTab, setSelectedTab] = useState(defaultTab);
|
|
9
11
|
const [tabsWithError, setTabsWithError] = useState([]);
|
|
12
|
+
const getTabsWithError = useCallback(
|
|
13
|
+
(_errors) => {
|
|
14
|
+
const tabsHasError = [];
|
|
15
|
+
Object.values(tabEnum).forEach((tabValue) => {
|
|
16
|
+
const fields = tabFields?.[tabValue] ?? [tabValue];
|
|
17
|
+
if (fields.some((field) => get(_errors, field))) {
|
|
18
|
+
tabsHasError.push(tabValue);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
return tabsHasError;
|
|
22
|
+
},
|
|
23
|
+
[tabEnum, tabFields]
|
|
24
|
+
);
|
|
10
25
|
const onTabChange = useCallback(
|
|
11
26
|
(event, newSelectedTab) => {
|
|
12
27
|
setSelectedTab(newSelectedTab);
|
|
13
28
|
if (!errors || isObjectEmpty(errors)) {
|
|
14
29
|
return;
|
|
15
30
|
}
|
|
16
|
-
const tabsHasError =
|
|
17
|
-
Object.values(tabEnum).forEach((tabValue) => {
|
|
18
|
-
if (errors?.[tabValue]) {
|
|
19
|
-
tabsHasError.push(tabValue);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
31
|
+
const tabsHasError = getTabsWithError(errors);
|
|
22
32
|
if (tabsHasError.includes(newSelectedTab)) {
|
|
23
33
|
setTabsWithError(tabsHasError.filter((errorTab) => errorTab !== newSelectedTab));
|
|
24
34
|
} else {
|
|
25
35
|
setTabsWithError(tabsHasError);
|
|
26
36
|
}
|
|
27
37
|
},
|
|
28
|
-
[errors,
|
|
38
|
+
[errors, getTabsWithError]
|
|
29
39
|
);
|
|
30
40
|
const onError = useCallback(
|
|
31
41
|
(_errors) => {
|
|
32
42
|
if (!_errors || isObjectEmpty(_errors)) {
|
|
33
43
|
return;
|
|
34
44
|
}
|
|
35
|
-
const tabsHasError =
|
|
36
|
-
Object.values(tabEnum).forEach((tabValue) => {
|
|
37
|
-
if (_errors?.[tabValue]) {
|
|
38
|
-
tabsHasError.push(tabValue);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
45
|
+
const tabsHasError = getTabsWithError(_errors);
|
|
41
46
|
if (tabsHasError.includes(selectedTab)) {
|
|
42
47
|
setTabsWithError(tabsHasError.filter((errorTab) => errorTab !== selectedTab));
|
|
43
48
|
} else if (tabsHasError.length > 0) {
|
|
@@ -45,10 +50,11 @@ function useTabs({
|
|
|
45
50
|
setTabsWithError(tabsHasError.filter((errorTab, index, arr) => errorTab !== arr[0]));
|
|
46
51
|
}
|
|
47
52
|
},
|
|
48
|
-
[
|
|
53
|
+
[getTabsWithError, selectedTab]
|
|
49
54
|
);
|
|
50
55
|
return {
|
|
51
56
|
selectedTab,
|
|
57
|
+
setSelectedTab,
|
|
52
58
|
tabsWithError,
|
|
53
59
|
onTabChange,
|
|
54
60
|
onError
|
|
@@ -49,6 +49,7 @@ import { CONTINGENCIES_LIST_INFOS, CONTINGENCIES_START_TIME, SCENARIO_DURATION }
|
|
|
49
49
|
import { DynamicSecurityAnalysisInline } from "./dynamic-security-analysis/dynamic-security-analysis-inline.js";
|
|
50
50
|
import { ACCURACY, ACTIVE, CALCULATION_TYPE, LOADS_VARIATIONS, LOAD_FILTERS, LOAD_INCREASE_START_TIME, LOAD_INCREASE_STOP_TIME, LOAD_MODELS_RULE, MARGIN_CALCULATION_START_TIME, START_TIME, STOP_TIME, VARIATION } from "./dynamic-margin-calculation/constants.js";
|
|
51
51
|
import { DynamicMarginCalculationInline } from "./dynamic-margin-calculation/dynamic-margin-calculation-inline.js";
|
|
52
|
+
import { getTabIndicatorStyle, getTabStyle, parametersStyles } from "./parameters-style.js";
|
|
52
53
|
export {
|
|
53
54
|
ACCURACY,
|
|
54
55
|
ACTIVE,
|
|
@@ -238,11 +239,14 @@ export {
|
|
|
238
239
|
formatComputingTypeLabel,
|
|
239
240
|
getContingencyListsInfosFormSchema,
|
|
240
241
|
getLimitReductionsFormSchema,
|
|
242
|
+
getTabIndicatorStyle,
|
|
243
|
+
getTabStyle,
|
|
241
244
|
intlInitialVoltageProfileMode,
|
|
242
245
|
intlPredefinedParametersOptions,
|
|
243
246
|
isValidComputingType,
|
|
244
247
|
isValidContingencyRow,
|
|
245
248
|
onlyStartedGeneratorsOptions,
|
|
249
|
+
parametersStyles,
|
|
246
250
|
sanitizePercentageValue,
|
|
247
251
|
toFormValuesContingencyListsInfos,
|
|
248
252
|
toFormValuesLimitReductions,
|
|
@@ -4,10 +4,11 @@ import { ParameterValue } from './load-flow-parameters-type';
|
|
|
4
4
|
import * as yup from 'yup';
|
|
5
5
|
export declare enum TabValues {
|
|
6
6
|
GENERAL = "General",
|
|
7
|
+
LIMIT_REDUCTIONS = "LimitReductions",
|
|
7
8
|
ADVANCED = "Advanced",
|
|
8
|
-
PROVIDER_SPECIFIC = "ProviderSpecific"
|
|
9
|
-
LIMIT_REDUCTIONS = "LimitReductions"
|
|
9
|
+
PROVIDER_SPECIFIC = "ProviderSpecific"
|
|
10
10
|
}
|
|
11
|
+
export declare const TAB_FIELDS: Record<TabValues, string[]>;
|
|
11
12
|
export declare const getBasicLoadFlowParametersFormSchema: () => yup.ObjectSchema<{
|
|
12
13
|
phaseShifterRegulationOn: NonNullable<boolean | undefined>;
|
|
13
14
|
dc: NonNullable<boolean | undefined>;
|
|
@@ -30,9 +30,9 @@ import "mui-nested-menu";
|
|
|
30
30
|
import "react-resizable-panels";
|
|
31
31
|
import "react-papaparse";
|
|
32
32
|
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
33
|
-
import { ADVANCED_PARAMETERS, COMMON_PARAMETERS } from "../common/constants.js";
|
|
33
|
+
import { ADVANCED_PARAMETERS, SPECIFIC_PARAMETERS, COMMON_PARAMETERS } from "../common/constants.js";
|
|
34
34
|
import "../common/widget/parameter-line-slider.js";
|
|
35
|
-
import { IST_FORM, LIMIT_DURATION_FORM,
|
|
35
|
+
import { LIMIT_REDUCTIONS_FORM, IST_FORM, LIMIT_DURATION_FORM, toFormValuesLimitReductions } from "../common/limitreductions/columns-definitions.js";
|
|
36
36
|
import "../common/contingency-table/contingency-table.js";
|
|
37
37
|
import "../common/contingency-table/columns-definitions.js";
|
|
38
38
|
import "@hookform/resolvers/yup";
|
|
@@ -41,11 +41,29 @@ import { DC_POWER_FACTOR, DC_USE_TRANSFORMER_RATIO, SHUNT_COMPENSATOR_VOLTAGE_CO
|
|
|
41
41
|
import { advancedParams } from "./load-flow-advanced-parameters.js";
|
|
42
42
|
var TabValues = /* @__PURE__ */ ((TabValues2) => {
|
|
43
43
|
TabValues2["GENERAL"] = "General";
|
|
44
|
+
TabValues2["LIMIT_REDUCTIONS"] = "LimitReductions";
|
|
44
45
|
TabValues2["ADVANCED"] = "Advanced";
|
|
45
46
|
TabValues2["PROVIDER_SPECIFIC"] = "ProviderSpecific";
|
|
46
|
-
TabValues2["LIMIT_REDUCTIONS"] = "LimitReductions";
|
|
47
47
|
return TabValues2;
|
|
48
48
|
})(TabValues || {});
|
|
49
|
+
const TAB_FIELDS = {
|
|
50
|
+
[
|
|
51
|
+
"General"
|
|
52
|
+
/* GENERAL */
|
|
53
|
+
]: [COMMON_PARAMETERS],
|
|
54
|
+
[
|
|
55
|
+
"ProviderSpecific"
|
|
56
|
+
/* PROVIDER_SPECIFIC */
|
|
57
|
+
]: [SPECIFIC_PARAMETERS],
|
|
58
|
+
[
|
|
59
|
+
"Advanced"
|
|
60
|
+
/* ADVANCED */
|
|
61
|
+
]: [ADVANCED_PARAMETERS],
|
|
62
|
+
[
|
|
63
|
+
"LimitReductions"
|
|
64
|
+
/* LIMIT_REDUCTIONS */
|
|
65
|
+
]: [LIMIT_REDUCTIONS_FORM]
|
|
66
|
+
};
|
|
49
67
|
const getBasicLoadFlowParametersFormSchema = () => {
|
|
50
68
|
return yup.object().shape({
|
|
51
69
|
[PHASE_SHIFTER_REGULATION_ON]: yup.boolean().required(),
|
|
@@ -133,6 +151,7 @@ function splitCommonParameters(commonParameters) {
|
|
|
133
151
|
);
|
|
134
152
|
}
|
|
135
153
|
export {
|
|
154
|
+
TAB_FIELDS,
|
|
136
155
|
TabValues,
|
|
137
156
|
getAdvancedLoadFlowParametersFormSchema,
|
|
138
157
|
getAdvancedLoadFlowParametersFormSchemaFields,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useForm } from "react-hook-form";
|
|
2
2
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
3
|
-
import { useState, useRef,
|
|
3
|
+
import { useState, useRef, useMemo, useEffect, useCallback, useEffectEvent } from "react";
|
|
4
4
|
import * as yup from "yup";
|
|
5
|
-
import {
|
|
5
|
+
import { getAdvancedLoadFlowParametersFormSchema, getCommonLoadFlowParametersFormSchema, splitCommonParameters, mapLimitReductions, TabValues, TAB_FIELDS, setLimitReductions } from "./load-flow-parameters-utils.js";
|
|
6
6
|
import "react/jsx-runtime";
|
|
7
7
|
import "@mui/material";
|
|
8
8
|
import "@mui/icons-material";
|
|
@@ -41,23 +41,19 @@ import "../common/widget/parameter-line-slider.js";
|
|
|
41
41
|
import { getLimitReductionsFormSchema, LIMIT_REDUCTIONS_FORM, toFormValuesLimitReductions } from "../common/limitreductions/columns-definitions.js";
|
|
42
42
|
import "../common/contingency-table/contingency-table.js";
|
|
43
43
|
import "../common/contingency-table/columns-definitions.js";
|
|
44
|
+
import { useTabs } from "../common/hook/use-tabs.js";
|
|
44
45
|
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
45
46
|
import { getNameElementEditorSchema, getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
|
|
46
47
|
import { PARAM_LIMIT_REDUCTION, PARAM_PROVIDER_OPENLOADFLOW } from "./constants.js";
|
|
47
48
|
import { getDefaultSpecificParamsValues, getSpecificParametersFormSchema, getAllSpecificParametersValues, formatSpecificParameters, setSpecificParameters } from "../common/utils.js";
|
|
48
49
|
const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parametersUuid, name, description) => {
|
|
49
50
|
const { providers, params, updateParameters, specificParamsDescription, defaultLimitReductions } = parametersBackend;
|
|
50
|
-
const [selectedTab, setSelectedTab] = useState(TabValues.GENERAL);
|
|
51
51
|
const [limitReductionNumber, setLimitReductionNumber] = useState(0);
|
|
52
|
-
const [tabIndexesWithError, setTabIndexesWithError] = useState([]);
|
|
53
52
|
const [specificParametersDescriptionForProvider, setSpecificParametersDescriptionForProvider] = useState(() => {
|
|
54
53
|
return params?.provider && specificParamsDescription ? specificParamsDescription[params.provider] : [];
|
|
55
54
|
});
|
|
56
55
|
const { snackError } = useSnackMessage();
|
|
57
56
|
const previousWatchProviderRef = useRef(void 0);
|
|
58
|
-
const handleTabChange = useCallback((event, newValue) => {
|
|
59
|
-
setSelectedTab(newValue);
|
|
60
|
-
}, []);
|
|
61
57
|
const specificParametersDefaultValues = useMemo(() => {
|
|
62
58
|
return getDefaultSpecificParamsValues(specificParametersDescriptionForProvider);
|
|
63
59
|
}, [specificParametersDescriptionForProvider]);
|
|
@@ -178,29 +174,19 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
178
174
|
label: value
|
|
179
175
|
}));
|
|
180
176
|
}, [providers, isDeveloperMode]);
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
tabsInError.push(TabValues.PROVIDER_SPECIFIC);
|
|
193
|
-
}
|
|
194
|
-
if (errors?.[ADVANCED_PARAMETERS] && TabValues.ADVANCED !== selectedTab) {
|
|
195
|
-
tabsInError.push(TabValues.ADVANCED);
|
|
196
|
-
}
|
|
197
|
-
setTabIndexesWithError(tabsInError);
|
|
198
|
-
},
|
|
199
|
-
[selectedTab]
|
|
200
|
-
);
|
|
177
|
+
const {
|
|
178
|
+
selectedTab,
|
|
179
|
+
onTabChange: handleTabChange,
|
|
180
|
+
tabsWithError: tabIndexesWithError,
|
|
181
|
+
onError: onValidationError
|
|
182
|
+
} = useTabs({
|
|
183
|
+
defaultTab: TabValues.GENERAL,
|
|
184
|
+
tabEnum: TabValues,
|
|
185
|
+
errors: formMethods.formState.errors,
|
|
186
|
+
tabFields: TAB_FIELDS
|
|
187
|
+
});
|
|
201
188
|
const onSaveInline = useCallback(
|
|
202
189
|
(formData) => {
|
|
203
|
-
setTabIndexesWithError([]);
|
|
204
190
|
updateParameters(formatNewParams(formData));
|
|
205
191
|
},
|
|
206
192
|
[updateParameters, formatNewParams]
|
|
@@ -208,7 +194,6 @@ const useLoadFlowParametersForm = (parametersBackend, isDeveloperMode, parameter
|
|
|
208
194
|
const onSaveDialog = useCallback(
|
|
209
195
|
(formData) => {
|
|
210
196
|
if (parametersUuid) {
|
|
211
|
-
setTabIndexesWithError([]);
|
|
212
197
|
updateParameter(
|
|
213
198
|
parametersUuid,
|
|
214
199
|
formatNewParams(formData),
|
package/dist/features/parameters/network-visualizations/network-visualizations-parameters-dialog.js
CHANGED
|
@@ -62,6 +62,7 @@ function NetworkVisualizationsParametersEditionDialog({
|
|
|
62
62
|
open,
|
|
63
63
|
onClose,
|
|
64
64
|
onSave: networkVisuMethods.onSaveDialog,
|
|
65
|
+
onValidationError: networkVisuMethods.onValidationError,
|
|
65
66
|
formContext: {
|
|
66
67
|
...networkVisuMethods.formMethods,
|
|
67
68
|
validationSchema: networkVisuMethods.formSchema,
|
package/dist/features/parameters/network-visualizations/network-visualizations-parameters-inline.js
CHANGED
|
@@ -91,7 +91,7 @@ function NetworkVisualizationParametersInline({
|
|
|
91
91
|
parameterFormatter: (newParams) => newParams
|
|
92
92
|
},
|
|
93
93
|
selectParameterHandler: handleLoadParameters,
|
|
94
|
-
validateHandler: handleSubmit(networkVisuMethods.onSaveInline),
|
|
94
|
+
validateHandler: handleSubmit(networkVisuMethods.onSaveInline, networkVisuMethods.onValidationError),
|
|
95
95
|
children: /* @__PURE__ */ jsx(NetworkVisualizationParametersForm, { userProfile, networkVisuMethods })
|
|
96
96
|
}
|
|
97
97
|
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UseFormReturn } from 'react-hook-form';
|
|
1
|
+
import { FieldErrors, UseFormReturn } from 'react-hook-form';
|
|
2
2
|
import { SyntheticEvent } from 'react';
|
|
3
3
|
import { UUID } from 'node:crypto';
|
|
4
4
|
import { NetworkVisualizationTabValues as TabValues } from './constants';
|
|
@@ -12,6 +12,8 @@ export interface UseNetworkVisualizationParametersFormReturn {
|
|
|
12
12
|
paramsLoading: boolean;
|
|
13
13
|
onSaveInline: (formData: Record<string, any>) => void;
|
|
14
14
|
onSaveDialog: (formData: Record<string, any>) => void;
|
|
15
|
+
tabIndexesWithError: TabValues[];
|
|
16
|
+
onValidationError: (errors: FieldErrors) => void;
|
|
15
17
|
}
|
|
16
18
|
type UseNetworkVisualizationParametersFormProps = {
|
|
17
19
|
parametersUuid: UUID;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useForm } from "react-hook-form";
|
|
2
2
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
3
|
-
import { useState,
|
|
3
|
+
import { useState, useMemo, useCallback, useEffect } from "react";
|
|
4
4
|
import * as yup from "yup";
|
|
5
5
|
import "react/jsx-runtime";
|
|
6
6
|
import "@mui/material";
|
|
@@ -39,6 +39,11 @@ import "react-papaparse";
|
|
|
39
39
|
import { NetworkVisualizationTabValues, PARAM_NAD_POSITIONS_GENERATION_MODE, PARAM_STATE_ESTIMATION, PARAM_COMPONENT_LIBRARY, PARAM_SUBSTATION_LAYOUT, PARAM_CENTER_LABEL, PARAM_DIAGONAL_LABEL, PARAM_MAP_BASEMAP, PARAM_MAP_MANUAL_REFRESH, PARAM_LINE_FLOW_MODE, PARAM_LINE_PARALLEL_PATH, PARAM_LINE_FULL_PATH } from "./constants.js";
|
|
40
40
|
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
41
41
|
import { getNameElementEditorSchema, getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
|
|
42
|
+
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
43
|
+
import "../common/widget/parameter-line-slider.js";
|
|
44
|
+
import "../common/contingency-table/contingency-table.js";
|
|
45
|
+
import "../common/contingency-table/columns-definitions.js";
|
|
46
|
+
import { useTabs } from "../common/hook/use-tabs.js";
|
|
42
47
|
const useNetworkVisualizationParametersForm = ({
|
|
43
48
|
parametersUuid,
|
|
44
49
|
name,
|
|
@@ -46,12 +51,8 @@ const useNetworkVisualizationParametersForm = ({
|
|
|
46
51
|
studyUuid,
|
|
47
52
|
parameters
|
|
48
53
|
}) => {
|
|
49
|
-
const [selectedTab, setSelectedTab] = useState(NetworkVisualizationTabValues.MAP);
|
|
50
54
|
const [paramsLoading, setParamsLoading] = useState(false);
|
|
51
55
|
const { snackError } = useSnackMessage();
|
|
52
|
-
const handleTabChange = useCallback((event, newValue) => {
|
|
53
|
-
setSelectedTab(newValue);
|
|
54
|
-
}, []);
|
|
55
56
|
const formSchema = useMemo(() => {
|
|
56
57
|
return yup.object({
|
|
57
58
|
[NetworkVisualizationTabValues.MAP]: yup.object().shape({
|
|
@@ -97,6 +98,16 @@ const useNetworkVisualizationParametersForm = ({
|
|
|
97
98
|
resolver: yupResolver(formSchema)
|
|
98
99
|
});
|
|
99
100
|
const { reset } = formMethods;
|
|
101
|
+
const {
|
|
102
|
+
selectedTab,
|
|
103
|
+
onTabChange: handleTabChange,
|
|
104
|
+
tabsWithError: tabIndexesWithError,
|
|
105
|
+
onError: onValidationError
|
|
106
|
+
} = useTabs({
|
|
107
|
+
defaultTab: NetworkVisualizationTabValues.MAP,
|
|
108
|
+
tabEnum: NetworkVisualizationTabValues,
|
|
109
|
+
errors: formMethods.formState.errors
|
|
110
|
+
});
|
|
100
111
|
const onSaveInline = useCallback(
|
|
101
112
|
(formData) => {
|
|
102
113
|
if (studyUuid) {
|
|
@@ -150,7 +161,9 @@ const useNetworkVisualizationParametersForm = ({
|
|
|
150
161
|
handleTabChange,
|
|
151
162
|
paramsLoading,
|
|
152
163
|
onSaveInline,
|
|
153
|
-
onSaveDialog
|
|
164
|
+
onSaveDialog,
|
|
165
|
+
tabIndexesWithError,
|
|
166
|
+
onValidationError
|
|
154
167
|
};
|
|
155
168
|
};
|
|
156
169
|
export {
|
|
@@ -10,7 +10,7 @@ export declare const LOW_VOLTAGE_ABSOLUTE_THRESHOLD = "lowVoltageAbsoluteThresho
|
|
|
10
10
|
export declare const HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD = "highVoltageProportionalThreshold";
|
|
11
11
|
export declare const HIGH_VOLTAGE_ABSOLUTE_THRESHOLD = "highVoltageAbsoluteThreshold";
|
|
12
12
|
export declare enum TabValues {
|
|
13
|
-
Contingencies =
|
|
14
|
-
Aggravation =
|
|
15
|
-
LimitReductions =
|
|
13
|
+
Contingencies = "Contingencies",
|
|
14
|
+
Aggravation = "Aggravation",
|
|
15
|
+
LimitReductions = "LimitReductions"
|
|
16
16
|
}
|
|
@@ -4,9 +4,9 @@ const LOW_VOLTAGE_ABSOLUTE_THRESHOLD = "lowVoltageAbsoluteThreshold";
|
|
|
4
4
|
const HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD = "highVoltageProportionalThreshold";
|
|
5
5
|
const HIGH_VOLTAGE_ABSOLUTE_THRESHOLD = "highVoltageAbsoluteThreshold";
|
|
6
6
|
var TabValues = /* @__PURE__ */ ((TabValues2) => {
|
|
7
|
-
TabValues2[
|
|
8
|
-
TabValues2[
|
|
9
|
-
TabValues2[
|
|
7
|
+
TabValues2["Contingencies"] = "Contingencies";
|
|
8
|
+
TabValues2["Aggravation"] = "Aggravation";
|
|
9
|
+
TabValues2["LimitReductions"] = "LimitReductions";
|
|
10
10
|
return TabValues2;
|
|
11
11
|
})(TabValues || {});
|
|
12
12
|
export {
|
package/dist/features/parameters/security-analysis/security-analysis-parameters-content.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { ForwardedRef } from 'react';
|
|
2
2
|
import { UUID } from 'node:crypto';
|
|
3
|
-
import {
|
|
3
|
+
import { ContingencyTableApi } from '../common';
|
|
4
4
|
import { ContingencyCount } from '../common/contingency-table/types';
|
|
5
|
-
import {
|
|
6
|
-
export declare function SecurityAnalysisParametersContent({
|
|
7
|
-
|
|
8
|
-
currentProvider?: string;
|
|
9
|
-
defaultLimitReductions: ILimitReductionsByVoltageLevel[];
|
|
5
|
+
import { UseSecurityAnalysisParametersFormReturn } from './use-security-analysis-parameters-form';
|
|
6
|
+
export declare function SecurityAnalysisParametersContent({ securityAnalysisMethods, showContingencyCount, fetchContingencyCount, contingencyTableApiRef, isBuiltCurrentNode, }: Readonly<{
|
|
7
|
+
securityAnalysisMethods: UseSecurityAnalysisParametersFormReturn;
|
|
10
8
|
showContingencyCount: boolean;
|
|
11
9
|
fetchContingencyCount?: (contingencyListIds: UUID[] | null, abortSignal: AbortSignal) => Promise<ContingencyCount>;
|
|
12
10
|
contingencyTableApiRef?: ForwardedRef<ContingencyTableApi>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useEffect } from "react";
|
|
3
3
|
import { FormattedMessage } from "react-intl";
|
|
4
4
|
import { Tabs, Tab } from "@mui/material";
|
|
5
5
|
import "@mui/icons-material";
|
|
@@ -32,6 +32,7 @@ import "react-resizable-panels";
|
|
|
32
32
|
import "react-papaparse";
|
|
33
33
|
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
34
34
|
import { CONTINGENCY_LISTS_INFOS } from "../common/constants.js";
|
|
35
|
+
import { getTabStyle } from "../parameters-style.js";
|
|
35
36
|
import "../common/widget/parameter-line-slider.js";
|
|
36
37
|
import { LimitReductionsTableForm } from "../common/limitreductions/limit-reductions-table-form.js";
|
|
37
38
|
import { ContingencyTable } from "../common/contingency-table/contingency-table.js";
|
|
@@ -44,61 +45,56 @@ import "../loadflow/load-flow-advanced-parameters.js";
|
|
|
44
45
|
import "../loadflow/load-flow-parameters-content.js";
|
|
45
46
|
import { ViolationsHidingParameters } from "./security-analysis-violations-hiding.js";
|
|
46
47
|
import { TabValues } from "./constants.js";
|
|
47
|
-
const styles = {
|
|
48
|
-
tab: {
|
|
49
|
-
fontSize: 17,
|
|
50
|
-
fontWeight: "bold"
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
48
|
function SecurityAnalysisParametersContent({
|
|
54
|
-
|
|
55
|
-
currentProvider,
|
|
56
|
-
defaultLimitReductions,
|
|
49
|
+
securityAnalysisMethods,
|
|
57
50
|
showContingencyCount,
|
|
58
51
|
fetchContingencyCount,
|
|
59
52
|
contingencyTableApiRef,
|
|
60
53
|
isBuiltCurrentNode
|
|
61
54
|
}) {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
const {
|
|
56
|
+
params,
|
|
57
|
+
watchProvider,
|
|
58
|
+
defaultLimitReductions,
|
|
59
|
+
selectedTab,
|
|
60
|
+
handleTabChange,
|
|
61
|
+
setSelectedTab,
|
|
62
|
+
tabIndexesWithError
|
|
63
|
+
} = securityAnalysisMethods;
|
|
64
|
+
const currentProvider = watchProvider?.trim();
|
|
69
65
|
useEffect(() => {
|
|
70
|
-
if (currentProvider !== PARAM_PROVIDER_OPENLOADFLOW &&
|
|
71
|
-
|
|
66
|
+
if (currentProvider !== PARAM_PROVIDER_OPENLOADFLOW && selectedTab === TabValues.LimitReductions) {
|
|
67
|
+
setSelectedTab(TabValues.Contingencies);
|
|
72
68
|
}
|
|
73
|
-
}, [currentProvider,
|
|
69
|
+
}, [currentProvider, selectedTab, setSelectedTab]);
|
|
74
70
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
75
|
-
/* @__PURE__ */ jsxs(Tabs, { value:
|
|
71
|
+
/* @__PURE__ */ jsxs(Tabs, { value: selectedTab, onChange: handleTabChange, children: [
|
|
76
72
|
/* @__PURE__ */ jsx(
|
|
77
73
|
Tab,
|
|
78
74
|
{
|
|
79
|
-
label: /* @__PURE__ */ jsx(FormattedMessage, { id: TabValues
|
|
75
|
+
label: /* @__PURE__ */ jsx(FormattedMessage, { id: TabValues.Contingencies }),
|
|
80
76
|
value: TabValues.Contingencies,
|
|
81
|
-
sx:
|
|
77
|
+
sx: getTabStyle(tabIndexesWithError, TabValues.Contingencies)
|
|
82
78
|
}
|
|
83
79
|
),
|
|
84
80
|
/* @__PURE__ */ jsx(
|
|
85
81
|
Tab,
|
|
86
82
|
{
|
|
87
|
-
label: /* @__PURE__ */ jsx(FormattedMessage, { id: TabValues
|
|
83
|
+
label: /* @__PURE__ */ jsx(FormattedMessage, { id: TabValues.Aggravation }),
|
|
88
84
|
value: TabValues.Aggravation,
|
|
89
|
-
sx:
|
|
85
|
+
sx: getTabStyle(tabIndexesWithError, TabValues.Aggravation)
|
|
90
86
|
}
|
|
91
87
|
),
|
|
92
88
|
currentProvider === PARAM_PROVIDER_OPENLOADFLOW && params?.limitReductions && /* @__PURE__ */ jsx(
|
|
93
89
|
Tab,
|
|
94
90
|
{
|
|
95
|
-
label: /* @__PURE__ */ jsx(FormattedMessage, { id: TabValues
|
|
91
|
+
label: /* @__PURE__ */ jsx(FormattedMessage, { id: TabValues.LimitReductions }),
|
|
96
92
|
value: TabValues.LimitReductions,
|
|
97
|
-
sx:
|
|
93
|
+
sx: getTabStyle(tabIndexesWithError, TabValues.LimitReductions)
|
|
98
94
|
}
|
|
99
95
|
)
|
|
100
96
|
] }),
|
|
101
|
-
/* @__PURE__ */ jsx(TabPanel, { value:
|
|
97
|
+
/* @__PURE__ */ jsx(TabPanel, { value: selectedTab, index: TabValues.Contingencies, keepState: true, children: /* @__PURE__ */ jsx(
|
|
102
98
|
ContingencyTable,
|
|
103
99
|
{
|
|
104
100
|
name: CONTINGENCY_LISTS_INFOS,
|
|
@@ -108,8 +104,8 @@ function SecurityAnalysisParametersContent({
|
|
|
108
104
|
ref: contingencyTableApiRef
|
|
109
105
|
}
|
|
110
106
|
) }),
|
|
111
|
-
/* @__PURE__ */ jsx(TabPanel, { value:
|
|
112
|
-
/* @__PURE__ */ jsx(TabPanel, { value:
|
|
107
|
+
/* @__PURE__ */ jsx(TabPanel, { value: selectedTab, index: TabValues.Aggravation, children: /* @__PURE__ */ jsx(ViolationsHidingParameters, {}) }),
|
|
108
|
+
/* @__PURE__ */ jsx(TabPanel, { value: selectedTab, index: TabValues.LimitReductions, children: currentProvider === PARAM_PROVIDER_OPENLOADFLOW && params?.limitReductions && /* @__PURE__ */ jsx(LimitReductionsTableForm, { limits: params.limitReductions ?? defaultLimitReductions }) })
|
|
113
109
|
] });
|
|
114
110
|
}
|
|
115
111
|
export {
|
|
@@ -71,6 +71,7 @@ function SecurityAnalysisParametersDialog({
|
|
|
71
71
|
open,
|
|
72
72
|
onClose,
|
|
73
73
|
onSave: securityAnalysisMethods.onSaveDialog,
|
|
74
|
+
onValidationError: securityAnalysisMethods.onValidationError,
|
|
74
75
|
formContext: {
|
|
75
76
|
...securityAnalysisMethods.formMethods,
|
|
76
77
|
validationSchema: securityAnalysisMethods.formSchema,
|
|
@@ -91,7 +92,7 @@ function SecurityAnalysisParametersDialog({
|
|
|
91
92
|
{
|
|
92
93
|
initialElementName: name,
|
|
93
94
|
activeDirectory,
|
|
94
|
-
elementType: ElementType.
|
|
95
|
+
elementType: ElementType.SECURITY_ANALYSIS_PARAMETERS
|
|
95
96
|
}
|
|
96
97
|
) }),
|
|
97
98
|
securityAnalysisMethods.paramsFormInitialized ? /* @__PURE__ */ jsx(
|
|
@@ -50,9 +50,7 @@ function SecurityAnalysisParametersForm({
|
|
|
50
50
|
/* @__PURE__ */ jsx(
|
|
51
51
|
SecurityAnalysisParametersContent,
|
|
52
52
|
{
|
|
53
|
-
|
|
54
|
-
currentProvider: securityAnalysisMethods.watchProvider?.trim(),
|
|
55
|
-
defaultLimitReductions: securityAnalysisMethods.defaultLimitReductions,
|
|
53
|
+
securityAnalysisMethods,
|
|
56
54
|
showContingencyCount,
|
|
57
55
|
fetchContingencyCount,
|
|
58
56
|
contingencyTableApiRef,
|
|
@@ -96,7 +96,10 @@ function SecurityAnalysisParametersInline({
|
|
|
96
96
|
},
|
|
97
97
|
selectParameterHandler: handleLoadParameter,
|
|
98
98
|
resetHandler: executeResetAction,
|
|
99
|
-
validateHandler: handleSubmit(
|
|
99
|
+
validateHandler: handleSubmit(
|
|
100
|
+
securityAnalysisMethods.onSaveInline,
|
|
101
|
+
securityAnalysisMethods.onValidationError
|
|
102
|
+
),
|
|
100
103
|
children: /* @__PURE__ */ jsx(
|
|
101
104
|
SecurityAnalysisParametersForm,
|
|
102
105
|
{
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import "react/jsx-runtime";
|
|
2
|
+
import "@mui/material";
|
|
3
|
+
import "@mui/icons-material";
|
|
4
|
+
import "react";
|
|
5
|
+
import "react-intl";
|
|
6
|
+
import "../../../components/ui/overflowableText/OverflowableText.js";
|
|
7
|
+
import "../../../utils/conversionUtils.js";
|
|
8
|
+
import "../../../utils/types/equipmentType.js";
|
|
9
|
+
import "react-hook-form";
|
|
10
|
+
import "localized-countries";
|
|
11
|
+
import "localized-countries/data/fr";
|
|
12
|
+
import "localized-countries/data/en";
|
|
13
|
+
import "notistack";
|
|
14
|
+
import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
|
|
15
|
+
import "yup";
|
|
16
|
+
import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
|
|
17
|
+
import "../../../components/ui/reactHookForm/numbers/RangeInput.js";
|
|
18
|
+
import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
|
|
19
|
+
import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
|
|
20
|
+
import "@material-symbols/svg-400/outlined/arrows_input.svg?react";
|
|
21
|
+
import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
|
|
22
|
+
import "@material-symbols/svg-400/outlined/add_notes.svg?react";
|
|
23
|
+
import "../../../components/ui/dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
|
|
24
|
+
import "../../../components/ui/reactHookForm/expandableInput/ExpandableInput.js";
|
|
25
|
+
import "../../../components/ui/reactHookForm/directory-item-input/directory-item-utils.js";
|
|
26
|
+
import "@hello-pangea/dnd";
|
|
27
|
+
import "../../../components/ui/dialogs/elementSaveDialog/ElementSaveDialog.js";
|
|
28
|
+
import "../../../components/ui/snackbarProvider/SnackbarProvider.js";
|
|
29
|
+
import "mui-nested-menu";
|
|
30
|
+
import "react-resizable-panels";
|
|
31
|
+
import "react-papaparse";
|
|
32
|
+
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
33
|
+
import { CONTINGENCY_LISTS_INFOS } from "../common/constants.js";
|
|
34
|
+
import "../common/widget/parameter-line-slider.js";
|
|
35
|
+
import { LIMIT_REDUCTIONS_FORM } from "../common/limitreductions/columns-definitions.js";
|
|
36
|
+
import "../common/contingency-table/contingency-table.js";
|
|
37
|
+
import "../common/contingency-table/columns-definitions.js";
|
|
38
|
+
import "@hookform/resolvers/yup";
|
|
39
|
+
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
40
|
+
import { TabValues, FLOW_PROPORTIONAL_THRESHOLD, LOW_VOLTAGE_PROPORTIONAL_THRESHOLD, LOW_VOLTAGE_ABSOLUTE_THRESHOLD, HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD, HIGH_VOLTAGE_ABSOLUTE_THRESHOLD } from "./constants.js";
|
|
41
|
+
const TAB_FIELDS = {
|
|
42
|
+
[TabValues.Contingencies]: [CONTINGENCY_LISTS_INFOS],
|
|
43
|
+
[TabValues.Aggravation]: [
|
|
44
|
+
FLOW_PROPORTIONAL_THRESHOLD,
|
|
45
|
+
LOW_VOLTAGE_PROPORTIONAL_THRESHOLD,
|
|
46
|
+
LOW_VOLTAGE_ABSOLUTE_THRESHOLD,
|
|
47
|
+
HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD,
|
|
48
|
+
HIGH_VOLTAGE_ABSOLUTE_THRESHOLD
|
|
49
|
+
],
|
|
50
|
+
[TabValues.LimitReductions]: [LIMIT_REDUCTIONS_FORM]
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
TAB_FIELDS
|
|
54
|
+
};
|
package/dist/features/parameters/security-analysis/use-security-analysis-parameters-form.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { UseFormReturn } from 'react-hook-form';
|
|
1
|
+
import { FieldErrors, UseFormReturn } from 'react-hook-form';
|
|
2
2
|
import { ObjectSchema } from 'yup';
|
|
3
|
+
import { SyntheticEvent } from 'react';
|
|
3
4
|
import { UUID } from 'node:crypto';
|
|
4
5
|
import { ComputingType, UseParametersBackendReturnProps } from '../../../utils';
|
|
5
6
|
import { ILimitReductionsByVoltageLevel } from '../common';
|
|
6
7
|
import { SAParametersEnriched } from '../../../utils/types';
|
|
8
|
+
import { TabValues } from './constants';
|
|
7
9
|
export interface UseSecurityAnalysisParametersFormReturn {
|
|
8
10
|
formMethods: UseFormReturn;
|
|
9
11
|
formSchema: ObjectSchema<any>;
|
|
12
|
+
selectedTab: TabValues;
|
|
13
|
+
setSelectedTab: (selectedTab: TabValues) => void;
|
|
14
|
+
handleTabChange: (event: SyntheticEvent, newValue: TabValues) => void;
|
|
10
15
|
formattedProviders: {
|
|
11
16
|
id: string;
|
|
12
17
|
label: string;
|
|
@@ -19,5 +24,7 @@ export interface UseSecurityAnalysisParametersFormReturn {
|
|
|
19
24
|
paramsFormInitialized: boolean;
|
|
20
25
|
onSaveInline: (formData: Record<string, any>) => void;
|
|
21
26
|
onSaveDialog: (formData: Record<string, any>) => void;
|
|
27
|
+
tabIndexesWithError: TabValues[];
|
|
28
|
+
onValidationError: (errors: FieldErrors) => void;
|
|
22
29
|
}
|
|
23
30
|
export declare const useSecurityAnalysisParametersForm: (parametersBackend: UseParametersBackendReturnProps<ComputingType.SECURITY_ANALYSIS>, parametersUuid: UUID | null, name: string | null, description: string | null) => UseSecurityAnalysisParametersFormReturn;
|
|
@@ -40,12 +40,14 @@ import "../common/widget/parameter-line-slider.js";
|
|
|
40
40
|
import { LIMIT_REDUCTIONS_FORM, IST_FORM, LIMIT_DURATION_FORM, toFormValuesLimitReductions } from "../common/limitreductions/columns-definitions.js";
|
|
41
41
|
import "../common/contingency-table/contingency-table.js";
|
|
42
42
|
import "../common/contingency-table/columns-definitions.js";
|
|
43
|
+
import { useTabs } from "../common/hook/use-tabs.js";
|
|
43
44
|
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
44
45
|
import { getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
|
|
45
46
|
import { getSAParametersFormSchema, toFormValueSaParameters } from "./columns-definitions.js";
|
|
46
47
|
import { ACTIVATED, DESCRIPTION, NAME, ID } from "../common/parameter-table-field/constants.js";
|
|
47
48
|
import "react-dom";
|
|
48
|
-
import {
|
|
49
|
+
import { TAB_FIELDS } from "./security-analysis-parameters-utils.js";
|
|
50
|
+
import { HIGH_VOLTAGE_ABSOLUTE_THRESHOLD, HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD, LOW_VOLTAGE_ABSOLUTE_THRESHOLD, LOW_VOLTAGE_PROPORTIONAL_THRESHOLD, FLOW_PROPORTIONAL_THRESHOLD, TabValues } from "./constants.js";
|
|
49
51
|
const useSecurityAnalysisParametersForm = (parametersBackend, parametersUuid, name, description) => {
|
|
50
52
|
const { providers, params, updateParameters, defaultLimitReductions } = parametersBackend;
|
|
51
53
|
const previousWatchProviderRef = useRef(void 0);
|
|
@@ -129,6 +131,18 @@ const useSecurityAnalysisParametersForm = (parametersBackend, parametersUuid, na
|
|
|
129
131
|
},
|
|
130
132
|
[toContingencyListsInfos, toLimitReductions]
|
|
131
133
|
);
|
|
134
|
+
const {
|
|
135
|
+
selectedTab,
|
|
136
|
+
setSelectedTab,
|
|
137
|
+
onTabChange: handleTabChange,
|
|
138
|
+
tabsWithError: tabIndexesWithError,
|
|
139
|
+
onError: onValidationError
|
|
140
|
+
} = useTabs({
|
|
141
|
+
defaultTab: TabValues.Contingencies,
|
|
142
|
+
tabEnum: TabValues,
|
|
143
|
+
errors: formMethods.formState.errors,
|
|
144
|
+
tabFields: TAB_FIELDS
|
|
145
|
+
});
|
|
132
146
|
const onSaveInline = useCallback(
|
|
133
147
|
(formData) => {
|
|
134
148
|
updateParameters(formatNewParams(formData));
|
|
@@ -175,6 +189,9 @@ const useSecurityAnalysisParametersForm = (parametersBackend, parametersUuid, na
|
|
|
175
189
|
return {
|
|
176
190
|
formMethods,
|
|
177
191
|
formSchema,
|
|
192
|
+
selectedTab,
|
|
193
|
+
setSelectedTab,
|
|
194
|
+
handleTabChange,
|
|
178
195
|
formattedProviders,
|
|
179
196
|
defaultLimitReductions,
|
|
180
197
|
toFormValueSaParameters,
|
|
@@ -183,7 +200,9 @@ const useSecurityAnalysisParametersForm = (parametersBackend, parametersUuid, na
|
|
|
183
200
|
watchProvider,
|
|
184
201
|
paramsFormInitialized,
|
|
185
202
|
onSaveInline,
|
|
186
|
-
onSaveDialog
|
|
203
|
+
onSaveDialog,
|
|
204
|
+
tabIndexesWithError,
|
|
205
|
+
onValidationError
|
|
187
206
|
};
|
|
188
207
|
};
|
|
189
208
|
export {
|
|
@@ -9,6 +9,7 @@ import { TabPanel } from "../common/parameters.js";
|
|
|
9
9
|
import "../../../components/ui/overflowableText/OverflowableText.js";
|
|
10
10
|
import "../../../utils/conversionUtils.js";
|
|
11
11
|
import "../../../utils/types/equipmentType.js";
|
|
12
|
+
import { mergeSx } from "../../../utils/styles.js";
|
|
12
13
|
import "localized-countries";
|
|
13
14
|
import "localized-countries/data/fr";
|
|
14
15
|
import "localized-countries/data/en";
|
|
@@ -32,6 +33,7 @@ import "mui-nested-menu";
|
|
|
32
33
|
import "react-resizable-panels";
|
|
33
34
|
import "react-papaparse";
|
|
34
35
|
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
36
|
+
import { parametersStyles } from "../parameters-style.js";
|
|
35
37
|
import "../common/widget/parameter-line-slider.js";
|
|
36
38
|
import "../common/contingency-table/contingency-table.js";
|
|
37
39
|
import "../common/contingency-table/columns-definitions.js";
|
|
@@ -217,14 +219,13 @@ function SensitivityParametersSelector({
|
|
|
217
219
|
Tab,
|
|
218
220
|
{
|
|
219
221
|
value: subIndex,
|
|
220
|
-
sx:
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
},
|
|
222
|
+
sx: mergeSx(
|
|
223
|
+
{
|
|
224
|
+
fontWeight: "bold",
|
|
225
|
+
textTransform: "capitalize"
|
|
226
|
+
},
|
|
227
|
+
subTabHasError[subIndex] && subIndex !== subTabValue ? parametersStyles.tabWithError : void 0
|
|
228
|
+
),
|
|
228
229
|
label: /* @__PURE__ */ jsx(FormattedMessage, { id: subTab.label })
|
|
229
230
|
},
|
|
230
231
|
subTab.label
|
|
@@ -40,7 +40,7 @@ function ShortCircuitIccClusterTableCell({
|
|
|
40
40
|
column,
|
|
41
41
|
inputsDisabled
|
|
42
42
|
}) {
|
|
43
|
-
return /* @__PURE__ */ jsxs(TableCell, {
|
|
43
|
+
return /* @__PURE__ */ jsxs(TableCell, { children: [
|
|
44
44
|
column.dataKey === SHORT_CIRCUIT_ICC_CLUSTER_ACTIVE && /* @__PURE__ */ jsx(SwitchInput, { formProps: { size: "small" }, name: `${formName}[${rowIndex}].${column.dataKey}` }),
|
|
45
45
|
column.dataKey === SHORT_CIRCUIT_ICC_CLUSTER_FILTERS && /* @__PURE__ */ jsx(
|
|
46
46
|
DirectoryItemsInput,
|
|
@@ -13,6 +13,7 @@ export declare enum ShortCircuitParametersTabValues {
|
|
|
13
13
|
STUDY_AREA = "StudyArea",
|
|
14
14
|
POWER_ELECTRONICS = "PowerElectronics"
|
|
15
15
|
}
|
|
16
|
+
export declare const TAB_FIELDS: Record<ShortCircuitParametersTabValues, string[]>;
|
|
16
17
|
export declare const getCommonShortCircuitParametersFormSchema: () => yup.ObjectSchema<{
|
|
17
18
|
commonParameters: {
|
|
18
19
|
withFeederResult: NonNullable<boolean | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as yup from "yup";
|
|
2
|
-
import { SHORT_CIRCUIT_POWER_ELECTRONICS_MATERIALS, SHORT_CIRCUIT_POWER_ELECTRONICS_CLUSTERS,
|
|
2
|
+
import { SHORT_CIRCUIT_MODEL_POWER_ELECTRONICS, SHORT_CIRCUIT_POWER_ELECTRONICS_MATERIALS, SHORT_CIRCUIT_POWER_ELECTRONICS_CLUSTERS, NODE_CLUSTER_FILTER_IDS, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_IN_CALCULATION_CLUSTER, STARTED_GENERATORS_IN_CALCULATION_CLUSTER_THRESHOLD, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER, STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER_THRESHOLD, SHORT_CIRCUIT_PREDEFINED_PARAMS, NODE_CLUSTER, SHORT_CIRCUIT_INITIAL_VOLTAGE_PROFILE_MODE, InitialVoltage, SHORT_CIRCUIT_WITH_NEUTRAL_POSITION, SHORT_CIRCUIT_WITH_SHUNT_COMPENSATORS, SHORT_CIRCUIT_WITH_VSC_CONVERTER_STATIONS, SHORT_CIRCUIT_WITH_LOADS, SHORT_CIRCUIT_WITH_FEEDER_RESULT } from "./constants.js";
|
|
3
3
|
import "react/jsx-runtime";
|
|
4
4
|
import "@mui/material";
|
|
5
5
|
import "@mui/icons-material";
|
|
@@ -35,7 +35,7 @@ import "mui-nested-menu";
|
|
|
35
35
|
import "react-resizable-panels";
|
|
36
36
|
import "react-papaparse";
|
|
37
37
|
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
38
|
-
import {
|
|
38
|
+
import { SPECIFIC_PARAMETERS, PROVIDER, COMMON_PARAMETERS } from "../common/constants.js";
|
|
39
39
|
import "../common/widget/parameter-line-slider.js";
|
|
40
40
|
import "../common/contingency-table/contingency-table.js";
|
|
41
41
|
import "../common/contingency-table/columns-definitions.js";
|
|
@@ -48,6 +48,30 @@ var ShortCircuitParametersTabValues = /* @__PURE__ */ ((ShortCircuitParametersTa
|
|
|
48
48
|
ShortCircuitParametersTabValues2["POWER_ELECTRONICS"] = "PowerElectronics";
|
|
49
49
|
return ShortCircuitParametersTabValues2;
|
|
50
50
|
})(ShortCircuitParametersTabValues || {});
|
|
51
|
+
const TAB_FIELDS = {
|
|
52
|
+
[
|
|
53
|
+
"General"
|
|
54
|
+
/* GENERAL */
|
|
55
|
+
]: [PROVIDER, SHORT_CIRCUIT_PREDEFINED_PARAMS, COMMON_PARAMETERS],
|
|
56
|
+
[
|
|
57
|
+
"StudyArea"
|
|
58
|
+
/* STUDY_AREA */
|
|
59
|
+
]: [
|
|
60
|
+
`${SPECIFIC_PARAMETERS}.${NODE_CLUSTER_FILTER_IDS}`,
|
|
61
|
+
`${SPECIFIC_PARAMETERS}.${SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_IN_CALCULATION_CLUSTER}`,
|
|
62
|
+
`${SPECIFIC_PARAMETERS}.${STARTED_GENERATORS_IN_CALCULATION_CLUSTER_THRESHOLD}`,
|
|
63
|
+
`${SPECIFIC_PARAMETERS}.${SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER}`,
|
|
64
|
+
`${SPECIFIC_PARAMETERS}.${STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER_THRESHOLD}`
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
"PowerElectronics"
|
|
68
|
+
/* POWER_ELECTRONICS */
|
|
69
|
+
]: [
|
|
70
|
+
`${SPECIFIC_PARAMETERS}.${SHORT_CIRCUIT_MODEL_POWER_ELECTRONICS}`,
|
|
71
|
+
`${SPECIFIC_PARAMETERS}.${SHORT_CIRCUIT_POWER_ELECTRONICS_MATERIALS}`,
|
|
72
|
+
`${SPECIFIC_PARAMETERS}.${SHORT_CIRCUIT_POWER_ELECTRONICS_CLUSTERS}`
|
|
73
|
+
]
|
|
74
|
+
};
|
|
51
75
|
const getCommonShortCircuitParametersFormSchema = () => {
|
|
52
76
|
return yup.object().shape({
|
|
53
77
|
[COMMON_PARAMETERS]: yup.object().shape({
|
|
@@ -289,6 +313,7 @@ const formatShortCircuitSpecificParameters = (specificParametersDescriptionForPr
|
|
|
289
313
|
};
|
|
290
314
|
export {
|
|
291
315
|
ShortCircuitParametersTabValues,
|
|
316
|
+
TAB_FIELDS,
|
|
292
317
|
formatShortCircuitSpecificParameters,
|
|
293
318
|
getCommonShortCircuitParametersFormSchema,
|
|
294
319
|
getDefaultShortCircuitSpecificParamsValues,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useForm } from "react-hook-form";
|
|
2
2
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
3
|
-
import { useState,
|
|
3
|
+
import { useState, useMemo, useCallback, useEffect } from "react";
|
|
4
4
|
import * as yup from "yup";
|
|
5
5
|
import "react/jsx-runtime";
|
|
6
6
|
import "@mui/material";
|
|
@@ -34,7 +34,7 @@ import "../../../components/ui/snackbarProvider/SnackbarProvider.js";
|
|
|
34
34
|
import "mui-nested-menu";
|
|
35
35
|
import "react-resizable-panels";
|
|
36
36
|
import "react-papaparse";
|
|
37
|
-
import { SHORT_CIRCUIT_PREDEFINED_PARAMS, PredefinedParameters, SHORT_CIRCUIT_WITH_LOADS, SHORT_CIRCUIT_WITH_VSC_CONVERTER_STATIONS, SHORT_CIRCUIT_WITH_SHUNT_COMPENSATORS, SHORT_CIRCUIT_WITH_NEUTRAL_POSITION, SHORT_CIRCUIT_INITIAL_VOLTAGE_PROFILE_MODE, InitialVoltage, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_IN_CALCULATION_CLUSTER, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER, SHORT_CIRCUIT_VOLTAGE_RANGES
|
|
37
|
+
import { SHORT_CIRCUIT_PREDEFINED_PARAMS, PredefinedParameters, SHORT_CIRCUIT_WITH_LOADS, SHORT_CIRCUIT_WITH_VSC_CONVERTER_STATIONS, SHORT_CIRCUIT_WITH_SHUNT_COMPENSATORS, SHORT_CIRCUIT_WITH_NEUTRAL_POSITION, SHORT_CIRCUIT_INITIAL_VOLTAGE_PROFILE_MODE, InitialVoltage, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_IN_CALCULATION_CLUSTER, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER, SHORT_CIRCUIT_VOLTAGE_RANGES } from "./constants.js";
|
|
38
38
|
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
39
39
|
import { getNameElementEditorSchema, getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
|
|
40
40
|
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
@@ -42,7 +42,8 @@ import { SPECIFIC_PARAMETERS, COMMON_PARAMETERS, VERSION_PARAMETER, PROVIDER } f
|
|
|
42
42
|
import "../common/widget/parameter-line-slider.js";
|
|
43
43
|
import "../common/contingency-table/contingency-table.js";
|
|
44
44
|
import "../common/contingency-table/columns-definitions.js";
|
|
45
|
-
import {
|
|
45
|
+
import { useTabs } from "../common/hook/use-tabs.js";
|
|
46
|
+
import { getDefaultShortCircuitSpecificParamsValues, getSpecificShortCircuitParametersFormSchema, getCommonShortCircuitParametersFormSchema, getShortCircuitSpecificParametersValues, formatShortCircuitSpecificParameters, ShortCircuitParametersTabValues, TAB_FIELDS } from "./short-circuit-parameters-utils.js";
|
|
46
47
|
const useShortCircuitParametersForm = ({
|
|
47
48
|
parametersBackend,
|
|
48
49
|
parametersUuid,
|
|
@@ -51,15 +52,8 @@ const useShortCircuitParametersForm = ({
|
|
|
51
52
|
}) => {
|
|
52
53
|
const { params, updateParameters, specificParamsDescription } = parametersBackend;
|
|
53
54
|
const provider = params?.provider;
|
|
54
|
-
const [selectedTab, setSelectedTab] = useState(
|
|
55
|
-
ShortCircuitParametersTabValues.GENERAL
|
|
56
|
-
);
|
|
57
|
-
const [tabIndexesWithError, setTabIndexesWithError] = useState([]);
|
|
58
55
|
const [paramsLoaded, setParamsLoaded] = useState(false);
|
|
59
56
|
const { snackError } = useSnackMessage();
|
|
60
|
-
const handleTabChange = useCallback((event, newValue) => {
|
|
61
|
-
setSelectedTab(newValue);
|
|
62
|
-
}, []);
|
|
63
57
|
const specificParametersDescriptionForProvider = useMemo(() => {
|
|
64
58
|
return provider && specificParamsDescription?.[provider] ? specificParamsDescription[provider] : [];
|
|
65
59
|
}, [provider, specificParamsDescription]);
|
|
@@ -181,20 +175,17 @@ const useShortCircuitParametersForm = ({
|
|
|
181
175
|
},
|
|
182
176
|
[provider, snackError, specificParametersDescriptionForProvider]
|
|
183
177
|
);
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
},
|
|
196
|
-
[selectedTab]
|
|
197
|
-
);
|
|
178
|
+
const {
|
|
179
|
+
selectedTab,
|
|
180
|
+
onTabChange: handleTabChange,
|
|
181
|
+
tabsWithError: tabIndexesWithError,
|
|
182
|
+
onError: onValidationError
|
|
183
|
+
} = useTabs({
|
|
184
|
+
defaultTab: ShortCircuitParametersTabValues.GENERAL,
|
|
185
|
+
tabEnum: ShortCircuitParametersTabValues,
|
|
186
|
+
errors: formMethods.formState.errors,
|
|
187
|
+
tabFields: TAB_FIELDS
|
|
188
|
+
});
|
|
198
189
|
const onSaveInline = useCallback(
|
|
199
190
|
(formData) => {
|
|
200
191
|
const data = formatNewParams(formData);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useForm } from "react-hook-form";
|
|
2
2
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
3
|
-
import { useState,
|
|
3
|
+
import { useState, useMemo, useCallback, useEffect } from "react";
|
|
4
4
|
import * as yup from "yup";
|
|
5
5
|
import "react/jsx-runtime";
|
|
6
6
|
import "@mui/material";
|
|
@@ -38,12 +38,17 @@ import "../../../components/ui/snackbarProvider/SnackbarProvider.js";
|
|
|
38
38
|
import "mui-nested-menu";
|
|
39
39
|
import "react-resizable-panels";
|
|
40
40
|
import "react-papaparse";
|
|
41
|
-
import {
|
|
41
|
+
import { VARIABLE_SHUNT_COMPENSATORS, SHUNT_COMPENSATORS_SELECTION_TYPE, VARIABLE_TRANSFORMERS, TRANSFORMERS_SELECTION_TYPE, VARIABLE_Q_GENERATORS, GENERATORS_SELECTION_TYPE, VOLTAGE_LIMITS_DEFAULT, HIGH_VOLTAGE_LIMIT, LOW_VOLTAGE_LIMIT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, REACTIVE_SLACKS_THRESHOLD, UPDATE_BUS_VOLTAGE, GENERAL_APPLY_MODIFICATIONS, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, DEFAULT_GENERAL_APPLY_MODIFICATIONS } from "./constants.js";
|
|
42
42
|
import "../../../components/composite/filter/HeaderFilterForm.js";
|
|
43
43
|
import { getNameElementEditorSchema, getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
|
|
44
|
-
import { fromVoltageInitParametersFormToParamValues, fromVoltageInitParamsDataToFormValues, fromStudyVoltageInitParamsDataToFormValues } from "./voltage-init-form-utils.js";
|
|
44
|
+
import { TAB_FIELDS, fromVoltageInitParametersFormToParamValues, fromVoltageInitParamsDataToFormValues, fromStudyVoltageInitParamsDataToFormValues } from "./voltage-init-form-utils.js";
|
|
45
45
|
import "react-dom";
|
|
46
46
|
import { SELECTED } from "../../../components/composite/dnd-table/dnd-table.type.js";
|
|
47
|
+
import "../common/parameter-layout/parameter-layout-provider.js";
|
|
48
|
+
import "../common/widget/parameter-line-slider.js";
|
|
49
|
+
import "../common/contingency-table/contingency-table.js";
|
|
50
|
+
import "../common/contingency-table/columns-definitions.js";
|
|
51
|
+
import { useTabs } from "../common/hook/use-tabs.js";
|
|
47
52
|
const useVoltageInitParametersForm = ({
|
|
48
53
|
parametersUuid,
|
|
49
54
|
name,
|
|
@@ -51,13 +56,8 @@ const useVoltageInitParametersForm = ({
|
|
|
51
56
|
studyUuid,
|
|
52
57
|
parameters
|
|
53
58
|
}) => {
|
|
54
|
-
const [selectedTab, setSelectedTab] = useState(VoltageInitTabValues.GENERAL);
|
|
55
59
|
const [paramsLoading, setParamsLoading] = useState(false);
|
|
56
|
-
const [tabIndexesWithError, setTabIndexesWithError] = useState([]);
|
|
57
60
|
const { snackError } = useSnackMessage();
|
|
58
|
-
const handleTabChange = useCallback((_event, newValue) => {
|
|
59
|
-
setSelectedTab(newValue);
|
|
60
|
-
}, []);
|
|
61
61
|
const formSchema = useMemo(() => {
|
|
62
62
|
return yup.object({
|
|
63
63
|
[VoltageInitTabValues.GENERAL]: yup.object().shape({
|
|
@@ -140,16 +140,17 @@ const useVoltageInitParametersForm = ({
|
|
|
140
140
|
resolver: yupResolver(formSchema)
|
|
141
141
|
});
|
|
142
142
|
const { reset } = formMethods;
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
143
|
+
const {
|
|
144
|
+
selectedTab,
|
|
145
|
+
onTabChange: handleTabChange,
|
|
146
|
+
tabsWithError: tabIndexesWithError,
|
|
147
|
+
onError: onValidationError
|
|
148
|
+
} = useTabs({
|
|
149
|
+
defaultTab: VoltageInitTabValues.GENERAL,
|
|
150
|
+
tabEnum: VoltageInitTabValues,
|
|
151
|
+
errors: formMethods.formState.errors,
|
|
152
|
+
tabFields: TAB_FIELDS
|
|
153
|
+
});
|
|
153
154
|
const onSaveInline = useCallback(
|
|
154
155
|
(formData) => {
|
|
155
156
|
if (studyUuid) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { VoltageInitParameters, VoltageInitStudyParameters } from './voltage-init.type';
|
|
2
|
+
import { VoltageInitTabValues as TabValues } from './constants';
|
|
3
|
+
export declare const TAB_FIELDS: Record<TabValues, string[]>;
|
|
2
4
|
export declare const fromVoltageInitParametersFormToParamValues: (newParams: Record<string, any>) => VoltageInitStudyParameters;
|
|
3
5
|
export declare const fromVoltageInitParamsDataToFormValues: (parameters: VoltageInitParameters) => Record<string, any>;
|
|
4
6
|
export declare const fromStudyVoltageInitParamsDataToFormValues: (parameters: VoltageInitStudyParameters) => Record<string, any>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EquipmentsSelectionType } from "./voltage-init.type.js";
|
|
2
|
-
import {
|
|
2
|
+
import { VoltageInitTabValues, TRANSFORMERS_SELECTION_TYPE, VARIABLE_TRANSFORMERS, SHUNT_COMPENSATORS_SELECTION_TYPE, VARIABLE_SHUNT_COMPENSATORS, GENERATORS_SELECTION_TYPE, VARIABLE_Q_GENERATORS, VOLTAGE_LIMITS_MODIFICATION, VOLTAGE_LIMITS_DEFAULT, DEFAULT_UPDATE_BUS_VOLTAGE, HIGH_VOLTAGE_LIMIT, LOW_VOLTAGE_LIMIT, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, REACTIVE_SLACKS_THRESHOLD, UPDATE_BUS_VOLTAGE, GENERAL_APPLY_MODIFICATIONS, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_GENERAL_APPLY_MODIFICATIONS, PRIORITY } from "./constants.js";
|
|
3
3
|
import "react/jsx-runtime";
|
|
4
4
|
import "@mui/material";
|
|
5
5
|
import "@mui/icons-material";
|
|
@@ -35,6 +35,18 @@ import "react-resizable-panels";
|
|
|
35
35
|
import "react-papaparse";
|
|
36
36
|
import "react-dom";
|
|
37
37
|
import { SELECTED } from "../../../components/composite/dnd-table/dnd-table.type.js";
|
|
38
|
+
const TAB_FIELDS = {
|
|
39
|
+
[VoltageInitTabValues.GENERAL]: [VoltageInitTabValues.GENERAL],
|
|
40
|
+
[VoltageInitTabValues.VOLTAGE_LIMITS]: [VOLTAGE_LIMITS_MODIFICATION, VOLTAGE_LIMITS_DEFAULT],
|
|
41
|
+
[VoltageInitTabValues.EQUIPMENTS_SELECTION]: [
|
|
42
|
+
TRANSFORMERS_SELECTION_TYPE,
|
|
43
|
+
VARIABLE_TRANSFORMERS,
|
|
44
|
+
SHUNT_COMPENSATORS_SELECTION_TYPE,
|
|
45
|
+
VARIABLE_SHUNT_COMPENSATORS,
|
|
46
|
+
GENERATORS_SELECTION_TYPE,
|
|
47
|
+
VARIABLE_Q_GENERATORS
|
|
48
|
+
]
|
|
49
|
+
};
|
|
38
50
|
const fromVoltageInitParametersFormToParamValues = (newParams) => {
|
|
39
51
|
return {
|
|
40
52
|
applyModifications: newParams?.[VoltageInitTabValues.GENERAL]?.[GENERAL_APPLY_MODIFICATIONS] ?? DEFAULT_GENERAL_APPLY_MODIFICATIONS,
|
|
@@ -209,6 +221,7 @@ const fromStudyVoltageInitParamsDataToFormValues = (parameters) => {
|
|
|
209
221
|
};
|
|
210
222
|
};
|
|
211
223
|
export {
|
|
224
|
+
TAB_FIELDS,
|
|
212
225
|
fromStudyVoltageInitParamsDataToFormValues,
|
|
213
226
|
fromVoltageInitParametersFormToParamValues,
|
|
214
227
|
fromVoltageInitParamsDataToFormValues
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Stack, Tabs, Tab, Grid2 } from "@mui/material";
|
|
3
3
|
import { FormattedMessage } from "react-intl";
|
|
4
|
-
import { parametersStyles, getTabStyle
|
|
4
|
+
import { parametersStyles, getTabStyle } from "../parameters-style.js";
|
|
5
5
|
import "@mui/icons-material";
|
|
6
6
|
import "react";
|
|
7
7
|
import { TabPanel } from "../common/parameters.js";
|
|
@@ -47,43 +47,32 @@ function VoltageInitParametersForm({
|
|
|
47
47
|
}) {
|
|
48
48
|
const { selectedTab, handleTabChange, tabIndexesWithError } = voltageInitMethods;
|
|
49
49
|
return /* @__PURE__ */ jsxs(Stack, { sx: parametersStyles.scrollableGrid, children: [
|
|
50
|
-
/* @__PURE__ */ jsxs(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
/* @__PURE__ */ jsx(
|
|
77
|
-
Tab,
|
|
78
|
-
{
|
|
79
|
-
label: /* @__PURE__ */ jsx(FormattedMessage, { id: "EquipmentSelection" }),
|
|
80
|
-
value: VoltageInitTabValues.EQUIPMENTS_SELECTION,
|
|
81
|
-
sx: getTabStyle(tabIndexesWithError, VoltageInitTabValues.EQUIPMENTS_SELECTION)
|
|
82
|
-
}
|
|
83
|
-
)
|
|
84
|
-
]
|
|
85
|
-
}
|
|
86
|
-
),
|
|
50
|
+
/* @__PURE__ */ jsxs(Tabs, { value: selectedTab, variant: "scrollable", onChange: handleTabChange, children: [
|
|
51
|
+
/* @__PURE__ */ jsx(
|
|
52
|
+
Tab,
|
|
53
|
+
{
|
|
54
|
+
label: /* @__PURE__ */ jsx(FormattedMessage, { id: "VoltageInitParametersGeneralTabLabel" }),
|
|
55
|
+
value: VoltageInitTabValues.GENERAL,
|
|
56
|
+
sx: getTabStyle(tabIndexesWithError, VoltageInitTabValues.GENERAL)
|
|
57
|
+
}
|
|
58
|
+
),
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
Tab,
|
|
61
|
+
{
|
|
62
|
+
label: /* @__PURE__ */ jsx(FormattedMessage, { id: "VoltageLimits" }),
|
|
63
|
+
value: VoltageInitTabValues.VOLTAGE_LIMITS,
|
|
64
|
+
sx: getTabStyle(tabIndexesWithError, VoltageInitTabValues.VOLTAGE_LIMITS)
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
Tab,
|
|
69
|
+
{
|
|
70
|
+
label: /* @__PURE__ */ jsx(FormattedMessage, { id: "EquipmentSelection" }),
|
|
71
|
+
value: VoltageInitTabValues.EQUIPMENTS_SELECTION,
|
|
72
|
+
sx: getTabStyle(tabIndexesWithError, VoltageInitTabValues.EQUIPMENTS_SELECTION)
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
] }),
|
|
87
76
|
/* @__PURE__ */ jsxs(Grid2, { container: true, children: [
|
|
88
77
|
/* @__PURE__ */ jsx(TabPanel, { value: selectedTab, index: VoltageInitTabValues.GENERAL, children: /* @__PURE__ */ jsx(GeneralParameters, { withApplyModifications: !!showActionsButtons }) }),
|
|
89
78
|
/* @__PURE__ */ jsx(TabPanel, { value: selectedTab, index: VoltageInitTabValues.VOLTAGE_LIMITS, children: /* @__PURE__ */ jsx(VoltageLimitsParameters, {}) }),
|
|
@@ -104,7 +104,7 @@ function VoltageInitParametersInLine({
|
|
|
104
104
|
},
|
|
105
105
|
selectParameterHandler: handleLoadParameters,
|
|
106
106
|
resetHandler: resetVoltageInitParameters,
|
|
107
|
-
validateHandler: handleSubmit(voltageInitMethods.onSaveInline),
|
|
107
|
+
validateHandler: handleSubmit(voltageInitMethods.onSaveInline, voltageInitMethods.onValidationError),
|
|
108
108
|
children: /* @__PURE__ */ jsx(VoltageInitParametersForm, { voltageInitMethods, showActionsButtons: true })
|
|
109
109
|
}
|
|
110
110
|
)
|
|
@@ -44,7 +44,9 @@ import "../../parameters/loadflow/load-flow-parameters-context.js";
|
|
|
44
44
|
import "../../parameters/loadflow/load-flow-advanced-parameters.js";
|
|
45
45
|
import "../../parameters/loadflow/load-flow-parameters-content.js";
|
|
46
46
|
import "../../parameters/short-circuit/short-circuit-parameters-content.js";
|
|
47
|
+
import "../../parameters/voltage-init/voltage-init-form-utils.js";
|
|
47
48
|
import "react-dom";
|
|
49
|
+
import "../../parameters/security-analysis/security-analysis-parameters-utils.js";
|
|
48
50
|
import "../../parameters/sensi/utils.js";
|
|
49
51
|
import "../../parameters/sensi/columns-definitions.js";
|
|
50
52
|
import "../../parameters/dynamic-simulation/use-dynamic-simulation-parameters-form.js";
|
package/dist/index.js
CHANGED
|
@@ -227,6 +227,7 @@ import { CONTINGENCIES_LIST_INFOS, CONTINGENCIES_START_TIME, SCENARIO_DURATION }
|
|
|
227
227
|
import { DynamicSecurityAnalysisInline } from "./features/parameters/dynamic-security-analysis/dynamic-security-analysis-inline.js";
|
|
228
228
|
import { ACCURACY, ACTIVE, CALCULATION_TYPE, LOADS_VARIATIONS, LOAD_FILTERS, LOAD_INCREASE_START_TIME, LOAD_INCREASE_STOP_TIME, LOAD_MODELS_RULE, MARGIN_CALCULATION_START_TIME, START_TIME, STOP_TIME, VARIATION } from "./features/parameters/dynamic-margin-calculation/constants.js";
|
|
229
229
|
import { DynamicMarginCalculationInline } from "./features/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js";
|
|
230
|
+
import { getTabIndicatorStyle, getTabStyle, parametersStyles } from "./features/parameters/parameters-style.js";
|
|
230
231
|
import { filledTextField, italicFontTextField, standardTextField } from "./features/network-modifications/common/form.utils.js";
|
|
231
232
|
import { PropertiesForm } from "./features/network-modifications/common/properties/PropertiesForm.js";
|
|
232
233
|
import { PropertyForm } from "./features/network-modifications/common/properties/PropertyForm.js";
|
|
@@ -1438,6 +1439,8 @@ export {
|
|
|
1438
1439
|
getStudyUrlWithNodeUuid,
|
|
1439
1440
|
getStudyUrlWithNodeUuidAndRootNetworkUuid,
|
|
1440
1441
|
getSystemLanguage,
|
|
1442
|
+
getTabIndicatorStyle,
|
|
1443
|
+
getTabStyle,
|
|
1441
1444
|
getUser,
|
|
1442
1445
|
getUserToken,
|
|
1443
1446
|
getVoltageInitParameters,
|
|
@@ -1528,6 +1531,7 @@ export {
|
|
|
1528
1531
|
onlyStartedGeneratorsOptions,
|
|
1529
1532
|
parametersEn,
|
|
1530
1533
|
parametersFr,
|
|
1534
|
+
parametersStyles,
|
|
1531
1535
|
parseError,
|
|
1532
1536
|
parseIntData,
|
|
1533
1537
|
processConfigEn,
|