UNPKG

rs-react-native-map-clustering

Version:

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

121 lines (120 loc) 3.31 kB
import type { MutableRefObject, ReactNode } from 'react'; import type { LayoutAnimationConfig } from 'react-native'; import type MapView from 'react-native-maps'; import type { LatLng, MapViewProps } from 'react-native-maps'; import type SuperCluster from 'supercluster'; export interface Region { latitude: number; longitude: number; latitudeDelta: number; longitudeDelta: number; } 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]: unknown; }; id?: number | string; } export interface ClusterFeature extends Feature { properties: { cluster?: boolean; cluster_id?: number; point_count: number; index: number; [key: string]: unknown; }; geometry: GeoJsonPoint; } export interface SpiderMarker extends LatLng { index: number; centerPoint: LatLng; } export interface MarkerData { properties: { point_count: number; index: number; [key: string]: unknown; }; geometry: { coordinates: [number, number]; }; } export interface MarkerStyle { width: number; height: number; size: number; fontSize: number; } export interface ClusterRenderProps { geometry: GeoJsonPoint; properties: { point_count: number; cluster_id?: number; cluster?: boolean; [key: string]: unknown; }; key: string; onPress: () => void; clusterColor: string; clusterTextColor: string; clusterFontFamily?: string; } export interface ClusterMarkerProps { geometry: GeoJsonPoint; properties: { point_count: number; cluster_id?: number; cluster?: boolean; [key: string]: unknown; }; onPress: () => void; clusterColor: string; clusterTextColor: string; clusterFontFamily?: string; tracksViewChanges: boolean; } export interface EdgePadding { top: number; left: number; right: number; bottom: number; } export interface ClusteredMapViewProps extends Omit<MapViewProps, 'onRegionChangeComplete'> { 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; selectedClusterColor?: string; spiderLineColor?: string; superClusterRef?: MutableRefObject<SuperCluster | null>; mapRef?: (ref: MapView | null) => void; onClusterPress?: (cluster: Feature, markers?: Feature[]) => void; onMarkersChange?: (markers: Feature[]) => void; onRegionChangeComplete?: (region: Region, markers?: Feature[]) => void; renderCluster?: (props: ClusterRenderProps) => ReactNode; children?: ReactNode; }