///
import { MapDatasource, CsMap, ILayerAction, ILayerService, PropertyDetails, FeatureEventDetails, ILayerExtensionType, LayerFilter, LayerStyle, ILayerExtension } from '..';
import { MessageBusService, MessageBusManager, MessageBusHandle } from '@csnext/cs-core';
import { LayerLegend } from './layer-legend';
import { PropertyType, DataSource, FeatureTypes, FeatureType } from '@csnext/cs-data';
export interface IMapLayerType {
getInstance?: (init?: Partial) => IMapLayer;
typeId?: string;
types?: string[];
}
export interface IMapLayer {
/** layer id */
id: string;
/** layer as shown in interface */
title: string;
/** list of tags, used for clustering in layer selection */
tags: string[];
state?: 'hidden' | 'loading' | 'visible';
enabled?: boolean;
sourceType?: string;
color: string;
description: string;
popupContent?: string | Function | undefined;
opacity?: number;
source?: string | DataSource;
type?: string;
parentId?: string;
style?: LayerStyle;
extensions?: ILayerExtensionType[];
filter?: any;
externalUrl?: string;
isEditable?: boolean;
isLive?: boolean;
/** toggle visibility of layer */
openFeatureDetails?: boolean;
hideInLayerList?: boolean;
featureTypes?: FeatureTypes;
selectedFeature?: mapboxgl.MapboxGeoJSONFeature;
_busManager: MessageBusManager;
_events?: MessageBusService;
_legends?: LayerLegend[];
_filters?: {
[key: string]: LayerFilter;
};
_manager?: MapDatasource;
_extensions: ILayerExtension[];
/** associated service */
_service?: ILayerService;
_showMenu?: boolean;
_showMore?: boolean;
_source?: DataSource;
_featureEventHandle?: MessageBusHandle;
addLayer(widget: CsMap): any;
getBounds(): any;
getLayerActions?(): ILayerAction[];
initLayer(manager: MapDatasource): Promise;
moveLayer(beforeId?: string): any;
removeLayer(widget: CsMap): any;
setFilter(filter: any[]): any;
initFilter(property: string): any;
applyFilter(filter: LayerFilter): any;
removeFilter(filter: LayerFilter): any;
setLegend(property: PropertyDetails | PropertyType | string, refreshLayer: boolean): any;
setOpacity(value: number): any;
setPopupContent(value: string | ((f: FeatureEventDetails) => {})): any;
updateLayer(): any;
updateLegends(): any;
updateFilters(): any;
getFeatureType(): FeatureType | undefined;
}