proxy-generics-google-maps
Version:
Proxy Generic Google Maps
118 lines (100 loc) • 2.82 kB
JavaScript
/* eslint no-console: [0] */
const googleMaps = require('@google/maps')
module.exports = class ProxyGenericsGoogleMaps {
constructor(options) {
this.options = options
}
/**
* Create GoogleMaps Instance
* @returns {*} GoogleMaps Instance
*/
googleMaps() {
return googleMaps.createClient({
key: this.options.key
})
}
addressToString(address) {
let street = ''
let city = ''
let postalCode = ''
let province = ''
let country = ''
if (address.address_1) {
street = address.address_1
}
if (address.address_2) {
street = `${street} ${address.address_2}`
}
if (address.address_3) {
street = `${street} ${address.address_3}`
}
if (address.company) {
street = `${street} ${address.company}`
}
if (street !== '') {
street = `${street}, `
}
if (address.city) {
city = address.city
}
if (city !== '') {
city = `${city} `
}
if (address.postal_code) {
postalCode = address.postal_code
}
if (postalCode !== '') {
postalCode = `${postalCode} `
}
if (address.province_code || address.province) {
if (address.province_code) {
province = `${address.province_code}`
}
else {
province = `${address.province}`
}
}
if (address.country_code || address.country) {
if (address.country_code) {
country = `${address.country_code}`
}
else {
country = `${address.country}`
}
}
if (province !== '' && country !== '') {
province = `${province}, `
country = `${country}`
}
return `${street}${city}${province}${postalCode}${country}`
}
locate(address) {
return new Promise((resolve, reject) => {
const formattedAddress = this.addressToString(address)
this.googleMaps().geocode({
address: formattedAddress
}, function(err, response) {
if (err) {
return reject(err)
}
const proxySchema = address
if (response.json && response.json.results.length > 0) {
// Formatted Address
proxySchema.formatted_address = response.json.results[0].formatted_address || formattedAddress
if (response.json.results[0].geometry && response.json.results[0].geometry.location) {
proxySchema.latitude = response.json.results[0].geometry.location.lat
proxySchema.longitude = response.json.results[0].geometry.location.lng
}
proxySchema.google_maps = response.json.results
}
else {
proxySchema.formatted_address = formattedAddress
proxySchema.latitude = 0
proxySchema.longitude = 0
}
return resolve(proxySchema)
})
})
}
}