import type { ILayer, IPopupOption, RaContainer } from '@ramap/ra-core'; import { DOM } from '@ramap/ra-utils'; import Popup from './popup'; type ElementType = DOM.ElementType; export type LayerField = { field: string; formatField?: ElementType | ((field: string, feature: any) => ElementType); formatValue?: ElementType | ((value: any, feature: any) => ElementType); getValue?: (feature: any) => any; }; export type LayerPopupConfigItem = { layer: ILayer | string; fields?: Array; title?: ElementType | ((feature: any) => ElementType); customContent?: ElementType | ((feature: any) => ElementType); }; export interface ILayerPopupOption extends IPopupOption { config?: LayerPopupConfigItem[]; items?: LayerPopupConfigItem[]; trigger: 'hover' | 'click'; } type LayerMapInfo = { onMouseMove?: (layer: ILayer, e: any) => void; onMouseOut?: (layer: ILayer, e: any) => void; onClick?: (layer: ILayer, e: any) => void; onSourceUpdate?: (layer: ILayer) => void; } & Partial; export { LayerPopup }; export default class LayerPopup extends Popup { /** * 用于统计当前帧当中,layer 被点击的次数 */ protected layerClickCountByFrame: number; /** * 用于保存图层对应的事件回调以及配置信息 * @protected */ protected layerConfigMap: WeakMap; /** * 当期正在展示的图层以及对应元素 id 的信息 * @protected */ protected displayFeatureInfo?: { layer: ILayer; featureId: number; }; protected get layerConfigItems(): LayerPopupConfigItem[]; addTo(maplet: RaContainer): this; remove(): this; setOptions(option: Partial): this; protected getDefault(option: Partial): ILayerPopupOption; /** * 绑定对应的图层事件 * @protected */ protected bindLayerEvent(): void; /** * 解绑对应的图层事件 * @protected */ protected unbindLayerEvent(): void; protected onLayerMouseMove(layer: ILayer, e: any): void; protected onLayerMouseOut(layer: ILayer, e: any): void; protected onLayerClick: (layer: ILayer, e: any) => void; protected onMapletClick: () => void; protected onSourceUpdate(): void; /** * 通过当前图层和对应选中的元素获取气泡展示的 HTML 内容 * @param layer * @param e * @protected */ protected getLayerInfoFrag(layer: ILayer, e: any): { title: DocumentFragment | undefined; content: DocumentFragment; }; /** * 通过 Layer 配置访问到真实的 Layer 实例 * @param configItem * @protected */ protected getLayerByConfig(configItem: LayerPopupConfigItem): ILayer | undefined; /** * 判断当前展示的 Feature 是否和上一次查看的一致 * @param layer * @param featureId * @protected */ protected isSameFeature(layer: ILayer, featureId: number): boolean | undefined; protected setDisplayFeatureInfo(displayFeatureInfo?: { layer: ILayer; featureId: number; }): void; protected onLayerHide: () => void; /** * 覆盖 Popup 中的默认的 closeOnClick 行为 */ protected updateCloseOnClick: () => void; }