UNPKG

rs-react-native-map-clustering

Version:

React Native Map Clustering both for Android and iOS with TypeScript support

109 lines (108 loc) 3.2 kB
import { ReactNode, RefObject } from 'react'; import { LayoutAnimationConfig } from 'react-native'; import { Region, LatLng, MapViewProps, AnimatedRegion } from 'react-native-maps'; import SuperCluster from 'supercluster'; export type MapRegion = Region | AnimatedRegion; export interface GeoJsonPoint { type: 'Point'; coordinates: [number, number]; } export interface Feature { type: 'Feature'; geometry: GeoJsonPoint; properties: { point_count: number; point_count_abbreviated?: string; index?: number; cluster_id?: number; cluster?: boolean; [key: string]: any; }; id?: number | string; } export interface ClusterFeature extends Feature { properties: { cluster?: boolean; cluster_id?: number; point_count: number; index: number; [key: string]: any; }; geometry: GeoJsonPoint; } export interface MarkerData extends LatLng { centerPoint?: LatLng; index?: number; } export interface MarkerStyle { width: number; height: number; size: number; fontSize: number; } export interface ClusterMarkerProps { geometry: GeoJsonPoint; properties: { point_count: number; cluster_id?: number; cluster?: boolean; [key: string]: any; }; onPress: () => void; clusterColor: string; clusterTextColor: string; clusterFontFamily?: string; tracksViewChanges: boolean; } export interface EdgePadding { top: number; left: number; right: number; bottom: number; } export interface SuperClusterOptions { radius?: number; maxZoom?: number; minZoom?: number; minPoints?: number; extent?: number; nodeSize?: number; } export interface SuperClusterType extends SuperCluster<Record<string, any>, Record<string, any>> { getClusterExpansionZoom(clusterId: number): number; getCluster(clusterId: number): Feature; getLeaves(clusterId: number, limit?: number, offset?: number): Feature[]; getClusters(bbox: number[], zoom: number): Feature[]; load(points: Feature[]): SuperClusterType; } export interface ClusteredMapProps extends MapViewProps { clusteringEnabled?: boolean; spiralEnabled?: boolean; animationEnabled?: boolean; preserveClusterPressBehavior?: boolean; tracksViewChanges?: boolean; layoutAnimationConf?: LayoutAnimationConfig; radius?: number; maxZoom?: number; minZoom?: number; extent?: number; nodeSize?: number; minPoints?: number; edgePadding?: EdgePadding; clusterColor?: string; clusterTextColor?: string; clusterFontFamily?: string; selectedClusterId?: string | number; selectedClusterColor?: string; spiderLineColor?: string; superClusterRef?: RefObject<SuperClusterType>; mapRef?: (ref: any) => void; onClusterPress?: (cluster: Feature, markers?: Feature[]) => void; onMarkersChange?: (markers: Feature[]) => void; onRegionChangeCompleteCustom?: (region: Region, markers?: Feature[]) => void; children?: ReactNode; /** * Custom render function for clusters */ renderCluster?: (cluster: Feature) => React.ReactNode; }