@@ -10,16 +10,19 @@ import { useCallback, useMemo, useState } from 'react';
1010import { AddCircle , Delete } from '@mui/icons-material' ;
1111import { useIntl } from 'react-intl' ;
1212import { LimitsProperty } from '../../../services/network-modification-types' ;
13- import { useFormContext , useWatch } from 'react-hook-form' ;
13+ import { useFieldArray } from 'react-hook-form' ;
1414import { usePredefinedProperties } from '@gridsuite/commons-ui' ;
1515
1616export interface LimitsPropertiesSideStackProps {
1717 formName : string ;
1818 disabled ?: boolean ;
1919}
2020export function LimitsPropertiesSideStack ( { formName, disabled } : Readonly < LimitsPropertiesSideStackProps > ) {
21- const { setValue } = useFormContext ( ) ;
22- const limitsProperties : LimitsProperty [ ] = useWatch ( { name : formName } ) ;
21+ const {
22+ fields : limitsProperties ,
23+ append,
24+ remove,
25+ } = useFieldArray < { [ key : string ] : LimitsProperty [ ] } > ( { name : formName } ) ;
2326
2427 const [ isEditing , setIsEditing ] = useState < boolean > ( false ) ;
2528 const [ hovered , setHovered ] = useState < boolean > ( false ) ;
@@ -39,18 +42,17 @@ export function LimitsPropertiesSideStack({ formName, disabled }: Readonly<Limit
3942 if ( ! propertyName . trim ( ) || ! propertyValue . trim ( ) ) {
4043 return ;
4144 }
42- if ( ! limitsProperties ?. length ) {
43- setValue ( formName , [ { name : propertyName , value : propertyValue } ] ) ;
44- } else if ( limitsProperties . some ( ( l ) => l . name === propertyName ) ) {
45+
46+ if ( limitsProperties . some ( ( l ) => l . name === propertyName ) ) {
4547 setEditorError ( intl . formatMessage ( { id : 'NameUnique' } ) ) ;
4648 return ;
4749 } else {
48- setValue ( formName , [ ... limitsProperties , { name : propertyName , value : propertyValue } ] ) ;
50+ append ( { name : propertyName , value : propertyValue } ) ;
4951 }
5052 setIsEditing ( false ) ;
5153 }
5254 } ,
53- [ formName , intl , limitsProperties , propertyName , propertyValue , setValue ]
55+ [ append , intl , limitsProperties , propertyName , propertyValue ]
5456 ) ;
5557
5658 const handleOnChange = useCallback ( ( value : string ) => {
@@ -63,9 +65,9 @@ export function LimitsPropertiesSideStack({ formName, disabled }: Readonly<Limit
6365 if ( limitsProperties ?. length <= index ) {
6466 return ;
6567 }
66- setValue ( formName , [ ... limitsProperties . slice ( 0 , index ) , ... limitsProperties . slice ( index + 1 ) ] ) ;
68+ remove ( index ) ;
6769 } ,
68- [ formName , limitsProperties , setValue ]
70+ [ limitsProperties ?. length , remove ]
6971 ) ;
7072
7173 return (
0 commit comments