{"version":3,"file":"js/2698-be82e898c3a3a4cb9234.js","mappings":"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","sources":["webpack://app/./app/webpack/src/purchases/Purchases.vue?2b0e","webpack://app/app/webpack/src/purchases/Purchases.vue","webpack://app/./app/webpack/src/purchases/Purchases.vue?8c75","webpack://app/./app/webpack/src/purchases/Purchases.vue","webpack://app/./app/webpack/src/purchases/main.ts","webpack://app/./app/webpack/src/application.js","webpack://app/./app/webpack/src/splide/app.js","webpack://app/./app/webpack/src/utils/lozad.js","webpack://app/./app/webpack/src/utils/sale_countdown/main.js","webpack://app/./app/webpack/src/base_map_styles_dialog/store/modules/BaseMapStylesDialogModule.ts","webpack://app/./app/webpack/src/utils/helpers/GetBoundsFromGeoJsonPointsFeatureCollection.ts","webpack://app/./app/webpack/src/utils/grid-ref/osgrid.ts","webpack://app/./app/webpack/src/utils/helpers/GridRefPreference.ts","webpack://app/./app/webpack/src/utils/helpers/IDGenerator.ts","webpack://app/./app/webpack/src/utils/helpers/IsClickOnWaypointHelper.ts","webpack://app/./app/webpack/src/utils/helpers/WKTPointToLatLng.ts","webpack://app/./app/webpack/src/utils/graphql/map-styles-graph.ts","webpack://app/./app/webpack/src/utils/models/MapStyles.ts","webpack://app/./app/webpack/src/utils/models/WaypointOptionsDialogPages.ts","webpack://app/./app/webpack/src/utils/graphql/waypoints-graph.ts","webpack://app/./app/webpack/src/utils/helpers/WaypointsToGeoJsonFeatureCollectionHelper.ts","webpack://app/./app/webpack/src/utils/helpers/CleanseAndPushUrl.ts","webpack://app/./app/webpack/src/utils/helpers/CreateNewWaypointJsonHelper.ts","webpack://app/./app/webpack/src/utils/helpers/CreateWaypointMapLayerHelper.ts","webpack://app/./app/webpack/src/utils/helpers/CreateIndividualWaypointGeoJsonObjectHelper.ts","webpack://app/./app/webpack/src/utils/helpers/AddWaypointToMapHelper.ts","webpack://app/./app/webpack/src/waypoint_dialog/store/module/WaypointOptionsDialogModule.ts","webpack://app/./app/webpack/src/utils/helpers/GetWaypointClientIdFromUrl.ts","webpack://app/./app/webpack/src/utils/helpers/GpxFileToGeoJsonHelper.ts"],"sourcesContent":["import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Purchases.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Purchases.vue?vue&type=script&lang=js&\"","\n\n\n\n\n","import { render, staticRenderFns } from \"./Purchases.vue?vue&type=template&id=4242294c&scoped=true&\"\nimport script from \"./Purchases.vue?vue&type=script&lang=js&\"\nexport * from \"./Purchases.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Purchases.vue?vue&type=style&index=0&id=4242294c&prod&scoped=true&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 \"4242294c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-12 col-lg-9\"},[(_vm.upgradeSucceeded)?_c('div',{staticClass:\"container py-3 rounded-lg\"},[_vm._m(0)]):_vm._e(),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('p',{staticClass:\"text-muted mb-3\"},[_c('b',[_vm._v(\"Data correct as of:\")]),_vm._v(\"\\n \"+_vm._s(_vm.formatDate(_vm.revenueCatData.requestDate))+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"container bg-dark py-3 rounded-lg\"},[(!_vm.hasActiveEntitlements)?_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-3\"},[_c('img',{staticClass:\"img-fluid rounded\",attrs:{\"src\":_vm.freeImage}})]),_vm._v(\" \"),_c('div',{staticClass:\"col-9 d-flex align-items-center\"},[_c('span',[_vm._m(2),_vm._v(\" \"),_c('p',[_c('a',{staticClass:\"text-yellow p-0 d-flex align-items-center\",attrs:{\"href\":_vm.purchasesPath}},[_vm._v(\"\\n Check out our latest offers!\\n \"),_c('span',{staticClass:\"material-icons ml-2\"},[_vm._v(\"arrow_right_alt\")])])])])])]):_c('div',_vm._l((_vm.activeEntitlements),function(entitlement,key){return _c('div',{key:key,staticClass:\"row mb-4\"},[_c('div',{staticClass:\"col-3\"},[_c('img',{staticClass:\"img-fluid rounded\",attrs:{\"src\":_vm.subscriptionImage(entitlement.identifier)}})]),_vm._v(\" \"),_c('div',{staticClass:\"col-9 d-flex align-items-center\"},[_c('span',[_c('h4',{staticClass:\"display-5 mb-3\"},[_c('b',[_vm._v(\"Hiiker \"+_vm._s(entitlement.identifier))]),_vm._v(\" \"),_c('span',{staticClass:\"badge bg-info ms-2\"},[_vm._v(_vm._s(_vm.subscriptionTypeBadge(entitlement)))])]),_vm._v(\" \"),_c('div',{staticClass:\"subscription-details\"},[(entitlement.originalPurchaseDate)?_c('p',{staticClass:\"text-muted\"},[_c('b',[_vm._v(\"Start Date:\")]),_vm._v(\"\\n \"+_vm._s(_vm.formatDate(entitlement.originalPurchaseDate))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(entitlement.expirationDate)?_c('p',{staticClass:\"text-muted\"},[_c('b',[_vm._v(\"Expiry Date:\")]),_vm._v(\"\\n \"+_vm._s(_vm.formatDate(entitlement.expirationDate))+\"\\n \")]):_c('p',{staticClass:\"text-success\"},[_c('b',[_vm._v(\"Lifetime Access\")])]),_vm._v(\" \"),(entitlement.productIdentifier)?_c('p',{staticClass:\"text-muted\"},[_c('b',[_vm._v(\"Product ID:\")]),_vm._v(\" \"),_c('code',[_vm._v(_vm._s(entitlement.productIdentifier))])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"subscription-links mt-3\"},[(_vm.showManagementLink(entitlement.store))?_c('a',{staticClass:\"text-yellow\",attrs:{\"href\":_vm.managementLink(entitlement.store),\"target\":\"_blank\"}},[_c('u',[_vm._v(\"Manage on \"+_vm._s(_vm.storeName(entitlement.store)))])]):_vm._e()])])])])])}),0)]),_vm._v(\" \"),_c('p',{staticClass:\"text-muted mt-3\"},[_c('b',[_vm._v(\"UserID:\")]),_vm._v(\"\\n \"+_vm._s(_vm.firebaseUserId)+\"\\n \")])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"alert alert-primary\"},[_c('h4',[_vm._v(\"Success\")]),_vm._v(\" \"),_c('p',[_vm._v(\"You have upgraded to a yearly subscription.\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('h1',{staticClass:\"mb-3 mb-2 display-4\"},[_c('b',[_vm._v(\"Your Subscription\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('h4',{staticClass:\"display-5 mb-3\"},[_c('b',[_vm._v(\"You don't have an active subscription!\")])])\n}]\n\nexport { render, staticRenderFns }","// Import necessary styles and libraries\nimport Vue from 'vue';\nimport Purchases from \"./Purchases.vue\";\n\n// Check if the specific element exists in the DOM\nif (document.querySelector('#purchases')) {\n // Create a new Vue instance and mount it to the element\n window.vue = new Vue({\n render: (createElement) => {\n return createElement(Purchases)\n },\n }).$mount('#purchases');\n}\n","import Rails from '@rails/ujs';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport { Dropdown } from 'bootstrap';\nimport './css/app.scss';\nimport './splide/app';\nimport './utils/lozad';\nimport './navbar/main';\nimport './utils/sale_countdown/main';\nimport './analytics/analytics';\nimport './on_boarding/main';\nimport {OnBoardingGoal} from \"./utils/models/OnBoardingGoal\";\nimport {AuthMethods} from \"./on_boarding/store/modules/OnBoardingModule\";\nimport './purchases/main.ts';\nimport './utils/bus.ts';\n\n\n// Initialize dropdowns\ndocument.addEventListener('DOMContentLoaded', () => {\n document.querySelectorAll('[data-bs-toggle=\"dropdown\"]').forEach(el => {\n new Dropdown(el);\n });\n});\n\n// DYNAMIC IMPORTING\n// Only import reviews if #new_review is in the viewport and visible\nconst $addReviewButton = document.getElementById('new_review');\nif ($addReviewButton) {\n import('./reviews/main');\n}\n\nRails.start();\n\nconsole.log('Hello World from Hiiker!');\n\n// Attach event listener to the button\nconst giftButton = document.getElementById('giftCheckoutButton');\nif (giftButton) {\n import('./on_boarding/main');\n giftButton.addEventListener('click', function (e) {\n e.preventDefault();\n if (window.user == null) {\n window.onBoardingVue.launchFor(OnBoardingGoal.CreateAccountForPurchase, [AuthMethods.Email])\n return\n } else {\n window.location.href = window.giftCheckoutUrl;\n }\n });\n}\n","import Splide, { LOOP } from '@splidejs/splide';\nimport { Grid } from '@splidejs/splide-extension-grid';\nimport '@splidejs/splide/css';\n\n// $(function () {\n// $('[data-bs-toggle=\"tooltip\"]').tooltip()\n// })\n\nconst homeFeatureSliderOptions = {\n direction: 'ttb',\n pagination: false,\n perPage: 1,\n drag: false,\n arrows: false,\n type: 'loop',\n heightRatio: 0.45,\n breakpoints: {\n 1024: {\n heightRatio: 0.5,\n },\n 767: {\n heightRatio: 1.7,\n direction: 'ltr',\n drag: true,\n pagination: true,\n },\n 515: {\n heightRatio: 1.9,\n },\n 420: {\n heightRatio: 2,\n },\n 393: {\n heightRatio: 2.1,\n },\n 373: {\n heightRatio: 2.2,\n },\n },\n};\n\nconst homeSplideNearbyTrails = {\n // rewind: true,\n perPage: 4,\n // fixedWidth: '25%',\n isNavigation: true,\n gap: '20px',\n breakpoints: {\n 1024: {\n perPage: 3,\n },\n 768: {\n perPage: 2,\n },\n 640: {\n fixedWidth: '75%',\n gap: '1em',\n arrows: false,\n pagination: false,\n },\n },\n};\n\nconst trailsSplideOptions = {\n rewind: true,\n perPage: 3,\n gap: '20px',\n perMove: 1,\n breakpoints: {\n 640: {\n type: 'loop',\n perPage: 1.5,\n gap: '1em',\n arrows: false,\n pagination: false,\n },\n },\n};\n\nconst newFeatureSlideOptions = {\n direction: 'ttb',\n height: '17em',\n type: 'loop',\n breakpoints: {\n 1199: {\n height: '15em',\n },\n 991: {\n height: '13em',\n },\n 767: {\n height: '20em',\n },\n },\n};\n\nconst quoteSplideOptions = {\n rewind: true,\n perPage: 4,\n gap: '20px',\n perMove: 1,\n breakpoints: {\n 1024: {\n perPage: 3,\n },\n 768: {\n perPage: 2,\n },\n 640: {\n type: 'loop',\n perPage: 1.5,\n gap: '1em',\n arrows: false,\n pagination: false,\n },\n },\n};\n\nconst purchaseFeatureSplideOptions = {\n rewind: true,\n perPage: 5,\n gap: '30px',\n pagination: false,\n perMove: 1,\n breakpoints: {\n 1024: {\n perPage: 4.5,\n },\n 768: {\n perPage: 4.5,\n arrows: false,\n gap: '1em'\n },\n 640: {\n type: 'loop',\n perPage: 2.5,\n gap: '1em',\n arrows: false,\n pagination: false\n },\n },\n};\n\nconst trailOverviewImages = {\n type : 'loop',\n padding: '8rem',\n gap: '1rem',\n arrows: true,\n breakpoints: {\n 768: {\n padding: '1rem',\n }\n }\n};\n\nconst mapPreviewsSplideOptions = {\n rewind: true,\n perPage: 2.5,\n gap: '10px',\n perMove: 1,\n pagination: false,\n breakpoints: {\n 640: {\n type: 'loop',\n perPage: 2.5,\n gap: '1em',\n arrows: false,\n },\n },\n};\n\nconst homeFeatureSliderElement = document.getElementById('home-feature-slider');\nlet homeFeatureSlider;\n\nif (homeFeatureSliderElement) {\n homeFeatureSlider = new Splide(homeFeatureSliderElement, homeFeatureSliderOptions).mount();\n}\n\n$('#btn-next').on('click', function () {\n console.log('next');\n homeFeatureSlider.go('>');\n});\n\n$('#btn-prev').on('click', function () {\n console.log('prev');\n homeFeatureSlider.go('<');\n});\n\nconst splideNearbyTrails = document.getElementById('splide-nearby-trails');\nif (splideNearbyTrails) {\n new Splide(splideNearbyTrails, homeSplideNearbyTrails).mount();\n}\n\nconst splideTopTrails = document.getElementById('splide-country-top-trails');\nif (splideTopTrails) {\n new Splide(splideTopTrails, trailsSplideOptions).mount();\n}\n\nconst splideCountryLongTrails = document.getElementById('splide-country-long-trails');\nif (splideCountryLongTrails) {\n new Splide(splideCountryLongTrails, trailsSplideOptions).mount();\n}\n\nconst splideCountryShortTrails = document.getElementById('splide-country-short-trails');\nif (splideCountryShortTrails) {\n new Splide(splideCountryShortTrails, trailsSplideOptions).mount();\n}\n\nconst splideCountryDifficultTrails = document.getElementById('splide-country-difficult-trails');\nif (splideCountryDifficultTrails) {\n new Splide(splideCountryDifficultTrails, trailsSplideOptions).mount();\n}\n\nconst newFeatureSlider = document.getElementById('new-feature-slider');\nif (newFeatureSlider) {\n new Splide(newFeatureSlider, newFeatureSlideOptions).mount();\n}\n\nconst splideFreeQuotesSlider = document.getElementById('splide-free-quotes');\nif (splideFreeQuotesSlider) {\n new Splide(splideFreeQuotesSlider, quoteSplideOptions).mount();\n}\n\nconst purchaseFeatureSlider = document.getElementById('purchase-preview-slider');\nif (purchaseFeatureSlider) {\n new Splide(purchaseFeatureSlider, purchaseFeatureSplideOptions).mount();\n}\n\nconst trailOverviewImagesSlider = document.getElementById('trail-overview-slider');\nif (trailOverviewImagesSlider) {\n new Splide(trailOverviewImagesSlider, trailOverviewImages).mount({ Grid });\n}\n\nconst mapPreviewsSplide = document.getElementById('map-preview-slider');\nif (mapPreviewsSplide) {\n new Splide(mapPreviewsSplide, mapPreviewsSplideOptions).mount({ Grid });\n}\n\nconst youtubeModal = document.getElementById('activateYoutubeModal');\nif (youtubeModal) {\n youtubeModal.addEventListener('click', () => {\n const URL = 'https://www.youtube-nocookie.com/embed/rKh-RM_CHQI?loop=1';\n const videoFrame = document.querySelector('.video-frame');\n videoFrame.src = URL;\n });\n}\n\nconsole.log('Splide setup complete');\n\n","import lozad from 'lozad';\n\nconst observer = lozad(); // lazy loads elements with default selector as '.lozad'\nobserver.observe();\n","const closeSaleBannerKey = 'closeSaleBanner';\nconst closeSaleBannerButton = document.getElementById('closeSaleBanner');\n\n// CLoses sale pop up\nfunction closeBanner() {\n const saleElement = document.getElementsByClassName('sale-banner');\n saleElement[0].classList.remove('active');\n\n // Sets local storage value to tomorrows date\n const hideUntilNow = new Date();\n hideUntilNow.setDate(hideUntilNow.getDate() + 1);\n localStorage.setItem(closeSaleBannerKey, hideUntilNow);\n}\n\nfunction updateCountdown() {\n const targetDate = new Date(window.sale_countdown_time);\n const daysBox = document.getElementById('days');\n const hoursBox = document.getElementById('hours');\n const minutesBox = document.getElementById('minutes');\n const secondsBox = document.getElementById('seconds');\n\n const now = new Date();\n let diffInSeconds = Math.floor((targetDate - now) / 1000);\n\n if (diffInSeconds < 0) {\n // Time's up\n daysBox.value = 0;\n hoursBox.value = 0;\n minutesBox.value = 0;\n secondsBox.value = 0;\n return;\n }\n\n const days = Math.floor(diffInSeconds / (60 * 60 * 24));\n diffInSeconds -= days * (60 * 60 * 24);\n const hours = Math.floor(diffInSeconds / (60 * 60));\n diffInSeconds -= hours * (60 * 60);\n const minutes = Math.floor(diffInSeconds / 60);\n diffInSeconds -= minutes * 60;\n const seconds = diffInSeconds;\n\n daysBox.innerHTML = days;\n hoursBox.innerHTML = hours;\n minutesBox.innerHTML = minutes;\n secondsBox.innerHTML = seconds;\n}\n\nif (closeBanner && closeSaleBannerButton) {\n closeSaleBannerButton.addEventListener('click', closeBanner);\n\n // Gets local storage data value (If added)\n const hideUntil = new Date(localStorage.getItem(closeSaleBannerKey) || 0);\n // Todays date time is passed the hideUntil value, show banner again.\n if (new Date() > hideUntil) {\n setTimeout(() => {\n const saleElement = document.getElementsByClassName('sale-banner');\n saleElement[0].classList.add('active');\n }, 4000);\n }\n\n // Start the countdown to a specific date\n setInterval(updateCountdown, 1000);\n}\n","import {HiikerMapStyle, MapStyle} from \"../../../utils/models/MapStyles\";\nimport Vue from \"vue\";\nimport { MapOverlayOption, MapOverlayOptions } from \"../../../utils/models/MapOverlayOptions\";\nimport { Module, ActionTree } from \"vuex\";\n// @ts-ignore\nimport baseMapStyle from \"../../../utils/assets/base_style.json\";\nimport { OverzoomUtility } from \"../../../utils/helpers/OverzoomPreference\";\nimport { RevenueCatUtil } from \"../../../utils/models/RevenueCatUser\";\nimport { OnBoardingGoal } from \"../../../utils/models/OnBoardingGoal\";\nimport getQueryParams from \"../../../utils/helpers/GetQueryParamsHelper\";\nimport {RevenueCatWrapper} from \"../../../utils/RevenueCatWrapper\";\n\nexport class MapStylesState {\n currentMapStyle: HiikerMapStyle | null = null;\n printMapMode: boolean = false;\n}\n\nconst state = Vue.observable(new MapStylesState());\n\nconst actions: ActionTree = {\n async initialiseStore(store) {\n await store.dispatch('setMapStyleFromQueryParams');\n const isProOrProPlus = await RevenueCatWrapper.isProOrProPlus()\n store.state.currentMapStyle = HiikerMapStyle.getCurrentStyle(isProOrProPlus);\n },\n async setMapStyleFromQueryParams({ commit, dispatch }) {\n const params = new URLSearchParams(window.location.search);\n if (params.has('mapStyle')) {\n // You can then get the value of the parameter like so:\n const value = params.get('mapStyle');\n let mapStyle = HiikerMapStyle.fromString(value)\n if (!mapStyle.isPro) {\n mapStyle.saveCurrentStyle()\n setTimeout(() => {\n if (window.map) {\n window.map.setStyle(mapStyle.styleUrl)\n }\n }, 1500)\n return\n }\n const isProOrProPlus = await RevenueCatWrapper.isProOrProPlus()\n if (window.user == null) {\n setTimeout(() => {\n window.onBoardingVue.launchFor(OnBoardingGoal.MapStyles)\n }, 1500)\n return\n }\n if (mapStyle.isPro && !isProOrProPlus) {\n setTimeout(() => {\n window.location.href = '/pricing'\n }, 1500)\n } else {\n mapStyle.saveCurrentStyle()\n setTimeout(() => {\n if (window.map) {\n window.map.setStyle(mapStyle.styleUrl)\n }\n }, 1500)\n }\n }\n },\n}\n\nconst mutations = {\n setCurrentMapStyle(state, mapStyle: HiikerMapStyle) {\n state.currentMapStyle = mapStyle\n },\n setPrintMapMode(state, printMapMode: boolean) {\n state.printMapMode = printMapMode\n }\n}\n\nconst getters = {\n\n}\n\nconst modules = {}\n\nexport default class MapStylesModule implements Module {\n namespaced = true\n state = state\n // @ts-ignore\n actions = actions\n mutations = mutations\n getters = getters\n modules = modules\n}\n","export function getBoundsFromGeoJsonPointsFeatureCollection(geojson) {\n if (!geojson || !geojson.features || geojson.features.length === 0) {\n throw new Error('Invalid GeoJSON data');\n }\n\n let minLat = Infinity;\n let maxLat = -Infinity;\n let minLon = Infinity;\n let maxLon = -Infinity;\n\n geojson.features.forEach(feature => {\n const [lon, lat] = feature.geometry.coordinates;\n\n if (lat < minLat) minLat = lat;\n if (lat > maxLat) maxLat = lat;\n if (lon < minLon) minLon = lon;\n if (lon > maxLon) maxLon = lon;\n });\n\n // If min/max are equal, we have a single point. Let's pad it.\n if (minLat === maxLat && minLon === maxLon) {\n const delta = 0.0005; // Adjust this value to change the zoom level\n minLat -= delta;\n maxLat += delta;\n minLon -= delta;\n maxLon += delta;\n }\n\n return {\n southwest: [minLat, minLon],\n northeast: [maxLat, maxLon]\n };\n}\n\nexport function getFeatureCollectionBounds(featureCollection) {\n // Ensure it's a FeatureCollection\n if (featureCollection.type !== 'FeatureCollection') {\n throw new Error('Input must be a GeoJSON FeatureCollection.');\n }\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n function processCoordinates(coords) {\n if (typeof coords[0] === 'number' && typeof coords[1] === 'number') {\n const [x, y] = coords;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n } else {\n for (const c of coords) {\n processCoordinates(c);\n }\n }\n }\n\n for (const feature of featureCollection.features) {\n const geom = feature.geometry;\n if (!geom) continue;\n const { type, coordinates } = geom;\n\n switch (type) {\n case 'Point':\n case 'MultiPoint':\n case 'LineString':\n case 'MultiLineString':\n case 'Polygon':\n case 'MultiPolygon':\n processCoordinates(coordinates);\n break;\n default:\n console.warn(`Unsupported geometry type: ${type}`);\n break;\n }\n }\n\n // If min = max, we have a single point. Let's pad it similarly.\n if (minX === maxX && minY === maxY) {\n const delta = 0.0035; // Adjust for desired zoom level\n minX -= delta;\n maxX += delta;\n minY -= delta;\n maxY += delta;\n }\n\n return [minX, minY, maxX, maxY];\n}\n","\nfunction padLz(number, w) {\n var n = number.toString();\n var l = n.length;\n for (var i=0; i6 || n100k<0 || n100k>12) return '';\n\n // translate those into numeric equivalents of the grid letters\n let l1 = (19-n100k) - (19-n100k)%5 + Math.floor((e100k+10)/5);\n let l2 = (19-n100k)*5%25 + e100k%5;\n\n // compensate for skipped 'I' and build grid letter-pairs\n if (l1 > 7) l1++;\n if (l2 > 7) l2++;\n let letPair = String.fromCharCode(l1+'A'.charCodeAt(0), l2+'A'.charCodeAt(0));\n\n // strip 100km-grid indices from easting & northing, and reduce precision\n e = Math.floor((e%100000)/Math.pow(10,5-digits/2));\n n = Math.floor((n%100000)/Math.pow(10,5-digits/2));\n\n return letPair + ' ' + padLz(e, digits/2) + ' ' + padLz(n, digits/2);\n}\n\nexport function getLetterFromIrishGridRef(xLon: number, yLat: number): String {\n let val1Full = xLon\n let val2Full = yLat\n let firstInt: number\n if (val1Full < 100000) {\n firstInt = 0\n } else {\n firstInt = parseInt((val1Full.toString().charAt(0) ?? \"0\"))\n }\n let secondInt: number\n if (val2Full < 100000) {\n secondInt = 0\n } else {\n secondInt = parseInt((val2Full.toString().charAt(0) ?? \"0\"))\n }\n let gridRefLetter = arrayToGridRef([firstInt, secondInt])\n if (gridRefLetter == 'Out of range' || val1Full < 0 || val2Full < 0) {\n return \"Out of range\"\n }\n\n\n let string1 = Math.round(val1Full).toString().substring(1)\n let string2 = Math.round(val2Full).toString().substring(1)\n if (val1Full < 100000) {\n string1 = Math.round(val1Full).toString()\n }\n if (val2Full < 100000) {\n string2 = Math.round(val2Full).toString()\n }\n\n return `${gridRefLetter} ${string1} ${string2}`\n}\n\nfunction arrayToGridRef(gridRefArray: number[]): String {\n switch (`${gridRefArray[0]} ${gridRefArray[1]}`) {\n case \"1 0\": return \"W\"\n case \"0 0\": return \"V\"\n case \"2 0\": return \"X\"\n case \"3 0\": return \"Y\"\n case \"4 0\": return \"Z\"\n case \"0 1\": return \"Q\"\n case \"1 1\": return \"R\"\n case \"2 1\": return \"S\"\n case \"3 1\": return \"T\"\n case \"4 1\": return \"U\"\n case \"0 2\": return \"L\"\n case \"1 2\": return \"M\"\n case \"2 2\": return \"N\"\n case \"3 2\": return \"O\"\n case \"4 2\": return \"P\"\n case \"0 3\": return \"F\"\n case \"1 3\": return \"G\"\n case \"2 3\": return \"H\"\n case \"3 3\": return \"J\"\n case \"4 3\": return \"K\"\n case \"0 4\": return \"A\"\n case \"1 4\": return \"B\"\n case \"2 4\": return \"C\"\n case \"3 4\": return \"D\"\n case \"4 4\": return \"E\"\n default: return \"Out of range\"\n }\n}\n","import proj4 from 'proj4';\nimport mapboxgl from \"mapbox-gl\";\nimport {getLetterFromIrishGridRef, getLetterOSGB} from \"../grid-ref/osgrid\";\nimport {MeasurementPref} from \"./MeasurementPref\";\n\nexport enum GridRef {\n GbGrid,\n IeGrid,\n NzGrid,\n LatLon\n}\n\nexport class GridRefUtils {\n gridRef: GridRef;\n\n constructor(gridRef: GridRef) {\n this.gridRef = gridRef\n }\n\n toPrettyString(): String {\n switch (this.gridRef) {\n case GridRef.GbGrid: return \"Great Britain Grid Reference (ESPG 27700)\";\n case GridRef.IeGrid: return \"Irish Grid Reference (ESPG 29902)\";\n case GridRef.NzGrid: return \"New Zealand Grid Reference (ESPG 27200)\"\n case GridRef.LatLon: return \"World Geodetic System (Longitude, Latitude) (ESPG 4326)\"\n }\n }\n\n toString(): String {\n switch (this.gridRef) {\n case GridRef.GbGrid: return \"GbGrid\";\n case GridRef.IeGrid: return \"IeGrid\";\n case GridRef.NzGrid: return \"NzGrid\";\n case GridRef.LatLon: return \"LatLon\";\n }\n }\n\n static fromString(gridRef: String): GridRefUtils {\n switch (gridRef) {\n case \"GbGrid\": return new GridRefUtils(GridRef.GbGrid);\n case \"IeGrid\": return new GridRefUtils(GridRef.IeGrid);\n case \"NzGrid\": return new GridRefUtils(GridRef.NzGrid);\n case \"LatLon\": return new GridRefUtils(GridRef.LatLon);\n default: return new GridRefUtils(GridRef.LatLon);\n }\n }\n\n static toProjection(gridRef: GridRef): String {\n switch (gridRef) {\n case GridRef.GbGrid: return \"+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs\";\n case GridRef.IeGrid: return \"+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs\";\n case GridRef.NzGrid: return \"+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs\";\n case GridRef.LatLon: return \"+proj=longlat +datum=WGS84 +no_defs\";\n }\n }\n\n static async setPreference(preference: GridRef) {\n // TODO: implement call to network\n console.log(\"call to network\")\n }\n\n static preference(): GridRefUtils {\n if (window.user) {\n // @ts-ignore\n return GridRefUtils.fromString(window.user.grid_reference)\n } else if (window.gridRef) {\n return GridRefUtils.fromString(window.gridRef)\n } else {\n return new GridRefUtils(GridRef.LatLon)\n }\n }\n\n convert(lngLat: mapboxgl.LngLat): String {\n let currentProjection = GridRefUtils.toProjection(this.gridRef)\n // @ts-ignore\n let converted = proj4(GridRefUtils.toProjection(GridRef.LatLon), currentProjection, [lngLat.lng, lngLat.lat]);\n let returnString = `${converted[0].toPrecision(6)}, ${converted[1].toPrecision(6)}`\n switch (this.gridRef) {\n case GridRef.GbGrid:\n return getLetterOSGB(converted[0], converted[1])\n case GridRef.IeGrid:\n return getLetterFromIrishGridRef(converted[0], converted[1])\n case GridRef.NzGrid:\n return returnString\n case GridRef.LatLon:\n return returnString\n }\n }\n\n formatFeedback(): String {\n switch (this.gridRef) {\n case GridRef.GbGrid: return \"Should be in the format of LetterLetter space number space number e.g. NN 16604 71259\";\n case GridRef.IeGrid: return \"Should be in the format of Letter space number space number e.g. N 16604 71259\";\n case GridRef.NzGrid: return \"Should be in the format of number space number e.g. 16604 71259\";\n case GridRef.LatLon: return \"Should be in the format of number (longitude) space number (latitude) e.g. -6.5123 53.546\";\n }\n }\n\n async convertLetteredGBGridRefToLatLng(gridRef: String): Promise {\n let currentProjection = await GridRefUtils.preference()\n if (currentProjection.gridRef !== GridRef.GbGrid) {\n throw new Error(\"Grid Ref is not GB Grid\")\n }\n let l1 = gridRef.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0);\n let l2 = gridRef.toUpperCase().charCodeAt(1) - 'A'.charCodeAt(0);\n // shuffle down letters after 'I' since 'I' is not used in grid:\n if (l1 > 7) l1 -= 1;\n if (l2 > 7) l2 -= 1;\n // convert grid letters into 100km-square indexes from false origin (grid square SV):\n const e100km = ((l1 - 2) % 5) * 5 + (l2 % 5);\n const n100km = (19 - Math.floor(l1 / 5) * 5) - Math.floor(l2 / 5);\n // skip grid letters to get numeric (easting/northing) part of ref\n const parts = gridRef.split(' ');\n const easting = parts[1];\n const northing = parts[2];\n\n let eastingFinalString = `${e100km}${easting}`;\n let northingFinalString = `${Math.round(n100km)}${northing}`;\n\n while (eastingFinalString.length < 6) {\n eastingFinalString += '0';\n }\n while (northingFinalString.length < 6) {\n northingFinalString += '0';\n }\n\n const eastingNorthing = {\n x: parseFloat(eastingFinalString),\n y: parseFloat(northingFinalString)\n };\n\n const convertEastingNorthingToLatLong = proj4(\n // @ts-ignore\n GridRefUtils.toProjection(GridRef.GbGrid),\n GridRefUtils.toProjection(GridRef.LatLon),\n [eastingNorthing.x, eastingNorthing.y]\n );\n return new Promise((resolve, reject) => {\n resolve(new mapboxgl.LngLat(convertEastingNorthingToLatLong[0], convertEastingNorthingToLatLong[1]))\n })\n }\n\n convertLetteredIrishGridRefToLonLat(gridRef) {\n if (this.gridRef !== GridRef.IeGrid) {\n throw new Error(\"Grid Ref is not Irish Grid\")\n }\n const letter = gridRef.charAt(0);\n const intArray = GridRefUtils.iEGridLetterToArray(letter);\n const splitGridRef = gridRef.split(\" \");\n\n let easting = intArray[0].toString() + splitGridRef[1].toString();\n let northing = intArray[1].toString() + splitGridRef[2].toString();\n\n while (easting.length < 6) {\n easting += \"0\";\n }\n while (northing.length < 6) {\n northing += \"0\";\n }\n\n const eastingNorthing = {\n x: parseFloat(easting),\n y: parseFloat(northing)\n };\n const convertEastingNorthingToLatLong = proj4(\n // @ts-ignore\n GridRefUtils.toProjection(GridRef.IeGrid),\n GridRefUtils.toProjection(GridRef.LatLon),\n [eastingNorthing.x, eastingNorthing.y]\n );\n return new Promise((resolve, reject) => {\n resolve(new mapboxgl.LngLat(convertEastingNorthingToLatLong[0], convertEastingNorthingToLatLong[1]))\n })\n }\n\n convertNzGridRefToLonLat(gridRef) {\n let split = gridRef.split(\" \");\n let easting = split[0];\n let northing = split[1];\n\n while (easting.length < 7) {\n easting += \"0\";\n }\n while (northing.length < 7) {\n northing += \"0\";\n }\n\n const eastingNorthing = {\n x: parseFloat(easting),\n y: parseFloat(northing)\n };\n const convertEastingNorthingToLatLong = proj4(\n // @ts-ignore\n GridRefUtils.toProjection(GridRef.NzGrid),\n GridRefUtils.toProjection(GridRef.LatLon),\n [eastingNorthing.x, eastingNorthing.y]\n );\n return new Promise((resolve, reject) => {\n resolve(new mapboxgl.LngLat(convertEastingNorthingToLatLong[0], convertEastingNorthingToLatLong[1]))\n })\n\n }\n\n static iEGridLetterToArray(letter) {\n const letterMap = {\n \"A\": [0, 4],\n \"B\": [1, 4],\n \"C\": [2, 4],\n \"D\": [3, 4],\n \"E\": [4, 4],\n \"F\": [0, 3],\n \"G\": [1, 3],\n \"H\": [2, 3],\n \"J\": [3, 3],\n \"K\": [4, 3],\n \"L\": [0, 2],\n \"M\": [1, 2],\n \"N\": [2, 2],\n \"O\": [3, 2],\n \"P\": [4, 2],\n \"Q\": [0, 1],\n \"R\": [1, 1],\n \"S\": [2, 1],\n \"T\": [3, 1],\n \"U\": [4, 1],\n \"V\": [0, 0],\n \"W\": [1, 0],\n \"X\": [2, 0],\n \"Y\": [3, 0],\n \"Z\": [4, 0],\n };\n\n if (letter in letterMap) {\n return letterMap[letter.toUpperCase()];\n } else {\n throw new Error(\"Invalid letter: \" + letter);\n }\n }\n\n static validateGridRef(gridRef: string, gridRefType: GridRef): boolean {\n switch (gridRefType) {\n case GridRef.IeGrid:\n return gridRef.split(' ').length === 3\n && gridRef.split(' ')[0].length === 1\n && !isNaN(parseInt(gridRef.split(' ')[1]))\n && !isNaN(parseInt(gridRef.split(' ')[2]));\n\n case GridRef.GbGrid:\n return gridRef.split(' ').length === 3\n && gridRef.split(' ')[0].length === 2\n && !isNaN(parseInt(gridRef.split(' ')[1]))\n && !isNaN(parseInt(gridRef.split(' ')[2]));\n\n case GridRef.LatLon:\n return gridRef.split(' ').length === 2\n && !isNaN(parseFloat(gridRef.split(' ')[0]))\n && !isNaN(parseFloat(gridRef.split(' ')[1]));\n\n case GridRef.NzGrid:\n return gridRef.split(' ').length === 2\n && !isNaN(parseInt(gridRef.split(' ')[0]))\n && !isNaN(parseInt(gridRef.split(' ')[1]));\n\n default:\n throw new Error('Unknown grid reference preference');\n }\n }\n}\n","export function generateID(length: number = 10): string {\n const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n var result = '';\n for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];\n return result;\n}\n\nexport function generateRandomInt(min = 1, max = 99999999) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n","export function isClickOnWaypointHelper(features: any[]): boolean {\n if (features.length > 0) {\n let feature = features[0]\n if (feature.source.includes('waypoint')) {\n return true\n }\n }\n return false\n}\n","import {LngLat} from \"mapbox-gl\";\n\n\nexport function wktPointToLatLng(wktPoint: string): LngLat | null {\n const matches = wktPoint.match(/POINT\\s*\\((.*?)\\s(.*?)\\)/i);\n\n if (matches && matches.length >= 3) {\n const lng = parseFloat(matches[1]);\n const lat = parseFloat(matches[2]);\n\n if (isNaN(lng) || isNaN(lat)) {\n return null;\n }\n\n const lngLat = new LngLat(lng, lat);\n return lngLat\n }\n\n return null;\n}\n","import { gql } from 'graphql-request'\n\nexport const GetMapStyles = gql`\n query GetMapStyles {\n mapStyles {\n name\n id\n description\n zoomRange\n copyright\n styleFile\n styleFileUrl\n image\n proPlus\n }\n }\n`;\n\n\nexport const GetMapStylesTags = gql`\n query GetMapStylesTags {\n tags(taggableType:\"MapStyle\"){\n id\n name\n taggingsCount\n trails {\n slug\n }\n }\n }\n`;\n\nexport const GetMapStyle = gql`\n query GetMapStyleById($id:ID!) {\n mapStyle(id:$id){\n name\n id\n description\n zoomRange\n styleFile\n image\n styleFileUrl\n proPlus\n }\n }`\n\nexport const GetMapStyleByTag = gql`\n query GetMapStyleByTag($tags: [String!]!) {\n mapStylesByTags(tags: $tags){\n name\n id\n description\n zoomRange\n copyright\n styleFile\n image\n styleFileUrl\n proPlus\n }\n }`\n\nexport const GetMapStylesNearby = gql`\n query GetMapStylesNearby($lon:Float, $lat:Float) {\n mapStylesNearby(lon:$lon, lat:$lat) {\n name\n id\n description\n zoomRange\n copyright\n styleFile\n image\n proPlus\n }\n }\n`\n\nexport const GetMapStylesCountries = gql`\nquery GetMapStyleCountries {\n mapStyleCountries {\n id\n name\n flagImage {\n lgUrl\n }\n mapStyles {\n id\n }\n }\n}\n`\n\nexport const GetMapStylesSearch = gql`\nquery GetMapStylesSearch($string: String!) {\n mapStylesSearch(searchString: $string) {\n name\n id\n description\n zoomRange\n copyright\n styleFile\n image\n proPlus\n }\n}\n`\n\nexport const GetMapStylesByCountry = gql`\nquery GetMapStylesByCountry($id: ID!) {\n mapStylesByCountryId(countryId: $id) {\n name\n id\n description\n zoomRange\n copyright\n styleFile\n image\n proPlus\n }\n}\n`\n","import graphClient from '../graphql/graph_client';\nimport { GetMapStyle } from \"../graphql/map-styles-graph\";\n\nimport hikingMapStyleImage from \"../../img/map_style/hiking_map_style.jpg\"\nimport historicalMapStyleImage from \"../../img/map_style/historical_map_style.jpg\"\nimport nationalMapStyleImage from \"../../img/map_style/national_map_style.jpg\"\nimport standardMapStyleImage from \"../../img/map_style/standard_map_style.png\"\nimport satelliteMapStyleImage from \"../../img/map_style/satellite_map_style.jpg\"\nimport parksMapStyleImage from \"../../img/map_style/parks_map_style.jpg\"\n\nvar threeDimensionalModeIsEnabled = false;\n\nexport class ThreeDimensionalMapManager {\n\n static enable3DMode() {\n const map = window.map;\n if (map.getSource('mapbox-dem') == null) {\n map.addSource('mapbox-dem', {\n 'type': 'raster-dem',\n 'url': 'mapbox://mapbox.mapbox-terrain-dem-v1',\n 'tileSize': 512,\n 'maxzoom': 14\n });\n }\n if (map.getTerrain() == null) {\n map.setTerrain({ 'source': 'mapbox-dem', 'exaggeration': 2.0 });\n }\n\n // Set map pitch\n map.setPitch(50);\n\n // Set max pitch to reduce the horizon seen and reduce unneccessary tile loading\n }\n\n static toggle3DMode() {\n if (threeDimensionalModeIsEnabled) {\n threeDimensionalModeIsEnabled = false;\n ThreeDimensionalMapManager.disable3DMode();\n } else {\n threeDimensionalModeIsEnabled = true;\n ThreeDimensionalMapManager.enable3DMode();\n }\n }\n\n static disable3DMode() {\n const map = window.map;\n if (map.getTerrain()) {\n map.setTerrain(null);\n }\n map.setPitch(0);\n }\n}\n\nexport class SavedCenter {\n lat: number;\n lng: number;\n zoom: number;\n\n constructor(lat: number, lng: number, zoom: number) {\n this.lat = lat;\n this.lng = lng;\n this.zoom = zoom;\n }\n\n static saveCurrentCenter() {\n // Serialize the current SavedCenter instance to a JSON string\n const center = window.map.getCenter()\n const zoom = window.map.getZoom()\n const centerObject = {\n lat: center.lat,\n lng: center.lng,\n zoom: zoom\n };\n localStorage.setItem('currentCenter', JSON.stringify(centerObject));\n }\n\n static getCurrentCenter() {\n const centerString = localStorage.getItem('currentCenter');\n if (centerString) {\n // Parse the JSON string back into an object\n const centerObject = JSON.parse(centerString);\n return new SavedCenter(centerObject.lat, centerObject.lng, centerObject.zoom);\n } else {\n // Return the default center if none was found\n return new SavedCenter(0, 0, 0); // Assuming default center is (0, 0) with zoom 0\n }\n }\n\n lngLat() {\n return [this.lng, this.lat]\n }\n\n}\n\n\nexport class HiikerMapStyle {\n styleUrl: string;\n name: string;\n image: string; // Image URL or path\n isPro: boolean;\n isPrintMap: boolean;\n\n constructor(styleUrl: string, name: string, image: string, isPro: boolean, isPrintMap: boolean = true) {\n this.styleUrl = styleUrl;\n this.name = name;\n this.image = image;\n this.isPro = isPro;\n this.isPrintMap = isPrintMap\n }\n\n toString() {\n switch (this.name) {\n case \"Standard\":\n return \"standard\";\n case \"Satellite\":\n return \"satellite\";\n case \"Parks\":\n return \"parks\";\n case \"Hiking+\":\n return \"hiking\";\n case \"National+\":\n return \"national\";\n case \"Historical+\":\n return \"historical\";\n case \"Outdoors\":\n return \"outdoors\";\n default:\n return \"standard\";\n }\n }\n\n toPrintMapString() {\n switch (this.name) {\n case \"Standard\":\n return \"standard-print-map\";\n case \"Satellite\":\n return \"satellite-print-map\";\n case \"Parks\":\n return \"parks-print-map\";\n case \"Hiking+\":\n return \"hiking-print-map\";\n case \"National+\":\n return \"national-print-map\";\n case \"Historical+\":\n return \"historical-print-map\";\n case \"Outdoors\":\n return \"outdoors-print-map\";\n default:\n return \"standard-print-map\";\n }\n }\n\n printMapUrl() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/${this.toPrintMapString()}.json?userId=${userId}`;\n return url\n }\n\n saveCurrentStyle() {\n // Serialize the current HiikerMapStyle instance to a JSON string\n const styleObject = {\n styleUrl: this.styleUrl,\n name: this.name,\n image: this.image,\n isPro: this.isPro\n };\n localStorage.setItem('currentHiikerMapStyle', JSON.stringify(styleObject));\n }\n\n static fromString(styleString: string) {\n switch (styleString) {\n case \"standard\":\n return HiikerMapStyle.standard();\n case \"satellite\":\n return HiikerMapStyle.satellite();\n case \"parks\":\n return HiikerMapStyle.parks();\n case \"hiking\":\n return HiikerMapStyle.hiking();\n case \"national\":\n return HiikerMapStyle.national();\n case \"historical\":\n return HiikerMapStyle.historical();\n default:\n return HiikerMapStyle.standard();\n }\n }\n\n\n static getCurrentStyle(userIsPro: boolean = false) {\n const styleString = localStorage.getItem('currentHiikerMapStyle');\n if (styleString) {\n // Parse the JSON string back into an object\n const styleObject = JSON.parse(styleString);\n let style = new HiikerMapStyle(styleObject.styleUrl, styleObject.name, styleObject.image, styleObject.isPro);\n if (style.isPro) {\n if (userIsPro) {\n return style;\n } else {\n return HiikerMapStyle.standard();\n }\n } else {\n return style;\n }\n } else {\n // Return the default style if none was found\n return HiikerMapStyle.standard(); // Assuming standard() is correctly defined with all properties\n }\n }\n\n static getAllStyles(): HiikerMapStyle[] {\n let mapStyles = [\n HiikerMapStyle.standard(),\n HiikerMapStyle.satellite(),\n HiikerMapStyle.parks(),\n HiikerMapStyle.hiking(),\n HiikerMapStyle.national(),\n HiikerMapStyle.historical(),\n ];\n if (window.flashing) {\n mapStyles.push(HiikerMapStyle.outdoors());\n }\n return mapStyles;\n }\n\n static standard() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/standard.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"Standard\",\n standardMapStyleImage, // Adjust path as necessary\n false,\n true\n );\n }\n\n static satellite() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/satellite.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"Satellite\",\n satelliteMapStyleImage, // Ensure this path is correctly adjusted\n false\n );\n }\n\n static parks() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/parks.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"Parks\",\n parksMapStyleImage, // Ensure this path is correctly adjusted\n false\n );\n }\n\n static hiking() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/hiking.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"Hiking+\",\n hikingMapStyleImage, // Adjust path as necessary\n true,\n false\n );\n }\n\n static national() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/national.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"National+\",\n nationalMapStyleImage, // Adjust path as necessary\n true\n );\n }\n\n static historical() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/historical.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"Historical+\",\n historicalMapStyleImage, // Adjust path as necessary\n true\n );\n }\n\n static outdoors() {\n const localURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n let userId = window.user?.firebase_user_id || '';\n let url = `${localURL}/mapbox_style_jsons/outdoors.json?userId=${userId}`;\n return new HiikerMapStyle(\n url,\n \"Outdoors\",\n standardMapStyleImage, // Adjust path as necessary\n false\n );\n }\n\n // Method to compare two HiikerMapStyle instances, if needed\n equals(other: HiikerMapStyle): boolean {\n return this.styleUrl === other.styleUrl && this.name === other.name;\n }\n}\n\nexport class MapStyle {\n id: number\n name: string\n mapStyleDescription: string\n zoomRange: Array\n copyright: string\n boundingBox: Array\n image: string\n styleFile: string\n styleFileUrl: string\n proPlus: boolean\n alpha: string = \"100\"\n\n constructor(id: number, name: string, mapStyleDescription: string, zoomRange: Array, copyright: string, boundingBox: Array, photos: string, styleFile: string, styleFileUrl: string, proPlus: boolean, alpha: string) {\n this.id = id\n this.name = name\n this.mapStyleDescription = mapStyleDescription\n this.zoomRange = zoomRange\n this.copyright = copyright\n this.boundingBox = boundingBox\n this.image = photos\n this.styleFile = styleFile\n this.styleFileUrl = styleFileUrl\n this.proPlus = proPlus\n this.alpha = alpha\n }\n\n public static fromMapStyle(mapStyle: object) {\n return new MapStyle(\n // @ts-ignore\n mapStyle['id'],\n // @ts-ignore\n mapStyle['name'],\n // @ts-ignore\n mapStyle['description'],\n // @ts-ignore\n mapStyle['zoomRange'],\n // @ts-ignore\n mapStyle['copyright'],\n // @ts-ignore\n mapStyle['boundingBox'],\n // @ts-ignore\n mapStyle['image'],\n // @ts-ignore\n mapStyle['styleFile'],\n // @ts-ignore\n mapStyle['styleFileUrl'],\n // @ts-ignore\n mapStyle['proPlus'],\n mapStyle['alpha']\n )\n }\n\n public static async get(id: number) {\n let mapStyleResponse = await graphClient.request(GetMapStyle, {id: `${id}`})\n let mapStyleData = mapStyleResponse.mapStyle\n return new MapStyle(\n mapStyleData.id,\n mapStyleData.name,\n mapStyleData.description,\n mapStyleData.zoomRange,\n mapStyleData.copyright,\n mapStyleData.boundingBox,\n mapStyleData.image,\n mapStyleData.styleFile,\n mapStyleData.styleFileUrl,\n mapStyleData.proPlus,\n \"100\"\n )\n }\n}\n","export enum WaypointOptionsDialogPages {\n WaypointOptions = 'WaypointOptions',\n WaypointEditDetails = 'WaypointEditDetails',\n WaypointViewDetails = 'WaypointViewDetails',\n Waypoints = 'Waypoints',\n WaypointGroups = 'WaypointGroups',\n WaypointGroupSelection = 'WaypointGroupSelection',\n WaypointGroupsWaypoints = 'WaypointGroupsWaypoints',\n WaypointDetails = 'WaypointDetails',\n}\n","import {gql} from \"graphql-request\";\n\nexport const CreateWaypoint = gql`\n mutation createWaypoint($waypoint:CreateWaypointInput!) {\n createWaypoint(input:$waypoint) {\n id\n lonlat\n title\n type\n description\n coordinateReferenceSystem\n public\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n deletedAt\n clientId\n errors {\n fieldName\n errors\n }\n }\n }\n`;\n\nexport const UpdateWaypoint = gql`\n mutation UpdateWaypoint($waypoint:UpdateWaypointInput!) {\n updateWaypoint(input:$waypoint) {\n id\n title\n waypointGroupIds\n errors {\n fieldName\n errors\n }\n }\n }\n`;\n\nexport const DestroyWaypoint = gql`\n mutation DestroyWaypoint($waypoint:DestroyWaypointInput!) {\n destroyWaypoint(input:$waypoint) {\n id\n destroyed\n errors {\n fieldName\n errors\n }\n }\n }\n`;\n\nexport const GetAllWaypointsForUser = gql`\n query GetAllWaypointsForUser {\n waypoints {\n id\n lonlat\n type\n clientId\n createdAt\n title\n }\n }\n`;\n\nexport const WaypointsSearch = gql`\n query WaypointsSearch($searchString: String!) {\n waypointsSearch(searchString: $searchString) {\n id\n lonlat\n title\n type\n description\n coordinateReferenceSystem\n public\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n deletedAt\n clientId\n }\n }\n`;\n\nexport const GetAllUserWaypointGroups = gql`\n query GetAllUserWaypointGroups {\n waypointGroups {\n id\n title\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n clientId\n waypoints {\n id\n lonlat\n title\n type\n description\n clientId\n }\n }\n }\n`;\n\nexport const GetWaypointByIdOrClientId = gql`\n query GetWaypointByIdOrClientId($clientId: String!) {\n waypointByIdOrClientId(clientId: $clientId) {\n id\n lonlat\n title\n type\n description\n coordinateReferenceSystem\n public\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n deletedAt\n clientId\n userId\n waypointPhotos {\n id\n file {\n url\n }\n }\n }\n }\n`;\n\nexport const DestroyWaypointImage = gql`\n mutation destroyWaypointPhoto($input: DestroyWaypointPhotoInput!) {\n destroyWaypointPhoto(input: $input) {\n id\n waypointPhotos {\n id\n }\n }\n }\n`;\n\nexport const DestroyWaypointGroup = gql`\n mutation destroyWaypointGroup($waypointGroup:DestroyWaypointGroupInput!) {\n destroyWaypointGroup(input:$waypointGroup) {\n id\n destroyed\n }\n }\n`;\n\nexport const UpdateWaypointGroup = gql`\n mutation updateWaypointGroup($waypointGroup:UpdateWaypointGroupInput!) {\n updateWaypointGroup(input:$waypointGroup) {\n id\n title\n obfuscatedId\n obfuscatedSlug\n errors {\n fieldName\n errors\n }\n }\n }\n`;\n\nexport const CreateWaypointGroup = gql`\n mutation createWaypointGroup($waypointGroup:CreateWaypointGroupInput!) {\n createWaypointGroup(input:$waypointGroup) {\n id\n title\n obfuscatedId\n obfuscatedSlug\n errors {\n fieldName\n errors\n }\n }\n }\n`;\n\nexport const GetWaypointGroupByIdOrClientId = gql`\n query GetWaypointGroupByIdOrClientId($clientId: String!) {\n waypointGroupByIdOrClientId(clientId: $clientId) {\n id\n title\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n waypoints {\n id\n lonlat\n title\n type\n description\n coordinateReferenceSystem\n public\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n deletedAt\n clientId\n waypointPhotos {\n id\n file {\n url\n }\n }\n }\n }\n }\n`;\n\nexport const CreateWaypoints = gql`\n mutation createWaypoints($input: CreateWaypointsInput!) {\n createWaypoints(input: $input) {\n id\n lonlat\n title\n type\n description\n coordinateReferenceSystem\n public\n obfuscatedId\n obfuscatedSlug\n createdAt\n updatedAt\n deletedAt\n clientId\n }\n }\n`;\n","import {wktPointToLatLng} from \"./WKTPointToLatLng\";\nimport {POI, POIUtility} from \"../models/POI\";\n\nexport function waypointsToGeoJsonFeatureCollectionHelper(waypoints: any[]) {\n const features = waypoints.map((w) => {\n let splitPoints = wktPointToLatLng(w.lonlat)\n try {\n let poiType = POIUtility.fromString(w.type)\n return {\n \"type\": \"Feature\",\n \"properties\": {\n \"title\": w.title,\n \"clientId\": w.clientId,\n \"iconName\": poiType.waypointIconName,\n \"type\": poiType.poi,\n \"isWaypoint\": true,\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [splitPoints?.lng, splitPoints?.lat]\n }\n }\n } catch (e) {\n console.log(e + \" for \" + w)\n return null\n }\n })\n return {\n \"type\": \"FeatureCollection\",\n \"features\": features.filter((f) => f !== null)\n }\n}\n","/**\n * Removes all query parameters from a given URL and returns the cleansed URL.\n *\n * @function\n * @param {string} href - The full URL to be cleansed.\n * @returns {void}\n *\n * @example\n * const originalUrl = \"https://example.com/page?param1=value1¶m2=value2\";\n * const cleansedUrl = cleanseUrl(originalUrl);\n * console.log(cleansedUrl); // Outputs: \"https://example.com/page\"\n *\n * @note\n * The function uses the `URL` object to parse and cleanse the provided URL.\n */\nexport function cleanseUrl(href: string) {\n let parsedUrl = new URL(href);\n parsedUrl.search = \"\";\n updateAddressBar(parsedUrl.toString())\n}\n\n// To update the actual address bar:\nfunction updateAddressBar(url: string) {\n // @ts-ignore\n history.pushState(null, null, url);\n}\n","import {POI} from \"../models/POI\";\n\nexport function createNewWaypointJsonHelper(lng: number, lat: number, title = \"Custom Waypoint\", type = POI.Other, description = \"\") {\n return {\n 'lonlat': `POINT(${lng} ${lat})`,\n 'title': title,\n 'type': type,\n \"description\": description,\n \"coordinateReferenceSystem\": \"EPSG:4326\",\n \"public\": true\n }\n}\n","export function createWaypointMapLayerHelper(id: string) {\n return {\n 'id': id,\n 'type': 'symbol',\n 'source': id,\n 'layout': {\n 'icon-image': ['get', 'iconName'],\n 'icon-allow-overlap': true,\n 'icon-size': 0.32\n },\n }\n}\n","import {POIUtility} from \"../models/POI\";\n\nexport function createIndividualWaypointGeoJsonObjectHelper(clientId: string, e: any, poiType: POIUtility) {\n return {\n \"type\": \"FeatureCollection\",\n \"features\": [{\n \"type\": \"Feature\",\n \"properties\": {\n \"title\": 'Custom Waypoint',\n \"clientId\": clientId,\n \"iconName\": poiType.getSpriteSheetWaypointIcon(),\n \"type\": poiType.poi,\n \"isWaypoint\": true,\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [e.lng, e.lat]\n }\n }]\n }\n}\n","import {POI, POIUtility} from \"../models/POI\";\nimport {generateRandomInt} from \"./IDGenerator\";\nimport {createIndividualWaypointGeoJsonObjectHelper} from \"./CreateIndividualWaypointGeoJsonObjectHelper\";\nimport {createWaypointMapLayerHelper} from \"./CreateWaypointMapLayerHelper\";\n\nexport function addWaypointToMapHelper(poiType: POIUtility, clientId: string, lngLat: {lng: number, lat: number}): string {\n let randomId = \"waypoint-\" + generateRandomInt()\n function addWaypointToMap() {\n\n }\n window.map.addSource(randomId, {\n \"type\": \"geojson\",\n \"data\": createIndividualWaypointGeoJsonObjectHelper(clientId, lngLat, poiType)\n })\n // @ts-ignore\n window.map.addLayer(createWaypointMapLayerHelper(randomId));\n return randomId\n}\n","import Vue from \"vue\";\nimport {ActionTree, GetterTree, Module, MutationTree} from \"vuex\";\nimport graph_client from \"../../../utils/graphql/graph_client\";\nimport {\n CreateWaypoint,\n CreateWaypointGroup, CreateWaypoints,\n DestroyWaypoint, DestroyWaypointGroup,\n DestroyWaypointImage,\n GetAllUserWaypointGroups,\n GetAllWaypointsForUser,\n GetWaypointByIdOrClientId,\n GetWaypointGroupByIdOrClientId,\n UpdateWaypoint,\n UpdateWaypointGroup,\n WaypointsSearch\n} from \"../../../utils/graphql/waypoints-graph\";\nimport {WaypointOptionsDialogPages} from \"../../../utils/models/WaypointOptionsDialogPages\";\nimport {wktPointToLatLng} from \"../../../utils/helpers/WKTPointToLatLng\";\nimport {\n waypointsToGeoJsonFeatureCollectionHelper\n} from \"../../../utils/helpers/WaypointsToGeoJsonFeatureCollectionHelper\";\nimport {POI, POIUtility} from \"../../../utils/models/POI\";\nimport {isClickOnWaypointHelper} from \"../../../utils/helpers/IsClickOnWaypointHelper\";\nimport {OnBoardingGoal} from \"../../../utils/models/OnBoardingGoal\";\nimport firebase from \"../../../js/firebase\";\nimport {getWaypointClientIdFromUrl} from \"../../../utils/helpers/GetWaypointClientIdFromUrl\";\nimport {cleanseUrl} from \"../../../utils/helpers/CleanseAndPushUrl\";\nimport {generateRandomInt} from \"../../../utils/helpers/IDGenerator\";\nimport {createNewWaypointJsonHelper} from \"../../../utils/helpers/CreateNewWaypointJsonHelper\";\nimport {\n createIndividualWaypointGeoJsonObjectHelper\n} from \"../../../utils/helpers/CreateIndividualWaypointGeoJsonObjectHelper\";\nimport {createWaypointMapLayerHelper} from \"../../../utils/helpers/CreateWaypointMapLayerHelper\";\nimport {gpxFileToGeoJsonHelper} from \"../../../utils/helpers/GpxFileToGeoJsonHelper\";\nimport {\n getBoundsFromGeoJsonPointsFeatureCollection\n} from \"../../../utils/helpers/GetBoundsFromGeoJsonPointsFeatureCollection\";\nimport {addWaypointToMapHelper} from \"../../../utils/helpers/AddWaypointToMapHelper\";\nimport toGpx from \"togpx\";\nimport mapboxgl from \"mapbox-gl\";\nimport \"firebase/compat/storage\";\n\nexport class WaypointDialogState {\n waypointAddingModeEnabled: boolean = false;\n pageStack: Array = [WaypointOptionsDialogPages.WaypointOptions];\n allUserWaypoints: Array = [];\n allUserWaypointGroups: Array = [];\n searchedWaypoints: Array = [];\n selectedWaypointGroup: any = null;\n mapContainsWaypoints: boolean = false;\n\n selectedWaypoint: any = null;\n\n waypointsReadyForUpload: Array = [];\n waypointPhotosAwaitingUpload: Array = [];\n\n waypointPhotosToRemove: Array = [];\n\n loading: boolean = false;\n\n individualWaypointLayerIds: Array = [];\n}\n\nconst actions: ActionTree = {\n initialiseStore(context: any, payload: any) {\n const dialog = $('#waypoint-options-dialog');\n dialog.on('hidden.bs.modal', () => {\n context.commit('resetPageStack');\n context.commit('clearSearchedWaypoints');\n context.state.waypointsReadyForUpload = [];\n context.state.waypointPhotosAwaitingUpload = [];\n context.state.waypointPhotosToRemove = [];\n });\n window.map.on('style.load', () => {\n console.log('main method style loaded in waypoints')\n if (context.state.mapContainsWaypoints) {\n context.dispatch('addWaypointsToMap')\n } else {\n context.dispatch('removeWaypointsFromMap')\n }\n })\n window.map.on('click', (e: any) => {\n const features = window.map.queryRenderedFeatures(e.point)\n if (isClickOnWaypointHelper(features)) {\n context.dispatch('getWaypointFrom', features[0].properties.clientId)\n return;\n }\n if (context.state.waypointAddingModeEnabled) {\n context.dispatch('createWaypoint', {lngLat: e.lngLat});\n }\n });\n const waypointClientId = getWaypointClientIdFromUrl();\n if (waypointClientId) {\n graph_client.request(GetWaypointByIdOrClientId, {\"clientId\": waypointClientId}).then((data: any) => {\n if (data.waypointByIdOrClientId) {\n context.state.selectedWaypoint = data.waypointByIdOrClientId;\n context.dispatch('showViewWaypointDetails')\n const latLng = wktPointToLatLng(context.state.selectedWaypoint.lonlat)\n // @ts-ignore\n dialog.modal('show');\n window.map.on('load', () => {\n let poiType = POIUtility.fromString(context.state.selectedWaypoint.type)\n const addedWaypointRandomId = addWaypointToMapHelper(\n // @ts-ignore\n poiType, waypointClientId, latLng\n )\n context.state.individualWaypointLayerIds.push(addedWaypointRandomId)\n const bounds = getBoundsFromGeoJsonPointsFeatureCollection(\n waypointsToGeoJsonFeatureCollectionHelper([context.state.selectedWaypoint])\n )\n const convertedBounds = [\n [bounds.southwest[1], bounds.southwest[0]], // [minLon, minLat]\n [bounds.northeast[1], bounds.northeast[0]] // [maxLon, maxLat]\n ];\n window.map.fitBounds(convertedBounds, {padding: 10, maxZoom: 15})\n })\n } else {\n alert(\"Waypoint not found\")\n cleanseUrl(window.location.href)\n }\n })\n }\n // @ts-ignore\n window.addMarkerClickedFromPopup = (lngLat: mapboxgl.LngLatLike) => {\n context.dispatch('createWaypoint', {lngLat: lngLat});\n context.rootState.map.marker?.remove()\n context.rootState.map.marker = null\n }\n },\n getWaypointFrom(context: any, clientId: any) {\n graph_client.request(GetWaypointByIdOrClientId, {clientId}).then((data: any) => {\n console.log(data)\n context.state.selectedWaypoint = data.waypointByIdOrClientId;\n context.dispatch('showViewWaypointDetails')\n })\n },\n refreshSelectedWaypoint(context: any) {\n graph_client.request(GetWaypointByIdOrClientId, {clientId: context.state.selectedWaypoint.clientId}).then((data: any) => {\n context.state.selectedWaypoint = data.waypointByIdOrClientId;\n })\n },\n getAllUserWaypoints(context: any, payload: any) {\n graph_client.request(GetAllWaypointsForUser).then((data: any) => {\n context.state.allUserWaypoints = data.waypoints;\n })\n },\n deleteSelectedWaypoint(context: any) {\n graph_client.request(DestroyWaypoint, {waypoint: {id: context.state.selectedWaypoint.id}}).then((data: any) => {\n context.dispatch('getAllUserWaypoints')\n if (context.state.mapContainsWaypoints) {\n context.dispatch('removeWaypointsFromMap')\n context.dispatch('addWaypointsToMap')\n }\n const dialog = $('#waypoint-options-dialog');\n // @ts-ignore\n dialog.modal('hide');\n }).catch((error: any) => {\n console.error(error)\n })\n },\n async deleteWaypoint(context, waypoint) {\n context.state.loading = true\n try {\n const response = graph_client.request(DestroyWaypoint, {waypoint: {id: waypoint.id}})\n await context.dispatch('getAllUserWaypoints')\n setTimeout(() => {\n context.state.loading = false\n if (context.state.mapContainsWaypoints) {\n context.dispatch('removeWaypointsFromMap')\n context.dispatch('addWaypointsToMap')\n }\n }, 750)\n } catch (e) {\n console.error(e)\n }\n },\n showViewWaypointDetails(context: any) {\n if (context.state.selectedWaypoint == null) {\n throw new Error(\"No waypoint selected\");\n }\n context.commit('setTopPage', WaypointOptionsDialogPages.WaypointViewDetails);\n const dialog = $('#waypoint-options-dialog');\n // @ts-ignore\n dialog.modal('show');\n },\n getAllUserWaypointGroups(context: any) {\n graph_client.request(GetAllUserWaypointGroups).then((data: any) => {\n context.state.allUserWaypointGroups = data.waypointGroups;\n })\n },\n updateWaypointGroup(context: any, payload: {id: string, title: string, waypointIds: number[]}) {\n graph_client.request(UpdateWaypointGroup, {waypointGroup: payload}).then((data: any) => {\n context.dispatch('getAllUserWaypointGroups')\n })\n },\n getWaypointGroup(context: any, clientId: string) {\n graph_client.request(GetWaypointGroupByIdOrClientId, {clientId: clientId}).then((data: any) => {\n context.state.selectedWaypointGroup = data.waypointGroupByIdOrClientId;\n })\n },\n createWaypointGroup(context: any, payload: {title: string, waypointIds: number[]}) {\n graph_client.request(CreateWaypointGroup, {waypointGroup: payload}).then((data: any) => {\n context.dispatch('getAllUserWaypointGroups')\n }).catch((error: any) => {\n console.error(error)\n })\n },\n async createWaypoint(context: any, payload: {lngLat, title : \"Custom Waypoint\", type: POI.Other, description: \"\" }) {\n const response = await graph_client.request(CreateWaypoint, {\n \"waypoint\": createNewWaypointJsonHelper(payload.lngLat.lng, payload.lngLat.lat, payload.title, payload.type, payload.description)\n })\n const addedWaypointRandomId = addWaypointToMapHelper(\n // @ts-ignore\n POIUtility.fromString(response?.createWaypoint.type), response?.createWaypoint.clientId, payload.lngLat\n )\n context.state.individualWaypointLayerIds.push(addedWaypointRandomId)\n },\n searchWaypoints(context: any, searchString: string) {\n graph_client.request(WaypointsSearch, {'searchString': searchString}).then((data: any) => {\n context.state.searchedWaypoints = data.waypointsSearch;\n })\n },\n removeAllIndividualWaypointsFromMap(context: any) {\n for (let i = 0; i < context.state.individualWaypointLayerIds.length; i++) {\n const layerId = context.state.individualWaypointLayerIds[i];\n if (window.map.getLayer(layerId) != null) {\n window.map.removeLayer(layerId)\n }\n if (window.map.getSource(layerId) != null) {\n window.map.removeSource(layerId)\n }\n }\n context.state.individualWaypointLayerIds = []\n },\n addWaypointsToMap(context: any) {\n graph_client.request(GetAllWaypointsForUser).then((data: any) => {\n const geojson = waypointsToGeoJsonFeatureCollectionHelper(data.waypoints);\n context.dispatch('removeAllIndividualWaypointsFromMap')\n if (window.map.getLayer(\"waypoints\") != null) {\n window.map.removeLayer(\"waypoints\")\n }\n if (window.map.getSource(\"waypoints\") != null) {\n window.map.removeSource(\"waypoints\")\n }\n window.map.addSource(\"waypoints\", {\n \"type\": \"geojson\",\n \"data\": geojson\n })\n\n window.map.addLayer(createWaypointMapLayerHelper(\"waypoints\"));\n context.state.mapContainsWaypoints = true\n context.state.loading = false;\n })\n },\n removeWaypointsFromMap(context: any) {\n if (window.map.getLayer(\"waypoints\") != null) {\n window.map.removeLayer(\"waypoints\")\n }\n if (window.map.getSource(\"waypoints\") != null) {\n window.map.removeSource(\"waypoints\")\n }\n context.state.mapContainsWaypoints = false\n },\n async uploadWaypointImages(context: any, files: any[]) {\n context.state.loading = true;\n for (let i = 0; i < files.length; i++) {\n let file = files[i];\n context.state.waypointPhotosAwaitingUpload.push(file);\n }\n const storageRef = firebase.storage().ref();\n\n for (let i = 0; i < files.length; i++) {\n let file = files[i];\n const fileRef = storageRef.child('Public_Images/' + file.name); // Set your desired path here\n await fileRef.put(file);\n\n let downloadURL = await fileRef.getDownloadURL();\n context.state.selectedWaypoint.waypointPhotos.push({id: generateRandomInt(), file: {url: downloadURL}});\n context.state.waypointsReadyForUpload.push(downloadURL);\n context.state.waypointPhotosAwaitingUpload.splice(context.state.waypointPhotosAwaitingUpload.indexOf(file), 1);\n }\n context.state.loading = false;\n },\n saveSelectedWaypoint(context: any) {\n context.state.loading = true;\n if (context.state.waypointPhotosAwaitingUpload.length > 0) {\n return alert(\"Please wait for all images to upload\")\n }\n if (context.state.waypointPhotosToRemove.length > 0) {\n for (let i = 0; i < context.state.waypointPhotosToRemove.length; i++) {\n const photo = context.state.waypointPhotosToRemove[i];\n context.dispatch('removeWaypointImage', photo)\n }\n }\n graph_client.request(UpdateWaypoint, {\n \"waypoint\":\n {\n 'id': context.state.selectedWaypoint.id,\n 'lonlat': context.state.selectedWaypoint.lonlat,\n 'title': context.state.selectedWaypoint.title,\n 'type': context.state.selectedWaypoint.type,\n \"description\": context.state.selectedWaypoint.description,\n \"coordinateReferenceSystem\": context.state.selectedWaypoint.coordinateReferenceSystem,\n \"public\": context.state.selectedWaypoint.public,\n \"photos\": context.state.waypointsReadyForUpload,\n }\n }).then((data: any) => {\n if (data.errors) {\n alert(data.errors[0].message)\n }\n if (data.updateWaypoint.errors && data.updateWaypoint.errors.length > 0) {\n alert(data.updateWaypoint.errors[0].message)\n }\n context.state.loading = false;\n // @ts-ignore\n $('#waypoint-options-dialog').modal('hide');\n context.dispatch('addWaypointsToMap')\n\n }).catch((error: any) => {\n alert(error)\n })\n },\n planTrailToSelectedWaypoint(context: any) {\n const lngLat = context.getters.getPointFromSelectedWaypoint;\n const paramValue = `${lngLat.lat},${lngLat.lng}`; // replace this with the actual value you want\n const url = `${window.location.origin}/trail-planner?startPoint=${paramValue}`;\n window.open(url, \"_blank\");\n },\n removeWaypointImage(context: any, image: any) {\n graph_client.request(DestroyWaypointImage, {\n input: {\n waypointId: context.state.selectedWaypoint.id,\n photoId: image.id\n }\n }).then((data: any) => {\n console.log(data)\n }).catch((error: any) => {\n console.error(error)\n })\n },\n provisionallyRemoveWaypointImage(context: any, image: any) {\n const selectedWaypointPhotos = context.state.selectedWaypoint.waypointPhotos;\n const imageIndex = selectedWaypointPhotos.indexOf(image);\n const imageIndexInReadyForUpload = context.state.waypointsReadyForUpload.indexOf(image.file.url);\n\n if (imageIndexInReadyForUpload !== -1) {\n context.state.waypointsReadyForUpload.splice(imageIndexInReadyForUpload, 1);\n }\n\n // Check if the image exists in the photos array.\n if (imageIndex !== -1) {\n // Remove the image and get the removed image(s).\n const removedImages = selectedWaypointPhotos.splice(imageIndex, 1);\n\n // Since splice returns an array, the first item of the returned array will be your removed image.\n const removedImageId = removedImages[0];\n\n context.state.waypointPhotosToRemove.push(removedImageId);\n }\n },\n importGPXFile(context: any, file: any) {\n const reader = new FileReader();\n reader.onload = (e) => {\n const gpxContent = e.target.result;\n let geoJson = gpxFileToGeoJsonHelper(gpxContent)\n let points = geoJson.features.filter((f: any) => f.geometry.type === \"Point\")\n if (points.length === 0) {\n return alert(\"No points found in GPX file\")\n } else {\n const confirm = window.confirm(`Found ${points.length} points in GPX file. Do you want to create them as waypoints?`)\n if (!confirm) {\n return\n }\n const bounds = getBoundsFromGeoJsonPointsFeatureCollection(geoJson)\n console.log(bounds)\n const convertedBounds = [\n [bounds.southwest[1], bounds.southwest[0]], // [minLon, minLat]\n [bounds.northeast[1], bounds.northeast[0]] // [maxLon, maxLat]\n ];\n window.map.fitBounds(convertedBounds, {padding: 10})\n $('#waypoint-options-dialog').modal('hide');\n context.state.loading = true\n context.dispatch('createWaypoints', {waypoints: points, title: file.name})\n }\n };\n reader.readAsText(file);\n },\n createWaypoints(context: any, payload: {waypoints: any[], title: string}) {\n const variables = {\n input: {\n input: payload.waypoints.map((w: any) => {\n return {\n type: \"other\",\n title: w.properties?.title ?? \"Custom Waypoint\",\n description: w.properties?.description ?? \"\",\n public: true,\n coordinateReferenceSystem: 'NIGB EPGS:4326',\n lonlat: `POINT (${w.geometry.coordinates[0]} ${w.geometry.coordinates[1]})`\n };\n })\n }\n };\n\n graph_client.request(CreateWaypoints, variables) // Directly send the waypointsData\n .then((data: any) => {\n context.dispatch('addWaypointsToMap')\n const waypointIds = data.createWaypoints.map((w: any) => w.id)\n context.dispatch('createWaypointGroup', {\n title: payload.title,\n waypointIds: waypointIds\n })\n }).catch((error: any) => {\n console.error(error)\n alert(`Error creating waypoints: ${error}`)\n });\n },\n showWaypointOnMap(context, waypoint: any) {\n const point = wktPointToLatLng(waypoint.lonlat)!\n window.map.flyTo({\n center: point,\n zoom: 15\n })\n const poiType = POIUtility.fromString(waypoint.type)\n const addedWaypointRandomId = addWaypointToMapHelper(poiType, waypoint.clientId, point)\n context.state.individualWaypointLayerIds.push(addedWaypointRandomId)\n const dialog = $('#waypoint-options-dialog');\n // @ts-ignore\n dialog.modal('hide');\n },\n exportSelectedWaypointGroupToGPX(context: any) {\n const geoJson = waypointsToGeoJsonFeatureCollectionHelper(context.state.selectedWaypointGroup.waypoints)\n const blob = new Blob([toGpx(geoJson)], { type: 'application/gpx+xml' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = context.state.selectedWaypointGroup?.title ? context.state.selectedWaypointGroup.title + \".gpx\" : 'hiiker-waypoint-data.gpx';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n exportUserWaypointsToGPX(context: any) {\n const geoJson = waypointsToGeoJsonFeatureCollectionHelper(context.state.allUserWaypoints)\n const blob = new Blob([toGpx(geoJson)], { type: 'application/gpx+xml' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = context.state.selectedWaypointGroup?.title ? context.state.selectedWaypointGroup.title + \".gpx\" : 'hiiker-waypoint-data.gpx';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n exportWaypointToGPX(context: any, waypoint) {\n const geoJson = waypointsToGeoJsonFeatureCollectionHelper([waypoint])\n const blob = new Blob([toGpx(geoJson)], { type: 'application/gpx+xml' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = waypoint.title ? waypoint.title + \".gpx\" : 'hiiker-waypoint-data.gpx';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n destroySelectedWaypointGroup(context: any) {\n graph_client.request(DestroyWaypointGroup, {waypointGroup: {id: context.state.selectedWaypointGroup.id}}).then(async (data: any) => {\n console.log(data)\n await context.dispatch('getAllUserWaypointGroups')\n context.commit('popPage')\n })\n }\n}\n\nconst mutations: MutationTree = {\n toggleWaypointAddingNotification(state: WaypointDialogState) {\n state.waypointAddingModeEnabled = !state.waypointAddingModeEnabled;\n },\n setTopPage(state: WaypointDialogState, page: WaypointOptionsDialogPages) {\n state.pageStack.push(page);\n state.pageStack = state.pageStack\n },\n resetPageStack(state: WaypointDialogState) {\n state.pageStack = [WaypointOptionsDialogPages.WaypointOptions];\n },\n clearSearchedWaypoints(state: WaypointDialogState) {\n state.searchedWaypoints = [];\n },\n popPage(state: WaypointDialogState) {\n state.pageStack.pop();\n state.pageStack = state.pageStack\n },\n setSelectedWaypointGroup(state: WaypointDialogState, waypointGroup: any) {\n state.selectedWaypointGroup = waypointGroup;\n },\n setSelectedWaypointDescription(state, description) {\n state.selectedWaypoint.description = description;\n },\n setSelectedWaypointTitle(state, title) {\n state.selectedWaypoint.title = title;\n },\n setSelectedWaypointType(state, type) {\n state.selectedWaypoint.type = type;\n },\n setSelectedWaypointPublic(state, isPublic) {\n state.selectedWaypoint.public = isPublic;\n },\n}\n\n\nconst getters: GetterTree = {\n topPage(state) {\n return state.pageStack[state.pageStack.length - 1];\n },\n topPageIsWaypointOptions(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointOptions;\n },\n topPageIsWaypointViewDetails(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointViewDetails;\n },\n topPageIsWaypointEditDetails(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointEditDetails;\n },\n topPageIsWaypoints(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.Waypoints;\n },\n topPageIsWaypointGroups(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointGroups;\n },\n topPageIsWaypointGroupsWaypoints(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointGroupsWaypoints;\n },\n topPageIsWaypointDetails(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointDetails;\n },\n topPageIsWaypointGroupSelection(state, getters) {\n return getters.topPage === WaypointOptionsDialogPages.WaypointGroupSelection;\n },\n waypointsForList(state) {\n return state.searchedWaypoints\n },\n selectedWaypointShareUrl(state) {\n if (state.selectedWaypoint == null) {\n throw new Error(\"No waypoint selected\");\n }\n const fullBaseUrl = window.location.protocol + '//' + window.location.host;\n return fullBaseUrl + '/map?waypoint=' + state.selectedWaypoint.clientId;\n },\n getPointFromSelectedWaypoint(state) {\n if (state.selectedWaypoint == null) {\n throw new Error(\"No waypoint selected\");\n }\n return wktPointToLatLng(state.selectedWaypoint.lonlat);\n }\n}\n\nconst state = Vue.observable(new WaypointDialogState());\n\nexport default class WaypointDialogModule implements Module {\n namespaced = true\n state = state\n actions = actions\n mutations = mutations\n getters = getters\n}\n","export function getWaypointClientIdFromUrl(): string | null {\n const url = new URL(window.location.href);\n return url.searchParams.get('waypoint');\n}\n","import tj from '@mapbox/togeojson';\n\nexport function gpxFileToGeoJsonHelper(gpxContent) {\n // Parse the GPX content to XML\n const parser = new DOMParser();\n const xml = parser.parseFromString(gpxContent, 'text/xml');\n\n // Convert XML to GeoJSON using togeojson\n const geojson = tj.gpx(xml);\n\n // Now you can use the geojson object\n return geojson;\n}\n"],"names":["data","revenueCatData","upgradeSucceeded","freeImage","firebaseUserId","window","user","firebase_user_id","computed","hasActiveEntitlements","Object","keys","entitlements","active","length","activeEntitlements","hasAdditionalProducts","allPurchaseDatesByProduct","purchasesPath","location","origin","methods","subscriptionImage","identifier","includes","ProImage","FreeImage","formatDate","dateString","Date","toLocaleDateString","year","month","day","subscriptionTypeBadge","entitlement","expirationDate","willRenew","storeName","store","stripe","appstore","playstore","showManagementLink","managementLink","stripeManagementUrl","managementURLs","purchases","Purchases","rcPublicKey","getCustomerInfo","error","console","_vm","this","_c","_self","staticClass","_m","_e","_v","_s","requestDate","_l","key","attrs","originalPurchaseDate","productIdentifier","document","querySelector","vue","Vue","render","createElement","$mount","addEventListener","querySelectorAll","forEach","el","Dropdown","getElementById","Rails","log","giftButton","e","preventDefault","href","giftCheckoutUrl","onBoardingVue","launchFor","OnBoardingGoal","AuthMethods","homeFeatureSliderOptions","direction","pagination","perPage","drag","arrows","type","heightRatio","breakpoints","homeSplideNearbyTrails","isNavigation","gap","fixedWidth","trailsSplideOptions","rewind","perMove","newFeatureSlideOptions","height","quoteSplideOptions","purchaseFeatureSplideOptions","trailOverviewImages","padding","mapPreviewsSplideOptions","homeFeatureSliderElement","homeFeatureSlider","Splide","mount","$","on","go","splideNearbyTrails","splideTopTrails","splideCountryLongTrails","splideCountryShortTrails","splideCountryDifficultTrails","newFeatureSlider","splideFreeQuotesSlider","purchaseFeatureSlider","trailOverviewImagesSlider","Grid","mapPreviewsSplide","youtubeModal","src","lozad","observe","closeSaleBannerKey","closeSaleBannerButton","closeBanner","getElementsByClassName","classList","remove","hideUntilNow","setDate","getDate","localStorage","setItem","hideUntil","getItem","setTimeout","add","setInterval","targetDate","sale_countdown_time","daysBox","hoursBox","minutesBox","secondsBox","now","diffInSeconds","Math","floor","value","days","hours","minutes","seconds","innerHTML","MapStylesState","currentMapStyle","printMapMode","state","actions","async","dispatch","isProOrProPlus","RevenueCatWrapper","HiikerMapStyle","_ref","commit","params","URLSearchParams","search","has","get","mapStyle","isPro","saveCurrentStyle","map","setStyle","styleUrl","mutations","setCurrentMapStyle","setPrintMapMode","getters","modules","MapStylesModule","namespaced","getBoundsFromGeoJsonPointsFeatureCollection","geojson","features","Error","minLat","Infinity","maxLat","minLon","maxLon","feature","lon","lat","geometry","coordinates","delta","southwest","northeast","getFeatureCollectionBounds","featureCollection","minX","minY","maxX","maxY","processCoordinates","coords","x","y","c","geom","warn","padLz","number","w","n","toString","l","i","GridRef","GridRefUtils","constructor","gridRef","toPrettyString","GbGrid","IeGrid","NzGrid","LatLon","static","preference","fromString","grid_reference","convert","lngLat","currentProjection","toProjection","converted","proj4","lng","returnString","toPrecision","easting","northing","NaN","e100k","n100k","l1","l2","letPair","String","fromCharCode","charCodeAt","pow","digits","getLetterOSGB","xLon","yLat","firstInt","secondInt","val1Full","val2Full","parseInt","charAt","gridRefLetter","gridRefArray","arrayToGridRef","string1","round","substring","string2","getLetterFromIrishGridRef","formatFeedback","toUpperCase","e100km","n100km","parts","split","eastingFinalString","northingFinalString","eastingNorthing","parseFloat","convertEastingNorthingToLatLong","Promise","resolve","reject","mapboxgl","convertLetteredIrishGridRefToLonLat","letter","intArray","iEGridLetterToArray","splitGridRef","convertNzGridRefToLonLat","letterMap","gridRefType","isNaN","generateID","chars","result","arguments","undefined","random","generateRandomInt","min","max","ceil","isClickOnWaypointHelper","source","wktPointToLatLng","wktPoint","matches","match","LngLat","gql","threeDimensionalModeIsEnabled","ThreeDimensionalMapManager","getSource","addSource","getTerrain","setTerrain","setPitch","disable3DMode","enable3DMode","SavedCenter","zoom","center","getCenter","getZoom","centerObject","JSON","stringify","centerString","parse","name","image","isPrintMap","toPrintMapString","printMapUrl","localURL","protocol","hostname","port","userId","styleObject","styleString","standard","satellite","parks","hiking","national","historical","userIsPro","style","mapStyles","flashing","push","outdoors","standardMapStyleImage","satelliteMapStyleImage","parksMapStyleImage","hikingMapStyleImage","nationalMapStyleImage","historicalMapStyleImage","equals","other","WaypointOptionsDialogPages","CreateWaypoint","UpdateWaypoint","DestroyWaypoint","GetAllWaypointsForUser","WaypointsSearch","GetAllUserWaypointGroups","GetWaypointByIdOrClientId","DestroyWaypointImage","DestroyWaypointGroup","UpdateWaypointGroup","CreateWaypointGroup","GetWaypointGroupByIdOrClientId","CreateWaypoints","waypointsToGeoJsonFeatureCollectionHelper","waypoints","splitPoints","lonlat","poiType","POIUtility","title","clientId","waypointIconName","poi","filter","f","cleanseUrl","parsedUrl","URL","url","history","pushState","createNewWaypointJsonHelper","POI","createWaypointMapLayerHelper","id","createIndividualWaypointGeoJsonObjectHelper","getSpriteSheetWaypointIcon","addWaypointToMapHelper","randomId","addLayer","initialiseStore","context","payload","dialog","waypointsReadyForUpload","waypointPhotosAwaitingUpload","waypointPhotosToRemove","mapContainsWaypoints","queryRenderedFeatures","point","properties","waypointAddingModeEnabled","waypointClientId","searchParams","graph_client","then","waypointByIdOrClientId","selectedWaypoint","latLng","modal","addedWaypointRandomId","individualWaypointLayerIds","bounds","convertedBounds","fitBounds","maxZoom","alert","addMarkerClickedFromPopup","rootState","marker","getWaypointFrom","refreshSelectedWaypoint","getAllUserWaypoints","allUserWaypoints","deleteSelectedWaypoint","waypoint","catch","loading","showViewWaypointDetails","getAllUserWaypointGroups","allUserWaypointGroups","waypointGroups","updateWaypointGroup","waypointGroup","getWaypointGroup","selectedWaypointGroup","waypointGroupByIdOrClientId","createWaypointGroup","response","description","createWaypoint","searchWaypoints","searchString","searchedWaypoints","waypointsSearch","removeAllIndividualWaypointsFromMap","layerId","getLayer","removeLayer","removeSource","addWaypointsToMap","removeWaypointsFromMap","files","file","storageRef","firebase","ref","fileRef","child","put","downloadURL","getDownloadURL","waypointPhotos","splice","indexOf","saveSelectedWaypoint","photo","coordinateReferenceSystem","public","errors","message","updateWaypoint","planTrailToSelectedWaypoint","getPointFromSelectedWaypoint","paramValue","open","removeWaypointImage","input","waypointId","photoId","provisionallyRemoveWaypointImage","selectedWaypointPhotos","imageIndex","imageIndexInReadyForUpload","removedImageId","importGPXFile","reader","FileReader","onload","geoJson","gpxContent","xml","DOMParser","parseFromString","tj","gpxFileToGeoJsonHelper","target","points","confirm","readAsText","createWaypoints","variables","waypointIds","showWaypointOnMap","flyTo","exportSelectedWaypointGroupToGPX","blob","Blob","toGpx","link","createObjectURL","download","body","appendChild","click","removeChild","exportUserWaypointsToGPX","exportWaypointToGPX","destroySelectedWaypointGroup","toggleWaypointAddingNotification","setTopPage","page","pageStack","resetPageStack","clearSearchedWaypoints","popPage","pop","setSelectedWaypointGroup","setSelectedWaypointDescription","setSelectedWaypointTitle","setSelectedWaypointType","setSelectedWaypointPublic","isPublic","topPage","topPageIsWaypointOptions","topPageIsWaypointViewDetails","topPageIsWaypointEditDetails","topPageIsWaypoints","topPageIsWaypointGroups","topPageIsWaypointGroupsWaypoints","topPageIsWaypointDetails","topPageIsWaypointGroupSelection","waypointsForList","selectedWaypointShareUrl","host","WaypointDialogModule"],"sourceRoot":""}