@gridsuite/commons-ui 0.281.0 → 0.283.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 (128) hide show
  1. package/dist/components/composite/customAGGrid/custom-aggrid-filters/hooks/use-custom-aggrid-comparator-filter.js +1 -0
  2. package/dist/components/composite/customAGGrid/hooks/use-custom-aggrid-sort.js +1 -0
  3. package/dist/components/composite/reactQueryBuilder/OperatorSelector.js +1 -0
  4. package/dist/components/composite/report/QuickSearch.js +1 -0
  5. package/dist/components/composite/report/report-viewer/log-table/log-table.js +1 -1
  6. package/dist/components/ui/directoryItemSelector/DirectoryItemSelector.js +1 -0
  7. package/dist/features/index.js +12 -9
  8. package/dist/features/network-modification-table/network-modifications-table.js +1 -0
  9. package/dist/features/network-modification-table/renderers/reference-link-cell.js +1 -1
  10. package/dist/features/network-modification-table/renderers/root-network-chip-cell.js +1 -0
  11. package/dist/features/network-modification-table/renderers/switch-cell.js +1 -0
  12. package/dist/features/network-modification-table/row/drag-row-clone.js +1 -0
  13. package/dist/features/network-modification-table/use-modifications-drag-and-drop.js +1 -0
  14. package/dist/features/network-modifications/battery/modification/BatteryDialogTabs.d.ts +3 -3
  15. package/dist/features/network-modifications/battery/modification/BatteryDialogTabs.js +2 -2
  16. package/dist/features/network-modifications/battery/modification/BatteryModificationForm.d.ts +4 -1
  17. package/dist/features/network-modifications/battery/modification/BatteryModificationForm.js +7 -11
  18. package/dist/features/network-modifications/generator/modification/GeneratorDialogTabs.d.ts +3 -3
  19. package/dist/features/network-modifications/generator/modification/GeneratorDialogTabs.js +2 -2
  20. package/dist/features/network-modifications/generator/modification/GeneratorModificationForm.d.ts +4 -1
  21. package/dist/features/network-modifications/generator/modification/GeneratorModificationForm.js +4 -8
  22. package/dist/features/network-modifications/index.d.ts +0 -1
  23. package/dist/features/network-modifications/index.js +3 -3
  24. package/dist/features/network-modifications/line/common/LineDialogTabs.d.ts +3 -3
  25. package/dist/features/network-modifications/line/common/LineDialogTabs.js +2 -2
  26. package/dist/features/network-modifications/line/common/LineForm.d.ts +4 -1
  27. package/dist/features/network-modifications/line/common/LineForm.js +7 -11
  28. package/dist/features/network-modifications/line/common/line.utils.d.ts +1 -1
  29. package/dist/features/network-modifications/load/common/LoadDialogTabs.d.ts +3 -3
  30. package/dist/features/network-modifications/load/common/LoadDialogTabs.js +2 -2
  31. package/dist/features/network-modifications/load/common/LoadForm.d.ts +4 -1
  32. package/dist/features/network-modifications/load/common/LoadForm.js +7 -11
  33. package/dist/features/network-modifications/static-var-compensator/common/static-var-compensator-dialog-tabs.d.ts +3 -2
  34. package/dist/features/network-modifications/static-var-compensator/common/static-var-compensator-dialog-tabs.js +2 -2
  35. package/dist/features/network-modifications/static-var-compensator/creation/static-var-compensator-creation-form.d.ts +4 -1
  36. package/dist/features/network-modifications/static-var-compensator/creation/static-var-compensator-creation-form.js +8 -11
  37. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerDialogTabs.d.ts +3 -3
  38. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerDialogTabs.js +2 -2
  39. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerForm.d.ts +4 -1
  40. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerForm.js +7 -11
  41. package/dist/features/network-modifications/voltageLevel/creation/VoltageLevelCreationForm.d.ts +4 -7
  42. package/dist/features/network-modifications/voltageLevel/creation/VoltageLevelCreationForm.js +16 -19
  43. package/dist/features/network-modifications/voltageLevel/creation/index.d.ts +1 -1
  44. package/dist/features/network-modifications/voltageLevel/creation/index.js +3 -1
  45. package/dist/features/network-modifications/voltageLevel/index.js +3 -1
  46. package/dist/features/parameters/common/hook/index.d.ts +0 -1
  47. package/dist/features/parameters/common/hook/index.js +1 -3
  48. package/dist/features/parameters/common/index.js +1 -3
  49. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation-form.d.ts +1 -1
  50. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js +4 -4
  51. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.d.ts +1 -0
  52. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js +2 -0
  53. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis-inline.js +3 -3
  54. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis-parameters-form.d.ts +1 -1
  55. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis.type.d.ts +1 -0
  56. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis.type.js +2 -0
  57. package/dist/features/parameters/dynamic-simulation/curve/dialog/curve-preview.js +1 -0
  58. package/dist/features/parameters/dynamic-simulation/curve/dialog/equipment-filter.js +1 -0
  59. package/dist/features/parameters/dynamic-simulation/dynamic-simulation-inline.js +3 -3
  60. package/dist/features/parameters/dynamic-simulation/dynamic-simulation-parameters-form.d.ts +1 -1
  61. package/dist/features/parameters/dynamic-simulation/dynamic-simulation.type.d.ts +1 -0
  62. package/dist/features/parameters/dynamic-simulation/dynamic-simulation.type.js +2 -0
  63. package/dist/features/parameters/index.js +10 -7
  64. package/dist/features/parameters/loadflow/load-flow-parameters-inline.js +1 -1
  65. package/dist/features/parameters/loadflow/load-flow-parameters-utils.d.ts +1 -0
  66. package/dist/features/parameters/loadflow/load-flow-parameters-utils.js +2 -0
  67. package/dist/features/parameters/loadflow/use-load-flow-parameters-form.js +3 -3
  68. package/dist/features/parameters/network-visualizations/constants.d.ts +1 -0
  69. package/dist/features/parameters/network-visualizations/constants.js +2 -0
  70. package/dist/features/parameters/network-visualizations/index.js +2 -1
  71. package/dist/features/parameters/network-visualizations/network-visualizations-parameters-inline.js +1 -1
  72. package/dist/features/parameters/network-visualizations/use-network-visualizations-parameters-form.js +3 -7
  73. package/dist/features/parameters/pcc-min/pcc-min-parameters-inline.js +1 -1
  74. package/dist/features/parameters/security-analysis/constants.d.ts +1 -0
  75. package/dist/features/parameters/security-analysis/constants.js +2 -0
  76. package/dist/features/parameters/security-analysis/index.js +2 -1
  77. package/dist/features/parameters/security-analysis/security-analysis-parameters-content.js +1 -1
  78. package/dist/features/parameters/security-analysis/security-analysis-parameters-dialog.js +1 -1
  79. package/dist/features/parameters/security-analysis/use-security-analysis-parameters-form.js +3 -3
  80. package/dist/features/parameters/sensi/columns-definitions.d.ts +2 -0
  81. package/dist/features/parameters/sensi/columns-definitions.js +36 -1
  82. package/dist/features/parameters/sensi/index.js +3 -1
  83. package/dist/features/parameters/sensi/sensitivity-analysis-parameters-dialog.js +1 -1
  84. package/dist/features/parameters/sensi/sensitivity-analysis-parameters-form.js +2 -1
  85. package/dist/features/parameters/sensi/sensitivity-analysis-parameters-inline.js +4 -1
  86. package/dist/features/parameters/sensi/sensitivity-parameters-selector.d.ts +3 -1
  87. package/dist/features/parameters/sensi/sensitivity-parameters-selector.js +19 -35
  88. package/dist/features/parameters/sensi/use-sensitivity-analysis-parameters.d.ts +9 -1
  89. package/dist/features/parameters/sensi/use-sensitivity-analysis-parameters.js +29 -1
  90. package/dist/features/parameters/short-circuit/short-circuit-parameters-inline.js +1 -1
  91. package/dist/features/parameters/short-circuit/short-circuit-parameters-utils.d.ts +1 -0
  92. package/dist/features/parameters/short-circuit/short-circuit-parameters-utils.js +2 -0
  93. package/dist/features/parameters/short-circuit/use-short-circuit-parameters-form.js +3 -3
  94. package/dist/features/parameters/voltage-init/constants.d.ts +1 -0
  95. package/dist/features/parameters/voltage-init/constants.js +2 -0
  96. package/dist/features/parameters/voltage-init/index.js +2 -1
  97. package/dist/features/parameters/voltage-init/use-voltage-init-parameters-form.js +4 -8
  98. package/dist/features/parameters/voltage-init/voltage-init-parameters-inline.js +1 -1
  99. package/dist/features/process-configs/loadflow/lf-process-config-edition.js +7 -1
  100. package/dist/features/process-configs/security-analysis/sa-process-config-edition.js +7 -1
  101. package/dist/features/process-configs/shortcircuit/sc-process-config-edition.js +7 -1
  102. package/dist/features/results/loadflow/limit-violation-result.js +1 -1
  103. package/dist/features/results/shortcircuit/shortcircuit-analysis-result.js +1 -1
  104. package/dist/features/side-bar/AppSideBar.js +2 -1
  105. package/dist/features/side-bar/AppSideBarHeader.js +3 -3
  106. package/dist/features/side-bar/footer/AppSideBarFooter.js +2 -0
  107. package/dist/features/side-bar/footer/common/SideBarMenuItem.d.ts +2 -1
  108. package/dist/features/side-bar/footer/common/SideBarMenuItem.js +5 -4
  109. package/dist/features/side-bar/footer/profile/ProfileMenu.js +1 -1
  110. package/dist/features/side-bar/footer/profile/UserIcon.d.ts +3 -7
  111. package/dist/features/side-bar/footer/profile/UserIcon.js +11 -7
  112. package/dist/features/side-bar/footer/settings/SettingsMenu.js +1 -1
  113. package/dist/hooks/index.d.ts +1 -0
  114. package/dist/hooks/index.js +3 -1
  115. package/dist/hooks/use-tabs.d.ts +33 -0
  116. package/dist/hooks/use-tabs.js +55 -0
  117. package/dist/index.js +13 -8
  118. package/dist/translations/en/topBarEn.d.ts +1 -0
  119. package/dist/translations/en/topBarEn.js +2 -1
  120. package/dist/translations/fr/topBarFr.d.ts +1 -0
  121. package/dist/translations/fr/topBarFr.js +1 -0
  122. package/package.json +1 -1
  123. package/dist/features/network-modifications/hooks/index.d.ts +0 -7
  124. package/dist/features/network-modifications/hooks/index.js +0 -4
  125. package/dist/features/network-modifications/hooks/useTabsWithError.d.ts +0 -15
  126. package/dist/features/network-modifications/hooks/useTabsWithError.js +0 -28
  127. package/dist/features/parameters/common/hook/use-tabs.d.ts +0 -16
  128. package/dist/features/parameters/common/hook/use-tabs.js +0 -65
