@gridsuite/commons-ui 0.166.0 → 0.167.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/components/dnd-table/dnd-table-bottom-right-buttons.js +2 -2
  2. package/dist/components/dnd-table/dnd-table.d.ts +1 -2
  3. package/dist/components/dnd-table/dnd-table.js +2 -0
  4. package/dist/components/dnd-table/dnd-table.type.d.ts +6 -1
  5. package/dist/components/dnd-table/dnd-table.type.js +1 -0
  6. package/dist/components/index.js +15 -0
  7. package/dist/components/parameters/common/ProviderParam.js +2 -2
  8. package/dist/components/parameters/common/parameter-dnd-table-field.d.ts +9 -0
  9. package/dist/components/parameters/common/parameter-dnd-table-field.js +85 -0
  10. package/dist/components/parameters/common/parameter-field.d.ts +15 -0
  11. package/dist/components/parameters/{loadflow/load-flow-parameter-field.js → common/parameter-field.js} +7 -13
  12. package/dist/components/parameters/dynamic-margin-calculation/constants.d.ts +18 -0
  13. package/dist/components/parameters/dynamic-margin-calculation/constants.js +26 -0
  14. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-dialog.d.ts +6 -0
  15. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-dialog.js +1 -0
  16. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-form.d.ts +9 -0
  17. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-form.js +95 -0
  18. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.d.ts +10 -0
  19. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js +176 -0
  20. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.d.ts +10 -0
  21. package/dist/components/parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js +8 -0
  22. package/dist/components/parameters/dynamic-margin-calculation/index.d.ts +8 -0
  23. package/dist/components/parameters/dynamic-margin-calculation/index.js +17 -0
  24. package/dist/components/parameters/dynamic-margin-calculation/loads-variations-parameters.d.ts +29 -0
  25. package/dist/components/parameters/dynamic-margin-calculation/loads-variations-parameters.js +154 -0
  26. package/dist/components/parameters/dynamic-margin-calculation/time-delay-parameters.d.ts +24 -0
  27. package/dist/components/parameters/dynamic-margin-calculation/time-delay-parameters.js +62 -0
  28. package/dist/components/parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.d.ts +30 -0
  29. package/dist/components/parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.js +179 -0
  30. package/dist/components/parameters/index.d.ts +1 -0
  31. package/dist/components/parameters/index.js +15 -0
  32. package/dist/components/parameters/loadflow/load-flow-general-parameters.js +4 -4
  33. package/dist/index.js +22 -0
  34. package/dist/services/dynamic-margin-calculation.d.ts +5 -0
  35. package/dist/services/dynamic-margin-calculation.js +35 -0
  36. package/dist/services/index.d.ts +1 -0
  37. package/dist/services/index.js +4 -0
  38. package/dist/translations/en/businessErrorsEn.d.ts +2 -0
  39. package/dist/translations/en/businessErrorsEn.js +3 -1
  40. package/dist/translations/en/parameters.d.ts +20 -0
  41. package/dist/translations/en/parameters.js +22 -1
  42. package/dist/translations/fr/businessErrorsFr.d.ts +2 -0
  43. package/dist/translations/fr/businessErrorsFr.js +3 -1
  44. package/dist/translations/fr/parameters.d.ts +20 -0
  45. package/dist/translations/fr/parameters.js +22 -1
  46. package/dist/utils/index.js +3 -0
  47. package/dist/utils/types/dynamic-margin-calculation.type.d.ts +32 -0
  48. package/dist/utils/types/dynamic-margin-calculation.type.js +14 -0
  49. package/dist/utils/types/elementType.d.ts +1 -0
  50. package/dist/utils/types/elementType.js +1 -0
  51. package/dist/utils/types/index.d.ts +1 -0
  52. package/dist/utils/types/index.js +3 -0
  53. package/dist/utils/types/parameters.type.d.ts +2 -1
  54. package/package.json +1 -1
  55. package/dist/components/parameters/loadflow/load-flow-parameter-field.d.ts +0 -19
