react-mapkit
Version:
React wrapper for Apple's mapkit.js.
3 lines (2 loc) • 4.04 kB
JavaScript
;function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("react")),n=e(require("little-loader")),r=t.createContext({isInProvider:!1,mapkit:void 0}),i=function(e){var i=e.tokenOrCallback,a=e.language,o=e.children,u=t.useContext(r),c=t.useState({mapkit:u.mapkit,isInProvider:!0}),p=c[0],l=c[1];return t.useEffect((function(){u.isInProvider||n("https://cdn.apple-mapkit.com/mk/5.x.x/mapkit.js",(function(){var e=i.includes("/");mapkit.init({authorizationCallback:function(t){e?fetch(i).then((function(e){return e.text()})).then(t):t(i)},language:a}),l({mapkit:mapkit,isInProvider:!0})}))}),[u.isInProvider,i,a]),t.createElement(r.Provider,{value:p,children:o})};function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function o(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(i[n]=e[n]);return i}var u=["visibleMapRect","region","center","padding"],c=["padding"],p=function(e){return new mapkit.Padding("number"==typeof e?{top:e,right:e,bottom:e,left:e}:e)},l=function(e,t){return new mapkit.Coordinate(e,t)},d=function(e){return s(l(e.latitude,e.longitude),new mapkit.CoordinateSpan(e.latitudeSpan,e.longitudeSpan))},s=function(e,t){return new mapkit.CoordinateRegion(e,t)},f=function(e,t,n,r){return new mapkit.MapRect(e,t,n,r)},m=function(e){void 0===e&&(e={});var n=t.useState(e)[0],i=t.useContext(r).mapkit,c=t.useRef(null),s=t.useState(),m=s[0],v=s[1];return t.useEffect((function(){if(i&&c.current){var e=new i.Map(c.current,(r=(t=n).visibleMapRect,s=t.region,m=t.center,k=t.padding,g=o(t,u),a({visibleMapRect:r&&f.apply(void 0,r),region:s&&d(s),center:m&&l.apply(void 0,m),padding:p(k||0)},g)));v(e)}var t,r,s,m,k,g}),[c,i]),t.useEffect((function(){return function(){m&&m.destroy()}}),[]),{mapkit:i,map:m,mapProps:{mapkit:i,map:m,mapRef:c},setRotation:t.useCallback((function(e,t){void 0===t&&(t=!1),m&&m.setRotationAnimated(e,t)}),[m]),setCenter:t.useCallback((function(e,t){void 0===t&&(t=!1),m&&m.setCenterAnimated(l.apply(void 0,e),t)}),[m]),setRegion:t.useCallback((function(e,t){void 0===t&&(t=!1),m&&m.setRegionAnimated(d(e),t)}),[m]),setVisibleMapRect:t.useCallback((function(e,t){void 0===t&&(t=!1),m&&m.setVisibleMapRectAnimated(f.apply(void 0,e),t)}),[m])}},v=["children"],k=["tokenOrCallback","language","mapkit","map","mapRef"],g=t.createContext({map:void 0,mapkit:void 0}),h=function(e){return t.createElement(g.Provider,{value:e.context,children:e.children})},b=function(e){return t.createElement("div",{ref:e.mapRef,style:{width:"100%",height:"100%"},children:e.children})},C=function(e){var n=e.children,r=o(e,v),i=m(r).mapProps;return t.createElement(h,{context:{mapkit:i.mapkit,map:i.map}},t.createElement(b,{mapRef:i.mapRef,children:n}))},x=["latitude","longitude"];exports.Map=function(e){var n=e.tokenOrCallback,a=e.language,u=void 0===a?"en":a,c=e.mapkit,p=e.map,l=e.mapRef,d=o(e,k),s=t.useContext(r);if(l)return t.createElement(h,{context:{mapkit:c,map:p}},t.createElement(b,Object.assign({mapRef:l},d)));var f=t.createElement(C,Object.assign({},d));if(s.isInProvider)return f;if(!n)throw new Error("`tokenOrCallback` is required. Either add it to this `Map` component or to a `MapkitProvider` parent of this component.");return t.createElement(i,{tokenOrCallback:n,language:u,children:f})},exports.MapContext=g,exports.MapkitContext=r,exports.MapkitProvider=i,exports.Marker=function(e){var n=e.latitude,r=e.longitude,i=o(e,x),u=t.useContext(g),d=u.mapkit,s=u.map,f=t.useRef();return t.useEffect((function(){return d&&s&&(f.current=new d.MarkerAnnotation(l(n,r),function(e){var t=e.padding,n=o(e,c);return a({padding:p(t||0)},n)}(i)),s.addAnnotation(f.current)),function(){f.current&&s&&s.removeAnnotation(f.current)}}),[d,s]),null},exports.useMap=m;
//# sourceMappingURL=react-mapkit.cjs.production.min.js.map