Skip to content

Commit 767f09f

Browse files
authored
chore: use equipment deletion form from commons UI (#3794)
Signed-off-by: David BRAQUART <david.braquart@rte-france.com>
1 parent f5c0898 commit 767f09f

File tree

21 files changed

+96
-760
lines changed

21 files changed

+96
-760
lines changed

src/components/app-wrapper.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ import {
4040
equipmentShortFr,
4141
equipmentTagEn,
4242
equipmentTagFr,
43+
equipmentTypesEn,
44+
equipmentTypesFr,
4345
errorsEn,
4446
errorsFr,
4547
exportParamsEn,
@@ -405,6 +407,7 @@ const messages = {
405407
...equipmentSearchEn,
406408
...equipmentShortEn,
407409
...equipmentTagEn,
410+
...equipmentTypesEn,
408411
...directoryItemsInputEn,
409412
...cardErrorBoundaryEn,
410413
...flatParametersEn,
@@ -447,6 +450,7 @@ const messages = {
447450
...equipmentSearchFr,
448451
...equipmentShortFr,
449452
...equipmentTagFr,
453+
...equipmentTypesFr,
450454
...directoryItemsInputFr,
451455
...cardErrorBoundaryFr,
452456
...flatParametersFr,

src/components/dialogs/line-types-catalog/line-type-segment-creation.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import { useCallback, useEffect } from 'react';
99
import { useWatch } from 'react-hook-form';
1010
import EditIcon from '@mui/icons-material/Edit';
11-
import { FloatInput, KilometerAdornment } from '@gridsuite/commons-ui';
11+
import { ButtonReadOnlyInput, FloatInput, KilometerAdornment, ReadOnlyInput } from '@gridsuite/commons-ui';
1212
import { IconButton } from '@mui/material';
1313
import {
1414
SEGMENT_DISTANCE_VALUE,
@@ -17,8 +17,6 @@ import {
1717
SEGMENT_SUSCEPTANCE,
1818
SEGMENT_TYPE_VALUE,
1919
} from '../../utils/field-constants';
20-
import { ReadOnlyInput } from '../../utils/rhf-inputs/read-only/read-only-input';
21-
import { ButtonReadOnlyInput } from '../../utils/rhf-inputs/read-only/button-read-only-input';
2220
import GridItem from '../commons/grid-item';
2321

2422
export interface LineTypeSegmentCreationProps {

src/components/dialogs/line-types-catalog/line-type-segment-form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
99
import { useFormContext } from 'react-hook-form';
1010
import { Box, Grid } from '@mui/material';
1111
import { FormattedMessage, useIntl } from 'react-intl';
12-
import { ReadOnlyInput } from '../../utils/rhf-inputs/read-only/read-only-input';
1312
import {
1413
FINAL_CURRENT_LIMITS,
1514
SEGMENT_CURRENT_LIMITS,
@@ -34,6 +33,7 @@ import {
3433
ExpandableInput,
3534
fetchStudyMetadata,
3635
type MuiStyles,
36+
ReadOnlyInput,
3737
snackWithFallback,
3838
useSnackMessage,
3939
} from '@gridsuite/commons-ui';

src/components/dialogs/network-modifications/by-filter/by-assignment/modification-by-assignment-form.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import { Box, Grid } from '@mui/material';
1212
import { getAssignmentInitialValue } from './assignment/assignment-utils';
1313
import { useFormContext } from 'react-hook-form';
1414
import SelectWithConfirmationInput from '../../../commons/select-with-confirmation-input';
15-
import { ExpandableInput, mergeSx, unscrollableDialogStyles } from '@gridsuite/commons-ui';
15+
import { ExpandableInput, mergeSx, unscrollableDialogStyles, useGetLabelEquipmentTypes } from '@gridsuite/commons-ui';
1616
import { EQUIPMENTS_FIELDS, EquipmentTypeOptionType } from './assignment/assignment-constants';
17-
import useGetLabelEquipmentTypes from '../../../../../hooks/use-get-label-equipment-types';
1817
import GridItem from '../../../commons/grid-item';
1918

2019
interface ModificationByAssignmentFormProps {}

src/components/dialogs/network-modifications/by-filter/by-filter-deletion/by-filter-deletion-form.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@
88
import { Grid } from '@mui/material';
99
import { useCallback, useMemo } from 'react';
1010
import { useFormContext, useWatch } from 'react-hook-form';
11-
import { AutocompleteInput, DirectoryItemsInput, ElementType } from '@gridsuite/commons-ui';
11+
import { AutocompleteInput, DirectoryItemsInput, ElementType, useGetLabelEquipmentTypes } from '@gridsuite/commons-ui';
1212
import { FILTERS, TYPE } from 'components/utils/field-constants';
1313
import { richTypeEquals } from 'components/utils/utils';
1414
import { EQUIPMENT_TYPES } from 'components/utils/equipment-types';
15-
import useGetLabelEquipmentTypes from '../../../../../hooks/use-get-label-equipment-types';
1615
import GridItem from '../../../commons/grid-item';
1716

1817
const ByFilterDeletionForm = () => {

src/components/dialogs/network-modifications/equipment-deletion/equipement-deletion-dialog.type.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/components/dialogs/network-modifications/equipment-deletion/equipment-deletion-dialog.tsx

Lines changed: 56 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,38 @@
66
*/
77

88
import { yupResolver } from '@hookform/resolvers/yup';
9-
import yup from 'components/utils/yup-config';
10-
import { DELETION_SPECIFIC_DATA, EQUIPMENT_ID, TYPE } from '../../../utils/field-constants';
119
import {
1210
CustomFormProvider,
1311
DeepNullable,
12+
equipmentDeletionEmptyFormData,
13+
EquipmentDeletionDto,
1414
EquipmentType,
1515
snackWithFallback,
1616
useSnackMessage,
17+
equipmentDeletionFormSchema,
18+
EquipmentDeletionFormData,
19+
EquipmentDeletionForm,
20+
equipmentDeletionDtoToForm,
21+
equipmentDeletionFormToDto,
1722
} from '@gridsuite/commons-ui';
1823
import { useForm } from 'react-hook-form';
1924
import { useCallback, useEffect, useMemo } from 'react';
2025
import { ModificationDialog } from '../../commons/modificationDialog';
21-
import DeleteEquipmentForm from './equipment-deletion-form';
2226
import { useOpenShortWaitFetching } from 'components/dialogs/commons/handle-modification-form';
2327
import { FORM_LOADING_DELAY } from 'components/network/constants';
2428
import { deleteEquipment } from '../../../../services/study/network-modifications';
2529
import { UUID } from 'node:crypto';
2630
import { FetchStatus } from 'services/utils.type';
27-
import { EquipmentDeletionInfos } from './equipement-deletion-dialog.type';
2831
import { NetworkModificationDialogProps } from '../../../graph/menus/network-modifications/network-modification-menu.type';
29-
import { getHvdcLccDeletionSchema } from './hvdc-lcc-deletion/hvdc-lcc-deletion-utils';
30-
31-
const formSchema = yup
32-
.object()
33-
.shape({
34-
[EQUIPMENT_ID]: yup.string().nullable().required(),
35-
[TYPE]: yup.mixed<EquipmentType>().oneOf(Object.values(EquipmentType)).nullable().required(),
36-
[DELETION_SPECIFIC_DATA]: getHvdcLccDeletionSchema(),
37-
})
38-
.required();
39-
40-
export type EquipmentDeletionFormInfos = yup.InferType<typeof formSchema>;
41-
42-
const emptyFormData: DeepNullable<EquipmentDeletionFormInfos> = {
43-
[EQUIPMENT_ID]: '',
44-
[TYPE]: null,
45-
[DELETION_SPECIFIC_DATA]: null,
46-
};
32+
import { WithModificationId } from 'services/network-modification-types';
33+
import { fetchEquipmentsIds, fetchHvdcLineWithShuntCompensators } from 'services/study/network-map';
34+
35+
export interface EquipmentDeletionDtoWithId extends EquipmentDeletionDto, WithModificationId {}
4736

4837
type EquipmentDeletionDialogProps = NetworkModificationDialogProps & {
49-
editData?: EquipmentDeletionInfos;
38+
editData?: EquipmentDeletionDtoWithId;
5039
defaultIdValue?: UUID;
51-
equipmentType: EquipmentType;
52-
editDataFetchStatus?: FetchStatus;
40+
equipmentType?: EquipmentType;
5341
};
5442

5543
/**
@@ -59,8 +47,8 @@ type EquipmentDeletionDialogProps = NetworkModificationDialogProps & {
5947
* @param currentRootNetworkUuid
6048
* @param editData the data to edit
6149
* @param isUpdate check if edition form
62-
* @param defaultIdValue the default equipment id
63-
* @param equipmentType
50+
* @param defaultIdValue in creation mode, we can specify the equipment ID we want to delete
51+
* @param equipmentType in creation mode, we can specify the equipment type we want to delete
6452
* @param editDataFetchStatus indicates the status of fetching EditData
6553
* @param onClose a callback when dialog has been closed
6654
* @param onValidated a callback when dialog has been validated
@@ -83,79 +71,69 @@ const EquipmentDeletionDialog = ({
8371

8472
const { snackError } = useSnackMessage();
8573

86-
const formMethods = useForm<DeepNullable<EquipmentDeletionFormInfos>>({
87-
defaultValues: emptyFormData,
88-
resolver: yupResolver<DeepNullable<EquipmentDeletionFormInfos>>(formSchema),
74+
const formMethods = useForm<DeepNullable<EquipmentDeletionFormData>>({
75+
defaultValues: equipmentDeletionEmptyFormData,
76+
resolver: yupResolver<DeepNullable<EquipmentDeletionFormData>>(equipmentDeletionFormSchema),
8977
});
9078

9179
const { reset } = formMethods;
9280

9381
const fromEditDataToFormValues = useCallback(
94-
(editData: EquipmentDeletionInfos) => {
82+
(editData: EquipmentDeletionDto) => {
83+
const formData = equipmentDeletionDtoToForm(editData);
9584
reset({
96-
[TYPE]: editData.equipmentType,
97-
[EQUIPMENT_ID]: editData.equipmentId,
98-
[DELETION_SPECIFIC_DATA]: null,
85+
...formData,
86+
equipmentInfos: null, // this prop will be computed (cf LCC specific part)
9987
});
10088
},
10189
[reset]
10290
);
10391

104-
const fromMenuDataValues = useCallback(
105-
(menuSelectId: UUID) => {
92+
const presetTypeAndId = useCallback(
93+
(equipmentType: EquipmentType, equipmentId: UUID) => {
10694
reset({
107-
[TYPE]: EquipmentType.HVDC_LINE,
108-
[EQUIPMENT_ID]: menuSelectId,
109-
[DELETION_SPECIFIC_DATA]: null,
95+
equipmentID: equipmentId,
96+
type: equipmentType,
97+
equipmentInfos: null,
11098
});
11199
},
112100
[reset]
113101
);
114102

115-
const resetFormWithEquipmentType = useCallback(
103+
const presetType = useCallback(
116104
(equipmentType: EquipmentType) => {
117105
reset({
118-
[TYPE]: equipmentType,
106+
type: equipmentType,
119107
});
120108
},
121109
[reset]
122110
);
123111

124112
useEffect(() => {
125113
if (editData) {
114+
// edition mode
126115
fromEditDataToFormValues(editData);
127-
} else if (defaultIdValue) {
128-
fromMenuDataValues(defaultIdValue);
116+
} else if (equipmentType && defaultIdValue) {
117+
// creation mode with both Id and Type (ex: from diagram)
118+
presetTypeAndId(equipmentType, defaultIdValue);
129119
} else if (equipmentType) {
130-
resetFormWithEquipmentType(equipmentType);
120+
// creation mode with only Type (ex: from node modifications menu)
121+
presetType(equipmentType);
131122
}
132-
}, [
133-
fromEditDataToFormValues,
134-
editData,
135-
fromMenuDataValues,
136-
defaultIdValue,
137-
equipmentType,
138-
resetFormWithEquipmentType,
139-
]);
123+
}, [defaultIdValue, editData, equipmentType, fromEditDataToFormValues, presetType, presetTypeAndId]);
140124

141125
const onSubmit = useCallback(
142-
(formData: EquipmentDeletionFormInfos) => {
143-
deleteEquipment({
144-
studyUuid,
145-
nodeUuid: currentNodeUuid,
146-
uuid: editData?.uuid,
147-
equipmentId: formData[EQUIPMENT_ID] as UUID,
148-
equipmentType: formData[TYPE],
149-
equipmentSpecificInfos: formData[DELETION_SPECIFIC_DATA] ?? undefined,
150-
}).catch((error) => {
126+
(formData: EquipmentDeletionFormData) => {
127+
const dto = equipmentDeletionFormToDto(formData);
128+
deleteEquipment(studyUuid, currentNodeUuid, editData?.uuid, dto).catch((error: unknown) => {
151129
snackWithFallback(snackError, error, { headerId: 'UnableToDeleteEquipment' });
152130
});
153131
},
154132
[currentNodeUuid, editData, snackError, studyUuid]
155133
);
156134

157135
const clear = useCallback(() => {
158-
reset(emptyFormData);
136+
reset(equipmentDeletionEmptyFormData);
159137
}, [reset]);
160138

161139
const open = useOpenShortWaitFetching({
@@ -169,8 +147,20 @@ const EquipmentDeletionDialog = ({
169147
[editDataFetchStatus, isUpdate]
170148
);
171149

150+
const fetchEquipmentIds = useCallback(
151+
(equipmentType: EquipmentType) =>
152+
fetchEquipmentsIds(studyUuid, currentNodeUuid, currentRootNetworkUuid, undefined, equipmentType, true),
153+
[studyUuid, currentNodeUuid, currentRootNetworkUuid]
154+
);
155+
156+
const fetchHvdcWithShuntCompensators = useCallback(
157+
(hvdcLineId: UUID) =>
158+
fetchHvdcLineWithShuntCompensators(studyUuid, currentNodeUuid, currentRootNetworkUuid, hvdcLineId),
159+
[studyUuid, currentNodeUuid, currentRootNetworkUuid]
160+
);
161+
172162
return (
173-
<CustomFormProvider validationSchema={formSchema} {...formMethods}>
163+
<CustomFormProvider validationSchema={equipmentDeletionFormSchema} {...formMethods}>
174164
<ModificationDialog
175165
fullWidth
176166
maxWidth="md"
@@ -183,11 +173,10 @@ const EquipmentDeletionDialog = ({
183173
isDataFetching={waitingForData}
184174
{...dialogProps}
185175
>
186-
<DeleteEquipmentForm
187-
studyUuid={studyUuid}
188-
currentNode={currentNode}
189-
currentRootNetworkUuid={currentRootNetworkUuid}
176+
<EquipmentDeletionForm
190177
editData={editData}
178+
fetchEquipmentIds={fetchEquipmentIds}
179+
fetchHvdcWithShuntCompensators={fetchHvdcWithShuntCompensators}
191180
/>
192181
</ModificationDialog>
193182
</CustomFormProvider>

0 commit comments

Comments
 (0)