import React, { useMemo, useState } from 'react'; import { Amap, Marker, InfoWindow } from '@amap/amap-react'; import type { MapPointConfig, MapValue } from '../index'; export interface MapListProps extends MapPointConfig { value?: Partial[]; } export function List(props: MapListProps) { const [activePosition, setActivePosition] = useState< Partial | undefined >(); const activeCoordinate = useMemo(() => { if (!activePosition) return undefined; if (activePosition.coordinate) return activePosition.coordinate; if (activePosition.longitude && activePosition.latitude) return [activePosition.longitude, activePosition.latitude]; return undefined; }, [activePosition]); const firstCoordinate = useMemo(() => { if (!props.value) return undefined; const first = props.value[0]; if (first.coordinate) return first.coordinate; if (first.longitude && first.latitude) return [first.longitude, first.latitude]; return undefined; }, [props.value]); return (
{props.headerTip && (
{props.headerTip}
)} {(props.value || []).map((item, index) => { let coordinate: [number, number] | undefined; if (item.coordinate) coordinate = item.coordinate; else if (item.longitude && item.latitude) coordinate = [item.longitude, item.latitude]; return ( <> {coordinate && ( { if (props.showTip) { setActivePosition(item); } }} > {props.render ? props.render(item) : props.children} )} ); })} {props.showTip && activeCoordinate && ( { setActivePosition(undefined); }} content={activePosition?.tip} isCustom={Boolean(props.tipRender)} > {props.tipRender ? props.tipRender(activePosition) : ''} )}
); }