@@ -0,0 +1,179 @@
1
+ import { useForm } from "react-hook-form";
2
+ import { useMemo, useEffect, useState, useCallback } from "react";
3
+ import { yupResolver } from "@hookform/resolvers/yup";
4
+ import "../../../utils/yupConfig.js";
5
+ import { formSchema as formSchema$2, emptyFormData as emptyFormData$2 } from "./time-delay-parameters.js";
6
+ import { formSchema as formSchema$1, emptyFormData as emptyFormData$1 } from "./loads-variations-parameters.js";
7
+ import { ID } from "../../../utils/constants/filterConstant.js";
8
+ import "../../../utils/conversionUtils.js";
9
+ import "../../../utils/types/equipmentType.js";
10
+ import { isObjectEmpty } from "../../../utils/functions.js";
11
+ import "react/jsx-runtime";
12
+ import "@mui/icons-material";
13
+ import { PROVIDER } from "../common/constants.js";
14
+ import "@mui/material";
15
+ import "react-intl";
16
+ import "localized-countries";
17
+ import "localized-countries/data/fr";
18
+ import "localized-countries/data/en";
19
+ import "notistack";
20
+ import "../../inputs/reactHookForm/provider/CustomFormProvider.js";
21
+ import "../../dialogs/descriptionModificationDialog/DescriptionModificationDialog.js";
22
+ import "../../dialogs/elementSaveDialog/ElementSaveDialog.js";
23
+ import "../../treeViewFinder/TreeViewFinder.js";
24
+ import "../../overflowableText/OverflowableText.js";
25
+ import * as yup from "yup";
26
+ import "../../inputs/reactHookForm/agGridTable/BottomRightButtons.js";
27
+ import "../../customAGGrid/customAggrid.js";
28
+ import "ag-grid-community";
29
+ import "react-papaparse";
30
+ import "react-csv-downloader";
31
+ import "../../inputs/reactHookForm/numbers/RangeInput.js";
32
+ import "@material-symbols/svg-400/outlined/left_panel_open.svg?react";
33
+ import "@material-symbols/svg-400/outlined/arrows_output.svg?react";
34
+ import "@material-symbols/svg-400/outlined/left_panel_close.svg?react";
35
+ import "@material-symbols/svg-400/outlined/add_notes.svg?react";
36
+ import "@react-querybuilder/material";
37
+ import "../../filter/expert/expertFilterConstants.js";
38
+ import "../../inputs/reactQueryBuilder/CustomReactQueryBuilder.js";
39
+ import "uuid";
40
+ import "../../inputs/reactQueryBuilder/PropertyValueEditor.js";
41
+ import "react-querybuilder";
42
+ import "../common/widget/parameter-line-slider.js";
43
+ import "../common/limitreductions/columns-definitions.js";
44
+ import "../../filter/HeaderFilterForm.js";
45
+ import { getNameElementEditorSchema, getNameElementEditorEmptyFormData } from "../common/name-element-editor/name-element-editor-utils.js";
46
+ import { LOADS_VARIATIONS, LOAD_MODELS_RULE, ACCURACY, CALCULATION_TYPE, LOAD_INCREASE_STOP_TIME, LOAD_INCREASE_START_TIME, MARGIN_CALCULATION_START_TIME, STOP_TIME, START_TIME } from "./constants.js";
47
+ import { TabValues } from "./dynamic-margin-calculation.type.js";
48
+ const formSchema = yup.object().shape({
49
+ [PROVIDER]: yup.string().required(),
50
+ [TabValues.TAB_TIME_DELAY]: formSchema$2,
51
+ [TabValues.TAB_LOADS_VARIATIONS]: formSchema$1
52
+ });
53
+ const emptyFormData = {
54
+ [PROVIDER]: "",
55
+ [TabValues.TAB_TIME_DELAY]: emptyFormData$2,
56
+ [TabValues.TAB_LOADS_VARIATIONS]: emptyFormData$1
57
+ };
58
+ const toFormValues = (_params) => ({
59
+ [ID]: _params.id,
60
+ // not shown in form
61
+ [PROVIDER]: _params.provider,
62
+ [TabValues.TAB_TIME_DELAY]: {
63
+ [START_TIME]: _params.startTime,
64
+ [STOP_TIME]: _params.stopTime,
65
+ [MARGIN_CALCULATION_START_TIME]: _params.marginCalculationStartTime,
66
+ [LOAD_INCREASE_START_TIME]: _params.loadIncreaseStartTime,
67
+ [LOAD_INCREASE_STOP_TIME]: _params.loadIncreaseStopTime
68
+ },
69
+ [TabValues.TAB_LOADS_VARIATIONS]: {
70
+ [CALCULATION_TYPE]: _params.calculationType,
71
+ [ACCURACY]: _params.accuracy,
72
+ [LOAD_MODELS_RULE]: _params.loadModelsRule,
73
+ [LOADS_VARIATIONS]: _params.loadsVariations
74
+ }
75
+ });
76
+ const toParamsInfos = (_formData) => ({
77
+ id: _formData[ID],
78
+ provider: _formData[PROVIDER],
79
+ startTime: _formData[TabValues.TAB_TIME_DELAY][START_TIME],
80
+ stopTime: _formData[TabValues.TAB_TIME_DELAY][STOP_TIME],
81
+ marginCalculationStartTime: _formData[TabValues.TAB_TIME_DELAY][MARGIN_CALCULATION_START_TIME],
82
+ loadIncreaseStartTime: _formData[TabValues.TAB_TIME_DELAY][LOAD_INCREASE_START_TIME],
83
+ loadIncreaseStopTime: _formData[TabValues.TAB_TIME_DELAY][LOAD_INCREASE_STOP_TIME],
84
+ calculationType: _formData[TabValues.TAB_LOADS_VARIATIONS][CALCULATION_TYPE],
85
+ accuracy: _formData[TabValues.TAB_LOADS_VARIATIONS][ACCURACY],
86
+ loadModelsRule: _formData[TabValues.TAB_LOADS_VARIATIONS][LOAD_MODELS_RULE],
87
+ loadsVariations: _formData[TabValues.TAB_LOADS_VARIATIONS][LOADS_VARIATIONS]
88
+ });
89
+ function useTabs({
90
+ defaultTab,
91
+ tabEnum
92
+ }) {
93
+ const [tabValue, setTabValue] = useState(defaultTab);
94
+ const [tabValuesWithError, setTabValuesWithError] = useState([]);
95
+ const handleTabChange = useCallback((event, newValue) => {
96
+ setTabValue(newValue);
97
+ }, []);
98
+ const onError = useCallback(
99
+ (errors) => {
100
+ if (!errors || isObjectEmpty(errors)) {
101
+ return;
102
+ }
103
+ const tabsInError = [];
104
+ Object.values(tabEnum).forEach((tab) => {
105
+ if (errors?.[tab] && tab !== tabValue) {
106
+ tabsInError.push(tab);
107
+ }
108
+ });
109
+ if (tabsInError.includes(tabValue)) {
110
+ setTabValuesWithError(tabsInError.filter((errorTab) => errorTab !== tabValue));
111
+ } else if (tabsInError.length > 0) {
112
+ setTabValue(tabsInError[0]);
113
+ setTabValuesWithError(tabsInError.filter((errorTab, index, arr) => errorTab !== arr[0]));
114
+ }
115
+ },
116
+ [tabValue, tabEnum]
117
+ );
118
+ return {
119
+ selectedTab: tabValue,
120
+ tabsWithError: tabValuesWithError,
121
+ onTabChange: handleTabChange,
122
+ onError
123
+ };
124
+ }
125
+ function useDynamicMarginCalculationParametersForm({
126
+ providers,
127
+ params,
128
+ name: initialName,
129
+ description: initialDescription
130
+ }) {
131
+ const paramsLoaded = useMemo(() => !!params, [params]);
132
+ const formattedProviders = useMemo(
133
+ () => Object.entries(providers).map(([key, value]) => ({
134
+ id: key,
135
+ label: value
136
+ })),
137
+ [providers]
138
+ );
139
+ const returnFormSchema = useMemo(() => {
140
+ return initialName === null ? formSchema : formSchema.concat(getNameElementEditorSchema(initialName));
141
+ }, [initialName]);
142
+ const newEmptyFormData = useMemo(() => {
143
+ return {
144
+ ...initialName === null ? {} : getNameElementEditorEmptyFormData(initialName, initialDescription),
145
+ ...emptyFormData
146
+ };
147
+ }, [initialName, initialDescription]);
148
+ const returnFormMethods = useForm({
149
+ defaultValues: newEmptyFormData,
150
+ resolver: yupResolver(returnFormSchema)
151
+ });
152
+ const { reset } = returnFormMethods;
153
+ useEffect(() => {
154
+ if (params) {
155
+ console.log("xxx Resetting form with params:", params);
156
+ reset(toFormValues(params));
157
+ }
158
+ }, [params, paramsLoaded, reset]);
159
+ const { selectedTab, tabsWithError, onTabChange, onError } = useTabs({
160
+ defaultTab: TabValues.TAB_TIME_DELAY,
161
+ tabEnum: TabValues
162
+ });
163
+ return {
164
+ formMethods: returnFormMethods,
165
+ formSchema: returnFormSchema,
166
+ paramsLoaded,
167
+ formattedProviders,
168
+ /* tab-related handling */
169
+ selectedTab,
170
+ tabsWithError,
171
+ onTabChange,
172
+ onError
173
+ };
174
+ }
175
+ export {
176
+ toFormValues,
177
+ toParamsInfos,
178
+ useDynamicMarginCalculationParametersForm
179
+ };
@@ -12,3 +12,4 @@ export * from './voltage-init';
12
12
  export * from './pcc-min';
