{"version":3,"file":"static/chunks/464-62ac9ede93cbfd500c5d.js","mappings":"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","sources":["webpack://_N_E/./src/api/getEnrollmentLocations.ts","webpack://_N_E/./src/utils/toJSON.tsx","webpack://_N_E/./src/api/google.ts","webpack://_N_E/./src/utils/calculateSphericalDistance.tsx","webpack://_N_E/./src/utils/getNearbyEnrollmentLocations.tsx"],"sourcesContent":["import EnrollmentLocations from './activeEnrollmentLocations.json'\nimport { toJSON } from '../utils/toJSON'\n\nexport interface EnrollmentLocationData {\n data: Record\n}\n\nconst getEnrollmentLocationData = (): Promise =>\n Promise.resolve(toJSON(EnrollmentLocations))\n\nexport default getEnrollmentLocationData\n","export const toJSON = (valueFromPromise: any) =>\n JSON.parse(JSON.stringify(valueFromPromise))\n","/// \n\nexport const getLatLng = (\n address: string,\n enrollmentLocations: Record\n): Promise<{ location: google.maps.LatLng | google.maps.LatLngLiteral }> =>\n new Promise((resolve, reject) => {\n const upperAddress = address.toUpperCase()\n\n const location = Object.values(enrollmentLocations).find(\n (loc) => loc.uid.toUpperCase() === upperAddress\n )\n if (location) {\n const coordinates = {\n lat: location.coordinates.lat,\n lng: location.coordinates.lng,\n }\n resolve(coordinates as any)\n return\n }\n\n if (window.google) {\n const geocoder = new window.google.maps.Geocoder()\n geocoder.geocode(\n {\n address,\n },\n (results, status) => {\n if (status === 'OK' && results) {\n const { location } = results[0].geometry\n const coordinates = {\n lat: location.lat(),\n lng: location.lng(),\n }\n resolve(coordinates as any)\n } else {\n reject(\n 'Geocode was not successful for the following reason: ' + status\n ) // eslint-disable-line prefer-promise-reject-errors\n }\n }\n )\n }\n })\n","const toRadians = (n: number) => (n * Math.PI) / 180\nconst defaultPoint = { lat: 0, lng: 0 }\n\nexport const calculateSphericalDistance = (\n p1 = defaultPoint,\n p2 = defaultPoint\n) => {\n const { lat: lat1, lng: lon1 } = p1\n const { lat: lat2, lng: lon2 } = p2\n\n const R = 6371e3 // metres\n const φ1 = toRadians(lat1)\n const φ2 = toRadians(lat2)\n const Δφ = toRadians(lat2 - lat1)\n const Δλ = toRadians(lon2 - lon1)\n\n const a =\n Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +\n Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2)\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return R * c\n}\n","import { getLatLng } from '@api/google'\nimport { LaneInfo } from '@components/shared/LaneInfo'\nimport { calculateSphericalDistance } from '@utils/calculateSphericalDistance'\n\nconst METERS_TO_MILES_RATIO = 0.000621371192\nconst SEARCH_RADIUS_IN_MILES = 100\n\nexport type EnrollmentLocation = {\n airportCode: string\n name: string\n address: string\n location: any\n distance: number\n hours: string\n lanes: LaneInfo[]\n important_info?: string\n open?: boolean\n}\n\nexport const determineMapZoomLevel = (\n locationsWithinRange: EnrollmentLocation[]\n) => {\n const largestDistance = locationsWithinRange.reduce((acc, location) => {\n if (location?.distance > acc) acc = location?.distance\n return acc\n }, 0)\n\n return largestDistance > 20 ? 8 : largestDistance > 9 ? 10 : undefined\n}\n\nexport const getNearbyEnrollmentLocations = async (\n enrollmentLocations: Record,\n searchInput: string\n) => {\n const searchCoords = await getLatLng(searchInput, enrollmentLocations)\n\n const enrollmentLocationsNearSearch: EnrollmentLocation[] = Object.values(\n enrollmentLocations\n )\n .map((enrollmentLocation: any) => {\n const distanceInMeters = calculateSphericalDistance(\n searchCoords as any,\n enrollmentLocation?.coordinates\n )\n const distanceInMiles = distanceInMeters * METERS_TO_MILES_RATIO\n const roundedDistanceInMiles = Math.round(distanceInMiles * 10) / 10\n\n return {\n airportCode: enrollmentLocation?.uid,\n distance: roundedDistanceInMiles,\n name: enrollmentLocation?.name,\n location: {\n lat: Number(enrollmentLocation.coordinates.lat),\n lng: Number(enrollmentLocation.coordinates.lng),\n },\n address: enrollmentLocation?.address,\n hours: enrollmentLocation?.hours,\n lanes: enrollmentLocation?.lanes,\n open: enrollmentLocation?.open,\n important_info: enrollmentLocation?.important_info,\n }\n })\n // return enrollment locations within SEARCH_RADIUS_IN_MILES miles\n .filter(\n (enrollmentLocation) =>\n enrollmentLocation.distance < SEARCH_RADIUS_IN_MILES\n )\n return { enrollmentLocationsNearSearch, location }\n}\n"],"names":["Promise","resolve","valueFromPromise","EnrollmentLocations","JSON","parse","stringify","getLatLng","address","enrollmentLocations","reject","upperAddress","toUpperCase","location","Object","values","find","loc","uid","coordinates","lat","lng","window","google","maps","Geocoder","geocode","results","status","geometry","toRadians","n","Math","PI","defaultPoint","calculateSphericalDistance","p1","p2","lat1","lon1","lat2","lon2","R","φ1","φ2","Δφ","Δλ","a","sin","cos","c","atan2","sqrt","determineMapZoomLevel","locationsWithinRange","largestDistance","reduce","acc","distance","undefined","getNearbyEnrollmentLocations","searchInput","searchCoords","enrollmentLocationsNearSearch","map","enrollmentLocation","distanceInMiles","roundedDistanceInMiles","round","airportCode","name","Number","hours","lanes","open","important_info","filter"],"sourceRoot":""}