@@ -0,0 +1,55 @@
1
+ import { useState, useMemo, useCallback } from "react";
2
+ import { get } from "react-hook-form";
3
+ import { isObjectEmpty } from "../utils/functions.js";
4
+ function useTabs({
5
+ defaultTab,
6
+ errors,
7
+ tabValues,
8
+ tabFields
9
+ }) {
10
+ const [selectedTab, setSelectedTab] = useState(defaultTab);
11
+ const [tabsWithError, setTabsWithError] = useState([]);
12
+ const resolvedTabValues = useMemo(() => {
13
+ if (tabValues?.length) {
14
+ return tabValues;
15
+ }
16
+ return Object.keys(tabFields ?? {}).map((key) => {
17
+ const asNumber = Number(key);
18
+ return Number.isNaN(asNumber) ? key : asNumber;
19
+ });
20
+ }, [tabValues, tabFields]);
21
+ const getTabsWithError = useCallback(
22
+ (_errors) => resolvedTabValues.filter((tabValue) => {
23
+ const fields = tabFields?.[tabValue] ?? [String(tabValue)];
24
+ return fields.some((field) => get(_errors, field));
25
+ }),
26
+ [resolvedTabValues, tabFields]
27
+ );
28
+ const onTabChange = useCallback(
29
+ (_event, newSelectedTab) => {
30
+ setSelectedTab(newSelectedTab);
31
+ const erroredTabs = errors && !isObjectEmpty(errors) ? getTabsWithError(errors) : [];
32
+ setTabsWithError(erroredTabs.filter((errorTab) => errorTab !== newSelectedTab));
33
+ },
34
+ [errors, getTabsWithError]
35
+ );
36
+ const onError = useCallback(
37
+ (_errors) => {
38
+ if (!_errors || isObjectEmpty(_errors)) {
39
+ return;
40
+ }
41
+ const erroredTabs = getTabsWithError(_errors);
42
+ if (erroredTabs.includes(selectedTab)) {
43
+ setTabsWithError(erroredTabs.filter((errorTab) => errorTab !== selectedTab));
44
+ } else if (erroredTabs.length > 0) {
45
+ setSelectedTab(erroredTabs[0]);
46
+ setTabsWithError(erroredTabs.slice(1));
47
+ }
48
+ },
49
+ [getTabsWithError, selectedTab]
50
+ );
51
+ return { selectedTab, setSelectedTab, tabsWithError, onTabChange, onError };
52
+ }
53
+ export {
54
+ useTabs
55
+ };
package/dist/index.js CHANGED
@@ -205,9 +205,8 @@ import { LimitReductionTableRow } from "./features/parameters/common/limitreduct
205
205
  import { LimitReductionTableCell } from "./features/parameters/common/limitreductions/limit-reduction-table-cell.js";
