Skip to content

Commit

Permalink
feat: support for promise in directions and isochrone args hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
amoncaldas committed Jul 27, 2021
1 parent 6b362bb commit 529e114
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 81 deletions.
157 changes: 93 additions & 64 deletions src/support/map-data-services/ors-params-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,35 +139,50 @@ const orsParamsParser = {
* @returns {Object} args
*/
buildIsochronesArgs: (places) => {
const locations = []
for (const key in places) {
const place = places[key]
locations.push([place.lng, place.lat])
}
const args = {
locations: locations,
area_units: store.getters.mapSettings.unit,
timeout: constants.orsApiRequestTimeout,
attributes:['total_pop']
}
// Add the filters defined in the ORS filters that are manipulated
// directly by external components
orsParamsParser.setFilters(args, OrsMapFilters, constants.services.isochrones)
return new Promise((resolve) => {
const locations = []
for (const key in places) {
const place = places[key]
locations.push([place.lng, place.lat])
}
const args = {
locations: locations,
area_units: store.getters.mapSettings.unit,
timeout: constants.orsApiRequestTimeout,
attributes:['total_pop']
}
// Add the filters defined in the ORS filters that are manipulated
// directly by external components
orsParamsParser.setFilters(args, OrsMapFilters, constants.services.isochrones)

// Adjust specific args
if (args.range && !Array.isArray(args.range)) {
args.range = [args.range]
}
if (args.range_time) {
args.range = args.range_time
delete args.range_time
}
if (args.range_distance) {
args.range = args.range_distance
delete args.range_distance
}
main.getInstance().appHooks.run('isochronesArgsCreated', args)
return args
// Adjust specific args
if (args.range && !Array.isArray(args.range)) {
args.range = [args.range]
}
if (args.range_time) {
args.range = args.range_time
delete args.range_time
}
if (args.range_distance) {
args.range = args.range_distance
delete args.range_distance
}
main.getInstance().appHooks.run('isochronesArgsCreated', args)

let promiseOrArgs = main.getInstance().appHooks.run('isochronesArgsCreated', args)

// If a promise is returned
if (promiseOrArgs instanceof Promise) {
promiseOrArgs.then((promiseArgs) => {
resolve(promiseArgs)
}).catch (err => {
console.error(err)
})
} else { // returned value is already an args object
resolve(promiseOrArgs)
}
return args
})
},

/**
Expand All @@ -176,44 +191,58 @@ const orsParamsParser = {
* @returns {Object} args
*/
buildRoutingArgs: (places) => {
const coordinates = lodash.map(places, (p) => {
return p.getLngLatArr()
})
const mapSettings = store.getters.mapSettings

// Define the extra info that must be be requested
// based on the map settings
const extraInfo = orsParamsParser.buildExtraInfoOptions(mapSettings)

// Set args object
const args = {
coordinates: coordinates,
format: 'geojson',
elevation: mapSettings.elevationProfile,
instructions_format: 'html',
extra_info: extraInfo,
language: mapSettings.routingInstructionsLocale,
units: mapSettings.unit,
timeout: constants.orsApiRequestTimeout
}

let skipSegments = []
for (let pIndex in places) {
if (places[pIndex].direct) {
let segment = Number(pIndex) +1
skipSegments.push(segment)
return new Promise((resolve) => {
const coordinates = lodash.map(places, (p) => {
return p.getLngLatArr()
})
const mapSettings = store.getters.mapSettings

// Define the extra info that must be be requested
// based on the map settings
const extraInfo = orsParamsParser.buildExtraInfoOptions(mapSettings)

// Set args object
const args = {
coordinates: coordinates,
format: 'geojson',
elevation: mapSettings.elevationProfile,
instructions_format: 'html',
extra_info: extraInfo,
language: mapSettings.routingInstructionsLocale,
units: mapSettings.unit,
timeout: constants.orsApiRequestTimeout
}
}
if (skipSegments.length > 0) {
args.skip_segments = skipSegments
}
args.skip_segments

// Add the filters defined in the ORS filters that are manipulated
// directly by external components
orsParamsParser.setFilters(args, OrsMapFilters, constants.services.directions)
main.getInstance().appHooks.run('routingArgsCreated', args)
return args
let skipSegments = []
for (let pIndex in places) {
if (places[pIndex].direct) {
let segment = Number(pIndex) +1
skipSegments.push(segment)
}
}
if (skipSegments.length > 0) {
args.skip_segments = skipSegments
}
args.skip_segments

// Add the filters defined in the ORS filters that are manipulated
// directly by external components
orsParamsParser.setFilters(args, OrsMapFilters, constants.services.directions)

let promiseOrArgs = main.getInstance().appHooks.run('routingArgsCreated', args)

// If a promise is returned
if (promiseOrArgs instanceof Promise) {
promiseOrArgs.then((promiseArgs) => {
resolve(promiseArgs)
}).catch (err => {
console.error(err)
})
} else { // returned value is already an args object
resolve(promiseOrArgs)
}
return args
})
},

/**
Expand Down
37 changes: 20 additions & 17 deletions src/support/ors-api-runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,19 @@ const Directions = (places, customArgs = null) => {
host: mapSettings.apiBaseUrl,
service: mapSettings.endpoints.directions
})
let args = OrsParamsParser.buildRoutingArgs(places)
if (customArgs) {
args = Object.assign(args, customArgs)
}

return new Promise((resolve, reject) => {
directions.calculate(args).then(response => {
const data = { options: { origin: constants.dataOrigins.directions, apiVersion: constants.apiVersion }, content: response }
resolve(data)
}).catch(err => {
const result = { response: err, args: args }
reject(result)
OrsParamsParser.buildRoutingArgs(places).then(args => {
if (customArgs) {
args = Object.assign(args, customArgs)
}
directions.calculate(args).then(response => {
const data = { options: { origin: constants.dataOrigins.directions, apiVersion: constants.apiVersion }, content: response }
resolve(data)
}).catch(err => {
const result = { response: err, args: args }
reject(result)
})
})
})
}
Expand Down Expand Up @@ -285,13 +287,14 @@ const Isochrones = (places) => {
service: mapSettings.endpoints.isochrones
})
return new Promise((resolve, reject) => {
const args = OrsParamsParser.buildIsochronesArgs(places)
isochrones.calculate(args).then((response) => {
const data = { options: { origin: constants.dataOrigins.isochrones, apiVersion: constants.apiVersion }, content: response }
resolve(data)
}).catch((err) => {
const result = { response: err, args: args }
reject(result)
OrsParamsParser.buildIsochronesArgs(places).then(args => {
isochrones.calculate(args).then((response) => {
const data = { options: { origin: constants.dataOrigins.isochrones, apiVersion: constants.apiVersion }, content: response }
resolve(data)
}).catch((err) => {
const result = { response: err, args: args }
reject(result)
})
})
})
}
Expand Down

0 comments on commit 529e114

Please sign in to comment.