Commit aec36296 authored by wind.wang's avatar wind.wang

add web amap

parent 051dfb31
......@@ -2,18 +2,20 @@
// import Marker from './maps/Marker'
// import Polygon from './maps/Polygon'
// import Circle from './maps/Circle'
import { Map, Marker as RMarker } from 'react-amap';
import React from 'react';
import { Map, Marker as RMarker, InfoWindow } from 'react-amap';
const MapView = (props) => {
return <Map {...props} center={props.coordinate}></Map>
}
const Marker = (props) => {
return <RMarker {...props} center={props.coordinate} />
return <RMarker {...props} position={props.coordinate} />
}
MapView.Marker = Marker
export default MapView
export {
MapView,
Marker,
InfoWindow,
}
......@@ -2,3 +2,5 @@ import { fetchLocation, setAmapKey } from './app/location';
module.exports.setAmapKey = setAmapKey;
module.exports.fetchLocation = fetchLocation;
export * from './app/amap3d'
\ No newline at end of file
{
"presets": ["es2015", "stage-0", "react"]
}
\ No newline at end of file
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# http://editorconfig.org
root = true
[**]
# 文件结尾符
end_of_line = lf
insert_final_newline = true
# 去除行尾空白字符
trim_trailing_whitespace = true
# 编码格式
charset = utf-8
# 项目中采用tab作为代码缩进样式
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[{package.json,.babelrc,.eslintrc}]
indent_style = space
indent_size = 2
[*.yml]
indent_style = space
indent_size = 2
\ No newline at end of file
{
"env": {
"es6": true
},
"plugins": ["react", "flowtype"],
"extends": ["elemefe", "plugin:flowtype/recommended"],
"parser": "babel-eslint",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
}
},
"rules": {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
"semi": "off"
},
"settings": {
"flowtype": {
"onlyFilesWithFlowAnnotation": false
}
}
}
# react-amap Contributing Guide
Hi! Thank you for choosing react-amap.
React-amap is a Map Components Based On React and AMap(amap.com)
We are excited that you are interested in contributing to react-amap. Before submitting your contribution though, please make sure to take a moment and read through the following guidelines.
## Issue Guidelines
- Issues are exclusively for bug reports and feature requests. Other questions may be closed directly.
- Before submitting an issue, please check if similar problems have already been issued.
- Please specify which version of react-amap you are using, and provide OS and browser information. [JSFiddle](https://jsfiddle.net/) is recommended to build a live demo so that your issue can be reproduced clearly.
## Pull Request Guidelines
- Fork this repository to your own account. Do not create branches here.
- **DO NOT** include files inside `lib` directory.
- Rebase before creating a PR to keep commit history clear.
- If you are fixing a bug, please include detailed description of the bug in the PR.
- Merging a PR takes two maintainers: one approves the changes after reviewing, and then the other reviews and merges.
## Code Style
Just comply with the [ESLint](https://github.com/ElemeFE/eslint-config-elemefe) configuration of [ElemeFE](https://github.com/elemefe).
# react-amap Contributing Guide
Hi! 首先感谢你使用 react-amap。
react-amap 是一个基于 React 封装的高德地图组件库。
react-amap 的成长离不开大家的支持,如果你愿意为 react-amap 贡献代码或提供建议,请阅读以下内容。
## Issue 规范
- issue 仅用于提交 Bug 或 Feature,其它内容可能会被直接关闭。
- 在提交 issue 之前,请搜索相关内容是否已被提出。
- 请说明 react-amap 的版本号,并提供操作系统和浏览器信息。推荐使用 [JSFiddle](https://jsfiddle.net/) 生成在线 demo,这能够更直观地重现问题。
## Pull Request 规范
- 请先 fork 一份到自己的项目下,不要直接在仓库下建分支。
- **不要提交** `lib` 里面打包的文件。
- 提交 PR 前请 rebase,确保 commit 记录的整洁。
- 如果是修复 bug,请在 PR 中给出描述信息。
- 合并代码需要两名维护人员参与:一人进行 review 后 approve,另一人再次 review,通过后即可合并。
## 代码规范
遵循饿了么前端的 [ESLint](https://github.com/ElemeFE/eslint-config-elemefe) 即可
<!--
请确保阅读下面的内容并勾选。没有勾选的 Issue 将被关闭。
-->
+ [ ] 我已经搜索过 issue,没有类似的问题,或者类似的问题仍然没有解决方案。
+ [ ] 我已经搜索过[文档](https://elemefe.github.io/react-amap/articles/start),并且仍然没有找到解决方案。
+ [ ] 我写了个问题重现的例子,链接或者代码将会贴在下面。
<!--
请确保阅读上面的内容并勾选。没有勾选的 Issue 将被关闭。
-->
#### Reproduce Example Link or Code Fragment
#### What is Expected?
#### What is actually happening?
Please makes sure these boxes are checked before submitting your PR, thank you!
* [ ] Make sure you follow the contributing guide.
* [ ] Rebase before creating a PR to keep commit history clear.
* [ ] Add some descriptions and refer relative issues for you PR.
language: node_js
node_js:
- "6"
branched:
only:
- master
script:
- npm run lint
- npm run browser-build
- npm run site
# 更新日志
## [2017-12-13] 1.2.0
### 更新
1. 对除 Markers 以外的其他组件都进行了重构;重构效果如下:
1. 抽出了共用的逻辑代码,这部分代码以 HOC 注入到组件中;
2. 重构后的组件 events 属性响应式的;
3. 组件属性变更时对实例的操作更加智能;(比如对名为 offset 的属性进行修改,会尝试执行 setOffset 方法)
4. 允许用户自己选择高德地图版本(Map 组件的 version 属性);
5. 对外使用的接口不变,所以可以无痛升级。
### 修复
1. 使用 CDN 接入 react-amap 资源时 Marker 组件有个严重的 Bug,不过似乎没人发现,不管了反正已经偷偷修好了。
---
## [2017-11-16] 1.1.2
### 更新
1. Map 组件卸载时自动销毁地图实例对象。
---
## [2017-11-13] 1.1.1
### 更新
1. 重构 APILoader 类,支持加载 AMapUI 组件库。
---
## [2017-10-13] 1.1.0
### 更新
1. 大幅重构 Map 组件;支持 `animateEnable``doubleClickZoom` 等属性的动态配置。
2. 支持 3D 模式。
3. 新增控件 ControlBar。
4. 删除了地图内层一个多余的 div。([#48](https://github.com/ElemeFE/react-amap/issues/48)
3. 支持给 Map 提供 loading 组件以渲染加载效果。
2. 支持给 Marker 组件添加 `className`。([#40](https://github.com/ElemeFE/react-amap/issues/40)
3. 补充了 TypeScript 模块声明,可以在 TypeScript 项目中使用。([#47](https://github.com/ElemeFE/react-amap/issues/47)
---
## [2017-08-14] 1.0.3
### 修复
* 修复部分组件在 unmount 后并没有从地图消失的问题。
---
## [2017-06-14] 1.0.0
### 重大更新
* 现在 react-amap 拥有了扩展能力,你可以自己写一个地图组件并且在 Map 中嵌入;相关文档请参考[自定义地图组件](https://elemefe.github.io/react-amap/articles/extend)
---
## [2017-05-11] 0.2.7
### 优化
* 唯一使用了样式的 Markers 组件,直接把样式写在代码里,不需要为了这个额外引入 css-loader 之类的插件进行打包。
---
## [2017-04-13] 0.2.6
### 优化
* 优化打包方式;支持组件的单个 import
---
## [2017-04-11] 0.2.5
### 修复
* 在同构 SSR 架构的应用中确保不抛出错误
---
## [2017-03-22] 0.2.4-0
### 修复
* 在刷新 Markers 时,把之前存在的标记清空
---
## [2017-03-22] 0.2.3
### 新增
* 新增 [MouseTool](https://elemefe.github.io/react-amap/components/mousetool) 鼠标工具插件;通过该插件,可进行鼠标画标记点、线、多边形、矩形、圆、距离量测、面积量测、拉框放大、拉框缩小等功能。
---
## [2017-03-16] 0.2.3-0
### 修复
* 因为 React 框架的限制,`key` 属性另有所用,所以定义高德的 Key 时统一为 `amapkey`。详见[关于 key](https://elemefe.github.io/react-amap/articles/start#关于-key)
---
## [2017-03-16] 0.2.2
### 新增
* Marker 组件新增可以定义 render 静态属性渲染外观;也在高德 Marker 实例挂载 render 方法动态渲染外观。
---
## [2017-03-15] 0.2.1
### 优化
* 重新设计 Markers 接口,对标记的外观控制更灵活;本次更新不向下兼容。
---
## [2017-03-14] 0.2.0
### 优化
* 所有组件接口(除 Markers)重新设计,开发者可以通过绑定事件获得高德原生实例。
---
## [2017-02-23] 0.0.1-rc.1
### react-amap 发布
MIT License
Copyright (c) 2017 ElemeFE
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
<img src="https://cloud.githubusercontent.com/assets/3898898/23833571/e5c7ae68-0782-11e7-8590-cecf4f3c969f.png" width="118" height="118" />
# react-amap
[![Build Status](https://travis-ci.org/ElemeFE/react-amap.svg?branch=master)](https://travis-ci.org/ElemeFE/react-amap)
[![npm version](https://badge.fury.io/js/react-amap.svg?_t=20170411)](https://www.npmjs.com/package/react-amap)
[![npm downloads](https://img.shields.io/npm/dm/react-amap.svg)](https://www.npmjs.com/package/react-amap)
> react-amap 是一个基于 React 封装的高德地图组件;帮助你轻松的接入地图到 React 项目中。除了必须引用的 Map 组件外,我们目前提供了最常用的 10 个地图组件,能满足大部分简单的业务场景;如果你有更复杂的需求,或者觉得默认提供的组件功能不够,你完全可以自定义一个地图组件,然后根据高德原生 API 做高德允许你做的一切事情。
### 最近更新
react-amap 升级到 1.1.1,支持加载 [AMapUI 组件库](http://lbs.amap.com/api/javascript-api/guide/amap-ui/intro)。加载方式参考 [Map 组件](/components/map) 关于 **加载 AMapUI 组件库** 的说明。(2017-11-13)
### 扩展组件
从版本 [1.0.0](https://www.npmjs.com/package/react-amap) 开始,react-amap 拥有了组件的扩展能力。如果 react-amap 中已有的组件不能满足你的业务需求,你可以使用自己写的地图组件;
在你的组件中,可以通过 props 访问到创建好的高德地图实例,以及地图的 div 容器;拥有访问这两个属性的能力后,你可以根据高德原生 API 做高德允许你做的一切事情。实际上,react-amap 中的其他组件就是这么做的。文档内容请参考[自定义地图组件](https://elemefe.github.io/react-amap/articles/extend)
目前已有的一些组件:
1. [react-amap-plugin-heatmap](https://www.npmjs.com/package/react-amap-plugin-heatmap),热力图组件。
2. [react-amap-plugin-geolocation](https://www.npmjs.com/package/react-amap-plugin-geolocation),定位组件。
3. [react-amapui-wrapper](https://github.com/Croash/react-amapui-wrapper),可自定义的AMapUI组件。
如果你有写好的组件愿意开源出来的,欢迎提一个 PR 扩展这个列表。
### 在线实时演示
https://jsfiddle.net/ioslh/h4u8mdng/25/
---
如何在项目中接入 react-amap;
### 安装
```sh
npm install --save react-amap
```
### npm 用法
```html
<div id="app"></div>
```
```css
#app {
width: 600px;
height: 400px;
}
```
```jsx
import React from 'react';
import ReactDOM from 'react-dom';
import { Map } from 'react-amap';
ReactDOM.render(
<Map amapkey={YOUR_AMAP_KEY} version={VERSION} />,
document.querySelector('#app')
)
```
amapkey 说明见下文
version 指定高德地图版本 不填则使用默认值: 1.4.0
也可以手工引入你需要的组件:
```jsx
import Map from 'react-amap/lib/map';
import Marker from 'react-amap/lib/marker';
// ... your other code
```
以上为简单场景的应用。
**tips:** Map 组件的父元素须设置高度和宽度;关于代码中的 `Map` 组件的 `amapkey` 属性见下方的说明。
### CDN 用法
在 HTML 页面中加入 react-amap 库的 CDN 地址,插件会在 `window` 下暴露 `ReactAMAP` 变量。
```html
<script src="path/to/react.js"></script>
<script src="path/to/react-dom.js"></script>
<script src="path/to/dist/react-amap.js"></script>
<script>
var Map = ReactAMAP.Map;
var Marker = ReactAMAP.Marker;
var pos = { longitude: 120, latitude: 30 };
var YourApp = React.createElement(
Map,
{ center: pos },
React.createElement(
Marker,
{ position: pos },
null
)
);
ReactDOM.render(YourApp, document.getElementById('root'));
</script>
```
##### CDN 地址
实际应用中你可以使用下面的 CDN 地址,也可以把脚本下载下来本地部署。
tips: 记得将其中的 `VERSION` 替换为真实版本号,查看历史版本[更新日志](https://elemefe.github.io/react-amap/articles/changelog)。
+ https://unpkg.com/react-amap@VERSION/dist/react-amap.js
+ https://unpkg.com/react-amap@VERSION/dist/react-amap.min.js
### 关于 Key
在上面的例子中需要给 Map 组件传入 `amapkey` 属性,这个是高德地图给开发者分配的开发者 Key;你可以在[高德开放平台](http://lbs.amap.com/faq/account/key/67)申请你自己的 Key。
在 react-amap 中 Key 的传入方式有两种:
+ 给 Map 组件传入 `amapkey` 属性(因为 React 框架本身对 `key` 属性有其他作用,所以不能用 `key`,所以我们用 `amapkey`),这样的缺点是如果多个地方使用就要每次都要传入;
+ 你也可以定义一个纯组件,把 Map 组件的 amapkey 属性写好后返回新组件。
+ 直接把你的 Key 定义在全局变量 `window.amapkey` 上,react-amap 在调用高德接口时会尝试从这里读取。(不推荐)
组件的使用请移步[组件文档](https://elemefe.github.io/react-amap/components/about)。
### 贡献指南
首先感谢你使用 react-amap,react-amap 是一个基于 React 封装的高德地图组件库。
react-amap 的成长离不开大家的支持,如果你愿意为 react-amap 贡献代码或提供建议,请阅读以下内容。
#### 开发
```shell
npm install
npm start # http://localhost:9001
```
#### Issue 规范
- issue 仅用于提交 Bug 或 Feature,其它内容可能会被直接关闭。
- 在提交 issue 之前,请搜索相关内容是否已被提出。
- 在提交issue时,请说明 react-amap 的版本号,并提供操作系统和浏览器信息。推荐使用 [JSFiddle](https://jsfiddle.net/ioslh/mxc0h16p/5/) 生成在线 demo,这能够更直观地重现问题。
#### Pull Request 规范
- 请先 fork 一份到自己的项目下,不要直接在仓库下建分支。
- **不要提交 `dist` 里面打包的文件**
- 提交 PR 前请 rebase,确保 commit 记录的整洁。
- 如果是修复 bug,请在 PR 中给出描述信息。
- 合并代码需要两名维护人员参与:一人进行 review 后 approve,另一人再次 review,通过后即可合并。
### 代码规范
遵循饿了么前端的 [ESLint](https://github.com/ElemeFE/eslint-config-elemefe) 即可。
### License
[MIT License](https://github.com/ElemeFE/react-amap/blob/master/COPYING)
Copyright (c) 2017 ElemeFE
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
/* eslint-disable */
import React from 'react';
declare type AMapLngLat = {
getLng: Function,
getLat: Function,
};
declare type PureLngLat = {
longitude: number,
latitude: number,
};
declare type LngLat = PureLngLat & AMapLngLat;
declare type AMapSize = {
getWidth: Function,
getHeight: Function,
};
declare type PureSize = {
width: number,
height: number,
};
declare type Size = AMapSize & PureSize;
declare type AMapPixel = {
getX: Function,
getY: Function,
};
declare type PurePixel = [number, number];
declare type Pixel = AMapPixel & PurePixel;
declare type MarkerContent = string | HTMLElement;
declare type PolylinePath = Array<PureLngLat> & Array<AMapLngLat>;
declare type PolygonPath = PolylinePath | Array<PolylinePath>;
declare type EventMap = {[evName: string]: Function};
declare type MapLang = 'zh_cn' | 'zh_en' | 'en';
declare type MapFeature = 'bg' | 'point' | 'road' | 'building';
declare type MapProps = {
protocol?: string,
amapkey?: string,
version?: string,
useAMapUI?: boolean | Function,
onInstanceCreated?: Function,
children: React.Node,
events?: EventMap,
plugins?: Object,
loading: React.Node,
center?: LngLat,
zoom?: number,
zooms?: [number, number],
animateEnable?: boolean,
doubleClickZoom?: boolean,
dragEnable?: boolean,
isHotspot?: boolean,
jogEnable?: boolean,
keyboardEnable?: boolean,
resizeEnable?: boolean,
rotateEnable?: boolean,
scrollWheel?: boolean,
touchZoom?: boolean,
zoomEnable?: boolean,
showIndoorMap?: boolean,
expandZoomRange?: boolean,
viewMode?: '2D' | '3D',
features?: Array<MapFeature>,
pitch?: number,
mapStyle?: string,
labelzIndex?: number,
skyColor?: string,
buildingAnimation?: boolean,
pitchEnable?: boolean,
showBuildingBlock?: boolean,
indoorMap?: any,
cursor?: string,
layers?: Array<any>,
view?: any,
city?: string,
bounds?: any,
limitBounds?: any,
status?: any,
rotation?: number
// lang?: MapLang,
}
declare type MarkerProps = {
position?: LngLat,
offset?: Pixel,
onInstanceCreated?: Function,
icon?: any,
content?: MarkerContent,
className?: string,
draggable?: boolean,
visible?: boolean,
cursor?: string,
zIndex?: number,
angle?: number,
animation?: string,
markers?: Array<Object>,
shadow?: Object,
title?: string,
clickable?: boolean,
extData?: any,
label?: Object,
topWhenClick?: boolean,
bubble?: boolean,
raiseOnDrag?: boolean,
autoRotation?: boolean,
shape?: Object,
events?: Object,
render?: Function,
children?: any,
useCluster?: Object | boolean,
__map__: Object,
__ele__: HTMLDivElement,
};
declare type MapEvent = {
lnglat: AMapLngLat,
target: Object,
markers?: Array<Object>
};
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
var _common = require('../utils/common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/*
* props
* {
* __map__ 父级组件传过来的地图实例
* }
*/
var configurableProps = ['center', 'radius', 'draggable', 'extData',
/* 原生的接口中并没有这些对象,这是本组件的扩展 */
'visible', 'style'];
var allProps = configurableProps.concat(['zIndex', 'bubble']);
var Circle = function (_React$Component) {
_inherits(Circle, _React$Component);
function Circle(props) {
_classCallCheck(this, Circle);
var _this = _possibleConstructorReturn(this, (Circle.__proto__ || Object.getPrototypeOf(Circle)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
visible: function visible(val) {
if (self.mapCircle) {
if (val) {
self.mapCircle.show();
} else {
self.mapCircle.hide();
}
}
},
style: function style(val) {
self.mapCircle && self.mapCircle.setOptions(val);
}
};
_this.converterMap = {
center: _common.toLnglat
};
_this.state = {
loaded: false
};
_this.map = props.__map__;
_this.element = _this.map.getContainer();
_this.createInstance(props).then(function () {
_this.setState({
loaded: true
});
_this.props.onInstanceCreated && _this.props.onInstanceCreated();
});
}
}
return _this;
}
_createClass(Circle, [{
key: 'createInstance',
value: function createInstance(props) {
var options = this.buildCreateOptions(props);
options.map = this.map;
this.mapCircle = new window.AMap.Circle(options);
return Promise.resolve(this.mapCircle);
}
}, {
key: 'buildCreateOptions',
value: function buildCreateOptions(props) {
var _this2 = this;
var options = {};
allProps.forEach(function (key) {
if (key in props) {
if (key === 'style' && props.style !== undefined) {
var styleItem = Object.keys(props.style);
styleItem.forEach(function (item) {
// $FlowFixMe
options[item] = props.style[item];
});
} else {
options[key] = _this2.getSetterValue(key, props);
}
}
});
return options;
}
}, {
key: 'getSetterValue',
value: function getSetterValue(key, props) {
if (key in this.converterMap) {
return this.converterMap[key](props[key]);
}
return props[key];
}
}, {
key: 'renderEditor',
value: function renderEditor(children) {
if (!children) {
return null;
}
if (_react2.default.Children.count(children) !== 1) {
return null;
}
return _react2.default.cloneElement(_react2.default.Children.only(children), {
__circle__: this.mapCircle,
__map__: this.map,
__ele__: this.element
});
}
}, {
key: 'render',
value: function render() {
return this.state.loaded ? this.renderEditor(this.props.children) : null;
}
}, {
key: 'instance',
get: function get() {
return this.mapCircle;
}
}]);
return Circle;
}(_react2.default.Component);
exports.default = (0, _withPropsReactive2.default)(Circle);
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
var _isFun = require('../utils/isFun');
var _isFun2 = _interopRequireDefault(_isFun);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var CircleEditor = function (_React$Component) {
_inherits(CircleEditor, _React$Component);
function CircleEditor(props) {
_classCallCheck(this, CircleEditor);
var _this = _possibleConstructorReturn(this, (CircleEditor.__proto__ || Object.getPrototypeOf(CircleEditor)).call(this, props));
if (typeof window !== 'undefined') {
if (!(props.__map__ && props.__circle__)) {
_log2.default.warning('CIRCLE_INSTANCE_REQUIRED');
} else {
_this.map = props.__map__;
_this.element = _this.map.getContainer();
_this.circle = props.__circle__;
_this.editorActive = false;
_this.onPropsUpdate(props);
}
}
return _this;
}
_createClass(CircleEditor, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.map) {
this.onPropsUpdate(nextProps);
}
}
}, {
key: 'onPropsUpdate',
value: function onPropsUpdate(props) {
if ('active' in props && props.active === false) {
this.toggleActive(false, props);
} else {
this.toggleActive(true, props);
}
}
}, {
key: 'toggleActive',
value: function toggleActive(active, props) {
if (active) {
if (!this.editorActive) {
this.activeEditor(props);
}
} else {
if (this.editorActive) {
this.inactiveEditor();
}
}
}
}, {
key: 'activeEditor',
value: function activeEditor(props) {
var _this2 = this;
this.loadCircleEditor(props).then(function (editor) {
_this2.editorActive = true;
editor.open();
});
}
}, {
key: 'inactiveEditor',
value: function inactiveEditor() {
this.editorActive = false;
if (this.circleEditor) {
this.circleEditor.close();
}
}
}, {
key: 'loadCircleEditor',
value: function loadCircleEditor(props) {
var _this3 = this;
if (this.circleEditor) {
return Promise.resolve(this.circleEditor);
}
return new Promise(function (resolve) {
_this3.map.plugin(['AMap.CircleEditor'], function () {
resolve(_this3.createEditorInstance(props));
});
});
}
}, {
key: 'createEditorInstance',
value: function createEditorInstance(props) {
this.circleEditor = new window.AMap.CircleEditor(this.map, this.circle);
var events = this.exposeEditorInstance(props);
events && this.bindEditorEvents(events);
return this.circleEditor;
}
}, {
key: 'exposeEditorInstance',
value: function exposeEditorInstance(props) {
if ('events' in props) {
var _events = props.events || {};
if ((0, _isFun2.default)(_events.created)) {
_events.created(this.circleEditor);
}
delete _events.created;
return _events;
}
return false;
}
}, {
key: 'bindEditorEvents',
value: function bindEditorEvents(events) {
var _this4 = this;
var list = Object.keys(events);
list.length && list.forEach(function (evName) {
_this4.circleEditor.on(evName, events[evName]);
});
}
}, {
key: 'render',
value: function render() {
return null;
}
}]);
return CircleEditor;
}(_react2.default.Component);
exports.default = CircleEditor;
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/*
* props
* {
* __map__ 父级组件传过来的地图实例
* }
*/
var defaultOpts = {
clickable: false,
opacity: 1,
visible: true
};
var GroundImage = function (_React$Component) {
_inherits(GroundImage, _React$Component);
function GroundImage(props) {
_classCallCheck(this, GroundImage);
var _this = _possibleConstructorReturn(this, (GroundImage.__proto__ || Object.getPrototypeOf(GroundImage)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
visible: function visible(val) {
if (val) {
self.image && self.image.show();
} else {
self.image && self.image.hide();
}
},
src: function src(val) {
self.image.setImageUrl(val);
}
};
_this.converterMap = {
bounds: function bounds(val) {
return self.buildBounds(val);
}
};
_this.map = props.__map__;
_this.element = _this.map.getContainer();
setTimeout(function () {
_this.createGroundImage(props);
}, 13);
}
}
return _this;
}
_createClass(GroundImage, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate() {
return false;
}
}, {
key: 'checkPropsChanged',
value: function checkPropsChanged(nextProps, key) {
return this.props[key] !== nextProps[key];
}
}, {
key: 'createGroundImage',
value: function createGroundImage(props) {
var src = void 0,
bounds = void 0,
opacity = void 0,
clickable = void 0;
if ('src' in props) {
src = props.src;
} else {
_log2.default.warning('SRC_REQUIRED', true);
}
if ('bounds' in props) {
bounds = this.buildBounds(props.bounds);
} else {
_log2.default.warning('BOUNDS_REQUIRED', true);
}
if ('clickable' in props) {
clickable = props.clickable;
} else {
clickable = defaultOpts.clickable;
}
if ('opacity' in props) {
opacity = props.opacity;
} else {
opacity = defaultOpts.opacity;
}
this.image = new window.AMap.GroundImage(src, bounds, {
map: this.map,
clickable: clickable,
opacity: opacity
});
this.props.onInstanceCreated && this.props.onInstanceCreated();
}
}, {
key: 'buildBounds',
value: function buildBounds(rawBounds) {
if (!rawBounds) {
return rawBounds;
}
if ('getSouthWest' in rawBounds) {
return rawBounds;
}
var bounds = new window.AMap.Bounds(new window.AMap.LngLat(rawBounds.sw.longitude, rawBounds.sw.latitude), new window.AMap.LngLat(rawBounds.ne.longitude, rawBounds.ne.latitude));
return bounds;
}
}, {
key: 'render',
value: function render() {
return null;
}
}, {
key: 'instance',
get: function get() {
return this.image;
}
}]);
return GroundImage;
}(_react2.default.Component);
exports.default = (0, _withPropsReactive2.default)(GroundImage);
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MouseTool = exports.Marker = exports.GroundImage = exports.InfoWindow = exports.PolyEditor = exports.Polyline = exports.Polygon = exports.CircleEditor = exports.Circle = exports.Markers = exports.Map = undefined;
var _map = require('./map');
var _map2 = _interopRequireDefault(_map);
var _marker = require('./marker');
var _marker2 = _interopRequireDefault(_marker);
var _markers = require('./markers');
var _markers2 = _interopRequireDefault(_markers);
var _circle = require('./circle');
var _circle2 = _interopRequireDefault(_circle);
var _polygon = require('./polygon');
var _polygon2 = _interopRequireDefault(_polygon);
var _polyline = require('./polyline');
var _polyline2 = _interopRequireDefault(_polyline);
var _infowindow = require('./infowindow');
var _infowindow2 = _interopRequireDefault(_infowindow);
var _groundimage = require('./groundimage');
var _groundimage2 = _interopRequireDefault(_groundimage);
var _circleeditor = require('./circleeditor');
var _circleeditor2 = _interopRequireDefault(_circleeditor);
var _polyeditor = require('./polyeditor');
var _polyeditor2 = _interopRequireDefault(_polyeditor);
var _mousetool = require('./mousetool');
var _mousetool2 = _interopRequireDefault(_mousetool);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.Map = _map2.default;
exports.Markers = _markers2.default;
exports.Circle = _circle2.default;
exports.CircleEditor = _circleeditor2.default;
exports.Polygon = _polygon2.default;
exports.Polyline = _polyline2.default;
exports.PolyEditor = _polyeditor2.default;
exports.InfoWindow = _infowindow2.default;
exports.GroundImage = _groundimage2.default;
exports.Marker = _marker2.default;
exports.MouseTool = _mousetool2.default;
exports.default = {
Map: _map2.default,
Markers: _markers2.default,
Circle: _circle2.default,
CircleEditor: _circleeditor2.default,
Polygon: _polygon2.default,
Polyline: _polyline2.default,
PolyEditor: _polyeditor2.default,
InfoWindow: _infowindow2.default,
GroundImage: _groundimage2.default,
Marker: _marker2.default,
MouseTool: _mousetool2.default
};
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
var _common = require('../utils/common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/*
* props
* {
* __map__ 父级组件传过来的地图实例
* }
*/
var Component = _react2.default.Component;
var configurableProps = ['content', 'position', 'size',
/* 以下属性是本插件的扩展 */
'visible',
/* 这个 setOffset 方法高德并没有明确在文档中列出来,不确定会不会撤销 */
'offset'];
var allProps = configurableProps.concat(['isCustom', 'autoMove', 'closeWhenClickMap', 'showShadow']);
var InfoWindow = function (_Component) {
_inherits(InfoWindow, _Component);
function InfoWindow(props) {
_classCallCheck(this, InfoWindow);
var _this = _possibleConstructorReturn(this, (InfoWindow.__proto__ || Object.getPrototypeOf(InfoWindow)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
visible: function visible(val) {
if (val) {
self.showWindow();
self.setClassName(self.props);
self.setChild(self.props);
} else {
self.closeWindow();
}
}
};
_this.converterMap = {
size: _common.toSize,
offset: _common.toPixel,
position: _common.toLnglat
};
_this.map = props.__map__;
_this.isCustom = true;
setTimeout(function () {
_this.createInfoWindow(props);
}, 13);
}
}
return _this;
}
_createClass(InfoWindow, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate() {
return false;
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.map) {
this.refreshWindowLayout(nextProps);
}
}
}, {
key: 'createInfoWindow',
value: function createInfoWindow(props) {
var options = this.buildCreateOptions(props);
this.infoWindow = new window.AMap.InfoWindow(options);
this.props.onInstanceCreated && this.props.onInstanceCreated();
}
}, {
key: 'refreshWindowLayout',
value: function refreshWindowLayout(nextProps) {
this.setChild(nextProps);
this.setClassName(nextProps);
}
}, {
key: 'checkPropChanged',
value: function checkPropChanged(key, nextProps) {
return this.props[key] !== nextProps[key];
}
}, {
key: 'showWindow',
value: function showWindow() {
this.infoWindow.open(this.map, this.infoWindow.getPosition());
}
}, {
key: 'closeWindow',
value: function closeWindow() {
this.infoWindow.close();
}
}, {
key: 'buildCreateOptions',
value: function buildCreateOptions(props) {
var _this2 = this;
var options = {};
// 如果开发者没有设置 isCustom 属性,默认设置为 false
if ('isCustom' in props) {
options.isCustom = !!props.isCustom;
} else {
options.isCustom = false;
}
if ('content' in props) {
options.content = props.content;
} else {
this.infoDOM = document.createElement('div');
options.content = this.infoDOM;
}
allProps.forEach(function (key) {
if (key in props) {
if (['visible', 'isCustom', 'content'].indexOf(key) === -1) {
options[key] = _this2.getSetterValue(key, props[key]);
}
}
});
return options;
}
}, {
key: 'getSetterValue',
value: function getSetterValue(key, value) {
if (key in this.converterMap) {
return this.converterMap[key](value);
}
return value;
}
}, {
key: 'setChild',
value: function setChild(props) {
var child = props.children;
if (this.infoDOM && child) {
(0, _reactDom.render)(_react2.default.createElement(
'div',
null,
child
), this.infoDOM);
} else {
if (props.children) {
console.warn('因为你设置 isCustom 为 true,InfoWindow 的 Children 被忽略');
}
}
}
}, {
key: 'setClassName',
value: function setClassName(props) {
if (this.infoDOM) {
var baseClsValue = '';
// 刷新 className
if ('className' in props && props.className) {
baseClsValue += props.className;
} else if (props.isCustom === true) {
baseClsValue += 'amap_markers_pop_window';
}
this.infoDOM.className = baseClsValue;
}
}
}, {
key: 'render',
value: function render() {
return null;
}
}, {
key: 'instance',
get: function get() {
return this.infoWindow;
}
}]);
return InfoWindow;
}(Component);
exports.default = (0, _withPropsReactive2.default)(InfoWindow);
\ No newline at end of file
This diff is collapsed.
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _markerUtils = require('../utils/markerUtils');
var _common = require('../utils/common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Marker = function (_React$Component) {
_inherits(Marker, _React$Component);
function Marker(props) {
_classCallCheck(this, Marker);
var _this = _possibleConstructorReturn(this, (Marker.__proto__ || Object.getPrototypeOf(Marker)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
visible: function visible(val) {
if (val) {
self.marker && self.marker.show();
} else {
self.marker && self.marker.hide();
}
},
zIndex: function zIndex(val) {
self.marker && self.marker.setzIndex(val);
}
};
_this.converterMap = {
position: _common.toLnglat,
offset: _common.toPixel
};
_this.map = props.__map__;
_this.element = _this.map.getContainer();
setTimeout(function () {
_this.createMarker(props);
}, 13);
}
}
return _this;
}
_createClass(Marker, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate() {
return false;
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.map) {
this.refreshMarkerLayout(nextProps);
}
}
}, {
key: 'createMarker',
value: function createMarker(props) {
var options = this.buildCreateOptions(props);
this.marker = new window.AMap.Marker(options);
this.marker.render = function (marker) {
return function (component) {
(0, _markerUtils.renderMarkerComponent)(component, marker);
};
}(this.marker);
this.props.onInstanceCreated && this.props.onInstanceCreated();
this.setMarkerLayout(props);
this.setChildComponent(props);
}
// 在创建实例时根据传入配置,设置初始化选项
}, {
key: 'buildCreateOptions',
value: function buildCreateOptions(props) {
var _this2 = this;
var opts = {};
_markerUtils.MarkerAllProps.forEach(function (key) {
if (key in props) {
opts[key] = _this2.getSetterParam(key, props[key]);
}
});
opts.map = this.map;
return opts;
}
// 初始化标记的外观
}, {
key: 'setMarkerLayout',
value: function setMarkerLayout(props) {
if ('render' in props || 'children' in props && props.children) {
this.createContentWrapper();
if ('className' in props && props.className) {
// https://github.com/ElemeFE/react-amap/issues/40
this.contentWrapper.className = props.className;
}
}
}
}, {
key: 'createContentWrapper',
value: function createContentWrapper() {
this.contentWrapper = document.createElement('div');
this.marker.setContent(this.contentWrapper);
}
}, {
key: 'setChildComponent',
value: function setChildComponent(props) {
if (this.contentWrapper) {
if ('className' in props && props.className) {
// https://github.com/ElemeFE/react-amap/issues/40
this.contentWrapper.className = props.className;
}
if ('render' in props) {
(0, _markerUtils.renderMarkerComponent)(props.render, this.marker);
} else if ('children' in props) {
var child = props.children;
var childType = typeof child === 'undefined' ? 'undefined' : _typeof(child);
if (childType !== 'undefined' && this.contentWrapper) {
(0, _reactDom.render)(_react2.default.createElement(
'div',
null,
child
), this.contentWrapper);
}
}
}
}
}, {
key: 'refreshMarkerLayout',
value: function refreshMarkerLayout(nextProps) {
this.setChildComponent(nextProps);
}
}, {
key: 'getSetterParam',
value: function getSetterParam(key, val) {
if (key in this.converterMap) {
return this.converterMap[key](val);
}
return val;
}
}, {
key: 'render',
value: function render() {
return null;
}
}, {
key: 'instance',
get: function get() {
return this.marker;
}
}]);
return Marker;
}(_react2.default.Component);
exports.default = (0, _withPropsReactive2.default)(Marker);
\ No newline at end of file
This diff is collapsed.
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var MouseTool = function (_React$Component) {
_inherits(MouseTool, _React$Component);
function MouseTool(props) {
_classCallCheck(this, MouseTool);
var _this = _possibleConstructorReturn(this, (MouseTool.__proto__ || Object.getPrototypeOf(MouseTool)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
_this.map = props.__map__;
_this.loadToolInstance().then(function () {
_this.props.onInstanceCreated && _this.props.onInstanceCreated();
});
}
}
return _this;
}
_createClass(MouseTool, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate() {
return false;
}
}, {
key: 'loadToolInstance',
value: function loadToolInstance() {
var _this2 = this;
return new Promise(function (resolve) {
_this2.map.plugin(['AMap.MouseTool'], function () {
_this2.tool = new window.AMap.MouseTool(_this2.map);
resolve();
});
});
}
}, {
key: 'render',
value: function render() {
return null;
}
}, {
key: 'instance',
get: function get() {
return this.tool;
}
}]);
return MouseTool;
}(_react2.default.Component);
exports.default = (0, _withPropsReactive2.default)(MouseTool);
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var PolyEditor = function (_React$Component) {
_inherits(PolyEditor, _React$Component);
function PolyEditor(props) {
_classCallCheck(this, PolyEditor);
var _this = _possibleConstructorReturn(this, (PolyEditor.__proto__ || Object.getPrototypeOf(PolyEditor)).call(this, props));
if (typeof window !== 'undefined') {
if (!(props.__map__ && props.__poly__)) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
active: function active(val) {
self.toggleActive(val);
}
};
_this.map = props.__map__;
_this.poly = props.__poly__;
_this.editorActive = false;
_this.createEditorInstance().then(function () {
_this.props.onInstanceCreated && _this.props.onInstanceCreated();
});
}
}
return _this;
}
_createClass(PolyEditor, [{
key: 'toggleActive',
value: function toggleActive(active) {
if (active) {
if (!this.editorActive) {
this.activeEditor();
}
} else {
if (this.editorActive) {
this.inactiveEditor();
}
}
}
}, {
key: 'activeEditor',
value: function activeEditor() {
if (this.polyEditor) {
this.editorActive = true;
this.polyEditor.open();
}
}
}, {
key: 'inactiveEditor',
value: function inactiveEditor() {
this.editorActive = false;
if (this.polyEditor) {
this.polyEditor.close();
}
}
}, {
key: 'createEditorInstance',
value: function createEditorInstance() {
var _this2 = this;
if (this.polyEditor) {
return Promise.resolve(this.polyEditor);
}
return new Promise(function (resolve) {
_this2.map.plugin(['AMap.PolyEditor'], function () {
_this2.polyEditor = new window.AMap.PolyEditor(_this2.map, _this2.poly);
resolve(_this2.polyEditor);
});
});
}
}, {
key: 'render',
value: function render() {
return null;
}
}, {
key: 'instance',
get: function get() {
return this.polyEditor;
}
}]);
return PolyEditor;
}(_react2.default.Component);
exports.default = (0, _withPropsReactive2.default)(PolyEditor);
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
var _polyeditor = require('../polyeditor');
var _polyeditor2 = _interopRequireDefault(_polyeditor);
var _common = require('../utils/common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/*
* props
* {
* __map__ 父级组件传过来的地图实例
*
* }
*/
var configurableProps = ['path', 'draggable', 'extData',
/* 本插件扩展的属性*/
'style', 'visible'];
var allProps = configurableProps.concat(['zIndex', 'bubble']);
var Polygon = function (_Component) {
_inherits(Polygon, _Component);
function Polygon(props) {
_classCallCheck(this, Polygon);
var _this = _possibleConstructorReturn(this, (Polygon.__proto__ || Object.getPrototypeOf(Polygon)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
visible: function visible(val) {
if (val) {
self.polygon && self.polygon.show();
} else {
self.polygon && self.polygon.hide();
}
},
style: function style(val) {
self.polygon.setOptions(val);
}
};
_this.converterMap = {
path: function path(val) {
return self.buildPathValue(val);
}
};
_this.state = {
loaded: false
};
_this.map = props.__map__;
_this.element = _this.map.getContainer();
setTimeout(function () {
_this.initMapPolygon(props);
}, 13);
}
}
return _this;
}
_createClass(Polygon, [{
key: 'initMapPolygon',
value: function initMapPolygon(props) {
var options = this.buildCreateOptions(props);
options.map = this.map;
this.polygon = new window.AMap.Polygon(options);
this.setState({
loaded: true
});
this.props.onInstanceCreated && this.props.onInstanceCreated();
}
}, {
key: 'buildCreateOptions',
value: function buildCreateOptions(props) {
var _this2 = this;
var options = {};
allProps.forEach(function (key) {
if (key in props) {
if (key === 'style' && props.style) {
var styleItem = Object.keys(props.style);
styleItem.forEach(function (item) {
// $FlowFixMe
options[item] = props.style[item];
});
// visible 做特殊处理
} else if (key !== 'visible') {
options[key] = _this2.getSetterValue(key, props[key]);
}
}
});
return options;
}
}, {
key: 'detectPropChanged',
value: function detectPropChanged(key, nextProps) {
return this.props[key] !== nextProps[key];
}
}, {
key: 'getSetterValue',
value: function getSetterValue(key, value) {
if (key in this.converterMap) {
return this.converterMap[key](value);
}
return value;
}
}, {
key: 'buildPathValue',
value: function buildPathValue(path) {
var _this3 = this;
if (path.length) {
var firstNode = path[0];
if (typeof firstNode[0] === 'number') {
return path.map(function (p) {
return (0, _common.toLnglat)(p);
});
}
if ('getLng' in firstNode) {
return path;
}
if ('longitude' in firstNode || 'lng' in firstNode) {
return path.map(function (p) {
return (0, _common.toLnglat)(p);
});
}
if ('length' in firstNode && firstNode.length) {
// $FlowFixMe
return path.map(function (ring) {
return _this3.buildPathValue(ring);
});
}
}
return [];
}
}, {
key: 'renderEditor',
value: function renderEditor(children) {
if (!children) {
return null;
}
if (_react2.default.Children.count(children) !== 1) {
return null;
}
var child = _react2.default.Children.only(children);
if (child.type === _polyeditor2.default) {
return _react2.default.cloneElement(child, {
__poly__: this.polygon,
__map__: this.map
});
}
return null;
}
}, {
key: 'render',
value: function render() {
return this.state.loaded ? this.renderEditor(this.props.children) : null;
}
}, {
key: 'instance',
get: function get() {
return this.polygon;
}
}]);
return Polygon;
}(_react.Component);
exports.default = (0, _withPropsReactive2.default)(Polygon);
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _withPropsReactive = require('../utils/withPropsReactive');
var _withPropsReactive2 = _interopRequireDefault(_withPropsReactive);
var _log = require('../utils/log');
var _log2 = _interopRequireDefault(_log);
var _polyeditor = require('../polyeditor');
var _polyeditor2 = _interopRequireDefault(_polyeditor);
var _common = require('../utils/common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Component = _react2.default.Component;
var configurableProps = ['path', 'extData', 'draggable',
/* 扩展属性*/
'visible', 'style'];
var allProps = configurableProps.concat(['zIndex', 'bubble', 'showDir']);
var Polyline = function (_Component) {
_inherits(Polyline, _Component);
function Polyline(props) {
_classCallCheck(this, Polyline);
var _this = _possibleConstructorReturn(this, (Polyline.__proto__ || Object.getPrototypeOf(Polyline)).call(this, props));
if (typeof window !== 'undefined') {
if (!props.__map__) {
_log2.default.warning('MAP_INSTANCE_REQUIRED');
} else {
var self = _this;
_this.setterMap = {
visible: function visible(val) {
if (val) {
self.polyline && self.polyline.show();
} else {
self.polyline && self.polyline.hide();
}
},
style: function style(val) {
self.polyline.setOptions(val);
}
};
_this.converterMap = {
path: function path(val) {
return self.buildPathValue(val);
}
};
_this.state = {
loaded: false
};
_this.map = props.__map__;
_this.element = _this.map.getContainer();
setTimeout(function () {
_this.createMapPolyline(props);
}, 13);
}
}
return _this;
}
_createClass(Polyline, [{
key: 'createMapPolyline',
value: function createMapPolyline(props) {
var options = this.buildCreateOptions(props);
options.map = this.map;
this.polyline = new window.AMap.Polyline(options);
this.setState({
loaded: true
});
this.props.onInstanceCreated && this.props.onInstanceCreated();
}
}, {
key: 'buildCreateOptions',
value: function buildCreateOptions(props) {
var _this2 = this;
var options = {};
allProps.forEach(function (key) {
if (key in props) {
if (key === 'style' && props.style) {
var styleItem = Object.keys(props.style);
styleItem.forEach(function (item) {
// $FlowFixMe
options[item] = props.style[item];
});
// visible 做特殊处理
} else if (key !== 'visible') {
options[key] = _this2.getSetterValue(key, props[key]);
}
}
});
return options;
}
}, {
key: 'detectPropChanged',
value: function detectPropChanged(key, nextProps) {
return this.props[key] !== nextProps[key];
}
}, {
key: 'getSetterValue',
value: function getSetterValue(key, value) {
if (key in this.converterMap) {
return this.converterMap[key](value);
}
return value;
}
}, {
key: 'buildPathValue',
value: function buildPathValue(path) {
if (path.length) {
if ('getLng' in path[0]) {
return path;
}
return path.map(function (p) {
return (0, _common.toLnglat)(p);
});
}
return path;
}
}, {
key: 'renderEditor',
value: function renderEditor(children) {
if (!children) {
return null;
}
if (_react2.default.Children.count(children) !== 1) {
return null;
}
var child = _react2.default.Children.only(children);
if (child.type === _polyeditor2.default) {
return _react2.default.cloneElement(child, {
__poly__: this.polyline,
__map__: this.map
});
}
return null;
}
}, {
key: 'render',
value: function render() {
return this.state.loaded ? this.renderEditor(this.props.children) : null;
}
}, {
key: 'instance',
get: function get() {
return this.polyline;
}
}]);
return Polyline;
}(Component);
exports.default = (0, _withPropsReactive2.default)(Polyline);
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var DEFAULT_CONFIG = {
v: '1.4.0',
hostAndPath: 'webapi.amap.com/maps',
key: 'f97efc35164149d0c0f299e7a8adb3d2',
callback: '__amap_init_callback',
useAMapUI: false
};
var mainPromise = null;
var amapuiPromise = null;
var amapuiInited = false;
var APILoader = function () {
function APILoader(_ref) {
var key = _ref.key,
useAMapUI = _ref.useAMapUI,
version = _ref.version,
protocol = _ref.protocol;
_classCallCheck(this, APILoader);
this.config = _extends({}, DEFAULT_CONFIG, { useAMapUI: useAMapUI, protocol: protocol });
if (typeof window !== 'undefined') {
if (key) {
this.config.key = key;
} else if ('amapkey' in window) {
this.config.key = window.amapkey;
}
}
if (version) {
this.config.v = version;
}
this.protocol = protocol || window.location.protocol;
if (this.protocol.indexOf(':') === -1) {
this.protocol += ':';
}
}
_createClass(APILoader, [{
key: 'getScriptSrc',
value: function getScriptSrc(cfg) {
return this.protocol + '//' + cfg.hostAndPath + '?v=' + cfg.v + '&key=' + cfg.key + '&callback=' + cfg.callback;
}
}, {
key: 'buildScriptTag',
value: function buildScriptTag(src) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.defer = true;
script.src = src;
return script;
}
}, {
key: 'getAmapuiPromise',
value: function getAmapuiPromise() {
var script = this.buildScriptTag(this.protocol + '//webapi.amap.com/ui/1.0/main-async.js');
var p = new Promise(function (resolve) {
script.onload = function () {
resolve();
};
});
document.body.appendChild(script);
return p;
}
}, {
key: 'getMainPromise',
value: function getMainPromise() {
var _this = this;
var script = this.buildScriptTag(this.getScriptSrc(this.config));
var p = new Promise(function (resolve) {
window[_this.config.callback] = function () {
resolve();
delete window[_this.config.callback];
};
});
document.body.appendChild(script);
return p;
}
}, {
key: 'load',
value: function load() {
if (typeof window === 'undefined') {
return null;
}
var useAMapUI = this.config.useAMapUI;
mainPromise = mainPromise || this.getMainPromise();
if (useAMapUI) {
amapuiPromise = amapuiPromise || this.getAmapuiPromise();
}
return new Promise(function (resolve) {
mainPromise.then(function () {
if (useAMapUI && amapuiPromise) {
amapuiPromise.then(function () {
if (window.initAMapUI && !amapuiInited) {
window.initAMapUI();
if (typeof useAMapUI === 'function') {
useAMapUI();
}
amapuiInited = true;
}
resolve();
});
} else {
resolve();
}
});
});
}
}]);
return APILoader;
}();
exports.default = APILoader;
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var hasWindow = typeof window !== 'undefined';
/*
* [lng, lat]
* {lng, lat}
* {longitude, latitude}
*/
var toLnglat = exports.toLnglat = function toLnglat(pos) {
if (!pos) {
return pos;
}
// 高德原生 AMap.LngLat 类
if ('getLng' in pos && 'getLat' in pos) {
return pos;
}
var lng = 0;
var lat = 0;
if ({}.toString.call(pos) === '[object Array]') {
lng = pos[0];
lat = pos[1];
} else if ('lng' in pos && 'lat' in pos) {
lng = pos.lng;
lat = pos.lat;
} else if ('longitude' in pos && 'latitude' in pos) {
lng = pos.longitude;
lat = pos.latitude;
}
return hasWindow ? new window.AMap.LngLat(lng, lat) : null;
};
var toPixel = exports.toPixel = function toPixel(ofst) {
if (!ofst) {
return ofst;
}
if ('getX' in ofst && 'getY' in ofst) {
return ofst;
}
var x = 0;
var y = 0;
if ({}.toString.call(ofst) === '[object Array]') {
x = ofst[0];
y = ofst[1];
} else if ('x' in ofst && 'y' in ofst) {
x = ofst.x;
y = ofst.y;
}
return hasWindow ? new window.AMap.Pixel(x, y) : null;
};
var toSize = exports.toSize = function toSize(size) {
if (!size) {
return size;
}
if ('getWidth' in size) {
return size;
}
return hasWindow ? new window.AMap.Size(size.width, size.height) : null;
};
exports.default = {
toLnglat: toLnglat,
toPixel: toPixel,
toSize: toSize
};
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var isFun = function isFun(arg) {
return !!arg && typeof arg === 'function';
};
exports.default = isFun;
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var errorMap = {
'MARKER_ID_CONFLICT': 'Marker 的 id 属性重复',
'MARKER_ID_REQUIRED': '每一个 Marker 必需有一个 id 属性',
'MAP_INSTANCE_REQUIRED': '没有地图实例;组件必须作为 Map 的子组件使用',
'CIRCLE_INSTANCE_REQUIRED': '',
'CIRCLE_CENTER_REQUIRED': 'Circle 组件必需设置 center 属性',
'CIRCLE_RADIUS_REQUIRED': 'Circle 组件必需设置 radius 属性',
'SRC_REQUIRED': 'GroundImage 组件必需设置 src 属性',
'BOUNDS_REQUIRED': 'GroundImage 组件必需设置 bounds 属性',
'WINDOW_POSITION_REQUIRED': 'InfoWindow 组件必需设置 position 属性',
'INVALID_AMAP_PLUGIN': 'plugins 属性不正确;目前支持的插件有\'Scale\', \'ToolBar\', \'MapType\', \'OverView\''
};
var getMessage = function getMessage(key) {
return key in errorMap ? errorMap[key] : key;
};
var log = {
// 开发者必须修正的问题,否则会影响其他程序运行
error: function error(key) {
throw new Error(getMessage(key));
},
// 是一个错误,导致本插件无法运行,但是不会影响开发者的其他功能
warning: function warning(key) {
// console.log(`%c${getMessage(key)}`, 'color:#f66;border-left: 2px solid red;padding-left: 4px;');
console.warn(getMessage(key));
},
// 不影响使用,但不是本插件理想的使用方式
optimize: function optimize(key) {
console.log('%c' + getMessage(key), 'color:#d4d483;border-left: 2px solid #d4d483;padding-left: 4px;');
}
};
exports.default = log;
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.renderMarkerComponent = exports.getPropValue = exports.MarkerAllProps = exports.MarkerConfigurableProps = undefined;
var _common = require('./common');
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _isFun = require('./isFun');
var _isFun2 = _interopRequireDefault(_isFun);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var MarkerConfigurableProps = exports.MarkerConfigurableProps = ['position', 'offset', 'icon', 'content', 'draggable', 'visible', 'zIndex', 'angle', 'animation', 'shadow', 'title', 'clickable', 'extData', 'label'];
var MarkerAllProps = exports.MarkerAllProps = MarkerConfigurableProps.concat(['topWhenClick', 'bubble', 'raiseOnDrag', 'cursor', 'autoRotation', 'shape']);
var getPropValue = exports.getPropValue = function getPropValue(key, value) {
if (MarkerAllProps.indexOf(key) === -1) {
return null;
}
if (key === 'position') {
return (0, _common.toLnglat)(value);
} else if (key === 'offset') {
return (0, _common.toPixel)(value);
}
return value;
};
var renderMarkerComponent = exports.renderMarkerComponent = function renderMarkerComponent(component, marker) {
var child = component;
if ((0, _isFun2.default)(component)) {
var extData = marker.getExtData();
child = component(extData);
}
if (child) {
(0, _reactDom.render)(_react2.default.createElement(
'div',
null,
child
), marker.getContent());
}
};
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var toCapitalString = function toCapitalString(str) {
return str[0].toUpperCase() + str.slice(1, str.length);
};
exports.default = toCapitalString;
\ No newline at end of file
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _toCapitalString = require('./toCapitalString');
var _toCapitalString2 = _interopRequireDefault(_toCapitalString);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function withPropsReactive(MapComponent) {
return function (_React$Component) {
_inherits(_class, _React$Component);
function _class(props) {
_classCallCheck(this, _class);
var _this = _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, props));
_this.instanceCreated = false;
_this.myMapComponent = null;
_this.registeredEvents = [];
_this.onInstanceCreated = _this.onInstanceCreated.bind(_this);
return _this;
}
_createClass(_class, [{
key: 'onInstanceCreated',
value: function onInstanceCreated() {
this.instanceCreated = true;
if ('events' in this.props) {
var instance = this.myMapComponent.instance;
if (this.props.events.created) {
this.props.events.created(instance);
}
}
this.reactivePropChange(this.props, false);
}
}, {
key: 'createEventsProxy',
value: function createEventsProxy(props) {
var self = this;
var instance = this.myMapComponent.instance;
var evs = Object.keys(props.events || {});
evs.length && evs.forEach(function (ev) {
if (self.registeredEvents.indexOf(ev) === -1) {
self.registeredEvents.push(ev);
instance.on(ev, function (ev) {
return function () {
if (self.props.events && ev in self.props.events) {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
self.props.events[ev].apply(null, args);
}
};
}(ev));
}
});
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
this.reactivePropChange(nextProps, true);
}
}, {
key: 'reactivePropChange',
value: function reactivePropChange(nextProps) {
var _this2 = this;
var shouldDetectChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (!this.instanceCreated) {
return false;
}
var _myMapComponent = this.myMapComponent,
_myMapComponent$sette = _myMapComponent.setterMap,
setterMap = _myMapComponent$sette === undefined ? {} : _myMapComponent$sette,
_myMapComponent$conve = _myMapComponent.converterMap,
converterMap = _myMapComponent$conve === undefined ? {} : _myMapComponent$conve,
_myMapComponent$insta = _myMapComponent.instance,
instance = _myMapComponent$insta === undefined ? {} : _myMapComponent$insta;
var list = Object.keys(nextProps);
list.length && list.forEach(function (key) {
if (key === 'events') {
return _this2.createEventsProxy(nextProps);
}
var willReactive = true;
if (shouldDetectChange) {
willReactive = _this2.detectPropChange(key, nextProps, _this2.props);
}
if (!willReactive) {
return false;
}
var setterParam = nextProps[key];
if (key in converterMap) {
setterParam = converterMap[key](nextProps[key]);
}
if (key in setterMap) {
setterMap[key](setterParam);
} else {
var trySetterName = 'set' + (0, _toCapitalString2.default)(key);
if (trySetterName in instance) {
instance[trySetterName](setterParam);
}
}
});
}
}, {
key: 'detectPropChange',
value: function detectPropChange(key, nextProps, oldProps) {
return nextProps[key] !== oldProps[key];
}
}, {
key: 'render',
value: function render() {
var _this3 = this;
return _react2.default.createElement(MapComponent, _extends({
onInstanceCreated: this.onInstanceCreated,
ref: function ref(comp) {
_this3.myMapComponent = comp;
}
}, this.props));
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
var instance = this.myMapComponent.instance;
if (!instance) return;
if ('destroy' in instance) {
setTimeout(function () {
instance.destroy();
}, 10);
}
if ('hide' in instance) {
instance.hide();
}
if ('__map__' in this.props && 'setMap' in instance) {
instance.setMap(null);
}
}
}]);
return _class;
}(_react2.default.Component);
};
exports.default = withPropsReactive;
\ No newline at end of file
{
"_from": "react-amap",
"_id": "react-amap@1.2.8",
"_inBundle": false,
"_integrity": "sha512-uHPEUXti+CcwFyCeqGGqR0ACnXJA9D8S/lQYal9AG3XEOrwkaOFbWUavrvXxjcfAclROIWg8uKxzlRpMQnkHFg==",
"_location": "/react-amap",
"_phantomChildren": {},
"_requested": {
"type": "tag",
"registry": true,
"raw": "react-amap",
"name": "react-amap",
"escapedName": "react-amap",
"rawSpec": "",
"saveSpec": null,
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/react-amap/-/react-amap-1.2.8.tgz",
"_shasum": "cb5a6441c5e83acb0d7b2e8a1b20dc539b759d9b",
"_spec": "react-amap",
"_where": "/Users/wangduo/workspace/packages/react-native-amap-sdk",
"author": {
"name": "ohislh@gmail.com"
},
"bugs": {
"url": "https://github.com/ElemeFE/react-amap/issues"
},
"bundleDependencies": false,
"deprecated": false,
"description": "AMap Component Based On React",
"devDependencies": {
"@types/react": "^16.0.10",
"antd": "^2.7.4",
"babel-cli": "^6.24.1",
"babel-core": "^6.25.0",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.1",
"babel-preset-es2015": "^6.22.0",
"babel-preset-react": "^6.23.0",
"babel-preset-stage-0": "^6.22.0",
"bisheng": "0.13.3",
"bisheng-plugin-antd": "0.3.2",
"bisheng-plugin-react": "0.2.2",
"css-loader": "^0.26.1",
"dora-plugin-proxy": "^0.8.5",
"eslint": "^3.17.1",
"eslint-config-elemefe": "^0.2.0",
"eslint-loader": "^1.9.0",
"eslint-plugin-flowtype": "^2.30.3",
"eslint-plugin-react": "^6.10.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^0.10.0",
"flow-bin": "^0.56.0",
"html-webpack-plugin": "^2.28.0",
"isomorphic-style-loader": "^1.1.0",
"jsonml-to-react-component": "^0.2.6",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-router": "^3.0.2",
"style-loader": "^0.13.1",
"uglify-js": "^2.8.12",
"url-loader": "^0.5.7",
"webpack": "^3.4.1",
"webpack-dev-server": "^2.6.1"
},
"homepage": "https://github.com/ElemeFE/react-amap",
"keywords": [
"map",
"react"
],
"license": "MIT",
"main": "lib/index.js",
"name": "react-amap",
"repository": {
"type": "git",
"url": "git+https://github.com/elemefe/react-amap.git"
},
"scripts": {
"browser-build": "rm -rf dist && webpack && NODE_ENV=production webpack -p",
"deploy": "npm run npm-build && bisheng gh-pages",
"flow": "flow; test $? -eq 0 -o $? -eq 2",
"lint": "eslint . --quiet",
"npm-build": "rm -rf lib && babel components -d lib",
"prepublish": "npm run browser-build && npm run npm-build",
"site": "npm run npm-build && bisheng build",
"start": "npm run npm-build && bisheng start"
},
"types": "types/index.d.ts",
"version": "1.2.8"
}
/// <reference types="react" />
import * as React from 'react';
export type EventMap = Object;
export type PluginList = 'Scale' | 'ToolBar' | 'MapType' | 'OverView' | 'ControlBar'
export interface PluginConfig {
name: PluginList;
options?: Object;
}
export type ArrayLngLat = [number, number];
export interface LngLatPos {
lng: number;
lat: number;
}
export interface FullLngLatPos {
longitude: number;
latitude: number;
}
export interface AMapLngLat {
offset(): AMapLngLat;
distance(): number;
getLng(): number;
getLat(): number;
equanls(): boolean;
toString(): string;
}
export type LngLat = ArrayLngLat | LngLatPos | FullLngLatPos | AMapLngLat;
export type Path = Array<ArrayLngLat> | Array<FullLngLatPos> | Array<AMapLngLat>;
export type PolygonPath = Path | [Path, Path];
export type ArrayPixel = [number, number];
export interface AMapPixel {
getX(): number;
getY(): number;
equals(): boolean;
toString(): string;
}
export type Pixel = AMapPixel | ArrayPixel;
export interface ObjSize {
width: number;
height: number;
}
export interface AMapSize {
getWidth(): number;
getHeight(): number;
toString(): string;
}
export type Size = ObjSize | AMapSize;
export type MapFeature = 'bg' | 'point' | 'road' | 'building';
export interface MapProps {
protocol?: string;
amapkey?: string;
version?: string;
useAMapUI?: boolean | Function;
children?: any;
onInstanceCreated?: Function;
plugins?: Array<PluginList|PluginConfig>;
events?: EventMap;
loading?: any;
viewMode?: '2D'|'3D';
center?: LngLat;
zoom?: number;
zooms?: [number, number];
animateEnable?: boolean;
doubleClickZoom?: boolean;
dragEnable?: boolean;
isHotspot?: boolean;
jogEnable?: boolean;
keyboardEnable?: boolean;
resizeEnable?: boolean;
rotateEnable?: boolean;
scrollWheel?: boolean;
touchZoom?: boolean;
zoomEnable?: boolean;
showIndoorMap?: boolean;
expandZoomRange?: boolean;
pitch?: number;
mapStyle?: string;
labelzIndex?: number;
skyColor?: string;
buildingAnimation?: boolean;
pitchEnable?: boolean;
showBuildingBlock?: boolean;
features?: Array<MapFeature>;
indoorMap?: any;
cursor?: string;
layers?: Array<any>;
view?: any;
city?: string;
bounds?: any;
limitBounds?: any;
status?: any;
rotation?: number;
}
export interface MarkerProps {
position?: LngLat;
offset?: Pixel;
icon?: any;
onInstanceCreated?: Function;
className?: string;
content?: string | HTMLElement;
draggable?: boolean;
visible?: boolean;
cursor?: string;
zIndex?: number;
angle?: number;
animation?: string;
markers?: Array<Object>;
shadow?: Object;
title?: string;
clickable?: boolean;
extData?: any;
label?: Object;
topWhenClick?: boolean;
bubble?: boolean;
raiseOnDrag?: boolean;
autoRotation?: boolean;
shape?: Object;
events?: Object;
render?: Function;
children?: any;
useCluster?: Object | boolean;
}
export interface CircleProps {
center: LngLat;
radius: number;
draggable?: boolean;
extData?: any;
visible?: boolean;
style?: Object;
zIndex?: number;
bubble: boolean;
events?: Object;
children?: any;
}
export interface CircleEditorProps {
active?: boolean;
events?: EventMap;
}
export interface PolygonProps {
path: PolygonPath;
draggable?: boolean;
extData?: any;
style?: Object;
visible?: boolean;
zIndex?: number;
bubble?: boolean;
events?: Object;
children?: any;
}
export interface PolylineProps {
path: Path;
extData?: any;
draggable?: boolean;
visible?: boolean;
style?: Object;
zIndex?: number;
bubble?: boolean;
showDir?: boolean;
events?: Object;
children?: any;
}
export interface PolyEditorProps {
active?: boolean;
events?: EventMap;
}
export interface GroungImageProps {
opacity?: number;
src?: string;
bounds: Object;
visible?: boolean;
clickable?: boolean;
events?: EventMap;
}
export interface InfoWindowProps {
content?: any;
position: LngLat;
size?: Size;
visible?: boolean;
offset?: Pixel;
isCustom?: boolean;
autoMove?: boolean;
closeWhenClickMap?: boolean;
showShadow?: boolean;
events?: EventMap;
children?: any;
className?: string;
}
export interface MouseToolProps {
events?: EventMap;
}
export class Map extends React.Component<MapProps, {mapLoaded: boolean}> {}
export class Marker extends React.Component<MarkerProps, {}> {}
export class Markers extends React.Component<any, any> {}
export class Circle extends React.Component<CircleProps, {}> {}
export class CircleEditor extends React.Component<CircleEditorProps, {}> {}
export class Polygon extends React.Component<PolygonProps, {}> {}
export class Polyline extends React.Component<PolylineProps, {}> {}
export class PolyEditor extends React.Component<PolyEditorProps, {}> {}
export class GroundImage extends React.Component<GroungImageProps, {}> {}
export class InfoWindow extends React.Component<InfoWindowProps, {}> {}
export class MouseTool extends React.Component<MouseToolProps, {}> {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment