// @flow import React from "react"; import { Map, ImageOverlay, Marker, LayersControl } from "react-leaflet"; import { CRS, point, divIcon } from "leaflet"; import map from "lodash/map"; import type { Controls, Control } from "config/flowtypes"; export type Point = [number, number]; const convertPoint = ([y, x]: Point): Point => [-x, y]; export type ControlMapProps = { width: number, height: number, zoom: number, layers: Array, controls: Controls, onChangeControl: (control: Control) => void, state: State }; export default class ControlMap extends React.PureComponent { constructor(props: ControlMapProps) { super(props); } get center(): Point { return convertPoint([ this.props.width / 2, this.props.height / 2 ]); } render() { return ( {this.renderMarkers()} {this.renderLayers()} ); } renderMarkers() { return map(this.props.controls, this.renderMarker.bind(this)); } createLeafletIcon(control: Control) { const icon = control.icon(this.props.state); const iconClass = `${icon} mdi-36px`; return divIcon({ iconSize: point(36, 36), iconAnchor: point(18, 18), html: `` }); } iconColor(control: Control): string { if (control.iconColor != null) { return control.iconColor(this.props.state); } return "#000"; } renderMarker(control: Control, key: string) { return ( this.props.onChangeControl(control)} > ); } renderLayers() { return ( {this.props.layers.map(this.renderLayer)} ); } renderLayer(layer: Layer) { const LayersControlType = layer.baseLayer ? LayersControl.BaseLayer : LayersControl.Overlay; return ( {}} removeLayerControl={(_layer) => {}} addOverlay={(_layer, _name, _checked) => {}} addBaseLayer={(_layer, _name, _checked) => {}}> ); } }