File tree 1 file changed +13
-4
lines changed
1 file changed +13
-4
lines changed Original file line number Diff line number Diff line change @@ -786,14 +786,23 @@ export default class Mapbox {
786
786
}
787
787
} ;
788
788
789
+ _uniqueLayersCount ( features : MapboxGeoJSONFeature [ ] | null ) {
790
+ if ( ! features ) {
791
+ return 0 ;
792
+ }
793
+ return features . filter (
794
+ ( feature , index ) => features . findIndex ( f => f . layer . id === feature . layer . id ) === index
795
+ ) . length ;
796
+ }
797
+
789
798
_updateHover ( e : MapMouseEvent ) {
790
799
const { props} = this ;
791
800
const shouldTrackHoveredFeatures =
792
801
props . interactiveLayerIds && ( props . onMouseMove || props . onMouseEnter || props . onMouseLeave ) ;
793
802
794
803
if ( shouldTrackHoveredFeatures ) {
795
804
const eventType = e . type ;
796
- const wasHovering = this . _hoveredFeatures ?. length > 0 ;
805
+ const hoveredLayersCount = this . _uniqueLayersCount ( this . _hoveredFeatures ) ;
797
806
let features ;
798
807
if ( eventType === 'mousemove' ) {
799
808
try {
@@ -806,14 +815,14 @@ export default class Mapbox {
806
815
} else {
807
816
features = [ ] ;
808
817
}
809
- const isHovering = features . length > 0 ;
818
+ const hoveringLayersCount = this . _uniqueLayersCount ( features ) ;
810
819
811
- if ( ! isHovering && wasHovering ) {
820
+ if ( hoveringLayersCount < hoveredLayersCount ) {
812
821
e . type = 'mouseleave' ;
813
822
this . _onPointerEvent ( e ) ;
814
823
}
815
824
this . _hoveredFeatures = features ;
816
- if ( isHovering && ! wasHovering ) {
825
+ if ( hoveringLayersCount > hoveredLayersCount ) {
817
826
e . type = 'mouseenter' ;
818
827
this . _onPointerEvent ( e ) ;
819
828
}
You can’t perform that action at this time.
0 commit comments