taro-hooks
Version:
为 Taro 而设计的 Hooks Library
83 lines • 2.76 kB
JavaScript
import { createMapContext, useReady } from '@tarojs/taro';
import { useEffect, useState } from '@taro-hooks/core';
import { isNumber, ISREACT } from '@taro-hooks/shared';
import usePromise from '../utils/useActivePromise';
function useMap(mapId, component) {
var _useState = useState(),
mapContext = _useState[0],
setMapContext = _useState[1];
var _useState2 = useState({}),
forceUpdate = _useState2[1];
useReady(function () {
setMapContext(component ? createMapContext(mapId, component) : createMapContext(mapId));
});
useEffect(function () {
if (mapContext && ISREACT) {
forceUpdate({});
}
}, [mapContext]);
var getCenterAsync = usePromise('getCenterLocation', mapContext);
var getRegionAsync = usePromise('getRegion', mapContext);
var getRotateAsync = usePromise('getRotate', mapContext);
var getScaleAsync = usePromise('getScale', mapContext);
var getSkewAsync = usePromise('getSkew', mapContext);
var get = function get(iconPath) {
var getCenterLocationOption = iconPath ? {
iconPath: iconPath
} : {};
return Promise.all([getCenterAsync(getCenterLocationOption), getRegionAsync(), getRotateAsync(), getScaleAsync(), getSkewAsync()]).then(function (_ref) {
var center = _ref[0],
region = _ref[1],
rotate = _ref[2],
scale = _ref[3],
skew = _ref[4];
return {
center: center,
region: region,
rotate: rotate,
scale: scale,
skew: skew
};
});
};
var open = usePromise('openMapApp', mapContext);
var includeAsync = usePromise('includePoints', mapContext);
var include = function include(points, padding) {
if (padding === void 0) {
padding = [];
}
return includeAsync({
points: points,
padding: padding
});
};
var moveTo = usePromise('moveToLocation', mapContext);
var translate = usePromise('translateMarker', mapContext);
var addMarkersAsync = usePromise('addMarkers', mapContext);
var removeMarkersAsync = usePromise('removeMarkers', mapContext);
var toggleMarkers = function toggleMarkers(markers, clear) {
if (clear === void 0) {
clear = false;
}
if (Array.isArray(markers) && markers.every(isNumber)) {
// @ts-ignore (taro markers not safe for miniprogram, see: https://developers.weixin.qq.com/miniprogram/dev/component/map.html#marker )
return removeMarkersAsync({
markerIds: markers
});
}
var option = {
markers: markers,
clear: clear
};
return addMarkersAsync(option);
};
return [mapContext, {
get: get,
open: open,
include: include,
moveTo: moveTo,
translate: translate,
toggleMarkers: toggleMarkers
}];
}
export default useMap;