13
13
  export * from './security-analysis';
14
14
  export * from './sensi';
15
+ export * from './dynamic-margin-calculation';
@@ -37,8 +37,13 @@ import { SecurityAnalysisParametersDialog } from "./security-analysis/security-a
37
37
  import { SensitivityAnalysisParametersInline } from "./sensi/sensitivity-analysis-parameters-inline.js";
38
38
  import { SensitivityAnalysisParametersDialog } from "./sensi/sensitivity-analysis-parameters-dialog.js";
39
39
  import { COLUMNS_DEFINITIONS_HVDCS, COLUMNS_DEFINITIONS_INJECTIONS, COLUMNS_DEFINITIONS_INJECTIONS_SET, COLUMNS_DEFINITIONS_NODES, COLUMNS_DEFINITIONS_PSTS, EQUIPMENTS_IN_VOLTAGE_REGULATION_TYPES, HVDC_EQUIPMENT_TYPES, INJECTIONS_EQUIPMENT_TYPES, INJECTION_DISTRIBUTION_TYPES, MONITORED_BRANCHES_EQUIPMENT_TYPES, MONITORED_VOLTAGE_LEVELS_EQUIPMENT_TYPES, PSTS_EQUIPMENT_TYPES, SENSITIVITY_TYPES, SensiBranchesTabValues, SensiHvdcs, SensiInjection, SensiInjectionsSet, SensiNodes, SensiPsts, SensiTabValues } from "./sensi/columns-definitions.js";
