From c1c591df6dadc1ce9473ca50d2c4b1270ef72913 Mon Sep 17 00:00:00 2001 From: David BRAQUART Date: Wed, 1 Oct 2025 18:47:56 +0200 Subject: [PATCH 1/3] update with new common tabular DTO Signed-off-by: David BRAQUART --- .../limit-sets-modification-dialog.tsx | 2 +- .../tabular/tabular-common.ts | 12 +--- .../tabular/tabular-dialog.tsx | 33 ++++++----- src/services/study/network-modifications.ts | 56 ++----------------- 4 files changed, 25 insertions(+), 78 deletions(-) diff --git a/src/components/dialogs/network-modifications/limit-sets/limit-sets-modification-dialog.tsx b/src/components/dialogs/network-modifications/limit-sets/limit-sets-modification-dialog.tsx index 3e8097776e..73c3d2812f 100644 --- a/src/components/dialogs/network-modifications/limit-sets/limit-sets-modification-dialog.tsx +++ b/src/components/dialogs/network-modifications/limit-sets/limit-sets-modification-dialog.tsx @@ -100,7 +100,7 @@ export function LimitSetsModificationDialog({ modificationType, modifications, modificationUuid: editData?.uuid, - type: ModificationType.LIMIT_SETS_TABULAR_MODIFICATION, + tabularType: ModificationType.LIMIT_SETS_TABULAR_MODIFICATION, csvFilename: formData[CSV_FILENAME], }).catch((error) => { snackError({ diff --git a/src/components/dialogs/network-modifications/tabular/tabular-common.ts b/src/components/dialogs/network-modifications/tabular/tabular-common.ts index 6f70345820..7ad89be268 100644 --- a/src/components/dialogs/network-modifications/tabular/tabular-common.ts +++ b/src/components/dialogs/network-modifications/tabular/tabular-common.ts @@ -36,22 +36,14 @@ import { import yup from 'components/utils/yup-config'; import { UUID } from 'crypto'; -type TabularModificationCommonType = { +export type TabularModificationEditDataType = { uuid: UUID; + type: 'TABULAR_MODIFICATION' | 'TABULAR_CREATION'; properties: TabularProperty[]; csvFilename: string; -}; -export type TabularModificationModificationType = TabularModificationCommonType & { - type: 'TABULAR_MODIFICATION'; modificationType: ModificationType; modifications: Modification[]; }; -export type TabularModificationCreationType = TabularModificationCommonType & { - type: 'TABULAR_CREATION'; - creationType: ModificationType; - creations: Modification[]; -}; -export type TabularModificationEditDataType = TabularModificationModificationType | TabularModificationCreationType; export enum TabularModificationType { CREATION = 'creation', diff --git a/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx b/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx index 0539e30ded..bc1dc6a740 100644 --- a/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx +++ b/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx @@ -13,7 +13,7 @@ import { useOpenShortWaitFetching } from 'components/dialogs/commons/handle-modi import { FORM_LOADING_DELAY } from 'components/network/constants.js'; import { TABULAR_PROPERTIES, MODIFICATIONS_TABLE, CSV_FILENAME, TYPE } from 'components/utils/field-constants.js'; import { ModificationDialog } from 'components/dialogs/commons/modificationDialog.js'; -import { createTabularCreation, createTabularModification } from 'services/study/network-modifications.js'; +import { createTabularModification } from 'services/study/network-modifications.js'; import { FetchStatus } from 'services/utils.type'; import { convertGeneratorOrBatteryModificationFromBackToFront, @@ -32,9 +32,7 @@ import { Modification, tabularFormSchema, TabularFormType, - TabularModificationCreationType, TabularModificationEditDataType, - TabularModificationModificationType, TabularModificationType, transformProperties, } from './tabular-common.js'; @@ -84,7 +82,7 @@ export function TabularDialog({ const disableSave = Object.keys(errors).length > 0; const initTabularModificationData = useCallback( - (editData: TabularModificationModificationType) => { + (editData: TabularModificationEditDataType) => { const modificationType = editData.modificationType; const modifications = editData.modifications.map((modif: Modification) => { let modification = formatModification(modif); @@ -112,9 +110,9 @@ export function TabularDialog({ ); const initTabularCreationData = useCallback( - (editData: TabularModificationCreationType) => { - const equipmentType = getEquipmentTypeFromCreationType(editData?.creationType); - const creations = editData?.creations.map((creat: Modification) => { + (editData: TabularModificationEditDataType) => { + const equipmentType = getEquipmentTypeFromCreationType(editData?.modificationType); + const creations = editData?.modifications.map((creat: Modification) => { let creation: Modification = {}; Object.keys(formatModification(creat)).forEach((key) => { const entry = convertCreationFieldFromBackToFront(key, creat[key]); @@ -138,9 +136,9 @@ export function TabularDialog({ useEffect(() => { if (editData) { if (dialogMode === TabularModificationType.CREATION) { - initTabularCreationData(editData as TabularModificationCreationType); + initTabularCreationData(editData); } else { - initTabularModificationData(editData as TabularModificationModificationType); + initTabularModificationData(editData); } } }, [editData, dialogMode, initTabularCreationData, initTabularModificationData]); @@ -158,7 +156,7 @@ export function TabularDialog({ modificationType, modifications, modificationUuid: editData?.uuid, - type: ModificationType.TABULAR_MODIFICATION, + tabularType: ModificationType.TABULAR_MODIFICATION, csvFilename: formData[CSV_FILENAME], properties: formData[TABULAR_PROPERTIES], }).catch((error) => { @@ -173,10 +171,10 @@ export function TabularDialog({ const submitTabularCreation = useCallback( (formData: TabularFormType) => { - const creationType = TABULAR_CREATION_TYPES[formData[TYPE]]; - const creations = formData[MODIFICATIONS_TABLE]?.map((row) => { + const modificationType = TABULAR_CREATION_TYPES[formData[TYPE]]; + const modifications = formData[MODIFICATIONS_TABLE]?.map((row) => { const creation: Modification = { - type: creationType, + type: modificationType, }; // first transform and clean "property_*" fields const propertiesModifications = transformProperties(row); @@ -187,7 +185,7 @@ export function TabularDialog({ creation[entry.key] = entry.value; }); // For now, we do not manage reactive limits by diagram - if (creationType === 'GENERATOR_CREATION' || creationType === 'BATTERY_CREATION') { + if (modificationType === 'GENERATOR_CREATION' || modificationType === 'BATTERY_CREATION') { convertReactiveCapabilityCurvePointsFromFrontToBack(creation); } @@ -196,12 +194,13 @@ export function TabularDialog({ } return creation; }); - createTabularCreation({ + createTabularModification({ studyUuid, nodeUuid: currentNodeUuid, - creationType, - creations, + modificationType, + modifications, modificationUuid: editData?.uuid, + tabularType: ModificationType.TABULAR_CREATION, csvFilename: formData[CSV_FILENAME], properties: formData[TABULAR_PROPERTIES], }).catch((error) => { diff --git a/src/services/study/network-modifications.ts b/src/services/study/network-modifications.ts index bfe271a26b..f09e48e515 100644 --- a/src/services/study/network-modifications.ts +++ b/src/services/study/network-modifications.ts @@ -1102,7 +1102,7 @@ export interface CreateTabularModificationProps { modificationType: string; modifications: Modification[]; modificationUuid: UUID; - type: ModificationType; + tabularType: ModificationType; csvFilename?: string; properties?: TabularProperty[]; } @@ -1113,27 +1113,27 @@ export function createTabularModification({ modificationType, modifications, modificationUuid, - type, + tabularType, csvFilename, properties, }: CreateTabularModificationProps) { - let createTabularModificationUrl = getNetworkModificationUrl(studyUuid, nodeUuid); + let tabularModificationUrl = getNetworkModificationUrl(studyUuid, nodeUuid); const isUpdate = !!modificationUuid; if (isUpdate) { - createTabularModificationUrl += '/' + encodeURIComponent(modificationUuid); + tabularModificationUrl += '/' + encodeURIComponent(modificationUuid); console.info('Updating tabular modification'); } else { console.info('Creating tabular modification'); } - return backendFetchText(createTabularModificationUrl, { + return backendFetchText(tabularModificationUrl, { method: isUpdate ? 'PUT' : 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ - type: type, + type: tabularType, modificationType: modificationType, modifications: modifications, properties: properties, @@ -2045,50 +2045,6 @@ export function modifyByAssignment( }); } -export interface CreateTabularCreationProps { - studyUuid: UUID; - nodeUuid: UUID; - creationType: string; - creations: Modification[]; - modificationUuid: UUID; - csvFilename?: string; - properties?: TabularProperty[]; -} - -export function createTabularCreation({ - studyUuid, - nodeUuid, - creationType, - creations, - modificationUuid, - csvFilename, - properties, -}: CreateTabularCreationProps) { - let createTabularCreationUrl = getNetworkModificationUrl(studyUuid, nodeUuid); - const isUpdate = !!modificationUuid; - if (isUpdate) { - createTabularCreationUrl += '/' + encodeURIComponent(modificationUuid); - console.info('Updating tabular creation'); - } else { - console.info('Creating tabular creation'); - } - - return backendFetchText(createTabularCreationUrl, { - method: isUpdate ? 'PUT' : 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - type: MODIFICATION_TYPES.TABULAR_CREATION.type, - creationType: creationType, - creations: creations, - properties: properties, - csvFilename: csvFilename, - }), - }); -} - export function createCouplingDevice({ createCouplingDeviceInfos, studyUuid, From c565930098e39aad6d975b9f2d22f30a0c5807c4 Mon Sep 17 00:00:00 2001 From: David BRAQUART Date: Fri, 3 Oct 2025 11:12:22 +0200 Subject: [PATCH 2/3] change console msg Signed-off-by: David BRAQUART --- src/services/study/network-modifications.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/services/study/network-modifications.ts b/src/services/study/network-modifications.ts index fc35ebc8ee..91793beb7f 100644 --- a/src/services/study/network-modifications.ts +++ b/src/services/study/network-modifications.ts @@ -1102,7 +1102,10 @@ export interface CreateTabularModificationProps { modificationType: string; modifications: Modification[]; modificationUuid: UUID; - tabularType: ModificationType; + tabularType: + | ModificationType.LIMIT_SETS_TABULAR_MODIFICATION + | ModificationType.TABULAR_MODIFICATION + | ModificationType.TABULAR_CREATION; csvFilename?: string; properties?: TabularProperty[]; } @@ -1121,9 +1124,9 @@ export function createTabularModification({ const isUpdate = !!modificationUuid; if (isUpdate) { tabularModificationUrl += '/' + encodeURIComponent(modificationUuid); - console.info('Updating tabular modification'); + console.info('Updating ' + tabularType); } else { - console.info('Creating tabular modification'); + console.info('Creating ' + tabularType); } return backendFetchText(tabularModificationUrl, { From e1aa7cea58d0282b27234b9d13b43badeeef8c59 Mon Sep 17 00:00:00 2001 From: David BRAQUART Date: Thu, 16 Oct 2025 18:35:10 +0200 Subject: [PATCH 3/3] rev remarks Signed-off-by: David BRAQUART --- .../tabular/tabular-common.ts | 2 +- .../tabular/tabular-dialog.tsx | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/components/dialogs/network-modifications/tabular/tabular-common.ts b/src/components/dialogs/network-modifications/tabular/tabular-common.ts index 9b642ea72a..2476d89575 100644 --- a/src/components/dialogs/network-modifications/tabular/tabular-common.ts +++ b/src/components/dialogs/network-modifications/tabular/tabular-common.ts @@ -38,7 +38,7 @@ import type { UUID } from 'node:crypto'; export type TabularModificationEditDataType = { uuid: UUID; - type: 'TABULAR_MODIFICATION' | 'TABULAR_CREATION'; + type: ModificationType.TABULAR_MODIFICATION | ModificationType.TABULAR_CREATION; properties: TabularProperty[]; csvFilename: string; modificationType: ModificationType; diff --git a/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx b/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx index e698f1525a..954ce0976c 100644 --- a/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx +++ b/src/components/dialogs/network-modifications/tabular/tabular-dialog.tsx @@ -49,12 +49,12 @@ import { NetworkModificationDialogProps } from '../../../graph/menus/network-mod function convertCreations(creations: Modification[]): Modification[] { return creations.map((creat: Modification) => { let creation: Modification = {}; - Object.keys(formatModification(creat)).forEach((key) => { + for (const key of Object.keys(formatModification(creat))) { const entry = convertCreationFieldFromBackToFront(key, creat[key]); - (Array.isArray(entry) ? entry : [entry]).forEach((item) => { + for (const item of Array.isArray(entry) ? entry : [entry]) { creation[item.key] = item.value; - }); - }); + } + } creation = addPropertiesFromBack(creation, creat?.[TABULAR_PROPERTIES]); return creation; }); @@ -106,9 +106,9 @@ export function TabularDialog({ ) { modification = convertGeneratorOrBatteryModificationFromBackToFront(modification); } else { - Object.keys(modification).forEach((key) => { + for (const key of Object.keys(modification)) { modification[key] = convertInputValues(getFieldType(modificationType, key), modif[key]); - }); + } } modification = addPropertiesFromBack(modification, modif?.[TABULAR_PROPERTIES]); return modification; @@ -184,12 +184,15 @@ export function TabularDialog({ const propertiesModifications = transformProperties(row); // then transform all other fields - Object.keys(row).forEach((key) => { + for (const key of Object.keys(row)) { const entry = convertCreationFieldFromFrontToBack(key, row[key]); creation[entry.key] = entry.value; - }); + } // For now, we do not manage reactive limits by diagram - if (modificationType === 'GENERATOR_CREATION' || modificationType === 'BATTERY_CREATION') { + if ( + modificationType === ModificationType.GENERATOR_CREATION || + modificationType === ModificationType.BATTERY_CREATION + ) { convertReactiveCapabilityCurvePointsFromFrontToBack(creation); }