{"version":3,"sources":["webpack:///./helpers/gMapHelpers.ts","webpack:///./modules/SelectChoices.ts","webpack:///./modules/GMapList.ts","webpack:///./modules/GMapSearch.ts","webpack:///./modules/GmapLocation.ts","webpack:///./modules/PharmacyFinder.ts"],"names":["__webpack_require__","d","__webpack_exports__","gMapApiKey","gMapStyles","elementType","stylers","visibility","color","featureType","r","initChoices","SelectChoices","element","this","initCssFile","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","prototype","file","location","pathname","split","pop","link","createElement","choicesCssUrl","getAttribute","href","substr","lastIndexOf","type","rel","className","selectBoxes","Promise","all","e","then","bind","module","default","searchEnabled","searchChoices","itemSelectText","shouldSort","choicesDropdown","_helpers_DOMHelpers__WEBPACK_IMPORTED_MODULE_0__","_helpers_gMapHelpers__WEBPACK_IMPORTED_MODULE_1__","GMapList","classSelector","map","listSelector","options","pharmacyFinder","listElements","querySelector","pharmacyWrapperMobile","usemiles","listItemMarkup","data","Id","Name","Latitude","Longitude","Phone","CultureRelatedDistance","Street","Postcode","City","CloseTime","Website","btnVisibleText","btnCollapseText","openHoursTxt","miniMapUrl","Object","Eucerin","isMobile","createListElements","marker","list","bounds","_getBounds","i","markers","length","_contains","push","appendListElements","_this","insertAdjacentHTML","pharmacyItems","toggleDetailsBtn","nameBtn","addressBtn","miniMapBtn","addEventListener","event","showPharmacyDetails","openRoute","buildList","pharmacyItem","position","pid","markerObj","expandedPharmacyItems","currentTarget","parent_1","parentElement","preventDefault","lat","parseFloat","lng","item","id","resetMarkersIcons","scrollToItem","setDefaultMarkerIcon","setMapToCenter","setActiveMarkerIcon","classList","add","window","dataLayer","eventCategory","eventAction","eventLabel","undefined","eventNonInteraction","event_name","pharmacy_name","innerHTML","_clear","closePharmacyExpander","showPharmacyItemExpanded","setIcon","pharmacyTypes","Icon","ActiveIcon","pos","zoom","setCenter","setZoom","pharmacyItemMarkup","textContent","setTimeout","addExpanderHandlersMobile","parentDiv","stopPropagation","mapListCont","goTo","offsetTop","rebuildList","openClickedPharmacyItem","target","routeTo","previousElementSibling","destAddr","markerPosition","positionMarker","params","origin","getPosition","destination","urlParams","keys","key","join","open","encodeURI","clickedMarkerId","click","GMapSearch","searchFlyout","searchInput","geoCoder","google","maps","Geocoder","locationBtn","searchedValue","value","savedSearchedInput","closeSearchFlyout","submitRequest","showSearchFlyout","pasteVal","clipboardData","getData","closeSearchFlyoutOnClickOut","flyoutElement","targetElement","parentNode","hideSearchFlyout","ctrlKey","which","executeReq","clearTimeout","geocodeAddress","cleanSearchResults","country","geocodeAddressInternal","geocode","address","componentRestrictions","geocodeAddressCallback","results","status","filterResult","find","result","types","some","buildSuggestionList","nothingFoundCallback","ul","noResItem","li","remove","geometry","formatted_address","appendChild","searchInputVal","getDiv","savedSearchResultCoord","extractAddress","hash","setMapToAddress","pharmacy_search_term","innerText","latitude","longitude","newString","replace","poss","LatLng","mapSelector","popupMap","markPosition","GMapLocation","isGpsActivated","initLocationSettings","navigator","geolocation","getCurrentPosition","autolocateSuccess","error","autolocateFallback","DOMHelpers","removeMarkedPosition","coord","coords","autoLocate","UserLocationIcon","console","log","code","message","customIconUrl","PharmacyFinder_PharmacyFinder","PharmacyFinder","defaultPharmacyTypes","isExecutedOnce","changePromotionValue","promotionOptions","newHash","lastBounds","getCurrentHash","hashPromotionDelimiter","promotionId","history","pushState","closest","defaultChoicesValue","getCenter","loadStores","loadDataWithParams","boundNorthEast","slice","boundSouthWest","xhr","XMLHttpRequest","state","mobileVersion","loadFarmacyTypesData","loadFarmacyPromotion","openPharmacyFinderLayer","GmapLocation","onDeviceChanged","ClusterIcon","Title","Type","pharmacyFinderTypes","keyValue","includes","toLowerCase","updateOptionsWrapper","optionsMarkup","optionsWrapper","farmacyPromotions","pharmacyFinderPromotions","el","subId","title","createOptions","selected","match","initMapOnLayer","_pharmacyFinder","selectChoices","layerMapSelector","Map","getElementById","mapOptions","iniEvendHandlersOnMap","markerClusterer","markerclusterer_esm","clusterOptions","mapList","defaultChoices","_a","addListener","attachCloseBtnHandler","dispatchEvent","KeyboardEvent","pharmacyTab_1","tabTitle_1","tabContent_1","tabId","activeTabcontent","cleanLayerMarkup","idle","zoomChanged","markup","getParmacyFinderMarkUp","initModules","localStorage","removeItem","args","areasize","northEast","southWest","gmapBounds","getBounds","getNorthEast","getSouthWest","Math","ceil","floor","getUrl","onload","json","JSON","parse","response","requestSuccess","requestError","send","preProcessResponse","updateMarkers","createMarkers","renderMarkers","textStatus","filterDublicatedItems","reduce","unique","o","obj","icon","url","size","Size","Point","anchor","Marker","mapID","markerItem","this_1","attachMarkerClickHandler","clearMarkers","addMarkers","reRenderPharmacyContent","pharmacyLayerContent","closeBtn","closeBtnLayer","onclick","searchPlaceholder","mapTabTitle","listTabTitle","searchValue","getItem","locationIcon","locationIconFilled","helperFunctions","latLng","IconUrl","currentPosition","draggable","setPosition","setMap","mapTypeId","MapTypeId","ROADMAP","center","minZoom","styles","gMapHelpers","panControl","streetViewControl","zoomControl","mapTypeControl","scaleControl","rotateControl","fullscreenControl","averageCenter","gridSize","anchorIcon","fontFamily","height","textColor","textSize","width"],"mappings":"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","file":"./modules/PharmacyFinder.592dc8c0.js","sourcesContent":["\r\nexport const gMapApiKey: string = \"AIzaSyDb3_YYA6m33LlLKWpc18DmZQVCdA1qxuA\";\r\n\r\nexport const gMapStyles = [\r\n {\r\n elementType: 'labels.icon',\r\n stylers: [{ visibility: 'off' }]\r\n },\r\n {\r\n elementType: 'geometry',\r\n stylers: [{ color: '#fafafa' }]\r\n },\r\n {\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'administrative.locality',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'poi',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'poi.park',\r\n elementType: 'geometry',\r\n stylers: [{ color: '#DAEBFA' }]//done\r\n },\r\n {\r\n featureType: 'poi.park',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'geometry',\r\n stylers: [{ color: '#FFFFFF' }]\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'geometry.stroke',\r\n stylers: [{ color: '#E5EFFA' }]\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'road.highway',\r\n elementType: 'geometry',\r\n stylers: [{ color: '##FFFFFF' }]\r\n },\r\n {\r\n featureType: 'road.highway',\r\n elementType: 'geometry.stroke',\r\n stylers: [{ color: '#E5EFFA' }]\r\n },\r\n {\r\n featureType: 'road.highway',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'transit',\r\n elementType: 'geometry',\r\n stylers: [{ color: '#DBEBF9' }]//??????????\r\n },\r\n {\r\n featureType: 'transit.station',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#DBEBF9' }]//?????????\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'geometry',\r\n stylers: [{ color: '#AED5F4' }]//done \r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'labels.text.fill',\r\n stylers: [{ color: '#213242' }]\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'labels.text.stroke',\r\n stylers: [{ color: '#213242' }]//done\r\n },\r\n {\r\n featureType: \"road.local\",\r\n elementType: \"labels\",\r\n stylers: [{ visibility: \"off\" }]\r\n },\r\n {\r\n featureType: \"road.arterial\",\r\n elementType: \"labels\",\r\n stylers: [{ visibility: \"off\" }]\r\n },\r\n\r\n]","/// \r\nimport './../../../../Website/dist/Choices-master/public/assets/styles/choices.min.css';\r\n\r\nconst moduleSelector = '[data-module=\"SelectChoices\"]';\r\n\r\nexport default class SelectChoices {\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new SelectChoices(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement) {\r\n if (this.element) {\r\n initChoices();\r\n this.initCssFile();\r\n }\r\n }\r\n\r\n initCssFile() {\r\n const file = location.pathname.split(\"/\").pop();\r\n\r\n const link = document.createElement(\"link\");\r\n const choicesCssUrl = this.element.getAttribute('data-choices-script-init-url');\r\n link.href = file.substr(0, file.lastIndexOf(\".\")) + choicesCssUrl;\r\n link.type = \"text/css\";\r\n link.rel = \"stylesheet\";\r\n link.className = \"loaded\";\r\n // document.querySelector(\".loaded\") ? document.querySelector(\".loaded\").replaceWith(link) : document.getElementsByTagName(\"head\")[0].appendChild(link);\r\n }\r\n}\r\n\r\nexport function initChoices() {\r\n const selectBoxes = document.querySelectorAll('.field:not(.ranking) select:not(.change-quantity), .promotion-wrapper select, .custom-selectbox');\r\n if (selectBoxes) {\r\n selectBoxes.forEach((element: HTMLSelectElement) => {\r\n const Choices = () => import ('./../../../../Website/dist/Choices-master/src/scripts/choices');\r\n Choices().then((module) => new module.default(element, {\r\n searchEnabled: false,\r\n searchChoices: false,\r\n itemSelectText: '',\r\n shouldSort: false\r\n }))\r\n .then(() => {\r\n Array.from(document.querySelectorAll(\".choices__list--dropdown .choices__list\")).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n const choicesDropdown = element;\r\n if (choicesDropdown) {\r\n const ScrollBar = () => import('./ScrollBar');\r\n ScrollBar().then((module) => new module.default(choicesDropdown))\r\n }\r\n });\r\n })\r\n })\r\n\r\n \r\n }\r\n}\r\n\r\nnew SelectChoices.setup();","/// \r\n\r\nimport PharmacyFinder from \"./PharmacyFinder\"\r\nimport { hasClass, removeClass, isEmpty, scrollToElement, isInViewPort, removeClassFromList } from \"../helpers/DOMHelpers\";\r\nimport { gMapApiKey } from \"../helpers/gMapHelpers\";\r\n\r\nexport default class GMapList {\r\n pharmacyFinder: PharmacyFinder;\r\n map: any;\r\n listSelector: HTMLElement;\r\n options: IMapListOptions;\r\n listElements: any;\r\n pharmacyWrapperMobile: HTMLElement;\r\n usemiles: boolean;\r\n\r\n constructor(classSelector, map, listSelector: string, options?: IMapListOptions) {\r\n this.pharmacyFinder = classSelector;\r\n this.map = map;\r\n this.listElements = '';\r\n this.listSelector = document.querySelector(listSelector);\r\n this.pharmacyWrapperMobile = document.querySelector('.pharmacy-details-wrapper');\r\n this.usemiles = this.pharmacyFinder.element.getAttribute('data-miles') == \"1\";\r\n }\r\n\r\n private listItemMarkup(data: IStore) {\r\n let { Id, Name, Latitude, Longitude, Phone, CultureRelatedDistance, Street, Postcode, City, CloseTime, Website } = data;\r\n let btnVisibleText = this.pharmacyFinder.element.getAttribute('data-btn-visible-text'),\r\n btnCollapseText = this.pharmacyFinder.element.getAttribute('data-btn-collapse-text'),\r\n openHoursTxt = this.pharmacyFinder.element.getAttribute('data-opening-hours-text'),\r\n miniMapUrl = `https://maps.googleapis.com/maps/api/staticmap?center=${Latitude},${Longitude}&maptype=roadmap&zoom=15&size=440x180&markers=size:mid%7Ccolor:red%7C${Latitude},${Longitude}&style=feature:road|color:0xffffff|visibility:simplified&style=feature:labels.icon|visibility:simplified&style=feature:geometry|color:0xfafafa%7visibility:on&style=feature:poi|visibility:off&key=${gMapApiKey}`;\r\n\r\n var markup = `\r\n
\r\n
\r\n ${btnVisibleText}\r\n ${btnCollapseText}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n ${(isEmpty(Name)) ? \"\" : `
${Name}
`}\r\n ${Street}, ${Postcode} ${City}\r\n ${(isEmpty(Phone)) ? \"\" : `${Phone}`}\r\n ${(isEmpty(Website)) ? \"\" : `${Website}`}\r\n
\r\n ${(isEmpty(CultureRelatedDistance)) ? \"\" : `${CultureRelatedDistance}`}\r\n ${(isEmpty(CloseTime)) ? \"\" : ``}\r\n
\r\n
\r\n ${Eucerin.isMobile ? `` : \"\"} \r\n

${openHoursTxt}

\r\n \r\n
\r\n
`\r\n\r\n return markup;\r\n }\r\n\r\n private createListElements() {\r\n var list = [],\r\n marker,\r\n // positionMarker = this.pharmacyFinder.positionMarker,\r\n bounds = this.pharmacyFinder._getBounds(1000000000, this.map);\r\n\r\n for (var i = 0; i < this.map.markers.length; i++) {\r\n marker = this.map.markers[i];\r\n\r\n if (this.pharmacyFinder._contains(marker.Latitude, marker.Longitude, bounds)) {\r\n // let value = google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(marker.Latitude, marker.Longitude), positionMarker.getPosition());\r\n // if (this.usemiles)\r\n // value = (1.609344 / 1000);\r\n\r\n // marker.Distance_value = Math.round((value / 1000) * 10) / 10;\r\n list.push(marker);\r\n }\r\n }\r\n\r\n // list.sort((a, b) => {\r\n // return a.Distance_value - b.Distance_value;\r\n // });\r\n\r\n for (var i = 0; i < list.length; i++) {\r\n this.listElements += this.listItemMarkup(list[i]);\r\n }\r\n }\r\n\r\n private appendListElements() {\r\n this.listSelector.insertAdjacentHTML('afterbegin', this.listElements);\r\n const pharmacyItems = this.listSelector.querySelectorAll('.pharmacy-item');\r\n\r\n Array.from(pharmacyItems).forEach((element) => {\r\n let toggleDetailsBtn = element.querySelector('.toggle-btn'),\r\n nameBtn = element.querySelector('.name'),\r\n addressBtn = element.querySelector('a.address'),\r\n miniMapBtn = element.querySelector('.details img');\r\n\r\n nameBtn.addEventListener('click', (event) => this.showPharmacyDetails(event));\r\n toggleDetailsBtn.addEventListener('click', (event) => this.showPharmacyDetails(event));\r\n\r\n addressBtn.addEventListener('click', (e: Event) => this.openRoute(event));\r\n\r\n if (Eucerin.isMobile) {\r\n miniMapBtn.addEventListener('click', (e: Event) => this.openRoute(event));\r\n }\r\n });\r\n }\r\n\r\n public buildList() {\r\n this.createListElements();\r\n this.appendListElements();\r\n }\r\n\r\n public showPharmacyDetails(event): void {\r\n let target,\r\n pharmacyItem: HTMLElement,\r\n expandedPharmacyItems = this.listSelector.querySelectorAll('.pharmacy-item.show-details'),\r\n position = {},\r\n zoomLevel: number = 18,\r\n pid: string;\r\n let markerObj = [];\r\n\r\n if (event.currentTarget) {\r\n target = event.currentTarget;\r\n let parent = target.parentElement;\r\n pid = parent.getAttribute('data-pid');\r\n pharmacyItem = this.listSelector.querySelector(`[data-pid='${pid}']`);\r\n event.preventDefault();\r\n }\r\n else {\r\n pid = event;\r\n pharmacyItem = this.listSelector.querySelector(`[data-pid='${pid}']`);\r\n }\r\n\r\n position = {\r\n lat: parseFloat(pharmacyItem.getAttribute('lat')),\r\n lng: parseFloat(pharmacyItem.getAttribute('lng'))\r\n };\r\n\r\n\r\n markerObj = this.pharmacyFinder.markers.filter((item) => {\r\n return item.id == pid;\r\n });\r\n\r\n this.resetMarkersIcons()\r\n\r\n if (pharmacyItem) {\r\n this.scrollToItem(pharmacyItem);\r\n\r\n if (hasClass(pharmacyItem, 'show-details')) {\r\n this.setDefaultMarkerIcon(markerObj[0]);\r\n removeClassFromList(expandedPharmacyItems, 'show-details');\r\n\r\n }\r\n\r\n else {\r\n this.setMapToCenter(position, zoomLevel);\r\n this.setActiveMarkerIcon(markerObj[0]);\r\n removeClassFromList(expandedPharmacyItems, 'show-details');\r\n pharmacyItem.classList.add('show-details');\r\n\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Pharmacy Finder',\r\n eventAction: 'View Pharmacy',\r\n eventLabel: undefined,\r\n eventNonInteraction: false\r\n });\r\n\r\n //GA4 Pharmacy Finder click\r\n window.dataLayer.push({\r\n event: \"ga4_event\", \r\n event_name: \"pharmacy_finder_click\",\r\n pharmacy_name: pharmacyItem.querySelector(\".name\") ? pharmacyItem.querySelector(\".name\").innerHTML : null,\r\n _clear: true\r\n });\r\n }\r\n }\r\n\r\n if (Eucerin.isMobile) {\r\n this.closePharmacyExpander();\r\n this.showPharmacyItemExpanded(pharmacyItem);\r\n }\r\n }\r\n\r\n resetMarkersIcons() {\r\n for (var i = 0; i < this.pharmacyFinder.markers.length; i++) {\r\n this.pharmacyFinder.markers[i].setIcon(this.pharmacyFinder.pharmacyTypes.Icon);\r\n }\r\n }\r\n\r\n setActiveMarkerIcon(marker) {\r\n marker.setIcon(this.pharmacyFinder.pharmacyTypes.ActiveIcon);\r\n }\r\n\r\n setDefaultMarkerIcon(marker) {\r\n marker.setIcon(this.pharmacyFinder.pharmacyTypes.Icon);\r\n }\r\n\r\n private setMapToCenter(pos, zoom): void {\r\n this.map.setCenter(pos);\r\n this.map.setZoom(zoom);\r\n }\r\n\r\n private showPharmacyItemExpanded(i: HTMLElement): void {\r\n var pharmacyItemMarkup = `
\r\n
\r\n ${i.querySelector('.text-visible').textContent}\r\n ${i.querySelector('.text-collapse').textContent}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
${i.querySelector('.name').textContent}
\r\n ${i.querySelector('.address').textContent}\r\n
\r\n ${i.querySelector('.wrapper').innerHTML}\r\n
\r\n
\r\n ${i.querySelector('.details').innerHTML}\r\n
\r\n
`;\r\n\r\n if (this.pharmacyWrapperMobile) {\r\n setTimeout(() => {\r\n this.pharmacyWrapperMobile.innerHTML = pharmacyItemMarkup;\r\n this.pharmacyWrapperMobile.classList.add('expand-visible-area');\r\n this.addExpanderHandlersMobile();\r\n }, 300);\r\n }\r\n }\r\n\r\n private addExpanderHandlersMobile() {\r\n let toggleBtn = this.pharmacyWrapperMobile.querySelector('.toggle-btn');\r\n\r\n toggleBtn.addEventListener('click', (event) => {\r\n const target = event.currentTarget,\r\n parentDiv = target.parentElement;\r\n\r\n event.preventDefault()\r\n event.stopPropagation();\r\n\r\n if (hasClass(this.pharmacyWrapperMobile, 'expand-fullheight')) {\r\n removeClass(parentDiv, 'show-details');\r\n removeClass(this.pharmacyWrapperMobile, 'expand-fullheight');\r\n }\r\n else {\r\n parentDiv.classList.add('show-details');\r\n this.pharmacyWrapperMobile.classList.add('expand-fullheight');\r\n }\r\n });\r\n }\r\n\r\n private scrollToItem(pharmacyItem: HTMLElement): void {\r\n const mapListCont = document.querySelector('.pharmacy-list-wrapper'),\r\n goTo = pharmacyItem.offsetTop - mapListCont.offsetTop;\r\n\r\n if (!isInViewPort(pharmacyItem)) {\r\n scrollToElement(mapListCont, goTo, 600)\r\n }\r\n }\r\n\r\n public rebuildList(data) {\r\n this.map.markers = data;\r\n this.listElements = '';\r\n this.listSelector.innerHTML = '';\r\n\r\n this.closePharmacyExpander();\r\n this.buildList();\r\n this.openClickedPharmacyItem();\r\n }\r\n\r\n public closePharmacyExpander() {\r\n if (this.pharmacyWrapperMobile) {\r\n removeClass(this.pharmacyWrapperMobile, 'expand-visible-area');\r\n this.pharmacyWrapperMobile.innerHTML = '';\r\n }\r\n\r\n }\r\n\r\n openRoute(event) {\r\n event.preventDefault();\r\n const target = event.currentTarget;\r\n this.routeTo(target.getAttribute('data-route'));\r\n\r\n //GA4 Pharmacy Finder direction\r\n window.dataLayer.push({\r\n event: \"ga4_event\", \r\n event_name: \"pharmacy_finder_direction\",\r\n pharmacy_name: target && target.previousElementSibling ? target.previousElementSibling.innerHTML: null,\r\n _clear: true\r\n });\r\n }\r\n\r\n routeTo(destAddr) {\r\n let markerPosition = this.pharmacyFinder.positionMarker,\r\n params = {\r\n origin: markerPosition.getPosition().lat() + ',' + markerPosition.getPosition().lng(),\r\n destination: destAddr,\r\n },\r\n urlParams = Object.keys(params).map(key => key + '=' + params[key]).join('&');\r\n\r\n window.open('https://www.google.com/maps/dir/?api=1&' + encodeURI(urlParams), '_blank');\r\n }\r\n\r\n openClickedPharmacyItem() {\r\n let clickedMarkerId = this.pharmacyFinder.clickedMarkerId;\r\n let pharmacyItem = this.listSelector.querySelector(`[data-pid='${clickedMarkerId}'] .toggle-btn`);\r\n\r\n if (clickedMarkerId && clickedMarkerId) {\r\n pharmacyItem.click();\r\n }\r\n }\r\n}\r\n","import { isEmpty, removeClass, addClass, createListItem, hasClass } from \"../helpers/DOMHelpers\";\r\n\r\nimport PharmacyFinder from \"./PharmacyFinder\";\r\n\r\nexport default class GMapSearch {\r\n pharmacyFinder: PharmacyFinder;\r\n element: HTMLElement;\r\n map: any;\r\n geoCoder: google.maps.Geocoder;\r\n location: google.maps.LatLng;\r\n searchFlyout: HTMLElement;\r\n executeReq: any;\r\n searchInput: HTMLInputElement;\r\n locationBtn: HTMLElement;\r\n static savedSearchedInput: string = '';\r\n static savedSearchResultCoord: {\r\n lat,\r\n lng\r\n };\r\n\r\n\r\n\r\n constructor(pharmacyFinder, element: HTMLElement, map) {\r\n this.element = element;\r\n this.map = map;\r\n this.pharmacyFinder = pharmacyFinder;\r\n this.searchFlyout = this.element.querySelector('.cp-pharmacy-finder_search-flyout');\r\n this.searchInput = this.element.querySelector('input');\r\n this.geoCoder = new google.maps.Geocoder();\r\n this.locationBtn = this.element.querySelector('.cp-pharmacy_location-icon');\r\n\r\n if (this.searchInput) {\r\n this.searchInput.addEventListener('keyup', (event: Event) => {\r\n var target: HTMLInputElement = event.target,\r\n searchedValue = target.value;\r\n\r\n if (isEmpty(searchedValue)) {\r\n GMapSearch.savedSearchedInput = '';\r\n this.closeSearchFlyout();\r\n return;\r\n }\r\n\r\n if (searchedValue && searchedValue.length) {\r\n this.submitRequest(event);\r\n this.showSearchFlyout();\r\n }\r\n });\r\n\r\n this.searchInput.addEventListener('focus', (event) => {\r\n var target: HTMLInputElement = event.target,\r\n searchedValue = target.value;\r\n\r\n if (searchedValue) {\r\n this.showSearchFlyout();\r\n }\r\n });\r\n\r\n this.searchInput.addEventListener('paste', (event) => {\r\n let pasteVal = (event.clipboardData || window.clipboardData).getData('text');\r\n this.searchInput.value = pasteVal\r\n event.preventDefault();\r\n });\r\n }\r\n\r\n\r\n document.addEventListener(\"click\", (event) => this.closeSearchFlyoutOnClickOut());\r\n }\r\n\r\n closeSearchFlyoutOnClickOut() {\r\n var flyoutElement = this.element.querySelector('.cp-pharmacy-finder_search'),\r\n targetElement = event.target;\r\n\r\n do {\r\n if (targetElement == flyoutElement) {\r\n return;\r\n }\r\n\r\n targetElement = (targetElement).parentNode;\r\n } while (targetElement);\r\n\r\n\r\n if (this.searchFlyout && hasClass(this.searchFlyout, 'visible')) {\r\n this.hideSearchFlyout();\r\n }\r\n }\r\n\r\n showSearchFlyout(): void {\r\n addClass(this.searchFlyout, 'visible');\r\n }\r\n\r\n submitRequest(event): void {\r\n var notAllowedKeys = event.ctrlKey == true && (event.which == '118' || event.which == '86') ||\r\n (event.which == '37' || event.which == '38' || event.which == '37' || event.which == '38' || event.which == '39' || event.which == '40');\r\n\r\n if (!notAllowedKeys) {\r\n GMapSearch.savedSearchedInput = this.searchInput.value;\r\n\r\n if (this.executeReq !== null) {\r\n clearTimeout(this.executeReq);\r\n }\r\n\r\n this.executeReq = setTimeout(() => {\r\n this.geocodeAddress();\r\n this.executeReq = null;\r\n this.cleanSearchResults();\r\n }, 500);\r\n }\r\n }\r\n\r\n closeSearchFlyout(): void {\r\n this.hideSearchFlyout();\r\n this.cleanSearchResults();\r\n }\r\n\r\n geocodeAddress() {\r\n let country = this.pharmacyFinder.element.getAttribute('data-country');\r\n this.geocodeAddressInternal(country);\r\n }\r\n\r\n geocodeAddressInternal(country) {\r\n this.geoCoder.geocode({\r\n address: this.searchInput.value,\r\n componentRestrictions: {\r\n country: country\r\n }\r\n }, this.geocodeAddressCallback());\r\n }\r\n\r\n\r\n geocodeAddressCallback(): (results, status) => void {\r\n return (results, status) => {\r\n if (status === 'OK') {\r\n let filterResult = results.find(result => result.types.some(type => type === 'political' || type === 'postal_code' || type === 'route' || type === 'establishment'));\r\n if (filterResult) {\r\n this.buildSuggestionList(filterResult);\r\n // this.nothingFoundCallback(); // switch to next country\r\n }\r\n else {\r\n this.nothingFoundCallback();\r\n }\r\n } else {\r\n this.nothingFoundCallback();\r\n }\r\n }\r\n }\r\n\r\n cleanSearchResults(): void {\r\n this.searchFlyout.querySelector('ul').innerHTML = '';\r\n }\r\n\r\n buildSuggestionList(results): void {\r\n const ul = this.searchFlyout.querySelector('ul'),\r\n noResItem = ul.querySelector('.no-results');\r\n let li = createListItem('search-result');\r\n\r\n if (noResItem) {\r\n noResItem.remove();\r\n };\r\n\r\n li.dataset.location = results.geometry.location;\r\n li.textContent = results.formatted_address;\r\n\r\n ul.appendChild(li);\r\n\r\n li.addEventListener('click', (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n let target = event.currentTarget,\r\n location = target.getAttribute('data-location');\r\n\r\n this.pharmacyFinder.searchInputVal = target.textContent;\r\n this.searchInput.value = target.textContent;\r\n\r\n if (this.map.getDiv().id === \"map\") {\r\n GMapSearch.savedSearchResultCoord = this.extractAddress(location);\r\n GMapSearch.savedSearchedInput = this.searchInput.value;\r\n\r\n window.location.hash = 'layer=pharmacy-finder';\r\n\r\n } else {\r\n this.setMapToAddress(location);\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Pharmacy Finder',\r\n eventAction: 'Search',\r\n eventLabel: undefined,\r\n eventNonInteraction: false\r\n });\r\n\r\n //GA4 Pharmacy Search\r\n window.dataLayer.push({\r\n event: 'ga4_event',\r\n event_name: 'pharmacy_finder_search',\r\n pharmacy_search_term: `${target.innerText}`,\r\n _clear: true\r\n });\r\n }\r\n\r\n this.hideSearchFlyout();\r\n });\r\n }\r\n\r\n hideSearchFlyout(): void {\r\n removeClass(this.searchFlyout, 'visible');\r\n }\r\n\r\n extractAddress(location) {\r\n let latitude, longitude,\r\n locationProps = location.replace(/[() ]/g, ''),\r\n newString = locationProps.split(',');\r\n\r\n latitude = newString[0];\r\n longitude = newString[1];\r\n\r\n latitude.replace(/\"/g, \"\");\r\n longitude.replace(/\"/g, \"\");\r\n\r\n return {\r\n lat: parseFloat(latitude),\r\n lng: parseFloat(longitude)\r\n }\r\n }\r\n\r\n setMapToAddress(location): void {\r\n let poss = this.extractAddress(location),\r\n position = new google.maps.LatLng(poss.lat, poss.lng);\r\n let mapSelector = this.pharmacyFinder.popupMap;\r\n this.map.setCenter(position);\r\n this.map.setZoom(14);\r\n this.pharmacyFinder.markPosition(mapSelector, position);\r\n }\r\n\r\n nothingFoundCallback() {\r\n const ul = this.searchFlyout.querySelector('ul'),\r\n li = `
  • No Results found
  • `;\r\n ul.innerHTML = li;\r\n }\r\n}\r\n\r\n","/// \r\n/// \r\nimport PharmacyFinder from \"./PharmacyFinder\";\r\nimport { removeClass, addClass } from \"../helpers/DOMHelpers\";\r\n\r\nexport default class GMapLocation {\r\n pharmacyFinder: PharmacyFinder;\r\n isGpsActivated: boolean;\r\n\r\n constructor(classSelector) {\r\n this.pharmacyFinder = classSelector;\r\n this.isGpsActivated = false;\r\n }\r\n\r\n initLocationSettings(map) {\r\n const pharmacyLayer = document.querySelector('.pharmacy-finder-layer'),\r\n zoom = 14;\r\n let locationBtn = pharmacyLayer.querySelector('.cp-pharmacy-finder_wrapper-icons');\r\n\r\n if (locationBtn) {\r\n locationBtn.addEventListener('click', (event) => {\r\n let target = event.currentTarget;\r\n event.preventDefault();\r\n\r\n if (navigator.geolocation && !this.isGpsActivated) {\r\n navigator.geolocation.getCurrentPosition((position: Position) =>\r\n this.autolocateSuccess(map, target, position, zoom),\r\n (error: PositionError) =>\r\n this.autolocateFallback(map, error, zoom));\r\n } else {\r\n removeClass(target, 'gps-active');\r\n this.isGpsActivated = false;\r\n this.pharmacyFinder.removeMarkedPosition(this.pharmacyFinder);\r\n }\r\n });\r\n };\r\n }\r\n\r\n autolocateSuccess(map, target: HTMLElement, position: Position, zoom: number) {\r\n const coord = {\r\n lat: +position.coords.latitude,\r\n lng: +position.coords.longitude\r\n };\r\n\r\n this.autoLocate(map, coord, zoom, this.pharmacyFinder.pharmacyTypes.UserLocationIcon);\r\n addClass(target, 'gps-active');\r\n this.isGpsActivated = true;\r\n }\r\n\r\n autolocateFallback(map, error: PositionError, zoom: number) {\r\n console.log(\"autolocation error: \", error.code, error.message);\r\n\r\n // 0: unknown error\r\n // 1: permission denied\r\n // 2: position unavailable (error response from location provider)\r\n // 3: timed out\r\n\r\n var coord: google.maps.LatLngLiteral = {\r\n lat: parseFloat(this.pharmacyFinder.element.getAttribute('data-default-lat')),\r\n lng: parseFloat(this.pharmacyFinder.element.getAttribute('data-default-lng'))\r\n };\r\n\r\n this.autoLocate(map, coord, zoom);\r\n\r\n // addClass(target, 'gps-active');\r\n // this.isGpsActivated = true;\r\n }\r\n\r\n autoLocate(map, coord, zoom?, customIconUrl?) {\r\n this.pharmacyFinder.markPosition(map, coord, customIconUrl);\r\n\r\n if (map) {\r\n map.setCenter(coord);\r\n\r\n if (zoom) {\r\n map.setZoom(zoom);\r\n }\r\n }\r\n }\r\n}","/// \r\n/// \r\n\r\nconst moduleSelector = '[data-module=\"PharmacyFinder\"]';\r\nimport MarkerClusterer from \"@google/markerclusterer\";\r\nimport GMapList from './GMapList';\r\nimport GMapSearch from './GMapSearch';\r\nimport GMapLocation from \"./GmapLocation\";\r\nimport SelectChoices from \"./SelectChoices\";\r\n\r\nimport { createElementFromString, removeClassFromList, hasClass, isObject, isArray } from '../helpers/DOMHelpers';\r\nimport { gMapStyles } from '../helpers/gMapHelpers';\r\nimport { isIOS } from \"../helpers/helperFunctions\";\r\nimport { isEmpty } from \"../helpers/DOMHelpers\";\r\n\r\nexport default class PharmacyFinder {\r\n close: any;\r\n popupMap: any;\r\n state: any;\r\n xhr: XMLHttpRequest;\r\n markerClusterer: MarkerClusterer;\r\n lastBounds: number[];\r\n markers: any[];\r\n clickedMarkerId: number;\r\n positionMarker: google.maps.Marker;\r\n currentPosition: google.maps.LatLng;\r\n mapList: any;\r\n pharmacyTypes: pharmacyTypes = {};\r\n defaultPharmacyTypes: pharmacyTypes = {};\r\n isFarmacyFinderPDP: boolean;\r\n location: GMapLocation;\r\n searchInputVal: string;\r\n GMapSearch: GMapSearch;\r\n optionsMarkup: string;\r\n promotionId: string;\r\n optionsWrapper: any;\r\n promotionOptions: any;\r\n isExecutedOnce: boolean = false;\r\n defaultChoicesValue;\r\n defaultChoices;\r\n hashPromotionDelimiter: string;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new PharmacyFinder();\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element?: HTMLElement) {\r\n this.promotionId = '';\r\n this.hashPromotionDelimiter = '.';\r\n\r\n this.xhr = new XMLHttpRequest();\r\n this.lastBounds = [0, 0, 0, 0];\r\n this.state = {\r\n mobileVersion: Eucerin.isMobile\r\n }\r\n\r\n this.loadFarmacyTypesData();\r\n this.loadFarmacyPromotion();\r\n this.clickedMarkerId = null;\r\n \r\n this.openPharmacyFinderLayer();\r\n\r\n this.location = new GMapLocation(this);\r\n\r\n document.addEventListener('Eucerin:deviceChanged', () => this.onDeviceChanged());\r\n\r\n }\r\n\r\n private loadFarmacyTypesData() {\r\n this.pharmacyTypes = {}\r\n this.defaultPharmacyTypes = {\r\n Icon: `${window.location.origin}/dist/Eucerin/_/img/pharmacyfinder/pharmacy.png`,\r\n ActiveIcon: `${window.location.origin}/dist/Eucerin/_/img/pharmacyfinder/pin-universal-active.png`,\r\n ClusterIcon: `${window.location.origin}/dist/Eucerin/_/img/pharmacyfinder/cluster.png`,\r\n UserLocationIcon: `${window.location.origin}/dist/Eucerin/_/img/pharmacyfinder/GPS-Location.png`,\r\n Title: 'Pharmacy',\r\n Type: 'Pharmacy'\r\n }\r\n\r\n if (isObject(window.pharmacyFinderTypes[0])) {\r\n const keys = Object.keys(window.pharmacyFinderTypes[0])\r\n\r\n keys.forEach((key) => {\r\n let keyValue = window.pharmacyFinderTypes[0][key];\r\n if (keyValue == null) {\r\n this.pharmacyTypes[key] = this.defaultPharmacyTypes[key];\r\n return;\r\n }\r\n this.pharmacyTypes[key] = keyValue;\r\n });\r\n }\r\n\r\n if (isArray(window.pharmacyFinderTypes[0])) {\r\n this.pharmacyTypes = this.defaultPharmacyTypes;\r\n }\r\n }\r\n\r\n private loadFarmacyPromotion() {\r\n const hash = window.location.hash;\r\n\r\n if (hash.includes(this.hashPromotionDelimiter)) {\r\n this.promotionId = hash.split(this.hashPromotionDelimiter)[1].toLowerCase();\r\n }\r\n\r\n this.updateOptionsWrapper()\r\n\r\n window.addEventListener(\"popstate\", () => {\r\n this.updateOptionsWrapper();\r\n });\r\n }\r\n\r\n private updateOptionsWrapper() {\r\n this.optionsMarkup = '';\r\n this.optionsWrapper = '';\r\n\r\n const farmacyPromotions = window.pharmacyFinderPromotions;\r\n\r\n if (farmacyPromotions) {\r\n farmacyPromotions.forEach((el) => {\r\n const subId = el.subId,\r\n title = el.title;\r\n this.optionsMarkup += this.createOptions(subId, title);\r\n });\r\n\r\n this.optionsWrapper = `\r\n \r\n `;\r\n }\r\n }\r\n\r\n createOptions(subId, title) {\r\n let selected = false;\r\n const hash = location.hash;\r\n if (subId && hash.match(/layer=pharmacy-finder/g) && hash.includes(this.hashPromotionDelimiter)) {\r\n selected = hash.split(this.hashPromotionDelimiter)[1].toLowerCase() === subId.toLowerCase();\r\n }\r\n return ``;\r\n }\r\n\r\n initMapOnLayer() {\r\n let _pharmacyFinder = this;\r\n this.lastBounds = [0, 0, 0, 0];\r\n const selectChoices = document.querySelector('.promotion-wrapper') as HTMLElement;\r\n new SelectChoices(selectChoices);\r\n\r\n if (this.promotionId) {\r\n selectChoices.classList.add('show-clear');\r\n }\r\n\r\n setTimeout(() => {\r\n const layerMapSelector = document.querySelector('.layer.pharmacy-finder-layer');\r\n this.popupMap = new google.maps.Map(document.getElementById('layer-map'), this.mapOptions());\r\n this.iniEvendHandlersOnMap(this.popupMap);\r\n this.markerClusterer = new MarkerClusterer(this.popupMap, [], this.clusterOptions());\r\n this.mapList = new GMapList(_pharmacyFinder, this.popupMap, '#maplist');\r\n this.markPosition(this.popupMap);\r\n this.location.initLocationSettings(this.popupMap);\r\n this.GMapSearch = new GMapSearch(this, document.querySelector('.pharmacy-finder-layer'), this.popupMap);\r\n const searchInput = layerMapSelector.querySelector('.cp-pharmacy-finder_search input');\r\n // searchInput.value = GMapSearch.savedSearchedInput;\r\n this.defaultChoices = document.querySelector(\".pharmacy-finder-layer .choices__item.choices__item--choice:first-of-type\");\r\n\r\n if (this.defaultChoices) {\r\n this.defaultChoicesValue = this.defaultChoices.innerHTML;\r\n }\r\n\r\n if (GMapSearch.savedSearchResultCoord) {\r\n let { lat, lng } = GMapSearch.savedSearchResultCoord;\r\n if (lat || lng) {\r\n this.location.autoLocate(this.popupMap, new google.maps.LatLng(lat, lng), null);\r\n }\r\n\r\n GMapSearch.savedSearchResultCoord = {\r\n lat: null,\r\n lng: null\r\n }\r\n\r\n GMapSearch.savedSearchedInput = '';\r\n }\r\n\r\n google.maps.event.addListener(this.popupMap, 'click', () => {\r\n this.mapList.closePharmacyExpander();\r\n });\r\n\r\n this.attachCloseBtnHandler();\r\n this.promotionOptions = document.querySelector('.select-promotions');\r\n\r\n if (this.promotionOptions) {\r\n this.changePromotionValue(this.popupMap);\r\n }\r\n\r\n searchInput.dispatchEvent(new KeyboardEvent('keyup', { 'key': 'enter' }));\r\n }, 500);\r\n\r\n if (Eucerin.isMobile) {\r\n const pharmacyTab = document.querySelector('.pharmacy-tab'),\r\n tabTitle = pharmacyTab.querySelectorAll('.tab-nav li'),\r\n tabContent = pharmacyTab.querySelectorAll('.uk-switcher li');\r\n tabTitle.forEach(element => {\r\n element.addEventListener('click', (event: Event) => {\r\n event.preventDefault;\r\n let target = event.currentTarget,\r\n tabId = target.getAttribute('id'),\r\n activeTabcontent = pharmacyTab.querySelector(`${tabId}`);\r\n\r\n if (hasClass(target, 'uk-active')) {\r\n return;\r\n }\r\n\r\n removeClassFromList(tabTitle, 'uk-active');\r\n target.classList.add('uk-active');\r\n\r\n removeClassFromList(tabContent, 'uk-active');\r\n activeTabcontent.classList.add('uk-active');\r\n });\r\n });\r\n }\r\n }\r\n\r\n cleanLayerMarkup(): void {\r\n this.element.querySelector('#map').remove();\r\n this.element.querySelector('.cp-pharmacy-finder__header').remove();\r\n }\r\n\r\n iniEvendHandlersOnMap(target) {\r\n google.maps.event.addListener(target, 'idle', () => this.idle(target));\r\n google.maps.event.addListener(target, 'zoom_changed', () => this.zoomChanged(target));\r\n }\r\n\r\n openPharmacyFinderLayer() {\r\n let markup = this.getParmacyFinderMarkUp();\r\n let hash = window.location.href;\r\n this.element.closest('.layer-overlay__content') ? this.element.closest('.layer-overlay__content').innerHTML = markup : \"\";\r\n this.initMapOnLayer();\r\n window.Eucerin.initModules();\r\n localStorage.removeItem(\"pfSearchValue\");\r\n\r\n this.state.mobileVersion = Eucerin.isMobile;\r\n if (hash.match(/pdpBtn/gi)) {\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Pharmacy Finder',\r\n eventAction: 'Open',\r\n eventLabel: 'Product Details Link',\r\n eventNonInteraction: false\r\n });\r\n }\r\n }\r\n\r\n changePromotionValue = (mapSelector) => {\r\n this.promotionOptions.addEventListener('change', (e) => {\r\n var bounds: number[] = this._getBounds(1000, mapSelector) || this.lastBounds;\r\n const target = e.target;\r\n const getCurrentHash = window.location.hash.split(this.hashPromotionDelimiter);\r\n let newHash;\r\n\r\n this.promotionId = target.value;\r\n newHash = `${getCurrentHash[0]}${this.hashPromotionDelimiter}${this.promotionId}`;\r\n window.history.pushState({}, '', newHash);\r\n\r\n if (this.promotionId === 'null') {\r\n this.promotionId = '';\r\n newHash = `${getCurrentHash[0]}`;\r\n window.history.pushState({}, '', newHash);\r\n const dropdownEl = target.closest(\".choices__inner\").querySelector(\".choices__item\") as HTMLElement;\r\n dropdownEl.innerText = this.defaultChoicesValue;\r\n }\r\n\r\n if (mapSelector.getCenter()) {\r\n this.loadStores(mapSelector);\r\n this.loadDataWithParams({\r\n boundNorthEast: bounds.slice(0, 2).join(),\r\n boundSouthWest: bounds.slice(2, 4).join(),\r\n mapSelector: mapSelector\r\n });\r\n }\r\n })\r\n }\r\n\r\n loadStores(mapSelector: any, args?: any) {\r\n var bounds: number[] = this._getBounds(1000, mapSelector) || this.lastBounds;\r\n\r\n if (\r\n this.lastBounds[0] >= bounds[0]\r\n && this.lastBounds[1] >= bounds[1]\r\n && this.lastBounds[2] <= bounds[2]\r\n && this.lastBounds[3] <= bounds[3]\r\n ) {\r\n return;\r\n }\r\n\r\n this.lastBounds = bounds;\r\n\r\n this.loadDataWithParams({\r\n boundNorthEast: bounds.slice(0, 2).join(),\r\n boundSouthWest: bounds.slice(2, 4).join(),\r\n mapSelector: mapSelector\r\n });\r\n }\r\n\r\n _getBounds(areasize, mapSelector): number[] {\r\n var gmapBounds: google.maps.LatLngBounds = mapSelector.getBounds(),\r\n northEast: google.maps.LatLng,\r\n southWest: google.maps.LatLng;\r\n\r\n if (!gmapBounds)\r\n return null;\r\n\r\n northEast = gmapBounds.getNorthEast();\r\n southWest = gmapBounds.getSouthWest();\r\n\r\n return [\r\n Math.ceil(northEast.lat() * areasize) / areasize,\r\n Math.ceil(northEast.lng() * areasize) / areasize,\r\n Math.floor(southWest.lat() * areasize) / areasize,\r\n Math.floor(southWest.lng() * areasize) / areasize\r\n ];\r\n }\r\n\r\n _contains(lat: number, lng: number, bounds: number[]): boolean {\r\n if (lat >= bounds[2] && lat <= bounds[0] && lng >= bounds[3] && lng <= bounds[1]) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n loadDataWithParams(args: any) {\r\n this.xhr = new XMLHttpRequest();\r\n const getUrl = this.element.getAttribute('data-get-shops-url') + `&boundSouthWest=${args.boundSouthWest}&boundNorthEast=${args.boundNorthEast}&subid=${this.promotionId}`;\r\n\r\n this.xhr.onload = () => {\r\n if (this.xhr.status >= 200 && this.xhr.status < 300) {\r\n const json = JSON.parse(this.xhr.response);\r\n this.requestSuccess(json, args.mapSelector);\r\n } else {\r\n this.requestError(this.xhr);\r\n }\r\n };\r\n\r\n this.xhr.open('GET', getUrl);\r\n this.xhr.send();\r\n }\r\n\r\n requestSuccess(json: ICommerceConnectorJSON, mapSelector: any) {\r\n json = this.preProcessResponse(json);\r\n this.updateMarkers(json, mapSelector);\r\n\r\n if (json.error) {\r\n console.log(\"json error\")\r\n }\r\n else if (json.message) {\r\n console.log(\"json message\")\r\n }\r\n else {\r\n this.updateMarkers(json, mapSelector);\r\n }\r\n }\r\n\r\n updateMarkers(data, mapSelector) {\r\n this.markers = [];\r\n this.createMarkers(data);\r\n this.renderMarkers(mapSelector);\r\n\r\n if (this.mapList) {\r\n this.mapList.rebuildList(data);\r\n this.clickedMarkerId = null\r\n }\r\n }\r\n\r\n requestError(xhr: any, textStatus?: string) {\r\n console.log(\"xhr request failed: \", xhr);\r\n }\r\n\r\n preProcessResponse(json) {\r\n if (json == null || typeof json !== 'object') {\r\n return {\r\n error: true,\r\n message: 'unknown'\r\n };\r\n }\r\n return json;\r\n }\r\n\r\n filterDublicatedItems(data: IStore[]) {\r\n let result = data.reduce((unique, o) => {\r\n if (!unique.some((obj) => obj.Latitude === o.Latitude && obj.Longitude === o.Longitude)) {\r\n unique.push(o);\r\n }\r\n return unique;\r\n }, []);\r\n return result;\r\n }\r\n\r\n createMarkers(data: IStore[]) {\r\n const pharmacyItems = this.filterDublicatedItems(data);\r\n pharmacyItems.forEach(element => {\r\n var icon = {\r\n url: this.pharmacyTypes.Icon,\r\n size: new google.maps.Size(34, 40),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(0, 40)\r\n };\r\n\r\n this.markers.push(new google.maps.Marker({\r\n position: new google.maps.LatLng(element.Latitude, element.Longitude),\r\n icon: icon,\r\n id: element.Id\r\n }));\r\n });\r\n }\r\n\r\n renderMarkers(mapSelector) {\r\n var mapDiv = mapSelector.getDiv(),\r\n mapID = mapDiv.id;\r\n\r\n for (var i = 0; i < this.markers.length; i++) {\r\n const markerItem = this.markers[i];\r\n google.maps.event.addListener(markerItem, 'click', (event) => {\r\n this.attachMarkerClickHandler(markerItem, mapID);\r\n });\r\n }\r\n\r\n this.markerClusterer.clearMarkers();\r\n this.markerClusterer.addMarkers(this.markers, false);\r\n }\r\n\r\n private attachMarkerClickHandler(markerItem, mapID): void {\r\n if (mapID === 'map') {\r\n this.clickedMarkerId = markerItem.id;\r\n this.openPharmacyFinderLayer();\r\n\r\n }\r\n else {\r\n if (this.mapList) {\r\n this.mapList.showPharmacyDetails(markerItem.id);\r\n }\r\n }\r\n }\r\n\r\n\r\n onDeviceChanged() {\r\n if (this.state.mobileVersion != Eucerin.isMobile) {\r\n this.state.mobileVersion = Eucerin.isMobile;\r\n\r\n this.reRenderPharmacyContent();\r\n }\r\n }\r\n\r\n reRenderPharmacyContent() {\r\n let node = createElementFromString(`
    ${this.getParmacyFinderMarkUp()}
    `),\r\n pharmacyLayerContent = document.querySelector('.pharmacy-finder-layer .layer-overlay__content');\r\n\r\n if (!pharmacyLayerContent)\r\n return;\r\n pharmacyLayerContent.innerHTML = node.innerHTML;\r\n this.initMapOnLayer();\r\n }\r\n\r\n attachCloseBtnHandler() {\r\n const closeBtn = document.querySelector('.pharmacy-header .layer__close'),\r\n closeBtnLayer = document.querySelectorAll('.layer__close')[1];\r\n if (closeBtn || closeBtnLayer) {\r\n closeBtn.onclick = () => {\r\n closeBtnLayer.click();\r\n }\r\n }\r\n }\r\n\r\n\r\n getParmacyFinderMarkUp() {\r\n let template,\r\n searchPlaceholder = this.element.getAttribute('data-input-placeholder'),\r\n mapTabTitle = this.element.getAttribute('data-map-tab-title'),\r\n listTabTitle = this.element.getAttribute('data-list-tab-title'),\r\n searchValue = localStorage.getItem(\"pfSearchValue\")\r\n\r\n const locationIcon = `\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n `;\r\n\r\n const locationIconFilled = `\r\n \r\n \r\n \r\n \r\n \r\n `;\r\n\r\n if (Eucerin.isMobile) {\r\n template = `
    \r\n
    \r\n
    \r\n \r\n
    \r\n ${locationIcon}\r\n ${locationIconFilled}\r\n
    \r\n
    \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n ${this.optionsWrapper}\r\n
      \r\n
      \r\n
        \r\n
      • \r\n ${mapTabTitle}\r\n
      • \r\n
      • \r\n ${listTabTitle}\r\n
      • \r\n
      \r\n
        \r\n
      • \r\n
        \r\n
        \r\n
      • \r\n
      • \r\n
        \r\n
        \r\n
        \r\n
        \r\n
      • \r\n
      \r\n
      \r\n `\r\n } else {\r\n template = `
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n ${locationIcon}\r\n ${locationIconFilled}\r\n
      \r\n
      \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n \r\n ${this.optionsWrapper} \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        \r\n
        `\r\n }\r\n\r\n return template\r\n }\r\n\r\n markPosition(map, latLng?: google.maps.LatLng, IconUrl?: URL) {\r\n if (latLng && (latLng.lat || latLng.lng)) {\r\n this.currentPosition = latLng;\r\n } else {\r\n this.currentPosition = map.getCenter();\r\n }\r\n\r\n let icon = {\r\n url: IconUrl || 'https://maps.gstatic.com/mapfiles/api-3/images/spotlight-poi2.png',\r\n size: new google.maps.Size(34, 40),\r\n origin: new google.maps.Point(0, 0),\r\n anchor: new google.maps.Point(0, 40)\r\n };\r\n\r\n this.positionMarker = new google.maps.Marker({\r\n position: this.currentPosition,\r\n draggable: false,\r\n map: map,\r\n icon: icon\r\n });\r\n\r\n this.positionMarker.setPosition(this.currentPosition);\r\n }\r\n\r\n removeMarkedPosition(map) {\r\n this.positionMarker.setMap(map);\r\n this.positionMarker.setMap(null);\r\n }\r\n\r\n zoomChanged(mapSelector) {\r\n }\r\n\r\n idle(mapSelector) {\r\n if (mapSelector.getCenter()) {\r\n this.loadStores(mapSelector);\r\n }\r\n }\r\n\r\n mapOptions() {\r\n return {\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n center: {\r\n lat: parseFloat(this.element.getAttribute('data-default-lat')) || 53.553534,\r\n lng: parseFloat(this.element.getAttribute('data-default-lng')) || 9.992995,\r\n },\r\n minZoom: 11, // 10km\r\n zoom: 14,\r\n styles: gMapStyles,\r\n panControl: false,\r\n streetViewControl: false,\r\n zoomControl: false,\r\n mapTypeControl: false,\r\n scaleControl: true,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n // gestureHandling: 'greedy'\r\n }\r\n }\r\n\r\n clusterOptions() {\r\n return {\r\n averageCenter: true,\r\n gridSize: 40,\r\n styles: [{\r\n anchor: [6, 0],\r\n anchorIcon: [40, 0],\r\n fontFamily: 'Roboto',\r\n height: 46,\r\n url: this.pharmacyTypes.ClusterIcon,\r\n textColor: '#525252',\r\n textSize: 16,\r\n width: 34\r\n }]\r\n }\r\n }\r\n}\r\n\r\nnew PharmacyFinder.setup();"],"sourceRoot":""}