206
206
  import { ContingencyTable } from "./features/parameters/common/contingency-table/contingency-table.js";
207
207
  import { COLUMNS_DEFINITIONS_CONTINGENCY_LISTS_INFOS, getContingencyListsInfosFormSchema, isValidContingencyRow, toFormValuesContingencyListsInfos } from "./features/parameters/common/contingency-table/columns-definitions.js";
208
- import { useTabs } from "./features/parameters/common/hook/use-tabs.js";
209
208
  import { useParametersForm } from "./features/parameters/common/hook/use-parameters-form.js";
210
- import { CENTER_LABEL, COMPONENT_LIBRARY, CUSTOM_REAL_TIME_STATE_ESTIMATION, DIAGONAL_LABEL, INTL_LINE_FLOW_MODE_OPTIONS, INTL_SUBSTATION_LAYOUT_OPTIONS, LINE_FLOW_MODE, LineFlowMode, MAP_BASE_MAP, MAP_MANUAL_REFRESH, NAD_POSITIONS_GENERATION_MODE, NAD_POSITIONS_GENERATION_MODE_LABEL, NetworkVisualizationTabValues, PARAM_CENTER_LABEL, PARAM_COMPONENT_LIBRARY, PARAM_DIAGONAL_LABEL, PARAM_LINE_FLOW_MODE, PARAM_LINE_FULL_PATH, PARAM_LINE_PARALLEL_PATH, PARAM_MAP_BASEMAP, PARAM_MAP_MANUAL_REFRESH, PARAM_NAD_POSITIONS_GENERATION_MODE, PARAM_STATE_ESTIMATION, PARAM_SUBSTATION_LAYOUT, SUBSTATION_LAYOUT } from "./features/parameters/network-visualizations/constants.js";
209
+ import { CENTER_LABEL, COMPONENT_LIBRARY, CUSTOM_REAL_TIME_STATE_ESTIMATION, DIAGONAL_LABEL, INTL_LINE_FLOW_MODE_OPTIONS, INTL_SUBSTATION_LAYOUT_OPTIONS, LINE_FLOW_MODE, LineFlowMode, MAP_BASE_MAP, MAP_MANUAL_REFRESH, NAD_POSITIONS_GENERATION_MODE, NAD_POSITIONS_GENERATION_MODE_LABEL, NV_TAB_VALUES, NetworkVisualizationTabValues, PARAM_CENTER_LABEL, PARAM_COMPONENT_LIBRARY, PARAM_DIAGONAL_LABEL, PARAM_LINE_FLOW_MODE, PARAM_LINE_FULL_PATH, PARAM_LINE_PARALLEL_PATH, PARAM_MAP_BASEMAP, PARAM_MAP_MANUAL_REFRESH, PARAM_NAD_POSITIONS_GENERATION_MODE, PARAM_STATE_ESTIMATION, PARAM_SUBSTATION_LAYOUT, SUBSTATION_LAYOUT } from "./features/parameters/network-visualizations/constants.js";
211
210
  import { MAP_BASEMAP_CARTO, MAP_BASEMAP_CARTO_NOLABEL, MAP_BASEMAP_ETALAB, MAP_BASEMAP_MAPBOX, NadPositionsGenerationMode, SubstationLayout } from "./features/parameters/network-visualizations/network-visualizations.types.js";
