@@ -188,10 +188,16 @@ const MapViewF = <T extends object>({
188
188
clusterView ?: React . ReactElement
189
189
) => {
190
190
const clusters = [ ] ;
191
+ const clusteredMarkers : React . ReactElement [ ] = [ ] ;
192
+
191
193
for ( const marker of markers ) {
192
194
const { latitude : lat , longitude : long } =
193
195
marker . props as MapMarkerProps ;
194
196
197
+ if ( clusteredMarkers . includes ( marker ) ) {
198
+ continue ;
199
+ }
200
+
195
201
const nearbyMarkers = getNearbyMarkers (
196
202
lat ,
197
203
long ,
@@ -201,7 +207,7 @@ const MapViewF = <T extends object>({
201
207
202
208
if ( nearbyMarkers . length > 1 ) {
203
209
for ( const nearbyMarker of nearbyMarkers ) {
204
- markers . splice ( markers . indexOf ( nearbyMarker ) , 1 ) ;
210
+ clusteredMarkers . push ( nearbyMarker ) ;
205
211
}
206
212
clusters . push (
207
213
< MapMarkerCluster >
@@ -211,7 +217,12 @@ const MapViewF = <T extends object>({
211
217
) ;
212
218
}
213
219
}
214
- return clusters ;
220
+
221
+ const unClusteredMarkers = markers . filter (
222
+ ( marker ) => ! clusteredMarkers . includes ( marker )
223
+ ) ;
224
+
225
+ return { clusters, unClusteredMarkers } ;
215
226
} ,
216
227
[ getNearbyMarkers ]
217
228
) ;
@@ -240,13 +251,13 @@ const MapViewF = <T extends object>({
240
251
// eslint-disable-next-line react-hooks/exhaustive-deps
241
252
} , [ delayedRegionValue ] ) ;
242
253
243
- const markers = React . useMemo (
244
- ( ) => getChildrenForType ( MapMarker ) ,
254
+ const circles = React . useMemo (
255
+ ( ) => getChildrenForType ( MapCircle ) ,
245
256
[ getChildrenForType ]
246
257
) ;
247
258
248
- const circles = React . useMemo (
249
- ( ) => getChildrenForType ( MapCircle ) ,
259
+ const markers = React . useMemo (
260
+ ( ) => getChildrenForType ( MapMarker ) ,
250
261
[ getChildrenForType ]
251
262
) ;
252
263
@@ -260,15 +271,17 @@ const MapViewF = <T extends object>({
260
271
return clusterViews . length ? clusterViews [ 0 ] : undefined ; //Only take the first, ignore any others
261
272
} , [ getChildrenForType ] ) ;
262
273
263
- const clusters = React . useMemo ( ( ) => {
274
+ const { clusters, unClusteredMarkers } = React . useMemo ( ( ) => {
264
275
if ( autoClusterMarkers ) {
265
- return clusterMarkers (
276
+ const { clusters , unClusteredMarkers } = clusterMarkers (
266
277
markers ,
267
278
autoClusterMarkersDistanceMeters ,
268
279
clusterView
269
- ) . concat ( manualClusters ) ;
280
+ ) ;
281
+
282
+ return { clusters : clusters . concat ( manualClusters ) , unClusteredMarkers } ;
270
283
} else {
271
- return manualClusters ;
284
+ return { clusters : manualClusters , unClusteredMarkers : markers } ;
272
285
}
273
286
} , [
274
287
autoClusterMarkers ,
@@ -304,7 +317,7 @@ const MapViewF = <T extends object>({
304
317
style = { [ styles . map , style ] }
305
318
{ ...rest }
306
319
>
307
- { markers . map ( ( marker , index ) =>
320
+ { unClusteredMarkers . map ( ( marker , index ) =>
308
321
renderMarker (
309
322
marker . props ,
310
323
index ,
@@ -343,7 +356,7 @@ const MapViewF = <T extends object>({
343
356
loadingEnabled ,
344
357
longitude ,
345
358
mapRef ,
346
- markers ,
359
+ unClusteredMarkers ,
347
360
onPress ,
348
361
onRegionChange ,
349
362
provider ,
0 commit comments