UNPKG

@openinc/parse-server-opendash

Version:
58 lines (57 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; const openinc_geo_google_common_1 = require("./openinc-geo-google.common"); async function init(name) { Parse.Cloud.define(name, async (request) => { const limit = request.params.limit; const input = request.params.query; const latitude = request.params.latitude; const longitude = request.params.longitude; try { // https://developers.google.com/maps/documentation/places/web-service/autocomplete const response = await (0, openinc_geo_google_common_1.get)("/maps/api/place/autocomplete/json", { input, location: `${latitude},${longitude}`, limit, }); const result = []; for (const prediction of response.predictions) { if (result.length >= limit) { break; } // https://developers.google.com/maps/documentation/places/web-service/details const placeResponse = await (0, openinc_geo_google_common_1.get)("/maps/api/place/details/json", { fields: "name,formatted_address,geometry", sensor: "true", reference: prediction.reference, }); const place = placeResponse.result; result.push({ ref: prediction.reference, title: place.name, titleFull: prediction.description, description: removeTitle(place.name, prediction.description), address: place.formatted_address, latitude: place.geometry.location.lat, longitude: place.geometry.location.lng, }); } return result; } catch (error) { console.error(error); return []; } }, { requireUser: true, fields: ["query", "limit", "latitude", "longitude"], }); } function removeTitle(title, description) { const prefix = `${title}, `; if (description.startsWith(prefix)) { return description.replace(prefix, ""); } return description; }