212
211
  import { NetworkVisualizationParametersInline } from "./features/parameters/network-visualizations/network-visualizations-parameters-inline.js";
213
212
  import { NetworkVisualizationsParametersEditionDialog } from "./features/parameters/network-visualizations/network-visualizations-parameters-dialog.js";
@@ -217,7 +216,7 @@ import { LoadFlowParametersEditionDialog } from "./features/parameters/loadflow/
217
216
  import { InitialVoltage, NODE_CLUSTER, NODE_CLUSTER_FILTER_IDS, PredefinedParameters, SHORT_CIRCUIT_INITIAL_VOLTAGE_PROFILE_MODE, SHORT_CIRCUIT_MODEL_POWER_ELECTRONICS, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_IN_CALCULATION_CLUSTER, SHORT_CIRCUIT_ONLY_STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER, SHORT_CIRCUIT_POWER_ELECTRONICS_CLUSTERS, SHORT_CIRCUIT_POWER_ELECTRONICS_MATERIALS, SHORT_CIRCUIT_PREDEFINED_PARAMS, SHORT_CIRCUIT_VOLTAGE_RANGES, SHORT_CIRCUIT_WITH_FEEDER_RESULT, SHORT_CIRCUIT_WITH_LOADS, SHORT_CIRCUIT_WITH_NEUTRAL_POSITION, SHORT_CIRCUIT_WITH_SHUNT_COMPENSATORS, SHORT_CIRCUIT_WITH_VSC_CONVERTER_STATIONS, STARTED_GENERATORS_IN_CALCULATION_CLUSTER_THRESHOLD, STARTED_GENERATORS_OUTSIDE_CALCULATION_CLUSTER_THRESHOLD, intlInitialVoltageProfileMode, intlPredefinedParametersOptions, onlyStartedGeneratorsOptions } from "./features/parameters/short-circuit/constants.js";
218
217
  import { ShortCircuitParametersInLine } from "./features/parameters/short-circuit/short-circuit-parameters-inline.js";
219
218
  import { ShortCircuitParametersEditionDialog } from "./features/parameters/short-circuit/short-circuit-parameters-dialog.js";
