From 8877e3e3ca8e7cedf238a633837015d214d1074f Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Mon, 10 Nov 2025 16:22:41 +0100 Subject: [PATCH 1/5] add pcc min parameters Signed-off-by: SOUISSI Maissa (Externe) --- src/components/parameters/index.ts | 1 + src/components/parameters/pcc-min/index.ts | 10 ++ .../parameters/pcc-min/pcc-min-form-utils.ts | 34 +++++ .../pcc-min/pcc-min-parameters-form.tsx | 100 ++++++++++++++ .../pcc-min/pcc-min-parameters-inline.tsx | 95 +++++++++++++ src/components/parameters/pcc-min/pcc-min.ts | 32 +++++ .../parameters/pcc-min/pcc-min.type.ts | 17 +++ .../pcc-min/use-pcc-min-parameters-form.ts | 127 ++++++++++++++++++ src/translations/en/parameters.ts | 3 + src/translations/fr/parameters.ts | 3 + 10 files changed, 422 insertions(+) create mode 100644 src/components/parameters/pcc-min/index.ts create mode 100644 src/components/parameters/pcc-min/pcc-min-form-utils.ts create mode 100644 src/components/parameters/pcc-min/pcc-min-parameters-form.tsx create mode 100644 src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx create mode 100644 src/components/parameters/pcc-min/pcc-min.ts create mode 100644 src/components/parameters/pcc-min/pcc-min.type.ts create mode 100644 src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts diff --git a/src/components/parameters/index.ts b/src/components/parameters/index.ts index 5fd74c43..985547ce 100644 --- a/src/components/parameters/index.ts +++ b/src/components/parameters/index.ts @@ -10,5 +10,6 @@ export * from './network-visualizations'; export * from './loadflow'; export * from './short-circuit'; export * from './voltage-init'; +export * from './pcc-min'; export * from './security-analysis'; export * from './sensi'; diff --git a/src/components/parameters/pcc-min/index.ts b/src/components/parameters/pcc-min/index.ts new file mode 100644 index 00000000..8aea8f9f --- /dev/null +++ b/src/components/parameters/pcc-min/index.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +export * from './pcc-min.type'; +export * from './pcc-min-parameters-inline'; +export * from './pcc-min'; diff --git a/src/components/parameters/pcc-min/pcc-min-form-utils.ts b/src/components/parameters/pcc-min/pcc-min-form-utils.ts new file mode 100644 index 00000000..2a975fec --- /dev/null +++ b/src/components/parameters/pcc-min/pcc-min-form-utils.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { NAME } from '../../inputs'; +import { FILTER_ID, FILTER_NAME, FILTERS, ID } from '../voltage-init'; +import { PccMinParameters } from './pcc-min.type'; + +export const fromPccMinParametersFormToParamValues = (newParams: Record): PccMinParameters | null => ({ + filters: + newParams[FILTERS]?.map((filter: any) => ({ + filterId: filter[ID], + filterName: filter[NAME], + })) ?? [], +}); + +export const fromPccMinParamsDataToFormValues = (parameters: PccMinParameters | null): Record => ({ + [FILTERS]: + parameters?.[FILTERS]?.map((filter) => ({ + [ID]: filter[FILTER_ID], + [NAME]: filter[FILTER_NAME], + })) ?? [], +}); + +export const fromStudyPccMinParamsDataToFormValues = (parameters: PccMinParameters | null): Record => ({ + [FILTERS]: + parameters?.[FILTERS]?.map((filter) => ({ + [ID]: filter[FILTER_ID], + [NAME]: filter[FILTER_NAME], + })) ?? [], +}); diff --git a/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx b/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx new file mode 100644 index 00000000..190828e4 --- /dev/null +++ b/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import { Box, Grid, LinearProgress } from '@mui/material'; +import { ReactNode } from 'react'; +import { CustomFormProvider } from '../../inputs'; +import { ParameterLineDirectoryItemsInput } from '../common'; +import type { MuiStyles } from '../../../utils/styles'; +import { ElementType, EquipmentType } from '../../../utils'; +import { UsePccMinParametersFormReturn } from './use-pcc-min-parameters-form'; +import { FILTERS } from '../voltage-init'; + +export const styles = { + gridWithActions: (theme) => ({ + overflowY: 'auto', + overflowX: 'hidden', + paddingRight: theme.spacing(2), + paddingTop: theme.spacing(2), + paddingBottom: theme.spacing(1), + flexGrow: 1, + maxHeight: '85%', + }), + gridWithoutActions: (theme) => ({ + overflowY: 'auto', + overflowX: 'hidden', + paddingRight: theme.spacing(2), + paddingTop: theme.spacing(2), + paddingBottom: theme.spacing(1), + flexGrow: 1, + maxHeight: '100%', + }), +} as const satisfies MuiStyles; + +interface PccMinParametersFormProps { + pccMinMethods: UsePccMinParametersFormReturn; + renderTitleFields?: () => ReactNode; + renderActions?: () => ReactNode; +} + +export function PccMinParametersForm({ + pccMinMethods, + renderTitleFields, + renderActions, +}: Readonly) { + const { formMethods, formSchema, paramsLoading } = pccMinMethods; + + return ( + + + + + {renderTitleFields?.()} + + {paramsLoading ? ( + + ) : ( + + + + + + )} + + {renderActions && ( + + {renderActions()} + + )} + + + ); +} diff --git a/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx b/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx new file mode 100644 index 00000000..59c61506 --- /dev/null +++ b/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { useCallback, useEffect, useState } from 'react'; +import { Box, Grid } from '@mui/material'; +import { FormattedMessage } from 'react-intl'; +import type { UUID } from 'node:crypto'; +import { useSnackMessage } from '../../../hooks'; +import { SubmitButton } from '../../inputs'; +import { LabelledButton } from '../common'; +import { PopupConfirmationDialog } from '../../dialogs'; +import { PccMinParameters } from './pcc-min.type'; +import { UsePccMinParametersForm } from './use-pcc-min-parameters-form'; +import { PccMinParametersForm } from './pcc-min-parameters-form'; +import { updatePccMinParameters } from './pcc-min'; + +export function PccMinParametersInLine({ + studyUuid, + setHaveDirtyFields, + pccMinParameters, +}: Readonly<{ + studyUuid: UUID | null; + setHaveDirtyFields: (isDirty: boolean) => void; + pccMinParameters: PccMinParameters | null; +}>) { + const pccMinMethods = UsePccMinParametersForm({ + parametersUuid: null, + name: null, + description: null, + studyUuid, + parameters: pccMinParameters, + }); + + const [openResetConfirmation, setOpenResetConfirmation] = useState(false); + const { snackError } = useSnackMessage(); + + const { formState, handleSubmit } = pccMinMethods.formMethods; + + const resetPccMinParameters = useCallback(() => { + updatePccMinParameters(studyUuid, null) // null means Reset + .catch((error) => { + snackError({ + messageTxt: error.message, + headerId: 'updatePccMinParametersError', + }); + }); + + setOpenResetConfirmation(false); + }, [studyUuid, snackError]); + + const handleResetClick = useCallback(() => { + setOpenResetConfirmation(true); + }, []); + + const handleCancelReset = useCallback(() => { + setOpenResetConfirmation(false); + }, []); + + useEffect(() => { + setHaveDirtyFields(!!Object.keys(formState.dirtyFields).length); + }, [formState, setHaveDirtyFields]); + + return ( + { + return ( + + + + + + + + + {/* Reset Confirmation Dialog */} + {openResetConfirmation && ( + + )} + + ); + }} + /> + ); +} diff --git a/src/components/parameters/pcc-min/pcc-min.ts b/src/components/parameters/pcc-min/pcc-min.ts new file mode 100644 index 00000000..9fc2c15e --- /dev/null +++ b/src/components/parameters/pcc-min/pcc-min.ts @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 type { UUID } from 'node:crypto'; +import { backendFetch, backendFetchJson } from '../../../services/utils'; +import { getStudyUrl } from '../../../services/security-analysis'; +import { PREFIX_STUDY_QUERIES } from '../../../services/loadflow'; +import { PccMinParameters } from './pcc-min.type'; + +export function getPccMinStudyParameters(studyUuid: UUID): Promise { + console.info('get pcc min study parameters'); + const getPccMintParams = `${getStudyUrl(studyUuid)}/pcc-min/parameters`; + console.debug(getPccMintParams); + return backendFetchJson(getPccMintParams); +} + +export function updatePccMinParameters(studyUuid: UUID | null, newParams: PccMinParameters | null) { + console.info('set study pcc min parameters'); + const url = `${PREFIX_STUDY_QUERIES}/v1/studies/${studyUuid}/pcc-min/parameters`; + console.debug(url); + return backendFetch(url, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(newParams), + }); +} diff --git a/src/components/parameters/pcc-min/pcc-min.type.ts b/src/components/parameters/pcc-min/pcc-min.type.ts new file mode 100644 index 00000000..80ba3eba --- /dev/null +++ b/src/components/parameters/pcc-min/pcc-min.type.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 type { UUID } from 'node:crypto'; +import { FILTER_ID, FILTER_NAME, FILTERS } from '../voltage-init'; + +type FilterIdentifier = { + [FILTER_ID]: UUID; + [FILTER_NAME]: string; +}; + +export type PccMinParameters = { + [FILTERS]: FilterIdentifier[]; +}; diff --git a/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts b/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts new file mode 100644 index 00000000..205e8a7b --- /dev/null +++ b/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts @@ -0,0 +1,127 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import { useForm, UseFormReturn } from 'react-hook-form'; +import { yupResolver } from '@hookform/resolvers/yup'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { ObjectSchema } from 'yup'; +import type { UUID } from 'node:crypto'; +import yup from '../../../utils/yupConfig'; +import { + fromPccMinParametersFormToParamValues, + fromPccMinParamsDataToFormValues, + fromStudyPccMinParamsDataToFormValues, +} from './pcc-min-form-utils'; +import { PccMinParameters } from './pcc-min.type'; +import { FILTERS, ID } from '../voltage-init'; +import { getPccMinStudyParameters, updatePccMinParameters } from './pcc-min'; +import { useSnackMessage } from '../../../hooks'; +import { NAME } from '../../inputs'; + +export interface UsePccMinParametersFormReturn { + formMethods: UseFormReturn; + formSchema: ObjectSchema; + paramsLoading: boolean; + onSaveInline: (formData: Record) => void; +} + +// GridExplore versus GridStudy exclusive input params +type UsePccMinParametersFormProps = + | { + parametersUuid: UUID; + name: string; + description: string | null; + studyUuid: null; + parameters: null; + } + | { + parametersUuid: null; + name: null; + description: null; + studyUuid: UUID | null; + parameters: PccMinParameters | null; + }; + +export const UsePccMinParametersForm = ({ + parametersUuid, + studyUuid, + parameters, +}: UsePccMinParametersFormProps): UsePccMinParametersFormReturn => { + const [paramsLoading, setParamsLoading] = useState(false); + const { snackError } = useSnackMessage(); + + const formSchema = useMemo(() => { + return yup.object({ + [FILTERS]: yup.array().of( + yup.object().shape({ + [ID]: yup.string().required(), + [NAME]: yup.string().required(), + }) + ), + }); + }, []); + + const formMethods = useForm({ + defaultValues: { + [FILTERS]: [], + }, + resolver: yupResolver(formSchema as unknown as yup.ObjectSchema), + }); + + const { reset } = formMethods; + + const onSaveInline = useCallback( + (formData: Record) => { + if (studyUuid) { + updatePccMinParameters(studyUuid, fromPccMinParametersFormToParamValues(formData)).catch((error) => { + snackError({ + messageTxt: error.message, + headerId: 'updatePccMinParametersError', + }); + }); + } + }, + [snackError, studyUuid] + ); + + // GridExplore init case + useEffect(() => { + if (parametersUuid) { + const timer = setTimeout(() => { + setParamsLoading(true); + }, 700); + getPccMinStudyParameters(parametersUuid) + .then((params) => { + reset(fromPccMinParamsDataToFormValues(params)); + }) + .catch((error: Error) => { + snackError({ + messageTxt: error.message, + headerId: 'paramsRetrievingError', + }); + }) + .finally(() => { + clearTimeout(timer); + setParamsLoading(false); + }); + } + }, [parametersUuid, reset, snackError]); + + // GridStudy init case + useEffect(() => { + if (parameters) { + reset(fromStudyPccMinParamsDataToFormValues(parameters)); + } + }, [parameters, reset]); + + return { + formMethods, + formSchema, + paramsLoading, + onSaveInline, + }; +}; diff --git a/src/translations/en/parameters.ts b/src/translations/en/parameters.ts index 79361916..f35e6c9d 100644 --- a/src/translations/en/parameters.ts +++ b/src/translations/en/parameters.ts @@ -257,4 +257,7 @@ export const parametersEn = { // Other resetLoadFlowParametersWarning: 'Impossible to retrieve the load flow parameters defined in the user profile (default values are used)', + PccMinParametersError: 'An error occurred while updating the pcc min parameters', + updatePccMinParametersError: 'An error occurred while updating the pcc min parameters', + pccMinParamFilter: 'Definition of contingencies on voltage levels', }; diff --git a/src/translations/fr/parameters.ts b/src/translations/fr/parameters.ts index f36a5835..d6eb7ba9 100644 --- a/src/translations/fr/parameters.ts +++ b/src/translations/fr/parameters.ts @@ -280,4 +280,7 @@ export const parametersFr = { // Other 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)', + PccMinParametersError: 'Erreur lors de la mise à jour des paramètres de pcc du min', + updatePccMinParametersError: 'Une erreur est survenue lors de la mise a jour des paramètres de pcc min', + pccMinParamFilter: 'Définition des postes en défaut', }; From 7d8efe61c63f2954eb800c43b23cccd6b33707aa Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Thu, 13 Nov 2025 21:24:02 +0100 Subject: [PATCH 2/5] fixes ,circular dependency Signed-off-by: SOUISSI Maissa (Externe) --- src/components/parameters/pcc-min/index.ts | 2 -- .../parameters/pcc-min/pcc-min-form-utils.ts | 4 ++-- .../parameters/pcc-min/pcc-min-parameters-form.tsx | 2 +- .../pcc-min/pcc-min-parameters-inline.tsx | 3 +-- .../pcc-min/use-pcc-min-parameters-form.ts | 5 ++--- src/components/parameters/sensi/utils.ts | 2 +- .../parameters/voltage-init/constants.ts | 5 +---- .../use-voltage-init-parameters-form.ts | 3 +-- .../voltage-init/voltage-init-form-utils.ts | 5 +---- .../parameters/voltage-init/voltage-init.type.ts | 10 +--------- .../voltage-init/voltage-limits-parameters.tsx | 2 +- src/services/index.ts | 1 + .../parameters/pcc-min => services}/pcc-min.ts | 12 ++++++++---- .../constants/filterConstant.ts} | 14 +++++++------- src/utils/constants/index.ts | 1 + 15 files changed, 29 insertions(+), 42 deletions(-) rename src/{components/parameters/pcc-min => services}/pcc-min.ts (77%) rename src/{components/parameters/pcc-min/pcc-min.type.ts => utils/constants/filterConstant.ts} (60%) diff --git a/src/components/parameters/pcc-min/index.ts b/src/components/parameters/pcc-min/index.ts index 8aea8f9f..6a19888b 100644 --- a/src/components/parameters/pcc-min/index.ts +++ b/src/components/parameters/pcc-min/index.ts @@ -5,6 +5,4 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -export * from './pcc-min.type'; export * from './pcc-min-parameters-inline'; -export * from './pcc-min'; diff --git a/src/components/parameters/pcc-min/pcc-min-form-utils.ts b/src/components/parameters/pcc-min/pcc-min-form-utils.ts index 2a975fec..72d16c14 100644 --- a/src/components/parameters/pcc-min/pcc-min-form-utils.ts +++ b/src/components/parameters/pcc-min/pcc-min-form-utils.ts @@ -5,9 +5,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +import { PccMinParameters } from '../../../services'; +import { FILTER_ID, FILTER_NAME, FILTERS, ID } from '../../../utils/constants/filterConstant'; import { NAME } from '../../inputs'; -import { FILTER_ID, FILTER_NAME, FILTERS, ID } from '../voltage-init'; -import { PccMinParameters } from './pcc-min.type'; export const fromPccMinParametersFormToParamValues = (newParams: Record): PccMinParameters | null => ({ filters: diff --git a/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx b/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx index 190828e4..b0c374ca 100644 --- a/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx +++ b/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx @@ -12,7 +12,7 @@ import { ParameterLineDirectoryItemsInput } from '../common'; import type { MuiStyles } from '../../../utils/styles'; import { ElementType, EquipmentType } from '../../../utils'; import { UsePccMinParametersFormReturn } from './use-pcc-min-parameters-form'; -import { FILTERS } from '../voltage-init'; +import { FILTERS } from '../../../utils/constants/filterConstant'; export const styles = { gridWithActions: (theme) => ({ diff --git a/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx b/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx index 59c61506..14513b19 100644 --- a/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx +++ b/src/components/parameters/pcc-min/pcc-min-parameters-inline.tsx @@ -13,10 +13,9 @@ import { useSnackMessage } from '../../../hooks'; import { SubmitButton } from '../../inputs'; import { LabelledButton } from '../common'; import { PopupConfirmationDialog } from '../../dialogs'; -import { PccMinParameters } from './pcc-min.type'; import { UsePccMinParametersForm } from './use-pcc-min-parameters-form'; import { PccMinParametersForm } from './pcc-min-parameters-form'; -import { updatePccMinParameters } from './pcc-min'; +import { PccMinParameters, updatePccMinParameters } from '../../../services/pcc-min'; export function PccMinParametersInLine({ studyUuid, diff --git a/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts b/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts index 205e8a7b..f085eef6 100644 --- a/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts +++ b/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts @@ -16,11 +16,10 @@ import { fromPccMinParamsDataToFormValues, fromStudyPccMinParamsDataToFormValues, } from './pcc-min-form-utils'; -import { PccMinParameters } from './pcc-min.type'; -import { FILTERS, ID } from '../voltage-init'; -import { getPccMinStudyParameters, updatePccMinParameters } from './pcc-min'; import { useSnackMessage } from '../../../hooks'; import { NAME } from '../../inputs'; +import { FILTERS, ID } from '../../../utils/constants/filterConstant'; +import { getPccMinStudyParameters, PccMinParameters, updatePccMinParameters } from '../../../services/pcc-min'; export interface UsePccMinParametersFormReturn { formMethods: UseFormReturn; diff --git a/src/components/parameters/sensi/utils.ts b/src/components/parameters/sensi/utils.ts index 840840b4..b11d8c43 100644 --- a/src/components/parameters/sensi/utils.ts +++ b/src/components/parameters/sensi/utils.ts @@ -33,7 +33,7 @@ import { DistributionType, SensitivityType } from '../../../utils'; import { PROVIDER } from '../common'; import { getNameElementEditorSchema } from '../common/name-element-editor'; import { NAME } from '../../inputs'; -import { ID } from '../voltage-init'; +import { ID } from '../../../utils/constants/filterConstant'; const getMonitoredBranchesSchema = () => { return { diff --git a/src/components/parameters/voltage-init/constants.ts b/src/components/parameters/voltage-init/constants.ts index 2973c074..35b76c76 100644 --- a/src/components/parameters/voltage-init/constants.ts +++ b/src/components/parameters/voltage-init/constants.ts @@ -19,10 +19,8 @@ export const DEFAULT_REACTIVE_SLACKS_THRESHOLD = 500; export const DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD = 0; export const REACTIVE_SLACKS_THRESHOLD = 'reactiveSlacksThreshold'; export const SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD = 'shuntCompensatorActivationThreshold'; -export const ID = 'id'; export const PRIORITY = 'priority'; -export const FILTER_ID = 'filterId'; -export const FILTER_NAME = 'filterName'; + export const SELECTION_TYPE = 'selectionType'; export const UPDATE_BUS_VOLTAGE = 'updateBusVoltage'; export const VOLTAGE_LIMITS_MODIFICATION = 'voltageLimitsModification'; @@ -38,4 +36,3 @@ export const RATIO_TAP_CHANGER_TARGET_V = 'ratioTapChangerTargetV'; export const LEG_SIDE = 'legSide'; export const HIGH_VOLTAGE_LIMIT = 'highVoltageLimit'; export const LOW_VOLTAGE_LIMIT = 'lowVoltageLimit'; -export const FILTERS = 'filters'; diff --git a/src/components/parameters/voltage-init/use-voltage-init-parameters-form.ts b/src/components/parameters/voltage-init/use-voltage-init-parameters-form.ts index 46fb6bc6..3c1428ac 100644 --- a/src/components/parameters/voltage-init/use-voltage-init-parameters-form.ts +++ b/src/components/parameters/voltage-init/use-voltage-init-parameters-form.ts @@ -13,11 +13,9 @@ import type { UUID } from 'node:crypto'; import yup from '../../../utils/yupConfig'; import { DESCRIPTION, NAME } from '../../inputs'; import { - FILTERS, GENERAL_APPLY_MODIFICATIONS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, - ID, LOW_VOLTAGE_LIMIT, REACTIVE_SLACKS_THRESHOLD, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, @@ -47,6 +45,7 @@ import { fromVoltageInitParamsDataToFormValues, } from './voltage-init-form-utils'; import { SELECTED } from '../../dnd-table'; +import { FILTERS, ID } from '../../../utils/constants/filterConstant'; export interface UseVoltageInitParametersFormReturn { formMethods: UseFormReturn; diff --git a/src/components/parameters/voltage-init/voltage-init-form-utils.ts b/src/components/parameters/voltage-init/voltage-init-form-utils.ts index 23870880..0a9b5d30 100644 --- a/src/components/parameters/voltage-init/voltage-init-form-utils.ts +++ b/src/components/parameters/voltage-init/voltage-init-form-utils.ts @@ -8,11 +8,9 @@ import type { UUID } from 'node:crypto'; import { EquipmentsSelectionType, VoltageInitParameters, VoltageInitStudyParameters } from './voltage-init.type'; import { - FILTERS, GENERAL_APPLY_MODIFICATIONS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, - ID, LOW_VOLTAGE_LIMIT, REACTIVE_SLACKS_THRESHOLD, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, @@ -29,12 +27,11 @@ import { DEFAULT_UPDATE_BUS_VOLTAGE, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, - FILTER_ID, - FILTER_NAME, PRIORITY, } from './constants'; import { NAME } from '../../inputs'; import { SELECTED } from '../../dnd-table'; +import { FILTER_ID, FILTER_NAME, FILTERS, ID } from '../../../utils/constants/filterConstant'; export const fromVoltageInitParametersFormToParamValues = ( newParams: Record diff --git a/src/components/parameters/voltage-init/voltage-init.type.ts b/src/components/parameters/voltage-init/voltage-init.type.ts index 54682e91..e174fcb5 100644 --- a/src/components/parameters/voltage-init/voltage-init.type.ts +++ b/src/components/parameters/voltage-init/voltage-init.type.ts @@ -4,11 +4,8 @@ * 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 type { UUID } from 'node:crypto'; +import { FilterIdentifier, FILTERS } from '../../../utils/constants/filterConstant'; import { - FILTER_ID, - FILTER_NAME, - FILTERS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, LOW_VOLTAGE_LIMIT, @@ -29,11 +26,6 @@ export enum EquipmentsSelectionType { NONE_EXCEPT = 'NONE_EXCEPT', } -type FilterIdentifier = { - [FILTER_ID]: UUID; - [FILTER_NAME]: string; -}; - type VoltageLimitParam = { [FILTERS]: FilterIdentifier[]; [LOW_VOLTAGE_LIMIT]: number; diff --git a/src/components/parameters/voltage-init/voltage-limits-parameters.tsx b/src/components/parameters/voltage-init/voltage-limits-parameters.tsx index 341870da..35263d39 100644 --- a/src/components/parameters/voltage-init/voltage-limits-parameters.tsx +++ b/src/components/parameters/voltage-init/voltage-limits-parameters.tsx @@ -11,7 +11,6 @@ import { Info as InfoIcon } from '@mui/icons-material'; import { Grid, IconButton, Tooltip, Typography } from '@mui/material'; import { FormattedMessage, useIntl } from 'react-intl'; import { - FILTERS, HIGH_VOLTAGE_LIMIT, LOW_VOLTAGE_LIMIT, VOLTAGE_LIMITS_DEFAULT, @@ -20,6 +19,7 @@ import { import { ElementType, EquipmentType } from '../../../utils'; import { VoltageAdornment } from '../common'; import { DndColumn, DndColumnType, DndTable, SELECTED } from '../../dnd-table'; +import { FILTERS } from '../../../utils/constants/filterConstant'; export function VoltageLimitsParameters() { const intl = useIntl(); diff --git a/src/services/index.ts b/src/services/index.ts index 491a7fc7..b56a4256 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -13,5 +13,6 @@ export * from './study'; export * from './study-config'; export * from './userAdmin'; export * from './voltage-init'; +export * from './pcc-min'; export * from './security-analysis'; export { CustomError } from './businessErrorCode'; diff --git a/src/components/parameters/pcc-min/pcc-min.ts b/src/services/pcc-min.ts similarity index 77% rename from src/components/parameters/pcc-min/pcc-min.ts rename to src/services/pcc-min.ts index 9fc2c15e..99d8d928 100644 --- a/src/components/parameters/pcc-min/pcc-min.ts +++ b/src/services/pcc-min.ts @@ -5,10 +5,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import type { UUID } from 'node:crypto'; -import { backendFetch, backendFetchJson } from '../../../services/utils'; -import { getStudyUrl } from '../../../services/security-analysis'; -import { PREFIX_STUDY_QUERIES } from '../../../services/loadflow'; -import { PccMinParameters } from './pcc-min.type'; +import { backendFetch, backendFetchJson } from './utils'; +import { getStudyUrl } from './security-analysis'; +import { PREFIX_STUDY_QUERIES } from './loadflow'; +import { FilterIdentifier, FILTERS } from '../utils/constants/filterConstant'; + +export type PccMinParameters = { + [FILTERS]: FilterIdentifier[]; +}; export function getPccMinStudyParameters(studyUuid: UUID): Promise { console.info('get pcc min study parameters'); diff --git a/src/components/parameters/pcc-min/pcc-min.type.ts b/src/utils/constants/filterConstant.ts similarity index 60% rename from src/components/parameters/pcc-min/pcc-min.type.ts rename to src/utils/constants/filterConstant.ts index 80ba3eba..b30a3446 100644 --- a/src/components/parameters/pcc-min/pcc-min.type.ts +++ b/src/utils/constants/filterConstant.ts @@ -4,14 +4,14 @@ * 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 type { UUID } from 'node:crypto'; -import { FILTER_ID, FILTER_NAME, FILTERS } from '../voltage-init'; +import { UUID } from 'node:crypto'; -type FilterIdentifier = { +export const FILTER_ID = 'filterId'; +export const FILTER_NAME = 'filterName'; +export const FILTERS = 'filters'; +export const ID = 'id'; + +export type FilterIdentifier = { [FILTER_ID]: UUID; [FILTER_NAME]: string; }; - -export type PccMinParameters = { - [FILTERS]: FilterIdentifier[]; -}; diff --git a/src/utils/constants/index.ts b/src/utils/constants/index.ts index 9ee1a6a7..39471fd7 100644 --- a/src/utils/constants/index.ts +++ b/src/utils/constants/index.ts @@ -9,3 +9,4 @@ export * from './fieldConstants'; export * from './uiConstants'; export * from './unitsConstants'; export * from './configConstants'; +export * from './filterConstant'; From 9729f4036de71ea36e7dd486440d4781f446fbde Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Thu, 13 Nov 2025 21:27:00 +0100 Subject: [PATCH 3/5] fix Signed-off-by: SOUISSI Maissa (Externe) --- .../pcc-min/use-pcc-min-parameters-form.ts | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts b/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts index f085eef6..08f6d12f 100644 --- a/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts +++ b/src/components/parameters/pcc-min/use-pcc-min-parameters-form.ts @@ -28,22 +28,13 @@ export interface UsePccMinParametersFormReturn { onSaveInline: (formData: Record) => void; } -// GridExplore versus GridStudy exclusive input params -type UsePccMinParametersFormProps = - | { - parametersUuid: UUID; - name: string; - description: string | null; - studyUuid: null; - parameters: null; - } - | { - parametersUuid: null; - name: null; - description: null; - studyUuid: UUID | null; - parameters: PccMinParameters | null; - }; +type UsePccMinParametersFormProps = { + parametersUuid: UUID | null; + name: string | null; + description: string | null; + studyUuid: UUID | null; + parameters: PccMinParameters | null; +}; export const UsePccMinParametersForm = ({ parametersUuid, From 19d68017288c58cdf4445ee558c75d5a08f11a27 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Fri, 14 Nov 2025 11:38:33 +0100 Subject: [PATCH 4/5] adjust uri Signed-off-by: SOUISSI Maissa (Externe) --- src/services/pcc-min.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/services/pcc-min.ts b/src/services/pcc-min.ts index 99d8d928..e48eeacd 100644 --- a/src/services/pcc-min.ts +++ b/src/services/pcc-min.ts @@ -7,7 +7,6 @@ import type { UUID } from 'node:crypto'; import { backendFetch, backendFetchJson } from './utils'; import { getStudyUrl } from './security-analysis'; -import { PREFIX_STUDY_QUERIES } from './loadflow'; import { FilterIdentifier, FILTERS } from '../utils/constants/filterConstant'; export type PccMinParameters = { @@ -23,7 +22,7 @@ export function getPccMinStudyParameters(studyUuid: UUID): Promise Date: Sat, 15 Nov 2025 22:50:26 +0100 Subject: [PATCH 5/5] select only one element option Signed-off-by: SOUISSI Maissa (Externe) --- .../common/widget/parameter-line-directory-items-input.tsx | 3 +++ src/components/parameters/pcc-min/pcc-min-parameters-form.tsx | 1 + 2 files changed, 4 insertions(+) diff --git a/src/components/parameters/common/widget/parameter-line-directory-items-input.tsx b/src/components/parameters/common/widget/parameter-line-directory-items-input.tsx index 067c67e4..00424c87 100644 --- a/src/components/parameters/common/widget/parameter-line-directory-items-input.tsx +++ b/src/components/parameters/common/widget/parameter-line-directory-items-input.tsx @@ -16,6 +16,7 @@ type DirectoryItemsInputLineProps = { equipmentTypes?: string[]; elementType: string; hideErrorMessage: boolean; + allowMultiSelect?: boolean; }; export function ParameterLineDirectoryItemsInput({ @@ -24,6 +25,7 @@ export function ParameterLineDirectoryItemsInput({ equipmentTypes, elementType, hideErrorMessage, + allowMultiSelect = true, }: Readonly) { return ( @@ -39,6 +41,7 @@ export function ParameterLineDirectoryItemsInput({ hideErrorMessage={hideErrorMessage} label={undefined} itemFilter={undefined} + allowMultiSelect={allowMultiSelect} /> diff --git a/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx b/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx index b0c374ca..96a4bb92 100644 --- a/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx +++ b/src/components/parameters/pcc-min/pcc-min-parameters-form.tsx @@ -76,6 +76,7 @@ export function PccMinParametersForm({ elementType={ElementType.FILTER} label="pccMinParamFilter" hideErrorMessage + allowMultiSelect={false} />