UNPKG

@uiw/react-baidu-map-info-window

Version:

Baidu Map info-window Components for React.

83 lines 2.48 kB
import _extends from "@babel/runtime/helpers/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose"; var _excluded = ["position"]; import { useState, useEffect, useMemo } from 'react'; import { useMapContext } from '@uiw/react-baidu-map-map'; import { useEnableProperties, useProperties, useVisiable, useEventProperties, usePortal } from '@uiw/react-baidu-map-utils'; export function useInfoWindow(props) { if (props === void 0) { props = {}; } var { position } = props, opts = _objectWithoutPropertiesLoose(props, _excluded); var { container, Portal } = usePortal(); var { container: title, Portal: PortalTitle } = usePortal(); var { map } = useMapContext(); var [infoWindow, setInfoWindow] = useState(); useMemo(() => { if (!infoWindow && map) { opts.title = title; var win = new BMap.InfoWindow(props.children ? container : opts.content || '', _extends({}, opts)); setInfoWindow(win); } return () => { if (infoWindow) { infoWindow.restore(); } }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [map]); var [isOpen, setIsOpen] = useState(opts.isOpen === undefined ? true : opts.isOpen); useEffect(() => { if (map && BMap && infoWindow) { if (!isOpen) { map.closeInfoWindow(); } else if (position) { var point = new BMap.Point(position.lng, position.lat); map.openInfoWindow(infoWindow, point); } } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isOpen, infoWindow]); useEffect(() => { if (infoWindow) { infoWindow.setContent(props.children ? container : opts.content || ''); } }, [props.content, props.children, infoWindow, container, opts.content]); useEffect(() => { if (infoWindow) { infoWindow.setTitle(title); } }, [infoWindow, props.content, title]); useVisiable(infoWindow, props); useEventProperties(infoWindow, props, ['Close', 'Open', 'Maximize', 'Restore', 'ClickClose']); useProperties(infoWindow, props, ['Width', 'Height', // 'Title', // 'Content', 'MaxContent']); useEnableProperties(infoWindow, props, ['CloseOnClick', 'Maximize', 'AutoPan']); return { /** * 信息窗口实例对象 */ infoWindow, /** * 更新 信息窗口实例对象 */ setInfoWindow, isOpen, setIsOpen, Portal, PortalTitle }; }