40
+ 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";
41
+ import { DynamicMarginCalculationInline } from "./dynamic-margin-calculation/dynamic-margin-calculation-inline.js";
40
42
  export {
43
+ ACCURACY,
44
+ ACTIVE,
41
45
  BALANCE_TYPE,
46
+ CALCULATION_TYPE,
42
47
  CENTER_LABEL,
43
48
  COLUMNS_DEFINITIONS_HVDCS,
44
49
  COLUMNS_DEFINITIONS_INJECTIONS,
@@ -68,6 +73,7 @@ export {
68
73
  DEFAULT_UPDATE_BUS_VOLTAGE,
69
74
  DIAGONAL_LABEL,
70
75
  DISTRIBUTED_SLACK,
76
+ DynamicMarginCalculationInline,
71
77
  EQUIPMENTS_IN_VOLTAGE_REGULATION_TYPES,
72
78
  EquipmentsSelectionType,
73
79
  GENERAL,
@@ -86,6 +92,11 @@ export {
86
92
  LIMIT_DURATION_FORM,
87
93
  LIMIT_REDUCTIONS_FORM,
88
94
  LINE_FLOW_MODE,
95
+ LOADS_VARIATIONS,
96
+ LOAD_FILTERS,
97
+ LOAD_INCREASE_START_TIME,
98
+ LOAD_INCREASE_STOP_TIME,
99
+ LOAD_MODELS_RULE,
89
100
  LOW_VOLTAGE_LIMIT,
90
101
  LabelledButton,
91
102
  LimitReductionTableCell,
@@ -101,6 +112,7 @@ export {
101
112
  MAP_BASEMAP_MAPBOX,
102
113
  MAP_BASE_MAP,
103
114
  MAP_MANUAL_REFRESH,
115
+ MARGIN_CALCULATION_START_TIME,
104
116
  MAX_VALUE_ALLOWED_FOR_LIMIT_REDUCTION,
105
117
  MIN_VALUE_ALLOWED_FOR_LIMIT_REDUCTION,
106
118
  MONITORED_BRANCHES_EQUIPMENT_TYPES,
@@ -163,6 +175,8 @@ export {
163
175
  SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD,
164
176
  SHUNT_COMPENSATOR_VOLTAGE_CONTROL_ON,
165
177
  SPECIFIC_PARAMETERS,
178
+ START_TIME,
179
+ STOP_TIME,
166
180
  SUBSTATION_LAYOUT,
167
181
  SecurityAnalysisParametersDialog,
168
182
  SecurityAnalysisParametersInline,
@@ -189,6 +203,7 @@ export {
189
203
  VARIABLE_Q_GENERATORS,
190
204
  VARIABLE_SHUNT_COMPENSATORS,
191
205
  VARIABLE_TRANSFORMERS,
206
+ VARIATION,
192
207
  VERSION_PARAMETER,
193
208
  VOLTAGE_INIT_MODE,
194
209
  VOLTAGE_LEVEL,
@@ -1,6 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
2
  import { memo, createElement } from "react";
3
- import LoadFlowParameterField from "./load-flow-parameter-field.js";
3
+ import ParameterField from "../common/parameter-field.js";
4
4
  import { PHASE_SHIFTER_REGULATION_ON, DC, BALANCE_TYPE, COUNTRIES_TO_BALANCE, CONNECTED_MODE, HVDC_AC_EMULATION, VOLTAGE_INIT_MODE, USE_REACTIVE_LIMITS, TWT_SPLIT_SHUNT_ADMITTANCE, READ_SLACK_BUS, WRITE_SLACK_BUS, DISTRIBUTED_SLACK, SHUNT_COMPENSATOR_VOLTAGE_CONTROL_ON, DC_USE_TRANSFORMER_RATIO, DC_POWER_FACTOR } from "./constants.js";
5
5
  import { useLoadFlowContext } from "./use-load-flow-context.js";
6
6
  import { ParameterType } from "../../../utils/types/parameters.type.js";
@@ -153,14 +153,14 @@ const advancedParams = [
153
153
  function LoadFlowGeneralParameters({ provider, specificParams }) {
154
154
  const { showAdvancedLfParams, setShowAdvancedLfParams, showSpecificLfParams, setShowSpecificLfParams } = useLoadFlowContext();
155
155
  return /* @__PURE__ */ jsxs(Fragment, { children: [
156
- basicParams.map((item) => /* @__PURE__ */ createElement(LoadFlowParameterField, { id: COMMON_PARAMETERS, ...item, key: item.name })),
156
+ basicParams.map((item) => /* @__PURE__ */ createElement(ParameterField, { id: COMMON_PARAMETERS, ...item, key: item.name })),
157
157
  /* @__PURE__ */ jsx(
158
158
  ParameterGroup,
159
159
  {
160
160
  label: "showAdvancedParameters",
161
161
  state: showAdvancedLfParams,
162
162
  onClick: setShowAdvancedLfParams,
163
- children: showAdvancedLfParams && advancedParams.map((item) => /* @__PURE__ */ createElement(LoadFlowParameterField, { id: COMMON_PARAMETERS, ...item, key: item.name }))
163
+ children: showAdvancedLfParams && advancedParams.map((item) => /* @__PURE__ */ createElement(ParameterField, { id: COMMON_PARAMETERS, ...item, key: item.name }))
164
164
  }
165
165
  ),
166
166
  /* @__PURE__ */ jsx(
@@ -171,7 +171,7 @@ function LoadFlowGeneralParameters({ provider, specificParams }) {
171
171
  onClick: setShowSpecificLfParams,
172
172
  infoText: provider ?? "",
173
173
  disabled: !provider || !specificParams,
174
- children: showSpecificLfParams && specificParams?.map((item) => /* @__PURE__ */ createElement(LoadFlowParameterField, { id: SPECIFIC_PARAMETERS, ...item, key: item.name }))
174
+ children: showSpecificLfParams && specificParams?.map((item) => /* @__PURE__ */ createElement(ParameterField, { id: SPECIFIC_PARAMETERS, ...item, key: item.name }))
175
175
  }
176
176
  )
177
177
  ] });
package/dist/index.js CHANGED
@@ -175,6 +175,8 @@ import { SecurityAnalysisParametersDialog } from "./components/parameters/securi
175
175
  import { SensitivityAnalysisParametersInline } from "./components/parameters/sensi/sensitivity-analysis-parameters-inline.js";
176
176
  import { SensitivityAnalysisParametersDialog } from "./components/parameters/sensi/sensitivity-analysis-parameters-dialog.js";
177
177
  import { COLUMNS_DEFINITIONS_HVDCS, COLUMNS_DEFINITIONS_INJECTIONS, COLUMNS_DEFINITIONS_INJECTIONS_SET, COLUMNS_DEFINITIONS_NODES, COLUMNS_DEFINITIONS_PSTS, EQUIPMENTS_IN_VOLTAGE_REGULATION_TYPES, HVDC_EQUIPMENT_TYPES, INJECTIONS_EQUIPMENT_TYPES, INJECTION_DISTRIBUTION_TYPES, MONITORED_BRANCHES_EQUIPMENT_TYPES, MONITORED_VOLTAGE_LEVELS_EQUIPMENT_TYPES, PSTS_EQUIPMENT_TYPES, SENSITIVITY_TYPES, SensiBranchesTabValues, SensiHvdcs, SensiInjection, SensiInjectionsSet, SensiNodes, SensiPsts, SensiTabValues } from "./components/parameters/sensi/columns-definitions.js";
178
+ 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 "./components/parameters/dynamic-margin-calculation/constants.js";
179
+ import { DynamicMarginCalculationInline } from "./components/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js";
178
180
  import { CustomMenuItem, CustomNestedMenuItem } from "./components/menus/custom-nested-menu.js";
179
181
  import { OverflowableTableCell } from "./components/muiTable/OverflowableTableCell.js";
180
182
  import { OverflowableTableCellWithCheckbox } from "./components/muiTable/OverflowableTableCellWithCheckbox.js";
@@ -215,6 +217,7 @@ import { backendFetch, backendFetchFile, backendFetchJson, backendFetchText, get
215
217
  import { getVoltageInitParameters, getVoltageInitUrl } from "./services/voltage-init.js";
216
218
  import { fetchShortCircuitParameters, getShortCircuitSpecificParametersDescription, updateShortCircuitParameters } from "./services/short-circuit-analysis.js";
217
219
  import { fetchNetworkModification, updateModification } from "./services/networkModification.js";
220
+ import { fetchDynamicMarginCalculationParameters, fetchDynamicMarginCalculationProviders, updateDynamicMarginCalculationParameters } from "./services/dynamic-margin-calculation.js";
218
221
  import { equalsArray } from "./utils/algos.js";
219
222
  import { ActivePowerAdornment, AmpereAdornment, KiloAmpereAdornment, KilometerAdornment, MVAPowerAdornment, MicroSusceptanceAdornment, OhmAdornment, PercentageAdornment, ReactivePowerAdornment, SusceptanceAdornment, VoltageAdornment } from "./utils/constants/adornments.js";
220
223
  import { FetchStatus } from "./utils/constants/fetchStatus.js";
@@ -246,6 +249,7 @@ import { FieldType } from "./utils/types/fieldType.js";
246
249
  import { ParameterType } from "./utils/types/parameters.type.js";
247
250
  import { SolverTypeInfos } from "./utils/types/dynamic-simulation.type.js";
248
251
  import { DistributionType, SensitivityType } from "./utils/types/sensitivity-analysis.type.js";
252
+ import { CalculationType, LoadModelsRule } from "./utils/types/dynamic-margin-calculation.type.js";
249
253
  import { getIdOrSelf, notNull, notUndefined, parseIntData, removeNullFields, sanitizeString } from "./utils/ts-utils.js";
250
254
  import { toNumber, validateValueIsANumber } from "./utils/validation-functions.js";
251
255
  import "./utils/yupConfig.js";
@@ -309,6 +313,8 @@ import { parametersFr } from "./translations/fr/parameters.js";
309
313
  import { useUniqueNameValidationFr } from "./translations/fr/use-unique-name-validation-fr.js";
310
314
  import * as yup from "yup";
311
315
  export {
316
+ ACCURACY,
317
+ ACTIVE,
312
318
  ALL_EQUIPMENTS,
313
319
  AMPERE,
314
320
  AboutDialog,
@@ -333,6 +339,7 @@ export {
333
339
  BooleanNullableCellRenderer,
334
340
  BottomRightButtons,
335
341
  BusBar,
342
+ CALCULATION_TYPE,
336
343
  CENTER_LABEL,
337
344
  COLUMNS_DEFINITIONS_HVDCS,
338
345
  COLUMNS_DEFINITIONS_INJECTIONS,
@@ -353,6 +360,7 @@ export {
353
360
  CONVERTERS_MODE_OPTIONS,
354
361
  COUNTRIES_TO_BALANCE,
355
362
  CUSTOM_AGGRID_THEME,
363
+ CalculationType,
356
364
  CancelButton,
357
365
  CardErrorBoundary,
358
366
  CheckBoxList,
@@ -411,6 +419,7 @@ export {
411
419
  DndTableAddRowsDialog,
412
420
  DndTableBottomLeftButtons,
413
421
  DndTableBottomRightButtons,
422
+ DynamicMarginCalculationInline,
414
423
  ENERGY_SOURCE_OPTIONS,
415
424
  EQUIPMENTS_IN_VOLTAGE_REGULATION_TYPES,
416
425
  EXPERT_FILTER_EQUIPMENTS,
@@ -490,6 +499,11 @@ export {
490
499
  LIMIT_DURATION_FORM,
491
500
  LIMIT_REDUCTIONS_FORM,
492
501
  LINE_FLOW_MODE,
502
+ LOADS_VARIATIONS,
503
+ LOAD_FILTERS,
504
+ LOAD_INCREASE_START_TIME,
505
+ LOAD_INCREASE_STOP_TIME,
506
+ LOAD_MODELS_RULE,
493
507
  LOAD_TYPE_OPTIONS,
494
508
  LOGOUT_ERROR,
495
509
  LOW_VOLTAGE_LIMIT,
@@ -505,6 +519,7 @@ export {
505
519
  Load,
506
520
  LoadFlowParametersEditionDialog,
507
521
  LoadFlowParametersInline,
522
+ LoadModelsRule,
508
523
  Login,
509
524
  LogoText,
510
525
  Logout,
@@ -514,6 +529,7 @@ export {
514
529
  MAP_BASEMAP_MAPBOX,
515
530
  MAP_BASE_MAP,
516
531
  MAP_MANUAL_REFRESH,
532
+ MARGIN_CALCULATION_START_TIME,
517
533
  MAX_CHAR_DESCRIPTION,
518
534
  MAX_ROWS_NUMBER,
519
535
  MAX_VALUE_ALLOWED_FOR_LIMIT_REDUCTION,
@@ -647,6 +663,8 @@ export {
647
663
  SIEMENS,
648
664
  SIGNIN_CALLBACK_ERROR,
649
665
  SPECIFIC_PARAMETERS,
666
+ START_TIME,
667
+ STOP_TIME,
650
668
  SUBSTATION_LAYOUT,
651
669
  SVAR_REGULATION_MODE_OPTIONS,
652
670
  SVC,
@@ -708,6 +726,7 @@ export {
708
726
  VARIABLE_Q_GENERATORS,
709
727
  VARIABLE_SHUNT_COMPENSATORS,
710
728
  VARIABLE_TRANSFORMERS,
729
+ VARIATION,
711
730
  VERSION_PARAMETER,
712
731
  VL_TAG_MAX_SIZE,
713
732
  VOLTAGE_INIT_MODE,
@@ -794,6 +813,8 @@ export {
794
813
  fetchDefaultSecurityAnalysisProvider,
795
814
  fetchDirectoryContent,
796
815
  fetchDirectoryElementPath,
816
+ fetchDynamicMarginCalculationParameters,
817
+ fetchDynamicMarginCalculationProviders,
797
818
  fetchElementsInfos,
798
819
  fetchEnv,
799
820
  fetchFavoriteAndDefaultCountries,
@@ -950,6 +971,7 @@ export {
950
971
  unitToMicroUnit,
951
972
  unscrollableDialogStyles,
952
973
  updateConfigParameter,
974
+ updateDynamicMarginCalculationParameters,
953
975
  updateModification,
954
976
  updateParameter,
955
977
  updatePccMinParameters,
@@ -0,0 +1,5 @@
1
+ import { UUID } from 'node:crypto';
2
+ import { DynamicMarginCalculationParametersInfos } from '../utils/types/dynamic-margin-calculation.type';
3
+ export declare function fetchDynamicMarginCalculationProviders(): Promise<any>;
4
+ export declare function fetchDynamicMarginCalculationParameters(parameterUuid: UUID): Promise<DynamicMarginCalculationParametersInfos>;
5
+ export declare function updateDynamicMarginCalculationParameters(parameterUuid: UUID, newParams: DynamicMarginCalculationParametersInfos): Promise<Response>;
@@ -0,0 +1,35 @@
1
+ import { backendFetchJson, backendFetch } from "./utils.js";
2
+ const PREFIX_DYNAMIC_MARGIN_CALCULATION_SERVER_QUERIES = `${"api/gateway"}/dynamic-margin-calculation`;
3
+ function getDynamicMarginCalculationUrl() {
4
+ return `${PREFIX_DYNAMIC_MARGIN_CALCULATION_SERVER_QUERIES}/v1/`;
5
+ }
6
+ function fetchDynamicMarginCalculationProviders() {
7
+ console.info("fetch dynamic margin calculation providers");
8
+ const url = `${getDynamicMarginCalculationUrl()}providers`;
9
+ console.debug(url);
10
+ return backendFetchJson(url);
11
+ }
12
+ function fetchDynamicMarginCalculationParameters(parameterUuid) {
13
+ console.info(`Fetching dynamic margin calculation parameters having uuid '${parameterUuid}' ...`);
14
+ const url = `${getDynamicMarginCalculationUrl()}parameters/${encodeURIComponent(parameterUuid)}`;
15
+ console.debug(url);
16
+ return backendFetchJson(url);
17
+ }
18
+ function updateDynamicMarginCalculationParameters(parameterUuid, newParams) {
19
+ console.info(`Setting dynamic margin calculation parameters having uuid '${parameterUuid}' ...`);
20
+ const url = `${getDynamicMarginCalculationUrl()}parameters/${parameterUuid}`;
21
+ console.debug(url);
22
+ return backendFetch(url, {
23
+ method: "POST",
24
+ headers: {
25
+ Accept: "application/json",
26
+ "Content-Type": "application/json"
27
+ },
28
+ body: JSON.stringify(newParams)
29
+ });
30
+ }
31
+ export {
32
+ fetchDynamicMarginCalculationParameters,
33
+ fetchDynamicMarginCalculationProviders,
34
+ updateDynamicMarginCalculationParameters
35
+ };
@@ -18,3 +18,4 @@ export * from './utils';
18
18
  export * from './voltage-init';
19
19
  export * from './short-circuit-analysis';
20
20
  export * from './networkModification';
21
+ export * from './dynamic-margin-calculation';
@@ -12,6 +12,7 @@ import { backendFetch, backendFetchFile, backendFetchJson, backendFetchText, get
12
12
  import { getVoltageInitParameters, getVoltageInitUrl } from "./voltage-init.js";
13
13
  import { fetchShortCircuitParameters, getShortCircuitSpecificParametersDescription, updateShortCircuitParameters } from "./short-circuit-analysis.js";
14
14
  import { fetchNetworkModification, updateModification } from "./networkModification.js";
15
+ import { fetchDynamicMarginCalculationParameters, fetchDynamicMarginCalculationProviders, updateDynamicMarginCalculationParameters } from "./dynamic-margin-calculation.js";
15
16
  export {
16
17
  PREFIX_STUDY_QUERIES,
17
18
  PermissionType,
@@ -32,6 +33,8 @@ export {
32
33
  fetchDefaultSecurityAnalysisProvider,
33
34
  fetchDirectoryContent,
34
35
  fetchDirectoryElementPath,
36
+ fetchDynamicMarginCalculationParameters,
37
+ fetchDynamicMarginCalculationProviders,
35
38
  fetchElementsInfos,
36
39
  fetchEnv,
37
40
  fetchFavoriteAndDefaultCountries,
@@ -73,6 +76,7 @@ export {
73
76
  setSecurityAnalysisParameters,
74
77
  setStudyNetworkVisualizationParameters,
75
78
  updateConfigParameter,
79
+ updateDynamicMarginCalculationParameters,
76
80
  updateModification,
77
81
  updateParameter,
78
82
  updatePccMinParameters,
@@ -75,4 +75,6 @@ export declare const businessErrorsEn: {
75
75
  'diagram.equipmentNotFound': string;
76
76
  'diagram.noConfiguredPosition': string;
77
77
  'diagram.noVoltageLevelFound': string;
78
+ 'dynamicMarginCalculation.providerNotFound': string;
79
+ 'dynamicMarginCalculation.loadFilterNotFound': string;
78
80
  };
@@ -68,7 +68,9 @@ const businessErrorsEn = {
68
68
  "diagram.maxVoltageLevelDisplayed": "You need to reduce the number of voltage levels to be displayed in the network area diagram (current {nbVoltageLevels}, maximum {maxVoltageLevels})",
69
69
  "diagram.equipmentNotFound": "Voltage level or substation {id} not found",
70
70
  "diagram.noConfiguredPosition": "No configured position found",
71
- "diagram.noVoltageLevelFound": "No voltage level found for this network area diagram"
71
+ "diagram.noVoltageLevelFound": "No voltage level found for this network area diagram",
72
+ "dynamicMarginCalculation.providerNotFound": "Dynamic margin calculation provider not found.",
73
+ "dynamicMarginCalculation.loadFilterNotFound": "Some load filters do not exist: {filterUuids}"
72
74
  };
73
75
  export {
74
76
  businessErrorsEn
@@ -249,4 +249,24 @@ export declare const parametersEn: {
249
249
  PccMinParametersError: string;
250
250
  updatePccMinParametersError: string;
251
251
  pccMinParamFilter: string;
252
+ DynamicMarginCalculationParametersError: string;
253
+ updateDynamicMarginCalculationParametersError: string;
254
+ DynamicMarginCalculationTimeDelayTab: string;
255
+ DynamicMarginCalculationLoadsVariationsTab: string;
256
+ DynamicMarginCalculationStartTime: string;
257
+ DynamicMarginCalculationStopTime: string;
258
+ DynamicMarginCalculationMarginCalculationStartTime: string;
259
+ DynamicMarginCalculationLoadIncreaseStartTime: string;
260
+ DynamicMarginCalculationLoadIncreaseStopTime: string;
261
+ DynamicMarginCalculationCalculationType: string;
262
+ DynamicMarginCalculationAccuracy: string;
263
+ DynamicMarginCalculationLoadModelsRule: string;
264
+ DynamicMarginCalculationLoadsVariations: string;
265
+ DynamicMarginCalculationCalculationTypeGlobalMargin: string;
266
+ DynamicMarginCalculationCalculationTypeLocalMargin: string;
267
+ DynamicMarginCalculationLoadModelsRuleAllLoads: string;
268
+ DynamicMarginCalculationLoadModelsRuleTargetedLoads: string;
269
+ DynamicMarginCalculationLoadsFilter: string;
270
+ DynamicMarginCalculationLoadsVariation: string;
271
+ DynamicMarginCalculationLoadsActive: string;
252
272
  };
@@ -248,7 +248,28 @@ const parametersEn = {
248
248
  // pccMin
249
249
  PccMinParametersError: "An error occurred while updating the pcc min parameters",
250
250
  updatePccMinParametersError: "An error occurred while updating the pcc min parameters",
251
- pccMinParamFilter: "Definition of contingencies on voltage levels"
251
+ pccMinParamFilter: "Definition of contingencies on voltage levels",
252
+ // DynamicMarginCalculation
253
+ DynamicMarginCalculationParametersError: "An error occurred while updating the dynamic margin calculation parameters",
254
+ updateDynamicMarginCalculationParametersError: "An error occurred while updating the dynamic margin calculation parameters",
255
+ DynamicMarginCalculationTimeDelayTab: "Time delay",
256
+ DynamicMarginCalculationLoadsVariationsTab: "Load variations",
257
+ DynamicMarginCalculationStartTime: "Start time",
258
+ DynamicMarginCalculationStopTime: "Stop time",
259
+ DynamicMarginCalculationMarginCalculationStartTime: "Margin calculation start time",
260
+ DynamicMarginCalculationLoadIncreaseStartTime: "Load increase start time",
261
+ DynamicMarginCalculationLoadIncreaseStopTime: "Load increase stop time",
262
+ DynamicMarginCalculationCalculationType: "Calculation type",
263
+ DynamicMarginCalculationAccuracy: "Accuracy",
264
+ DynamicMarginCalculationLoadModelsRule: "Load models rule",
265
+ DynamicMarginCalculationLoadsVariations: "Load variations",
266
+ DynamicMarginCalculationCalculationTypeGlobalMargin: "Global margin",
267
+ DynamicMarginCalculationCalculationTypeLocalMargin: "Local margin",
268
+ DynamicMarginCalculationLoadModelsRuleAllLoads: "All loads",
269
+ DynamicMarginCalculationLoadModelsRuleTargetedLoads: "Targeted loads",
270
+ DynamicMarginCalculationLoadsFilter: "Loads filter",
271
+ DynamicMarginCalculationLoadsVariation: "Load variation",
272
+ DynamicMarginCalculationLoadsActive: "Active"
252
273
  };
253
274
  export {
254
275
  parametersEn
@@ -75,4 +75,6 @@ export declare const businessErrorsFr: {
75
75
  'diagram.equipmentNotFound': string;
76
76
  'diagram.noConfiguredPosition': string;
77
77
  'diagram.noVoltageLevelFound': string;
78
+ 'dynamicMarginCalculation.providerNotFound': string;
79
+ 'dynamicMarginCalculation.loadFilterNotFound': string;
78
80
  };
@@ -68,7 +68,9 @@ const businessErrorsFr = {
68
68
  "diagram.maxVoltageLevelDisplayed": "Vous devez réduire le nombre de postes à afficher dans l'image nodale de zone (nombre actuel {nbVoltageLevels}, nombre maximum {maxVoltageLevels})",
69
69
  "diagram.equipmentNotFound": "Poste ou site {id} non trouvé",
70
70
  "diagram.noConfiguredPosition": "Aucune position configurée trouvée",
71
- "diagram.noVoltageLevelFound": "Aucun poste trouvé pour cette image nodale de zone"
71
+ "diagram.noVoltageLevelFound": "Aucun poste trouvé pour cette image nodale de zone",
72
+ "dynamicMarginCalculation.providerNotFound": "Simulateur du calcul de marge dynamique non trouvé.",
73
+ "dynamicMarginCalculation.loadFilterNotFound": "Certains filtres de consommations n'existent pas : {filterUuids}"
72
74
  };
73
75
  export {
74
76
  businessErrorsFr
@@ -250,4 +250,24 @@ export declare const parametersFr: {
250
250
  PccMinParametersError: string;
251
251
  updatePccMinParametersError: string;
252
252
  pccMinParamFilter: string;
253
+ DynamicMarginCalculationParametersError: string;
254
+ updateDynamicMarginCalculationParametersError: string;
255
+ DynamicMarginCalculationTimeDelayTab: string;
256
+ DynamicMarginCalculationLoadsVariationsTab: string;
257
+ DynamicMarginCalculationStartTime: string;
258
+ DynamicMarginCalculationStopTime: string;
259
+ DynamicMarginCalculationMarginCalculationStartTime: string;
260
+ DynamicMarginCalculationLoadIncreaseStartTime: string;
261
+ DynamicMarginCalculationLoadIncreaseStopTime: string;
262
+ DynamicMarginCalculationCalculationType: string;
263
+ DynamicMarginCalculationAccuracy: string;
264
+ DynamicMarginCalculationLoadModelsRule: string;
265
+ DynamicMarginCalculationLoadsVariations: string;
266
+ DynamicMarginCalculationCalculationTypeGlobalMargin: string;
267
+ DynamicMarginCalculationCalculationTypeLocalMargin: string;
268
+ DynamicMarginCalculationLoadModelsRuleAllLoads: string;
269
+ DynamicMarginCalculationLoadModelsRuleTargetedLoads: string;
270
+ DynamicMarginCalculationLoadsFilter: string;
271
+ DynamicMarginCalculationLoadsVariation: string;
272
+ DynamicMarginCalculationLoadsActive: string;
253
273
  };
@@ -248,7 +248,28 @@ const parametersFr = {
248
248
  resetLoadFlowParametersWarning: "Impossible de récupérer les paramètres de calcul de répartition définis dans le profil utilisateur (les valeurs par défaut sont appliquées)",
249
249
  PccMinParametersError: "Erreur lors de la mise à jour des paramètres de pcc du min",
250
250
  updatePccMinParametersError: "Une erreur est survenue lors de la mise a jour des paramètres de pcc min",
251
- pccMinParamFilter: "Définition des postes en défaut"
251
+ pccMinParamFilter: "Définition des postes en défaut",
252
+ // DynamicMarginCalculation
253
+ DynamicMarginCalculationParametersError: "Erreur lors de la mise à jour des paramètres du calcul du marge",
254
+ updateDynamicMarginCalculationParametersError: "Une erreur est survenue lors de la mise a jour des paramètres du calcul du marge",
255
+ DynamicMarginCalculationTimeDelayTab: "Temporisation",
256
+ DynamicMarginCalculationLoadsVariationsTab: "Variations de charge",
257
+ DynamicMarginCalculationStartTime: "Temps de début",
258
+ DynamicMarginCalculationStopTime: "Temps d'arrêt",
259
+ DynamicMarginCalculationMarginCalculationStartTime: "Temps de début de du calcul de marge",
260
+ DynamicMarginCalculationLoadIncreaseStartTime: "Temps de début de l'augmentation de charge",
261
+ DynamicMarginCalculationLoadIncreaseStopTime: "Temps d'arrêt de l'augmentation de charge",
262
+ DynamicMarginCalculationCalculationType: "Type de calcul",
263
+ DynamicMarginCalculationAccuracy: "Précision",
264
+ DynamicMarginCalculationLoadModelsRule: "Règle des modèles de charge",
265
+ DynamicMarginCalculationLoadsVariations: "Variations de charge",
266
+ DynamicMarginCalculationCalculationTypeGlobalMargin: "Margin global",
267
+ DynamicMarginCalculationCalculationTypeLocalMargin: "Margin local",
268
+ DynamicMarginCalculationLoadModelsRuleAllLoads: "Tous les charges",
269
+ DynamicMarginCalculationLoadModelsRuleTargetedLoads: "Charges ciblées",
270
+ DynamicMarginCalculationLoadsFilter: "Regroupement de charges",
271
+ DynamicMarginCalculationLoadsVariation: "Variation de charge",
272
+ DynamicMarginCalculationLoadsActive: "Actif"
252
273
  };
253
274
  export {
254
275
  parametersFr
@@ -29,6 +29,7 @@ import { FieldType } from "./types/fieldType.js";
29
29
  import { ParameterType } from "./types/parameters.type.js";
30
30
  import { SolverTypeInfos } from "./types/dynamic-simulation.type.js";
31
31
  import { DistributionType, SensitivityType } from "./types/sensitivity-analysis.type.js";
32
+ import { CalculationType, LoadModelsRule } from "./types/dynamic-margin-calculation.type.js";
32
33
  import { getIdOrSelf, notNull, notUndefined, parseIntData, removeNullFields, sanitizeString } from "./ts-utils.js";
33
34
  import { toNumber, validateValueIsANumber } from "./validation-functions.js";
34
35
  import "./yupConfig.js";
@@ -45,6 +46,7 @@ export {
45
46
  BusBar,
46
47
  COMMON_APP_NAME,
47
48
  COMMON_CONFIG_PARAMS_NAMES,
49
+ CalculationType,
48
50
  CustomError,
49
51
  DARK_THEME,
50
52
  DEGREE,
@@ -78,6 +80,7 @@ export {
78
80
  LIGHT_THEME,
79
81
  Line,
80
82
  Load,
83
+ LoadModelsRule,
81
84
  MAX_CHAR_DESCRIPTION,
82
85
  MEGA_VAR,
83
86
  MEGA_VOLT_AMPERE,