Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,21 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
import { Parameters, ColumnsDef, ID, NAME, DESCRIPTION, ACTIVATED } from '../parameter-table';
import {
Parameters,
ColumnsDef,
DESCRIPTION,
ACTIVATED,
CONTAINER_NAME,
CONTAINER_ID,
NAME,
ID,
EquipmentsContainer,
} from '../parameter-table';
import { ElementType } from '../../../../utils';
import { CONTINGENCY_LISTS_INFOS, CONTINGENCY_LISTS } from '../constants';
import yup from '../../../../utils/yupConfig';
import { IdName, ContingencyListsInfos } from './types';
import { ContingencyListsInfos } from './types';

export const COLUMNS_DEFINITIONS_CONTINGENCY_LISTS_INFOS: ColumnsDef[] = [
{
Expand Down Expand Up @@ -58,7 +68,10 @@ export const getContingencyListsInfosFormSchema = () => {
})
)
.required()
.min(1, 'FieldIsRequired'),
.when([ACTIVATED], {
is: (activated: boolean) => activated,
then: (schema) => schema.min(1, 'FieldIsRequired'),
}),
[DESCRIPTION]: yup.string(),
[ACTIVATED]: yup.boolean().required(),
})
Expand All @@ -70,9 +83,9 @@ export const getContingencyListsInfosFormSchema = () => {
export const toFormValuesContingencyListsInfos = (contingencyListsInfos: ContingencyListsInfos[]) => {
return {
[CONTINGENCY_LISTS_INFOS]: contingencyListsInfos?.map((contingencyListInfos: ContingencyListsInfos) => ({
[CONTINGENCY_LISTS]: contingencyListInfos[CONTINGENCY_LISTS]?.map((c: IdName) => ({
[NAME]: c[NAME],
[ID]: c[ID],
[CONTINGENCY_LISTS]: contingencyListInfos[CONTINGENCY_LISTS]?.map((c: EquipmentsContainer) => ({
[NAME]: c[CONTAINER_NAME],
[ID]: c[CONTAINER_ID],
})),
[DESCRIPTION]: contingencyListInfos[DESCRIPTION],
[ACTIVATED]: contingencyListInfos[ACTIVATED],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import { Alert, Stack } from '@mui/material';
import { useCallback, useEffect, useState } from 'react';
import { FormattedMessage, useIntl } from 'react-intl';
import { FieldValues, useWatch } from 'react-hook-form';
import { UUID } from 'node:crypto';
import { useCreateRowData } from '../../../../hooks';
import { ColumnsDef, ID, ACTIVATED, ParameterTable } from '../parameter-table';
import { ColumnsDef, ACTIVATED, ParameterTable, CONTAINER_ID } from '../parameter-table';
import { CONTINGENCY_LISTS, CONTINGENCY_LISTS_INFOS } from '../constants';
import { COLUMNS_DEFINITIONS_CONTINGENCY_LISTS_INFOS, ParamContingencyLists } from './columns-definitions';
import { ContingencyCount, ContingencyListsInfos } from './types';
Expand All @@ -21,7 +20,7 @@ export function ContingencyTable({
isBuiltCurrentNode,
}: Readonly<{
showContingencyCount: boolean;
fetchContingencyCount?: (contingencyLists: UUID[] | null) => Promise<ContingencyCount>;
fetchContingencyCount?: (contingencyLists: string[] | null) => Promise<ContingencyCount>;
isBuiltCurrentNode?: boolean; // necessary if we want to show the contingency count
}>) {
const intl = useIntl();
Expand Down Expand Up @@ -58,7 +57,9 @@ export function ContingencyTable({
fetchContingencyCount?.(
contingencyListsInfos
.filter((lists) => lists[ACTIVATED])
.flatMap((lists) => lists[CONTINGENCY_LISTS]?.map((contingencyList) => contingencyList[ID]))
.flatMap((lists) =>
lists[CONTINGENCY_LISTS]?.map((contingencyList) => contingencyList[CONTAINER_ID])
)
)
.then((contingencyCount) => {
setSimulatedContingencyCount(contingencyCount);
Expand Down
10 changes: 3 additions & 7 deletions src/components/parameters/common/contingency-table/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
import { UUID } from 'node:crypto';
import { ACTIVATED, DESCRIPTION, ID, NAME } from '../parameter-table/constants';
import { ACTIVATED, DESCRIPTION } from '../parameter-table/constants';
import { CONTINGENCY_LISTS } from '../constants';
import { EquipmentsContainer } from '../parameter-table/types';

export interface IdName {
[ID]: UUID;
[NAME]: string;
}
export interface ContingencyListsInfos {
[CONTINGENCY_LISTS]: IdName[];
[CONTINGENCY_LISTS]: EquipmentsContainer[];
[DESCRIPTION]: string;
[ACTIVATED]: boolean;
}
Expand Down
2 changes: 2 additions & 0 deletions src/components/parameters/common/parameter-table/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ export const NAME = 'name';
export const ID = 'id';
export const ACTIVATED = 'activated';
export const DESCRIPTION = 'description';
export const CONTAINER_ID = 'containerId';
export const CONTAINER_NAME = 'containerName';
7 changes: 7 additions & 0 deletions src/components/parameters/common/parameter-table/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { CONTAINER_ID, CONTAINER_NAME } from './constants';

/**
* Copyright (c) 2026, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
Expand Down Expand Up @@ -25,3 +27,8 @@ export interface ColumnsDef {
descriptionItems?: boolean;
width?: string;
}

export interface EquipmentsContainer {
[CONTAINER_ID]: string;
[CONTAINER_NAME]: string | null;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import { ReactNode } from 'react';
import { FormattedMessage } from 'react-intl';
import { Box, Grid, LinearProgress } from '@mui/material';
import { UUID } from 'node:crypto';
import { CustomFormProvider, MuiSelectInput } from '../../inputs';
import { parametersStyles } from '../parameters-style';
import { LineSeparator, PARAM_SA_PROVIDER } from '../common';
Expand Down Expand Up @@ -54,7 +53,7 @@ export function SecurityAnalysisParametersForm({
}: Readonly<{
securityAnalysisMethods: UseSecurityAnalysisParametersFormReturn;
showContingencyCount: boolean;
fetchContingencyCount?: (contingencyListIds: UUID[] | null) => Promise<ContingencyCount>;
fetchContingencyCount?: (contingencyListIds: string[] | null) => Promise<ContingencyCount>;
isBuiltCurrentNode?: boolean;
renderTitleFields?: () => ReactNode;
renderActions?: () => ReactNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export function SecurityAnalysisParametersInline({
}: Readonly<{
studyUuid: UUID | null;
parametersBackend: UseParametersBackendReturnProps<ComputingType.SECURITY_ANALYSIS>;
fetchContingencyCount: (contingencyListIds: UUID[] | null) => Promise<ContingencyCount>;
fetchContingencyCount: (contingencyListIds: string[] | null) => Promise<ContingencyCount>;
isBuiltCurrentNode: boolean;
setHaveDirtyFields: (isDirty: boolean) => void;
isDeveloperMode: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { useSnackMessage } from '../../../hooks';
import { snackWithFallback } from '../../../utils/error';
import { SAParameters } from './types';
import { getSAParametersFormSchema, toFormValueSaParameters } from './columns-definitions';
import { ID, NAME, DESCRIPTION, ACTIVATED } from '../common/parameter-table';
import { NAME, DESCRIPTION, ACTIVATED, CONTAINER_ID, CONTAINER_NAME, ID } from '../common/parameter-table';
import { ContingencyListsInfos } from '../common/contingency-table/types';

export interface UseSecurityAnalysisParametersFormReturn {
Expand Down Expand Up @@ -100,10 +100,12 @@ export const useSecurityAnalysisParametersForm = (
return [];
}
return formContingencyListsInfos.map((contingencyListsInfos) => ({
[CONTINGENCY_LISTS]: contingencyListsInfos[CONTINGENCY_LISTS]?.map((c: Record<string, string>) => ({
[ID]: c[ID],
[NAME]: c[NAME],
})),
[CONTINGENCY_LISTS]: contingencyListsInfos[CONTINGENCY_LISTS]?.map(
(container: Record<string, string>) => ({
[CONTAINER_ID]: container[ID],
[CONTAINER_NAME]: container[NAME],
})
),
[DESCRIPTION]: contingencyListsInfos[DESCRIPTION],
[ACTIVATED]: contingencyListsInfos[ACTIVATED],
}));
Expand Down
12 changes: 6 additions & 6 deletions src/components/parameters/sensi/columns-definitions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
SUPERVISED_VOLTAGE_LEVELS,
} from './constants';
import { ElementType, EquipmentType } from '../../../utils';
import { CONTINGENCIES } from '../common';
import { CONTINGENCY_LISTS } from '../common';
import { ACTIVATED, ColumnsDef, Parameters } from '../common/parameter-table';

export const MONITORED_BRANCHES_EQUIPMENT_TYPES = [EquipmentType.LINE, EquipmentType.TWO_WINDINGS_TRANSFORMER];
Expand Down Expand Up @@ -83,7 +83,7 @@ export const COLUMNS_DEFINITIONS_INJECTIONS_SET: ColumnsDef[] = [
},
{
label: 'ContingencyLists',
dataKey: CONTINGENCIES,
dataKey: CONTINGENCY_LISTS,
initialValue: [],
editable: true,
directoryItems: true,
Expand Down Expand Up @@ -122,7 +122,7 @@ export const COLUMNS_DEFINITIONS_INJECTIONS = [
},
{
label: 'ContingencyLists',
dataKey: CONTINGENCIES,
dataKey: CONTINGENCY_LISTS,
initialValue: [],
editable: true,
directoryItems: true,
Expand Down Expand Up @@ -170,7 +170,7 @@ export const COLUMNS_DEFINITIONS_HVDCS = [
},
{
label: 'ContingencyLists',
dataKey: CONTINGENCIES,
dataKey: CONTINGENCY_LISTS,
initialValue: [],
editable: true,
directoryItems: true,
Expand Down Expand Up @@ -218,7 +218,7 @@ export const COLUMNS_DEFINITIONS_PSTS = [
},
{
label: 'ContingencyLists',
dataKey: CONTINGENCIES,
dataKey: CONTINGENCY_LISTS,
initialValue: [],
editable: true,
directoryItems: true,
Expand Down Expand Up @@ -257,7 +257,7 @@ export const COLUMNS_DEFINITIONS_NODES = [
},
{
label: 'ContingencyLists',
dataKey: CONTINGENCIES,
dataKey: CONTINGENCY_LISTS,
initialValue: [],
editable: true,
directoryItems: true,
Expand Down
2 changes: 0 additions & 2 deletions src/components/parameters/sensi/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ export const PARAMETER_SENSI_INJECTION = 'sensitivityInjection';
export const PARAMETER_SENSI_HVDC = 'sensitivityHVDC';
export const PARAMETER_SENSI_PST = 'sensitivityPST';
export const PARAMETER_SENSI_NODES = 'sensitivityNodes';
export const CONTAINER_ID = 'containerId';
export const CONTAINER_NAME = 'containerName';

export const MAX_RESULTS_COUNT = 500000;
export const MAX_VARIABLES_COUNT = 5000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { useSensitivityAnalysisParametersForm } from './use-sensitivity-analysis
import { SensitivityAnalysisParametersForm } from './sensitivity-analysis-parameters-form';
import { PopupConfirmationDialog } from '../../dialogs';
import { snackWithFallback } from '../../../utils/error';
import { EquipmentsContainer } from '../common/parameter-table';

interface SensitivityAnalysisParametersProps {
studyUuid: UUID | null;
Expand Down Expand Up @@ -71,7 +72,7 @@ export function SensitivityAnalysisParametersInline({
if (newParams && newParams.length > 0) {
setOpenSelectParameterDialog(false);
fetchSensitivityAnalysisParameters(newParams[0].id)
.then((parameters: SensitivityAnalysisParametersInfos) => {
.then((parameters: SensitivityAnalysisParametersInfos<EquipmentsContainer>) => {
console.info(`loading the following sensi parameters : ${parameters.uuid}`);
reset(sensitivityAnalysisMethods.fromSensitivityAnalysisParamsDataToFormValues(parameters), {
keepDefaultValues: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { yupResolver } from '@hookform/resolvers/yup';
import { type ObjectSchema } from 'yup';
import { useCallback, useEffect, useMemo, useState } from 'react';
import type { UUID } from 'node:crypto';
import { ComputingType, CONTINGENCIES, PROVIDER } from '../common';
import { ComputingType, CONTINGENCY_LISTS, PROVIDER } from '../common';
import {
ElementType,
FactorsCount,
Expand All @@ -30,8 +30,6 @@ import {
} from './utils';
import {
ANGLE_FLOW_SENSITIVITY_VALUE_THRESHOLD,
CONTAINER_ID,
CONTAINER_NAME,
DEFAULT_FACTOR_COUNT,
DISTRIBUTION_TYPE,
EQUIPMENTS_IN_VOLTAGE_REGULATION,
Expand All @@ -58,15 +56,17 @@ import {
import { DEFAULT_TIMEOUT_MS, IGNORE_SIGNAL, updateParameter } from '../../../services';
import { useSnackMessage } from '../../../hooks';
import { getNameElementEditorEmptyFormData } from '../common/name-element-editor';
import { ACTIVATED } from '../common/parameter-table';
import { ACTIVATED, CONTAINER_ID, CONTAINER_NAME, EquipmentsContainer } from '../common/parameter-table';

export interface UseSensitivityAnalysisParametersReturn {
formMethods: UseFormReturn<any>;
formSchema: ObjectSchema<any>;
formattedProviders: { id: string; label: string }[];
fromSensitivityAnalysisParamsDataToFormValues: (parameters: SensitivityAnalysisParametersInfos) => any;
formatNewParams: (formData: Record<string, any>) => SensitivityAnalysisParametersInfos;
params: SensitivityAnalysisParametersInfos | null;
fromSensitivityAnalysisParamsDataToFormValues: (
parameters: SensitivityAnalysisParametersInfos<EquipmentsContainer>
) => any;
formatNewParams: (formData: Record<string, any>) => SensitivityAnalysisParametersInfos<EquipmentsContainer>;
params: SensitivityAnalysisParametersInfos<EquipmentsContainer> | null;
paramsLoaded: boolean;
isStudyLinked: boolean;
onSaveInline: (formData: Record<string, any>) => void;
Expand Down Expand Up @@ -116,7 +116,8 @@ export const useSensitivityAnalysisParametersForm = ({
const [isLoading, setIsLoading] = useState(false);
const [isSubmitAction, setIsSubmitAction] = useState(false);

const [factorCountParams, setFactorCountParams] = useState<SensitivityAnalysisParametersInfos | null>(null);
const [factorCountParams, setFactorCountParams] =
useState<SensitivityAnalysisParametersInfos<EquipmentsContainer> | null>(null);

const emptyFormData = useMemo(() => {
return {
Expand Down Expand Up @@ -255,7 +256,9 @@ export const useSensitivityAnalysisParametersForm = ({
}, [updateFactorCount]);

const fromSensitivityAnalysisParamsDataToFormValues = useCallback(
(parameters: SensitivityAnalysisParametersInfos): SensitivityAnalysisParametersFormSchema => {
(
parameters: SensitivityAnalysisParametersInfos<EquipmentsContainer>
): SensitivityAnalysisParametersFormSchema => {
return {
[PROVIDER]: parameters[PROVIDER],
[FLOW_FLOW_SENSITIVITY_VALUE_THRESHOLD]: parameters.flowFlowSensitivityValueThreshold,
Expand All @@ -279,8 +282,8 @@ export const useSensitivityAnalysisParametersForm = ({
};
}) ?? [],
[DISTRIBUTION_TYPE]: sensiInjectionsSet[DISTRIBUTION_TYPE],
[CONTINGENCIES]:
sensiInjectionsSet[CONTINGENCIES]?.map((sensiInjection) => {
[CONTINGENCY_LISTS]:
sensiInjectionsSet[CONTINGENCY_LISTS]?.map((sensiInjection) => {
return {
[FieldConstants.ID]: sensiInjection[CONTAINER_ID],
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
Expand All @@ -307,8 +310,8 @@ export const useSensitivityAnalysisParametersForm = ({
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
};
}) ?? [],
[CONTINGENCIES]:
sensiInjections[CONTINGENCIES]?.map((sensiInjection) => {
[CONTINGENCY_LISTS]:
sensiInjections[CONTINGENCY_LISTS]?.map((sensiInjection) => {
return {
[FieldConstants.ID]: sensiInjection[CONTAINER_ID],
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
Expand All @@ -335,8 +338,8 @@ export const useSensitivityAnalysisParametersForm = ({
};
}) ?? [],
[SENSITIVITY_TYPE]: sensiInjectionsSet[SENSITIVITY_TYPE],
[CONTINGENCIES]:
sensiInjectionsSet[CONTINGENCIES]?.map((sensiInjection) => {
[CONTINGENCY_LISTS]:
sensiInjectionsSet[CONTINGENCY_LISTS]?.map((sensiInjection) => {
return {
[FieldConstants.ID]: sensiInjection[CONTAINER_ID],
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
Expand All @@ -363,8 +366,8 @@ export const useSensitivityAnalysisParametersForm = ({
};
}) ?? [],
[SENSITIVITY_TYPE]: sensiInjectionsSet[SENSITIVITY_TYPE],
[CONTINGENCIES]:
sensiInjectionsSet[CONTINGENCIES]?.map((sensiInjection) => {
[CONTINGENCY_LISTS]:
sensiInjectionsSet[CONTINGENCY_LISTS]?.map((sensiInjection) => {
return {
[FieldConstants.ID]: sensiInjection[CONTAINER_ID],
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
Expand All @@ -390,8 +393,8 @@ export const useSensitivityAnalysisParametersForm = ({
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
};
}) ?? [],
[CONTINGENCIES]:
sensiInjectionsSet[CONTINGENCIES]?.map((sensiInjection) => {
[CONTINGENCY_LISTS]:
sensiInjectionsSet[CONTINGENCY_LISTS]?.map((sensiInjection) => {
return {
[FieldConstants.ID]: sensiInjection[CONTAINER_ID],
[FieldConstants.NAME]: sensiInjection[CONTAINER_NAME],
Expand Down
Loading
Loading