220
- import { DEFAULT_GENERAL_APPLY_MODIFICATIONS, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, GENERAL, GENERAL_APPLY_MODIFICATIONS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, LEG_SIDE, LOW_VOLTAGE_LIMIT, PRIORITY, RATIO_TAP_CHANGER_POSITION, RATIO_TAP_CHANGER_TARGET_V, REACTIVE_SLACKS_THRESHOLD, SELECTION_TYPE, SHUNT_COMPENSATORS_SELECTION_TYPE, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, TRANSFORMERS_SELECTION_TYPE, UPDATE_BUS_VOLTAGE, VARIABLE_Q_GENERATORS, VARIABLE_SHUNT_COMPENSATORS, VARIABLE_TRANSFORMERS, VOLTAGE_LIMITS_DEFAULT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues } from "./features/parameters/voltage-init/constants.js";
219
+ import { DEFAULT_GENERAL_APPLY_MODIFICATIONS, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, GENERAL, GENERAL_APPLY_MODIFICATIONS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, LEG_SIDE, LOW_VOLTAGE_LIMIT, PRIORITY, RATIO_TAP_CHANGER_POSITION, RATIO_TAP_CHANGER_TARGET_V, REACTIVE_SLACKS_THRESHOLD, SELECTION_TYPE, SHUNT_COMPENSATORS_SELECTION_TYPE, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, TRANSFORMERS_SELECTION_TYPE, UPDATE_BUS_VOLTAGE, VARIABLE_Q_GENERATORS, VARIABLE_SHUNT_COMPENSATORS, VARIABLE_TRANSFORMERS, VOLTAGE_INIT_TAB_VALUES, VOLTAGE_LIMITS_DEFAULT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues } from "./features/parameters/voltage-init/constants.js";
221
220
  import { EquipmentsSelectionType } from "./features/parameters/voltage-init/voltage-init.type.js";
222
221
  import { VoltageInitParametersEditionDialog } from "./features/parameters/voltage-init/voltage-init-parameters-dialog.js";
223
222
  import { VoltageInitParametersInLine } from "./features/parameters/voltage-init/voltage-init-parameters-inline.js";
@@ -225,10 +224,10 @@ import { PccMinParametersInLine } from "./features/parameters/pcc-min/pcc-min-pa
225
224
  import { PccMinParametersEditionDialog } from "./features/parameters/pcc-min/pcc-min-parameters-dialog.js";
226
225
  import { SecurityAnalysisParametersInline } from "./features/parameters/security-analysis/security-analysis-parameters-inline.js";
227
226
  import { SecurityAnalysisParametersDialog } from "./features/parameters/security-analysis/security-analysis-parameters-dialog.js";
228
- import { FLOW_PROPORTIONAL_THRESHOLD, HIGH_VOLTAGE_ABSOLUTE_THRESHOLD, HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD, LOW_VOLTAGE_ABSOLUTE_THRESHOLD, LOW_VOLTAGE_PROPORTIONAL_THRESHOLD, TabValues } from "./features/parameters/security-analysis/constants.js";
227
+ import { FLOW_PROPORTIONAL_THRESHOLD, HIGH_VOLTAGE_ABSOLUTE_THRESHOLD, HIGH_VOLTAGE_PROPORTIONAL_THRESHOLD, LOW_VOLTAGE_ABSOLUTE_THRESHOLD, LOW_VOLTAGE_PROPORTIONAL_THRESHOLD, TAB_VALUES, TabValues } from "./features/parameters/security-analysis/constants.js";
229
228
  import { SensitivityAnalysisParametersInline } from "./features/parameters/sensi/sensitivity-analysis-parameters-inline.js";
230
229
  import { SensitivityAnalysisParametersDialog } from "./features/parameters/sensi/sensitivity-analysis-parameters-dialog.js";
231
- 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, SensiTabValues } from "./features/parameters/sensi/columns-definitions.js";
230
+ 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, SENSI_BRANCHES_TAB_FIELDS, SENSI_TAB_FIELDS, SensiBranchesTabValues, SensiTabValues } from "./features/parameters/sensi/columns-definitions.js";
232
231
  import { DynamicSimulationInline } from "./features/parameters/dynamic-simulation/dynamic-simulation-inline.js";
233
232
  import { CONTINGENCIES_LIST_INFOS, CONTINGENCIES_START_TIME, SCENARIO_DURATION } from "./features/parameters/dynamic-security-analysis/constants.js";
234
233
  import { DynamicSecurityAnalysisInline } from "./features/parameters/dynamic-security-analysis/dynamic-security-analysis-inline.js";
@@ -284,7 +283,6 @@ import { useHvdcLccDeletion } from "./features/network-modifications/equipmentDe
284
283
  import { HvdcLccDeletionSpecificForm } from "./features/network-modifications/equipmentDeletion/hvdcLccDeletion/HvdcLccDeletionSpecificForm.js";
