5
5
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
6
*/
7
7
import { Box , Dialog , Fab , Theme , useTheme } from '@mui/material' ;
8
- import { forwardRef , MouseEventHandler , Ref , TouchEventHandler , useCallback , useState } from 'react' ;
8
+ import { forwardRef , MouseEventHandler , Ref , TouchEventHandler , useCallback , useRef , useState } from 'react' ;
9
9
import CardHeader from './card-header' ;
10
10
import { UUID } from 'crypto' ;
11
11
import AlertCustomMessageNode from 'components/utils/alert-custom-message-node' ;
12
- import { EquipmentType , LineFlowMode , mergeSx } from '@gridsuite/commons-ui' ;
12
+ import { EquipmentType , LineFlowMode , mergeSx , useStateBoolean } from '@gridsuite/commons-ui' ;
13
13
import { useDispatch , useSelector } from 'react-redux' ;
14
14
import { AppState } from 'redux/reducer' ;
15
15
import { resetMapEquipment , setMapDataLoading , setOpenMap , setReloadMapNeeded } from 'redux/actions' ;
16
16
import WorldSvg from 'images/world.svg?react' ;
17
- import NetworkMapTab from 'components/network/network-map-tab' ;
17
+ import NetworkMapTab , { NetworkMapTabRef } from 'components/network/network-map-tab' ;
18
18
import { cardStyles } from './card-styles' ;
19
19
import { Close } from '@mui/icons-material' ;
20
20
import { FormattedMessage , useIntl } from 'react-intl' ;
@@ -82,12 +82,24 @@ export const MapCard = forwardRef((props: MapCardProps, ref: Ref<HTMLDivElement>
82
82
dispatch ( setOpenMap ( true ) ) ;
83
83
} , [ dispatch ] ) ;
84
84
85
- const handleCloseMap = useCallback ( ( ) => {
86
- dispatch ( setOpenMap ( false ) ) ;
87
- dispatch ( resetMapEquipment ( ) ) ;
88
- dispatch ( setMapDataLoading ( false ) ) ;
89
- dispatch ( setReloadMapNeeded ( true ) ) ;
90
- } , [ dispatch ] ) ;
85
+ const isInDrawingMode = useStateBoolean ( false ) ;
86
+ const networkMapTabRef = useRef < NetworkMapTabRef > ( null ) ;
87
+
88
+ const handleCloseMap = useCallback (
89
+ ( event ?: any , reason ?: string ) => {
90
+ if ( isInDrawingMode . value ) {
91
+ networkMapTabRef . current ?. leaveDrawingMode ( ) ;
92
+ if ( reason && reason === 'escapeKeyDown' ) {
93
+ return ; // Do not close the map but only the drawing mode
94
+ }
95
+ }
96
+ dispatch ( setOpenMap ( false ) ) ;
97
+ dispatch ( resetMapEquipment ( ) ) ;
98
+ dispatch ( setMapDataLoading ( false ) ) ;
99
+ dispatch ( setReloadMapNeeded ( true ) ) ;
100
+ } ,
101
+ [ dispatch , isInDrawingMode ]
102
+ ) ;
91
103
92
104
if ( ! studyUuid || ! currentNode || ! currentRootNetworkUuid || ! networkVisuParams ) {
93
105
return (
@@ -135,6 +147,7 @@ export const MapCard = forwardRef((props: MapCardProps, ref: Ref<HTMLDivElement>
135
147
< FormattedMessage id = "close" />
136
148
</ Fab >
137
149
< NetworkMapTab
150
+ ref = { networkMapTabRef }
138
151
studyUuid = { studyUuid }
139
152
visible = { mapOpen }
140
153
lineFullPath = { networkVisuParams . mapParameters . lineFullPath }
@@ -148,7 +161,7 @@ export const MapCard = forwardRef((props: MapCardProps, ref: Ref<HTMLDivElement>
148
161
} }
149
162
onOpenNetworkAreaDiagram = { onOpenNetworkAreaDiagram }
150
163
onPolygonChanged = { ( ) => { } }
151
- onElementCreated = { handleCloseMap }
164
+ isInDrawingMode = { isInDrawingMode }
152
165
> </ NetworkMapTab >
153
166
</ Dialog >
154
167
</ Box >
0 commit comments