All files / info-window/src index.tsx

66.66% Statements 4/6
100% Branches 0/0
33.33% Functions 1/3
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42                                                            1x   1x 1x 1x              
/// <reference types="@uiw/react-baidu-map-types" />
import React, { Fragment, useEffect, useImperativeHandle } from 'react';
import { OverlayProps } from '@uiw/react-baidu-map-map';
import { useInfoWindow } from './useInfoWindow';
 
export * from './useInfoWindow';
 
export interface InfoWindowProps extends OverlayProps, Omit<BMap.InfoWindowOptions, 'title'>, BMap.InfoWindowEvent {
  /**
   * 窗口是否打开
   * @default true
   */
  isOpen?: boolean;
  /** 窗口位置经纬度 */
  position: BMap.Point;
  /** 展示文本内容,支持 HTML 内容字符串 */
  content?: string | HTMLElement;
  /** 信息窗标题文字 */
  title?: string | HTMLElement | JSX.Element;
  /**
   * 信息窗口最大化时所显示内容,支持HTML内容
   */
  maxContent?: string;
  /**
   * 展示文本内容,类似于 content
   */
  children?: JSX.Element;
}
 
export default React.forwardRef<InfoWindowProps & { infoWindow?: BMap.InfoWindow }, InfoWindowProps>((props, ref) => {
  const { infoWindow, setIsOpen, Portal, PortalTitle } = useInfoWindow(props);
 
  useEffect(() => setIsOpen(props.isOpen!), [props.isOpen, setIsOpen]);
  useImperativeHandle(ref, () => ({ ...props, infoWindow }));
  return (
    <Fragment>
      <Portal>{props.children}</Portal>
      <PortalTitle>{props.title as any}</PortalTitle>
    </Fragment>
  );
});