{"version":3,"sources":["webpack:///./src/components/Map/Providers/MapBoxMap.vue?598f","webpack:///./src/components/Map/Providers/MapBoxMap.vue?63d6","webpack:///./src/components/Map/Providers/MapBoxMap.vue","webpack:///./src/components/Map/Providers/MapBoxMap.vue?dc7a","webpack:///./src/components/Map/Providers/MapBoxMap.vue?d8a9","webpack:///./src/components/Map/Providers/MapBoxMap.vue?5b72"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","_e","elemId","staticRenderFns","markers","GetGuid","isAttemptingToScroll","accessToken","Website","Settings","MapProvider","APIKey","mapSettings","Geocode","then","latMax","latMin","lngMax","lngMin","Markers","forEach","marker","Coordinate","Lat","Lon","bounds","LngLatBounds","lat","lng","Log","Debug","scrollDebounce","container","style","MapboxStyleURI","interactive","Interactive","zoom","Zoom","maxBounds","MaxBounds","SW","NE","undefined","Center","center","fitBoundsOptions","padding","Padding","maxZoom","map","Map","GreedyZoom","scrollZoom","disable","on","enable","event","originalEvent","ctrlKey","preventDefault","isEnabled","clearTimeout","window","setTimeout","length","drawMarkers","getBounds","ne","getNorthEast","sw","getSouthWest","$emit","m","remove","markerDiv","document","createElement","classList","add","Content","CustomRenderer","backgroundImage","IconURL","Title","titleDiv","innerHTML","appendChild","mapMarker","Marker","setLngLat","setPopup","Popup","offset","setHTML","addTo","push","flyTo","getZoom","component"],"mappings":"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","file":"js/chunk-e8b7bf38.add1717f.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=style&index=0&id=92fb56a8&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mapbox-map\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.isAttemptingToScroll)?_c('div',{staticClass:\"mapbox-map__scroll-msg\"},[_c('p',[_vm._v(\" Hold Ctrl to Zoom \")])]):_vm._e()]),_c('div',{attrs:{\"id\":_vm.elemId}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop, Watch } from 'vue-property-decorator';\r\nimport { Coordinate, MapSettings } from 'client-website-ts-library/types';\r\nimport { Utils } from 'client-website-ts-library/util';\r\nimport { Config, Logger, LogLevel } from 'client-website-ts-library/services';\r\n\r\nimport mapboxgl from 'mapbox-gl';\r\n\r\nlet markers: mapboxgl.Marker[] = [];\r\n\r\n@Component\r\nexport default class MapBoxMap extends Vue {\r\n @Prop()\r\n public readonly mapSettings!: MapSettings;\r\n\r\n public readonly elemId = `map_${Utils.GetGuid()}`;\r\n\r\n public map?: mapboxgl.Map;\r\n\r\n public isAttemptingToScroll = false;\r\n\r\n mounted() {\r\n mapboxgl.accessToken = Config.Website.Settings!.MapProvider.APIKey;\r\n\r\n this.mapSettings.Geocode().then(() => {\r\n let latMax = -90;\r\n let latMin = 90;\r\n let lngMax = -180;\r\n let lngMin = 180;\r\n\r\n this.mapSettings.Markers.forEach((marker) => {\r\n if (marker.Coordinate!.Lat > latMax) latMax = marker.Coordinate!.Lat;\r\n if (marker.Coordinate!.Lat < latMin) latMin = marker.Coordinate!.Lat;\r\n\r\n if (marker.Coordinate!.Lon > lngMax) lngMax = marker.Coordinate!.Lon;\r\n if (marker.Coordinate!.Lon < lngMin) lngMin = marker.Coordinate!.Lon;\r\n });\r\n\r\n let bounds = new mapboxgl.LngLatBounds(\r\n {\r\n lat: latMin,\r\n lng: lngMin,\r\n },\r\n {\r\n lat: latMax,\r\n lng: lngMax,\r\n },\r\n );\r\n\r\n Logger.Log(LogLevel.Debug, this.mapSettings.Markers, bounds);\r\n\r\n const mapSettings: mapboxgl.MapboxOptions = {\r\n container: this.elemId,\r\n style: Config.Website.Settings!.MapProvider.MapboxStyleURI,\r\n interactive: this.mapSettings.Interactive,\r\n zoom: this.mapSettings.Zoom,\r\n maxBounds: this.mapSettings.MaxBounds\r\n ? [\r\n [this.mapSettings.MaxBounds.SW.Lon, this.mapSettings.MaxBounds.SW.Lat],\r\n [this.mapSettings.MaxBounds.NE.Lon, this.mapSettings.MaxBounds.NE.Lat],\r\n ]\r\n : undefined,\r\n };\r\n\r\n if (this.mapSettings.Center) {\r\n mapSettings.center = { lat: this.mapSettings.Center.Lat, lng: this.mapSettings.Center.Lon };\r\n } else {\r\n mapSettings.fitBoundsOptions = { padding: this.mapSettings.Padding ?? 100, maxZoom: 15 };\r\n mapSettings.bounds = bounds;\r\n }\r\n\r\n this.map = new mapboxgl.Map(mapSettings);\r\n\r\n // TODO this is for suburb boundaries\r\n // this.map.on('load', () => {\r\n // this.map.addSource('postal-4', {\r\n // type: 'vector',\r\n // url: 'mapbox://mapbox.boundaries-pos4-v4',\r\n // promoteId: 'Cairns QLD 4870, Australia', // TODO this is not the correct ID\r\n // });\r\n\r\n // this.map.addLayer(\r\n // {\r\n // id: 'postal-4-fill',\r\n // type: 'fill',\r\n // source: 'postal-4',\r\n // 'source-layer': 'boundaries-pos4-v4',\r\n // paint: {\r\n // 'fill-color': '#CCCCCC',\r\n // 'fill-opacity': 0.5,\r\n // },\r\n // },\r\n // 'waterway-label',\r\n // );\r\n // });\r\n\r\n if (this.mapSettings.Interactive && !this.mapSettings.GreedyZoom && this.map) {\r\n this.map.scrollZoom.disable();\r\n\r\n let scrollDebounce: number | undefined;\r\n\r\n // Enable scroll zoom if we are using a touch device\r\n this.map.on('touchstart', () => {\r\n if (!this.map) return;\r\n\r\n this.map.scrollZoom.enable();\r\n });\r\n\r\n this.map.on('wheel', (event) => {\r\n if (!this.map) return;\r\n\r\n if (event.originalEvent.ctrlKey) {\r\n // Check if CTRL key is pressed\r\n event.originalEvent.preventDefault(); // Prevent chrome/firefox default behavior\r\n if (!this.map.scrollZoom.isEnabled()) {\r\n this.map.scrollZoom.enable(); // Enable zoom only if it's disabled\r\n this.isAttemptingToScroll = false;\r\n }\r\n } else {\r\n clearTimeout(scrollDebounce);\r\n scrollDebounce = window.setTimeout(() => {\r\n this.isAttemptingToScroll = false;\r\n }, 1000);\r\n\r\n this.isAttemptingToScroll = true;\r\n\r\n if (this.map.scrollZoom.isEnabled()) this.map.scrollZoom.disable(); // Disable zoom only if it's enabled\r\n }\r\n });\r\n }\r\n\r\n if (this.mapSettings.Markers.length > 0) {\r\n this.drawMarkers();\r\n }\r\n\r\n this.map.on('moveend', () => {\r\n bounds = (this.map?.getBounds() as unknown) as any;\r\n\r\n const ne = bounds?.getNorthEast();\r\n const sw = bounds?.getSouthWest();\r\n\r\n if (ne && sw) {\r\n this.$emit('moved', {\r\n NE: {\r\n Lat: ne.lat,\r\n Lon: ne.lng,\r\n },\r\n SW: {\r\n Lat: sw.lat,\r\n Lon: sw.lng,\r\n },\r\n });\r\n }\r\n\r\n return true;\r\n });\r\n });\r\n }\r\n\r\n @Watch('mapSettings.Markers')\r\n drawMarkers() {\r\n markers.forEach((m) => {\r\n m.remove();\r\n });\r\n\r\n markers = [];\r\n\r\n this.mapSettings.Markers.forEach((marker) => {\r\n const markerDiv = document.createElement('div');\r\n\r\n markerDiv.classList.add('mapbox-marker');\r\n\r\n if (marker.Content) markerDiv.classList.add('mapbox-marker--has-content');\r\n\r\n if (marker.CustomRenderer) {\r\n markerDiv.classList.add('mapbox-marker--custom');\r\n\r\n marker.CustomRenderer(markerDiv, marker);\r\n } else {\r\n markerDiv.style.backgroundImage = `url(${marker.IconURL || '/assets/images/map-icon.svg'})`;\r\n\r\n if (marker.Title) {\r\n const titleDiv = document.createElement('div');\r\n\r\n titleDiv.classList.add('mapbox-marker__title');\r\n titleDiv.innerHTML = marker.Title;\r\n\r\n markerDiv.appendChild(titleDiv);\r\n }\r\n }\r\n\r\n const mapMarker = new mapboxgl.Marker(markerDiv).setLngLat({ lat: marker.Coordinate!.Lat, lng: marker.Coordinate!.Lon });\r\n\r\n if (marker.Content) {\r\n mapMarker.setPopup(new mapboxgl.Popup({ offset: 25 }).setHTML(marker.Content));\r\n }\r\n\r\n mapMarker.addTo(this.map!);\r\n\r\n markers.push(mapMarker);\r\n });\r\n }\r\n\r\n public SetCenter(center: Coordinate, zoom: number) {\r\n if (this.map) {\r\n this.map.flyTo({\r\n center: {\r\n lat: center.Lat,\r\n lng: center.Lon,\r\n },\r\n zoom,\r\n });\r\n }\r\n }\r\n\r\n public GetZoom(): number {\r\n return this.map?.getZoom() ?? 4;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./MapBoxMap.vue?vue&type=template&id=92fb56a8&scoped=true&\"\nimport script from \"./MapBoxMap.vue?vue&type=script&lang=ts&\"\nexport * from \"./MapBoxMap.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./MapBoxMap.vue?vue&type=style&index=0&id=92fb56a8&scoped=true&lang=css&\"\nimport style1 from \"./MapBoxMap.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"92fb56a8\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=style&index=1&lang=css&\""],"sourceRoot":""}