{"version":3,"sources":["MapScripts.js"],"names":["Promise","resolve","reject","fetch","body","JSON","stringify","method","headers","Accept","then","response","json","catch","error","result","console","log","initMap","markerClickedEvent","e","isMain","features","properties","firmId","prom","searchParams","MemberFirmID","toString","GetFirmData","document","getElementById","classList","remove","innerHTML","HtmlResults","calculateHeight","applyClicks","scrollToAnchorIDVanilla","jurisdictionId","jurisdictionID","GetFirmDataByJurisdiction","apiData","mapboxgl","supported","accessToken","mapData","data","newData","type","Offices","forEach","item","OfficeLat","OfficeLng","push","geometry","coordinates","id","OfficeId","title","OfficeCity","OfficeCountry","city","country","FirmId","SecondaryLocations","Lat","Lng","JurisdictionName","JurisdictionId","offices","SecondaryOffices","organiseDataIntoGeoJson","map","Map","container","style","center","zoom","maxZoom","minZoom","renderWorldCopies","attributionControl","cooperativeGestures","dragRotate","disable","touchZoomRotate","disableRotation","nav","NavigationControl","showCompass","addControl","fullscreen","FullscreenControl","selectedStateId","on","addSource","addLayer","source","paint","popup","Popup","closeButton","closeOnClick","maxWidth","offset","setFeatureState","selected","add","getCanvas","cursor","slice","description","setLngLat","setHTML","addTo","length","listData","main","secondary","secondaryOffices","office","allOffices","concat","sortedData","_","orderBy","lettersArray","lettersObject","letter","items","currentLetter","toLowerCase","find","firm","OfficeFirmName","firmUrl","FirmUrl","isSecondary","IsSecondary","sortDataIntoLettersArray","elList","elListHtmlString","group","state","querySelectorAll","header","addEventListener","targetId","target","getAttribute","toggle"],"mappings":"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","file":"../MapScripts.js","sourcesContent":["(() => {\r\n\r\n let apiData = null;\r\n let firmData = null;\r\n //const partialView = \"LexDirectoryResultRows\";\r\n const partialView = \"FirmResultBlock\";\r\n\r\n\r\n /*******************************/\r\n /**** CRAIG - DYNAMIC FETCH ****/\r\n /*******************************/\r\n const GetMapData = () => {\r\n return new Promise(function (resolve, reject) {\r\n\r\n\t\t\tconst searchParams = {};\r\n\t\t//\tfetch('/Umbraco/Surface/DirectorySearch/GetOffices', {\r\n\t\t\t\tfetch('/Umbraco/Surface/DirectorySearch/GetPrimarySecondaryOffices', {\r\n body: JSON.stringify(searchParams), method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n })\r\n .then(function (response) {\r\n //console.log('response : %o', response.json());\r\n resolve(response.json());\r\n })\r\n .catch(error => {\r\n //console.log('Failed', error);\r\n reject(error);\r\n });\r\n });\r\n };\r\n\t//\r\n const GetFirmData = (firmId) => { \r\n let searchParams = { MemberFirmID: firmId.toString() };\r\n //console.log('GetFirmData : %o', searchParams);\r\n return new Promise(function (resolve, reject) {\r\n\r\n fetch('/Umbraco/Surface/DirectorySearch/GetFirmDetailsPartial', {\r\n body: JSON.stringify(searchParams), method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n })\r\n .then(function (response) {\r\n //console.log('response : %o', response.json());\r\n resolve(response.json());\r\n })\r\n .catch(error => {\r\n //console.log('Failed', error);\r\n reject(error);\r\n });\r\n });\r\n\t};\r\n\tconst GetFirmDataByJurisdiction = (jurisdictionId) => {\r\n\t\tlet searchParams = { jurisdictionID: jurisdictionId.toString() };\r\n\t\t//console.log('GetFirmData : %o', searchParams);\r\n\t\treturn new Promise(function (resolve, reject) {\r\n\t\t\tfetch('/Umbraco/Surface/DirectorySearch/GetFirmDetailsByJurisdictionPartial', {\r\n\t\t\t\tbody: JSON.stringify(searchParams), method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n\t\t\t})\r\n\t\t\t\t.then(function (response) {\r\n\t\t\t\t\t//console.log('response : %o', response.json());\r\n\t\t\t\t\tresolve(response.json());\r\n\t\t\t\t})\r\n\t\t\t\t.catch(error => {\r\n\t\t\t\t\t//console.log('Failed', error);\r\n\t\t\t\t\treject(error);\r\n\t\t\t\t});\r\n\t\t});\r\n\t};\r\n /*\r\n const GetFirmData = (firmId) => {\r\n let searchParams = { MemberFirm: firmId.toString(), RecordsPerPage: 100, CurrentPage: 1, PartialView: partialView };\r\n //console.log('GetFirmData : %o', searchParams);\r\n return new Promise(function (resolve, reject) {\r\n\r\n fetch('/Umbraco/Surface/DirectorySearch/DoDirectorySearch', {\r\n body: JSON.stringify(searchParams), method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n })\r\n .then(function (response) {\r\n //console.log('response : %o', response.json());\r\n resolve(response.json());\r\n })\r\n .catch(error => {\r\n //console.log('Failed', error);\r\n reject(error);\r\n });\r\n });\r\n };\r\n */\r\n // Fetch map data \r\n const prom = GetMapData();\r\n prom.then(\r\n (result) => {\r\n console.log('Raw map data : %o', result);\r\n initMap(result);\r\n }\r\n );\r\n\r\n\r\n\r\n\r\n\r\n\t/*************************/\r\n\t/*** SORT DATA HELPERS ***/\r\n\t/*************************/\r\n\tconst sortDataIntoLettersArray = (data) => {\r\n\t//\tconst sortedData = _.orderBy(data.Offices, ['OfficeCountry', 'OfficeCity'], ['asc']);\r\n\t\tvar main = data.Offices; \r\n\t\tvar secondary = data.SecondaryLocations;\r\n\t\tvar secondaryOffices = [];\r\n\t\r\n\t\tsecondary.forEach((item) => {\r\n\t\t\tvar items = item.SecondaryOffices;\r\n\t\t\titems.forEach((office) => {\r\n\t\t\t\tsecondaryOffices.push(office);\r\n\t\t\t});\r\n\t\t});\r\n\t\tconst allOffices = main.concat(secondaryOffices);\r\n\t\tconst sortedData = _.orderBy(allOffices, ['OfficeCountry', 'OfficeCity'], ['asc']);\r\n\t\tconsole.log(\"SECONDARY OFFICES: %o\", secondaryOffices);\r\n\t\tconst lettersString = 'abcdefghijklmnopqrstuvwxyz';\r\n\t\tconst lettersArray = [...lettersString];\r\n\t\tconst lettersObject = [];\r\n\r\n\t\tlettersArray.forEach((letter) => {\r\n\t\t\tlettersObject.push({\r\n\t\t\t\tletter,\r\n\t\t\t\titems: [],\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tsortedData.forEach((item) => {\r\n\t\t\tconst currentLetter = item.OfficeCountry.slice(0, 1).toLowerCase();\r\n\t\t\tconst currentLetterObject = _.find(lettersObject, ['letter', currentLetter]);\r\n\t\t\tcurrentLetterObject.items.push({\r\n\t\t\t\tid: item.OfficeId,\r\n\t\t\t\tcountry: item.OfficeCountry,\r\n\t\t\t\tfirm: item.OfficeFirmName,\r\n\t\t\t\tcity: item.OfficeCity,\r\n\t\t\t\tfirmUrl: item.FirmUrl,\r\n\t\t\t\tisSecondary: item.IsSecondary \r\n //,state: item.State\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn lettersObject;\r\n\t};\r\n\r\n\tconst organiseDataIntoGeoJson = (data) => {\r\n\t\tconst newData = {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: [],\r\n\t\t};\r\n\r\n\t\tdata.Offices.forEach((item) => {\r\n\t\t\tif (!item.OfficeLat || !item.OfficeLng) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tnewData.features.push({\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tgeometry: { \r\n\t\t\t\t\ttype: 'Point',\r\n\t\t\t\t\tcoordinates: [item.OfficeLng, item.OfficeLat],\r\n\t\t\t\t},\r\n\t\t\t\tid: item.OfficeId,\r\n\t\t\t\tproperties: {\r\n\t\t\t\t\ttitle: `${item.OfficeCity} ${item.OfficeCountry}`,\r\n\t\t\t\t\tcity: item.OfficeCity,\r\n country: item.OfficeCountry,\r\n\t\t\t\t\tfirmId: item.FirmId,\r\n\t\t\t\t\tisMain : true\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t});\r\n\t\tdata.SecondaryLocations.forEach((item) => {\r\n\t\t\r\n\t\t\tif (!item.Lat || !item.Lng) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tnewData.features.push({\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tgeometry: {\r\n\t\t\t\t\ttype: 'Point',\r\n\t\t\t\t\tcoordinates: [item.Lng, item.Lat],\r\n\t\t\t\t},\r\n\t\t\t\tid: item.OfficeId,\r\n\t\t\t\tproperties: {\r\n\t\t\t\t\ttitle: `${item.JurisdictionName}`,\r\n\t\t\t\t\tcity: \"City\",\r\n\t\t\t\t\tcountry: \"Country\",\r\n\t\t\t\t\tjurisdictionId: item.JurisdictionId,\r\n\t\t\t\t\tisMain: false,\r\n\t\t\t\t\toffices: item.SecondaryOffices\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn newData;\r\n\t};\r\n\r\n\t/*************************/\r\n\t/**** MAP CLICK EVENTS ***/\r\n\t/*************************/\r\n\tconst mapClickedEvent = () => {\r\n\t\t//console.log('Clicked: Map');\r\n const elSelectedMarker = document.getElementById('marker-selected');\r\n elSelectedMarker.classList.add('hidden');\r\n\r\n //const elResults = document.getElementById('result-rows');\r\n //elResults.innerHTML = '';\r\n\t};\r\n\r\n const markerClickedEvent = (e) => {\r\n //console.log('Clicked: Marker : %o', e.features[0].properties );\r\n //elSelectedMarker.innerHTML = `

${e.features[0].properties.title} (${e.features[0].id})

`;\r\n\t\tlet isMain = e.features[0].properties.isMain;\r\n\t\t//if (!isMain) {\r\n\t\t//\talert(\"Secondary office clicked\");\r\n\t\t//}\r\n\t\tconsole.log(\"IS MAIN: %o\", isMain);\r\n\t\tlet firmId = e.features[0].properties.firmId;\r\n\t\t\r\n\t\t//let jurisdictionId = e.features[0].properties.jurisdictionId;\r\n //console.log(' Marker key : %o', firmId);\r\n\r\n if (firmId != \"0\" && isMain == true) {\r\n\t\t\tconst prom = GetFirmData(firmId);\r\n\t\t//\tconst prom = GetFirmDataByJurisdiction(jurisdictionId);\r\n prom.then(\r\n (result) => {\r\n //console.log('GetFirmData : %o', result);\r\n const elSelectedMarker = document.getElementById('marker-selected');\r\n elSelectedMarker.classList.remove('hidden');\r\n\r\n const elResults = document.getElementById('result-rows');\r\n elResults.innerHTML = result.HtmlResults;\r\n\r\n // From the accordion script\r\n calculateHeight();\r\n applyClicks();\r\n\r\n //document.querySelectorAll('.showHideMoreInfo').forEach((infoButton) => {\r\n // infoButton.addEventListener('click', function (e) {\r\n // e.preventDefault();\r\n // var ele = e.target;\r\n // ele.classList.toggle('color--inactive')\r\n // // console.log(ele)\r\n // var ele = ele.parentNode.parentNode.nextElementSibling;\r\n // // console.log(ele)\r\n // ele.classList.contains('hidden') ? ele.classList.remove('hidden') : ele.classList.add('hidden');\r\n // }.bind(this));\r\n //});\r\n\r\n scrollToAnchorIDVanilla('result-rows');\r\n }\r\n );\r\n\t\t} else if (isMain == false) {\r\n\t\t\tlet jurisdictionId = e.features[0].properties.jurisdictionId;\r\n\t\t\tconsole.log(\"J ID: %o\", jurisdictionId);\r\n\t\t\t//console.log(\"CLICKED: Secondary offices : %o\", e.features[0].offices)\r\n\t\t\tconst prom = GetFirmDataByJurisdiction(jurisdictionId);\r\n\t\t\tprom.then( \r\n\t\t\t\t(result) => {\r\n\t\t\t\t\t//console.log('GetFirmData : %o', result);\r\n\t\t\t\t\tconst elSelectedMarker = document.getElementById('marker-selected');\r\n\t\t\t\t\telSelectedMarker.classList.remove('hidden');\r\n\r\n\t\t\t\t\tconst elResults = document.getElementById('result-rows');\r\n\t\t\t\t\telResults.innerHTML = result.HtmlResults;\r\n\r\n\t\t\t\t\t// From the accordion script\r\n\t\t\t\t\tcalculateHeight();\r\n\t\t\t\t\tapplyClicks();\r\n\r\n\t\t\t\t\r\n\t\t\t\t\tscrollToAnchorIDVanilla('result-rows');\r\n\t\t\t\t}\r\n\t\t\t);\r\n }\r\n };\r\n\r\n\r\n\r\n\r\n\r\n\r\n const initMap = (apiData) => {\r\n\r\n //console.log('Init : %o', apiData);\r\n\r\n\t /*************************/\r\n\t /****** DESKTOP MAP ******/\r\n\t /*************************/\r\n\t if (typeof mapboxgl === 'undefined' || !mapboxgl.supported()) {\r\n\t\t console.log('ERROR: mapboxgl not loaded or supported');\r\n\t } else {\r\n\t\t mapboxgl.accessToken = 'pk.eyJ1IjoiZ3JhZW1lbWNjIiwiYSI6ImNsMHV1NzBxMjB3eTEzbG41MWw0NmdxdWEifQ.mJi3PrBzqUxwSUty0gIoQA';\r\n\r\n\t\t const mapData = organiseDataIntoGeoJson(apiData);\r\n\r\n\t\t const map = new mapboxgl.Map({\r\n\t\t\t container: 'crossborder-map',\r\n\t\t\t style: 'mapbox://styles/graememcc/cl446efw6003e15mncxv7iazc',\r\n\t\t\t center: [0, 30],\r\n\t\t\t zoom: 1.4,\r\n\t\t\t maxZoom: 9,\r\n\t\t\t minZoom: 1.4,\r\n\t\t\t renderWorldCopies: true,\r\n\t\t\t attributionControl: false,\r\n\t\t\t cooperativeGestures: true,\r\n\t\t\t // maxBounds: [\r\n\t\t\t // [-170, 70], // Southwest coordinates\r\n\t\t\t // [180, -50] // Northeast coordinates\r\n\t\t\t // ] // Set the map's geographical boundaries.\r\n\t\t\t // noWrap: true\r\n\t\t\t // {\r\n\t\t\t // // this map option disables world wrapping. by default, it is false.\r\n\t\t\t // continuousWorld: true,\r\n\t\t\t // // this option disables loading tiles outside of the world bounds.\r\n\t\t\t // noWrap: true\r\n\t\t\t // }\r\n\t\t });\r\n\r\n\t\t map.dragRotate.disable();\r\n\t\t map.touchZoomRotate.disableRotation();\r\n\r\n\t\t const nav = new mapboxgl.NavigationControl({ showCompass: false });\r\n\t\t map.addControl(nav, 'bottom-right');\r\n\r\n\t\t const fullscreen = new mapboxgl.FullscreenControl();\r\n\t\t map.addControl(fullscreen, 'top-right');\r\n\r\n\t\t let selectedStateId = null;\r\n\r\n\t\t map.on('load', () => {\r\n\t\t\t map.addSource('office-points', {\r\n\t\t\t\t type: 'geojson',\r\n\t\t\t\t data: mapData,\r\n\t\t\t });\r\n\t\t\t map.addLayer({\r\n\t\t\t\t id: 'office-circles',\r\n\t\t\t\t type: 'circle',\r\n\t\t\t\t source: 'office-points',\r\n\t\t\t\t paint: {\r\n\t\t\t\t\t 'circle-radius': 4,\r\n\t\t\t\t\t 'circle-stroke-width': 2,\r\n\t\t\t\t\t 'circle-stroke-color': '#ffffff',\r\n\t\t\t\t\t 'circle-stroke-opacity': 1.0,\r\n\t\t\t\t\t 'circle-color': [\r\n\t\t\t\t\t\t 'case',\r\n\t\t\t\t\t\t ['boolean', ['feature-state', 'selected'], false],\r\n\t\t\t\t\t\t '#ffffff',\r\n\t\t\t\t\t\t 'transparent',\r\n\t\t\t\t\t ],\r\n\t\t\t\t },\r\n\t\t\t });\r\n\t\t });\r\n\r\n\t\t const popup = new mapboxgl.Popup({\r\n\t\t\t closeButton: false,\r\n\t\t\t closeOnClick: false,\r\n\t\t\t maxWidth: 'none',\r\n\t\t\t offset: 3,\r\n\t\t });\r\n\r\n\t\t map.on('click', () => {\r\n\t\t\t popup.remove();\r\n\t\t\t if (selectedStateId !== null) {\r\n\t\t\t\t map.setFeatureState(\r\n\t\t\t\t\t { source: 'office-points', id: selectedStateId },\r\n\t\t\t\t\t { selected: false },\r\n\t\t\t\t );\r\n\t\t\t }\r\n\t\t\t selectedStateId = null;\r\n\r\n\t\t\t mapClickedEvent();\r\n\t\t });\r\n\r\n\t\t map.on('mouseenter', 'office-circles', (e) => {\r\n\t\t\t map.getCanvas().style.cursor = 'pointer';\r\n\t\t\t const coordinates = e.features[0].geometry.coordinates.slice();\r\n\t\t\t const description = e.features[0].properties.title;\r\n\t\t\t\t \r\n\t\t\t popup.setLngLat(coordinates).setHTML(description).addTo(map);\r\n\t\t });\r\n\r\n\t\t map.on('mouseleave', 'office-circles', () => {\r\n\t\t\t map.getCanvas().style.cursor = '';\r\n\t\t });\r\n\r\n\t\t map.on('click', 'office-circles', (e) => {\r\n\t\t\t if (e.features.length > 0) {\r\n\t\t\t\t if (selectedStateId !== null) {\r\n\t\t\t\t\t map.setFeatureState(\r\n\t\t\t\t\t\t { source: 'office-points', id: selectedStateId },\r\n\t\t\t\t\t\t { selected: false },\r\n\t\t\t\t\t );\r\n\t\t\t\t }\r\n\t\t\t\t selectedStateId = e.features[0].id;\r\n\t\t\t\t map.setFeatureState(\r\n\t\t\t\t\t { source: 'office-points', id: selectedStateId },\r\n\t\t\t\t\t { selected: true },\r\n\t\t\t\t );\r\n\t\t\t\t popup.addTo(map);\r\n\t\t\t\t\r\n\t\t\t\t markerClickedEvent(e);\r\n\t\t\t }\r\n }); \r\n\t }\r\n\r\n\t /*************************/\r\n\t /****** MOBILE LIST ******/\r\n\t /*************************/ \r\n\t const listData = sortDataIntoLettersArray(apiData);\r\n\t const elList = document.getElementById('crossborder-list');\r\n\t let elListHtmlString = '';\r\n\r\n\t listData.forEach((group) => {\r\n\t\t if (!group.items.length) { return; }\r\n\r\n\t\t elListHtmlString += `

${group.letter}

`;\r\n\r\n\t\t group.items.forEach((item) => {\r\n /*elListHtmlString += `

${item.country}

${item.firm}

`; */\r\n\t\t\t\tvar state = item.state === '' ? '' : item.state + \" : \";\r\n\t\t\t\tif (item.isSecondary) {\r\n\t\t\t\t\telListHtmlString += `

${item.country} - ${item.city}

${item.firm}
`;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\telListHtmlString += `

${item.country}

${item.firm}
`;\r\n }\r\n\t\t\r\n\t\t });\r\n\r\n\t\t elListHtmlString += '
';\r\n\t\t elList.innerHTML = elListHtmlString;\r\n\t });\r\n\r\n\t /*************************/\r\n\t /**** LIST OPEN/CLOSE ****/\r\n\t /*************************/\r\n\t const listHeaders = document.querySelectorAll('.list-header');\r\n\t listHeaders.forEach((header) => {\r\n\t\t header.addEventListener('click', (e) => {\r\n\t\t\t const targetId = e.target.getAttribute('data-target-id');\r\n\t\t\t const targetElement = document.getElementById(targetId);\r\n\t\t\t targetElement.classList.toggle('show');\r\n\t\t\t e.target.classList.toggle('show');\r\n\t\t });\r\n });\r\n\r\n\r\n /*************************/\r\n /***** RESULTS CLOSE *****/\r\n /*************************/\r\n document.getElementById('close-details-list').addEventListener('click', (e) => {\r\n //console.log('Close details list');\r\n const elSelectedMarker = document.getElementById('marker-selected');\r\n elSelectedMarker.classList.add('hidden');\r\n });\r\n\r\n };\r\n\r\n \r\n\r\n})();\r\n"]}