@@ -2006,7 +2006,7 @@ export class MapOlService {
2006
2006
}
2007
2007
2008
2008
2009
- public addPopup ( popupParams : IPopupParams , popupObj ?: popup , popupContent ?: string | IAnyObject , event ?: 'click' | 'move' , removePopups ?: boolean ) {
2009
+ public addPopup ( popupParams : IPopupParams , popupObj ?: popup , popupContent ?: string | IAnyObject | false , event ?: 'click' | 'move' , removePopups ?: boolean ) {
2010
2010
const layerpopup : Layer [ 'popup' ] = popupParams . layer . get ( POPUP_KEY ) ;
2011
2011
// check if popup is already there and event is move
2012
2012
const layerID = popupParams . layer . get ( ID_KEY ) ;
@@ -2137,13 +2137,16 @@ export class MapOlService {
2137
2137
2138
2138
const container = this . createPopupContainer ( overlay , popupParams , popupObj , popupContent , event ) ;
2139
2139
/** edge case when moving and clicking sometimes the browser event is not like the popup event */
2140
- if ( overlay . getId ( ) === moveID ) {
2141
- overlay . set ( 'addEvent' , 'pointermove' ) ;
2142
- } else {
2143
- overlay . set ( 'addEvent' , browserEvent . type ) ;
2140
+ if ( container ) {
2141
+ if ( overlay . getId ( ) === moveID ) {
2142
+ overlay . set ( 'addEvent' , 'pointermove' ) ;
2143
+ } else {
2144
+ overlay . set ( 'addEvent' , browserEvent . type ) ;
2145
+ }
2146
+ overlay . set ( OVERLAY_TYPE_KEY , POPUP_KEY ) ;
2147
+ overlay . setElement ( container ) ;
2144
2148
}
2145
- overlay . set ( OVERLAY_TYPE_KEY , POPUP_KEY ) ;
2146
- overlay . setElement ( container ) ;
2149
+
2147
2150
2148
2151
let coordinate ;
2149
2152
// When a point is clicked, its coordinate is used for the popup position.
@@ -2154,7 +2157,11 @@ export class MapOlService {
2154
2157
coordinate = browserEvent . coordinate ;
2155
2158
}
2156
2159
2157
- overlay . setPosition ( coordinate ) ;
2160
+ if ( container ) {
2161
+ overlay . setPosition ( coordinate ) ;
2162
+ } else {
2163
+ this . map . removeOverlay ( overlay ) ;
2164
+ }
2158
2165
2159
2166
/**
2160
2167
* edge case prevent add multiple movePopup's
@@ -2166,14 +2173,17 @@ export class MapOlService {
2166
2173
}
2167
2174
}
2168
2175
2169
- private createPopupContainer ( overlay : olOverlay , popupParams : IPopupParams , popupObj ?: popup , popupContent ?: string | IAnyObject , event ?: 'click' | 'move' ) {
2176
+ private createPopupContainer ( overlay : olOverlay , popupParams : IPopupParams , popupObj ?: popup , popupContent ?: string | IAnyObject | false , event ?: 'click' | 'move' ) {
2170
2177
const content = document . createElement ( 'div' ) ;
2171
2178
content . className = 'ol-popup-content' ;
2172
2179
let popupHtml = '' ;
2180
+ let hasContent = true ;
2173
2181
if ( popupObj ?. popupFunction ) {
2174
2182
const content = popupObj . popupFunction ( popupParams ) ;
2175
2183
if ( typeof content === 'string' ) {
2176
2184
popupHtml = content ;
2185
+ } else if ( content === false ) {
2186
+ hasContent = false ;
2177
2187
} else {
2178
2188
popupHtml = this . createPopupHtml ( content ) ;
2179
2189
}
@@ -2183,9 +2193,14 @@ export class MapOlService {
2183
2193
} else {
2184
2194
popupHtml = this . createPopupHtml ( popupContent ) ;
2185
2195
}
2196
+ } else if ( popupContent === false ) {
2197
+ hasContent = false ;
2186
2198
} else if ( Object . keys ( popupParams . properties ) . length ) {
2187
2199
popupHtml = this . createPopupHtml ( popupParams . properties ) ;
2200
+ } else {
2201
+ hasContent = false ;
2188
2202
}
2203
+
2189
2204
content . innerHTML = popupHtml ;
2190
2205
if ( popupObj ?. dynamicPopup ) {
2191
2206
// To prevent memory leak:
@@ -2197,27 +2212,32 @@ export class MapOlService {
2197
2212
this . createDynamicPopupComponent ( id , content , popupParams , popupObj ) ;
2198
2213
}
2199
2214
2200
- const container = document . createElement ( 'div' ) ;
2201
- container . className = 'ol-popup' ;
2202
- container . id = overlay . getId ( ) . toString ( ) ;
2203
- container . style . display = 'block' ;
2204
-
2205
- if ( ! event || event !== 'move' ) {
2206
- const closer = document . createElement ( 'a' ) ;
2207
- closer . className = 'ol-popup-closer' ;
2208
- container . appendChild ( closer ) ;
2209
-
2210
- const closeFunction = ( ) => {
2211
- closer . removeEventListener ( 'click' , closeFunction , false ) ;
2212
- // removes ol-part of popup
2213
- this . map . removeOverlay ( overlay ) ;
2214
- // removes angular-part of popup
2215
- this . destroyDynamicPopupComponent ( overlay . getId ( ) . toString ( ) ) ;
2216
- } ;
2217
- closer . addEventListener ( 'click' , closeFunction , false ) ;
2215
+ if ( ! hasContent ) {
2216
+ // this sets the Overlay.setElement(undefined);
2217
+ return undefined ;
2218
+ } else {
2219
+ const container = document . createElement ( 'div' ) ;
2220
+ container . className = 'ol-popup' ;
2221
+ container . id = overlay . getId ( ) . toString ( ) ;
2222
+ container . style . display = 'block' ;
2223
+
2224
+ if ( ! event || event !== 'move' ) {
2225
+ const closer = document . createElement ( 'a' ) ;
2226
+ closer . className = 'ol-popup-closer' ;
2227
+ container . appendChild ( closer ) ;
2228
+
2229
+ const closeFunction = ( ) => {
2230
+ closer . removeEventListener ( 'click' , closeFunction , false ) ;
2231
+ // removes ol-part of popup
2232
+ this . map . removeOverlay ( overlay ) ;
2233
+ // removes angular-part of popup
2234
+ this . destroyDynamicPopupComponent ( overlay . getId ( ) . toString ( ) ) ;
2235
+ } ;
2236
+ closer . addEventListener ( 'click' , closeFunction , false ) ;
2237
+ }
2238
+ container . appendChild ( content ) ;
2239
+ return container ;
2218
2240
}
2219
- container . appendChild ( content ) ;
2220
- return container ;
2221
2241
}
2222
2242
2223
2243
/** USED in map-ol.component */
0 commit comments