UNPKG

taro-hooks

Version:
83 lines 2.76 kB
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;