285
284
  import { equipmentDeletionDtoToForm, equipmentDeletionEmptyFormData, equipmentDeletionFormSchema, equipmentDeletionFormToDto, newEquipmentDeletionDto } from "./features/network-modifications/equipmentDeletion/equipmentDeletion.utils.js";
286
285
  import { EquipmentDeletionForm } from "./features/network-modifications/equipmentDeletion/EquipmentDeletionForm.js";
287
- import { useTabsWithError } from "./features/network-modifications/hooks/useTabsWithError.js";
288
286
  import { SubstationCreationForm } from "./features/network-modifications/substation/creation/SubstationCreationForm.js";
289
287
  import { substationCreationDtoToForm, substationCreationEmptyFormData, substationCreationFormSchema, substationCreationFormToDto } from "./features/network-modifications/substation/creation/substationCreation.utils.js";
290
288
  import { SubstationModificationForm } from "./features/network-modifications/substation/modification/SubstationModificationForm.js";
@@ -358,7 +356,7 @@ import { fetchContingencyAndFiltersLists, fetchDynamicSecurityAnalysisProviders
358
356
  import { fetchDynamicMarginCalculationParameters, fetchDynamicMarginCalculationProviders, updateDynamicMarginCalculationParameters } from "./services/dynamic-margin-calculation.js";
359
357
  import "react-intl";
360
358
  import "@mui/icons-material";
361
- import { MAX_SECTIONS_COUNT } from "./features/network-modifications/voltageLevel/creation/voltageLevel.constants.js";
359
+ import { MAX_SECTIONS_COUNT, VOLTAGE_LEVEL_TAB_FIELDS, VoltageLevelTab } from "./features/network-modifications/voltageLevel/creation/voltageLevel.constants.js";
362
360
  import { VoltageLevelCreationForm } from "./features/network-modifications/voltageLevel/creation/VoltageLevelCreationForm.js";
363
361
  import { SWITCH_TYPE, buildNewBusbarSections, getCreateSwitchesEmptyFormData, getCreateSwitchesValidationSchema, translateSwitchKinds, voltageLevelCreationDtoToForm, voltageLevelCreationEmptyFormData, voltageLevelCreationFormSchema, voltageLevelCreationFormToDto } from "./features/network-modifications/voltageLevel/creation/voltageLevelCreation.utils.js";
364
362
  import { SwitchKind } from "./features/network-modifications/voltageLevel/creation/voltageLevelCreation.types.js";
@@ -538,6 +536,7 @@ import { useSelectAppearance } from "./hooks/useSelectAppearance.js";
538
536
  import { OptionalServicesStatus, useParametersBackend } from "./hooks/use-parameters-backend.js";
539
537
  import { useGetLabelEquipmentTypes } from "./hooks/useGetLabelEquipmentTypes.js";
540
538
  import { useOpenLoaderShortWait } from "./hooks/useOpenLoaderShortWait.js";
539
+ import { useTabs } from "./hooks/use-tabs.js";
541
540
  import { LOGOUT_ERROR, RESET_AUTHENTICATION_ROUTER_ERROR, SHOW_AUTH_INFO_LOGIN, SIGNIN_CALLBACK_ERROR, UNAUTHORIZED_USER_INFO, USER, USER_VALIDATION_ERROR, resetAuthenticationRouterError, setLoggedUser, setLogoutError, setShowAuthenticationRouterLogin, setSignInCallbackError, setUnauthorizedUserInfo, setUserValidationError } from "./redux/actions/authActions.js";
542
541
  import { getUser, getUserToken, setCommonStore, subscribeToUserState } from "./redux/commonStore.js";
543
542
  import { cardErrorBoundaryEn } from "./translations/en/cardErrorBoundaryEn.js";
@@ -1020,6 +1019,7 @@ export {
1020
1019
  NORMALIZED_PERCENTAGE,
1021
1020
  NO_ITEM_SELECTION_FOR_COPY,
1022
1021
  NUMERIC_VALUE_OR_EMPTY_FIELD,
1022
+ NV_TAB_VALUES,
1023
1023
  NadPositionsGenerationMode,
1024
1024
  NameCell,
1025
1025
  NameCellRenderer,
@@ -1172,6 +1172,8 @@ export {
1172
1172
  SELECTED,
1173
1173
  SELECTION_TYPE,
1174
1174
  SENSITIVITY_TYPES,
1175
+ SENSI_BRANCHES_TAB_FIELDS,
1176
+ SENSI_TAB_FIELDS,
1175
1177
  SHORTCIRCUIT_ANALYSIS_RESULT_SORT_STORE,
1176
1178
  SHORT_CIRCUIT_CURRENT_LIMIT_MUST_BE_GREATER_OR_EQUAL_TO_ZERO,
1177
1179
  SHORT_CIRCUIT_INITIAL_VOLTAGE_PROFILE_MODE,
@@ -1269,6 +1271,7 @@ export {
1269
1271
  TABULAR_MODIFICATION_FIELDS,
1270
1272
  TABULAR_MODIFICATION_TYPES,
1271
1273
  TABULAR_NUMBER,
1274
+ TAB_VALUES,
1272
1275
  TARGET_DEADBAND_MUST_BE_GREATER_OR_EQUAL_TO_ZERO,
1273
1276
  TEMPORARY_LIMIT_MODIFICATION_TYPE,
1274
1277
  TOPOLOGY_MODIFICATION_TABLE,
@@ -1327,8 +1330,10 @@ export {
1327
1330
  VERSION_PARAMETER,
1328
1331
  VL_TAG_MAX_SIZE,
1329
1332
  VOLTAGE_INIT_MODE,
1333
+ VOLTAGE_INIT_TAB_VALUES,
1330
1334
  VOLTAGE_LEVEL,
1331
1335
  VOLTAGE_LEVELS_FORM,
1336
+ VOLTAGE_LEVEL_TAB_FIELDS,
1332
1337
  VOLTAGE_LIMITS_DEFAULT,
1333
1338
  VOLTAGE_LIMITS_MODIFICATION,
1334
1339
  VOLTAGE_REGULATION_MODES,
@@ -1344,6 +1349,7 @@ export {
1344
1349
  VoltageLevelCreationForm,
1345
1350
  VoltageLevelModificationForm,
1346
1351
  VoltageLevelSectionCreationForm,
1352
+ VoltageLevelTab,
1347
1353
  VoltageLevelTopologyModificationForm,
1348
1354
  VoltageRegulationForm,
1349
1355
  VoltageUnitIcon,
@@ -2024,7 +2030,6 @@ export {
2024
2030
  useStateBoolean,
2025
2031
  useStateNumber,
2026
2032
  useTabs,
2027
- useTabsWithError,
2028
2033
  useUniqueNameValidationEn,
2029
2034
  useUniqueNameValidationFr,
2030
2035
  useValid,
@@ -24,6 +24,7 @@ export declare const topBarEn: {
24
24
  'top-bar/developerModeWarning': string;
25
25
  'top-bar/settings': string;
26
26
  'top-bar/minimize': string;
27
+ 'top-bar/expand': string;
27
28
  'about-dialog/title': string;
28
29
  'about-dialog/version': string;
29
30
  'about-dialog/alert-running-old-version-msg': string;
@@ -17,7 +17,8 @@ const topBarEn = {
17
17
  "top-bar/language/sys": "Browser",
18
18
  "top-bar/developerModeWarning": "Developer mode: Some features are incomplete and may not work as expected.",
19
19
  "top-bar/settings": "Settings",
20
- "top-bar/minimize": "Minimize",
20
+ "top-bar/minimize": "Collapse menu",
21
+ "top-bar/expand": "Expand menu",
21
22
  "about-dialog/title": "About",
22
23
  "about-dialog/version": "Version {version}",
23
24
  "about-dialog/alert-running-old-version-msg": "Running old version.\nSave your work and refresh the application to load the latest version.",
@@ -24,6 +24,7 @@ export declare const topBarFr: {
24
24
  'top-bar/developerModeWarning': string;
25
25
  'top-bar/settings': string;
26
26
  'top-bar/minimize': string;
27
+ 'top-bar/expand': string;
27
28
  'about-dialog/title': string;
28
29
  'about-dialog/version': string;
29
30
  'about-dialog/alert-running-old-version-msg': string;
@@ -18,6 +18,7 @@ const topBarFr = {
18
18
  "top-bar/developerModeWarning": "Mode développeur : Certaines fonctionnalités ne sont pas complètes et peuvent ne pas fonctionner comme prévu.",
19
19
  "top-bar/settings": "Réglages",
20
20
  "top-bar/minimize": "Réduire le menu",
21
+ "top-bar/expand": "Développer le menu",
21
22
  "about-dialog/title": "À propos",
22
23
  "about-dialog/version": "Version {version}",
23
24
  "about-dialog/alert-running-old-version-msg": "Ancienne version de l'application.\nVeuillez sauvegarder votre travail et rafraîchir l'application pour charger la dernière version",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gridsuite/commons-ui",
3
- "version": "0.281.0",
3
+ "version": "0.283.0",
4
4
  "description": "common react components for gridsuite applications",
5
5
  "author": "gridsuite team",
6
6
  "homepage": "https://github.com/gridsuite",
@@ -1,7 +0,0 @@
1
- /**
2
- * Copyright (c) 2026, RTE (http://www.rte-france.com)
3
- * This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
- */
7
- export * from './useTabsWithError';
@@ -1,4 +0,0 @@
1
- import { useTabsWithError } from "./useTabsWithError.js";
2
- export {
3
- useTabsWithError
4
- };
@@ -1,15 +0,0 @@
1
- import { FieldConstants } from '../../../utils';
2
- type TabFieldsMap<T extends number> = Readonly<Partial<Record<T, FieldConstants[]>>>;
3
- /**
4
- * Manages tab navigation with automatic error highlighting for react-hook-form-based tabbed forms.
5
- *
6
- * @param tabFields - Maps each tab index to the field names it owns. Must be a module-level
7
- * constant to remain stable across renders.
8
- * @param initialTab - The tab to show on first render.
9
- */
10
- export declare function useTabsWithError<T extends number>(tabFields: TabFieldsMap<T>, initialTab: T): {
11
- tabIndex: T;
12
- setTabIndex: (tab: T) => void;
13
- tabIndexesWithError: T[];
14
- };
15
- export {};
@@ -1,28 +0,0 @@
1
- import { useState, useRef, useEffect, useCallback } from "react";
2
- import { useFormState } from "react-hook-form";
3
- function useTabsWithError(tabFields, initialTab) {
4
- const { errors, submitCount } = useFormState();
5
- const [tabIndex, setTabIndex] = useState(initialTab);
6
- const tabIndexRef = useRef(tabIndex);
7
- const tabIndexesWithError = Object.keys(tabFields).map(Number).filter(
8
- (tab) => tabFields[tab].some((field) => errors[field] !== void 0)
9
- );
10
- const tabIndexesWithErrorRef = useRef(tabIndexesWithError);
11
- tabIndexesWithErrorRef.current = tabIndexesWithError;
12
- useEffect(() => {
13
- const tabs = tabIndexesWithErrorRef.current;
14
- if (tabs.length > 0 && !tabs.includes(tabIndexRef.current)) {
15
- const tab = tabs[0];
16
- tabIndexRef.current = tab;
17
- setTabIndex(tab);
18
- }
19
- }, [submitCount]);
20
- const handleSetTabIndex = useCallback((tab) => {
21
- tabIndexRef.current = tab;
22
- setTabIndex(tab);
23
- }, []);
24
- return { tabIndex, setTabIndex: handleSetTabIndex, tabIndexesWithError };
25
- }
26
- export {
27
- useTabsWithError
28
- };
@@ -1,16 +0,0 @@
1
- import { SyntheticEvent } from 'react';
2
- import { FieldErrors } from 'react-hook-form';
3
- export type UseTabsReturn<TTabValue extends string> = {
4
- selectedTab: TTabValue;
5
- setSelectedTab: (selectedTab: TTabValue) => void;
6
- tabsWithError: TTabValue[];
7
- onTabChange: (event: SyntheticEvent, newValue: TTabValue) => void;
8
- onError: (errors: FieldErrors) => void;
9
- };
10
- export type UseTabsProps<TTabValue extends string> = {
11
- defaultTab: TTabValue;
12
- tabEnum: Record<string, TTabValue>;
13
- errors: FieldErrors;
14
- tabFields?: Record<TTabValue, string[]>;
15
- };
16
- export declare function useTabs<TTabValue extends string>({ defaultTab, tabEnum, errors, tabFields, }: Readonly<UseTabsProps<TTabValue>>): UseTabsReturn<TTabValue>;
@@ -1,65 +0,0 @@
1
- import { useState, useCallback } from "react";
2
- import { get } from "react-hook-form";
3
- import { isObjectEmpty } from "../../../../utils/functions.js";
4
- function useTabs({
5
- defaultTab,
6
- tabEnum,
7
- errors,
8
- tabFields
9
- }) {
10
- const [selectedTab, setSelectedTab] = useState(defaultTab);
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
- );
25
- const onTabChange = useCallback(
26
- (event, newSelectedTab) => {
27
- setSelectedTab(newSelectedTab);
28
- if (!errors || isObjectEmpty(errors)) {
29
- return;
30
- }
31
- const tabsHasError = getTabsWithError(errors);
32
- if (tabsHasError.includes(newSelectedTab)) {
33
- setTabsWithError(tabsHasError.filter((errorTab) => errorTab !== newSelectedTab));
34
- } else {
35
- setTabsWithError(tabsHasError);
36
- }
37
- },
38
- [errors, getTabsWithError]
39
- );
40
- const onError = useCallback(
41
- (_errors) => {
42
- if (!_errors || isObjectEmpty(_errors)) {
43
- return;
44
- }
45
- const tabsHasError = getTabsWithError(_errors);
46
- if (tabsHasError.includes(selectedTab)) {
47
- setTabsWithError(tabsHasError.filter((errorTab) => errorTab !== selectedTab));
48
- } else if (tabsHasError.length > 0) {
49
- setSelectedTab(tabsHasError[0]);
50
- setTabsWithError(tabsHasError.filter((errorTab, index, arr) => errorTab !== arr[0]));
51
- }
52
- },
53
- [getTabsWithError, selectedTab]
54
- );
55
- return {
56
- selectedTab,
57
- setSelectedTab,
58
- tabsWithError,
59
- onTabChange,
60
- onError
61
- };
62
- }
63
- export {
64
- useTabs
65
- };