@openinc/parse-server-opendash
Version:
Parse Server Cloud Code for open.INC Stack.
58 lines (57 loc) • 2.29 kB
JavaScript
;
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;
}