@uiw/react-baidu-map-info-window
Version:
Baidu Map info-window Components for React.
83 lines • 2.48 kB
JavaScript
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
};
}