moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
140 lines • 11.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
// Contains information licensed under the Open Government Licence British Columbia.
import { Injectable } from '@angular/core';
import { AbstractHttpService } from './abstract-api-service';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { throwError } from 'rxjs';
import { CANADA } from '../components/country/country.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
/**
* @record
*/
export function GeoAddressResult() { }
if (false) {
/**
* String from the API that includes street, city, province, and country.
* @type {?}
*/
GeoAddressResult.prototype.fullAddress;
/** @type {?} */
GeoAddressResult.prototype.city;
/** @type {?} */
GeoAddressResult.prototype.street;
/** @type {?} */
GeoAddressResult.prototype.country;
/** @type {?} */
GeoAddressResult.prototype.province;
}
export class GeocoderService extends AbstractHttpService {
/**
* @param {?} http
*/
constructor(http) {
super(http);
this.http = http;
this._headers = new HttpHeaders();
this.BASE_URL = 'https://geocoder.api.gov.bc.ca';
this.ADDRESS_URL = `${this.BASE_URL}/addresses.json?`;
}
// https://github.com/bcgov/api-specs/blob/master/geocoder/geocoder-developer-guide.md
/**
* @param {?} address
* @return {?}
*/
lookup(address) {
/** @type {?} */
const params = new HttpParams()
.set('minScore', '50')
.set('maxResults', '10')
.set('echo', 'true')
.set('interpolation', 'adaptive')
.set('addressString', address);
return this.get(this.ADDRESS_URL, params).pipe(map(this.processResponse));
}
/**
* Formats the response from ADDRESS_URL, trimming irrelevant fields.
*
* This works for other requests for the same API too, however it may error
* out on some items if matchPrecisionNot is not set.
*
* @protected
* @param {?} obj The response from ADDRESS_URL
* @return {?}
*/
processResponse(obj) {
return obj.features.map((/**
* @param {?} feature
* @return {?}
*/
feature => {
/** @type {?} */
const props = feature.properties;
/** @type {?} */
const city = props.localityName;
// We get street just by trimming everything before city, more
// stable than looking for commas, etc.
/** @type {?} */
const cityIndex = props.fullAddress.indexOf(`, ${city}`);
/** @type {?} */
const street = props.fullAddress.slice(0, cityIndex);
/** @type {?} */
const province = props.provinceCode;
/** @type {?} */
const country = CANADA;
return {
fullAddress: props.fullAddress.replace('--', '-'),
city,
street: street.replace('--', '-'),
province,
country
};
}));
}
/**
* @protected
* @param {?} error
* @return {?}
*/
handleError(error) {
console.error('GeoCoder network error', { error });
return throwError('Geocoder error');
}
}
GeocoderService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
GeocoderService.ctorParameters = () => [
{ type: HttpClient }
];
/** @nocollapse */ GeocoderService.ngInjectableDef = i0.defineInjectable({ factory: function GeocoderService_Factory() { return new GeocoderService(i0.inject(i1.HttpClient)); }, token: GeocoderService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @protected
*/
GeocoderService.prototype._headers;
/**
* @type {?}
* @protected
*/
GeocoderService.prototype.BASE_URL;
/**
* @type {?}
* @protected
*/
GeocoderService.prototype.ADDRESS_URL;
/**
* @type {?}
* @protected
*/
GeocoderService.prototype.http;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvY29kZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vaC1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2dlb2NvZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFxQixVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7OztBQUVqRSxzQ0FRQzs7Ozs7O0lBTkcsdUNBQW9COztJQUNwQixnQ0FBYTs7SUFDYixrQ0FBZTs7SUFFZixtQ0FBZ0I7O0lBQ2hCLG9DQUFpQjs7QUFNckIsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQW1COzs7O0lBTXBELFlBQXNCLElBQWdCO1FBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQURNLFNBQUksR0FBSixJQUFJLENBQVk7UUFKNUIsYUFBUSxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzFDLGFBQVEsR0FBRyxnQ0FBZ0MsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsa0JBQWtCLENBQUM7SUFJNUQsQ0FBQzs7Ozs7O0lBR0QsTUFBTSxDQUFDLE9BQWU7O2NBQ1osTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO2FBQzFCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO2FBQ3JCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO2FBQ3ZCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO2FBQ25CLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDO2FBQ2hDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQzs7Ozs7Ozs7Ozs7SUFVUyxlQUFlLENBQUMsR0FBRztRQUN6QixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRzs7OztRQUFDLE9BQU8sQ0FBQyxFQUFFOztrQkFDeEIsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVOztrQkFDMUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxZQUFZOzs7O2tCQUd6QixTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzs7a0JBQ2xELE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDOztrQkFDOUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZOztrQkFDN0IsT0FBTyxHQUFHLE1BQU07WUFFdEIsT0FBTztnQkFDTCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztnQkFDakQsSUFBSTtnQkFDSixNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2dCQUNqQyxRQUFRO2dCQUNSLE9BQU87YUFDUixDQUFDO1FBQ04sQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7Ozs7SUFFUyxXQUFXLENBQUMsS0FBd0I7UUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkQsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7WUF6REosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7O1lBakJRLFVBQVU7Ozs7Ozs7O0lBb0JmLG1DQUFvRDs7Ozs7SUFDcEQsbUNBQXNEOzs7OztJQUN0RCxzQ0FBNEQ7Ozs7O0lBRWhELCtCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvbnRhaW5zIGluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZSDCliBCcml0aXNoIENvbHVtYmlhLlxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cFNlcnZpY2UgfSBmcm9tICcuL2Fic3RyYWN0LWFwaS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ0FOQURBIH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb3VudHJ5L2NvdW50cnkuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2VvQWRkcmVzc1Jlc3VsdCB7XHJcbiAgICAvKiogU3RyaW5nIGZyb20gdGhlIEFQSSB0aGF0IGluY2x1ZGVzIHN0cmVldCwgY2l0eSwgcHJvdmluY2UsIGFuZCBjb3VudHJ5LiAqL1xyXG4gICAgZnVsbEFkZHJlc3M6IHN0cmluZztcclxuICAgIGNpdHk6IHN0cmluZztcclxuICAgIHN0cmVldDogc3RyaW5nO1xyXG4gICAgLy8gU2V0IHRvIGRlZmF1bHRzIGluIHJlc3BvbnNlXHJcbiAgICBjb3VudHJ5OiBzdHJpbmc7XHJcbiAgICBwcm92aW5jZTogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlb2NvZGVyU2VydmljZSBleHRlbmRzIEFic3RyYWN0SHR0cFNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBfaGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIHByb3RlY3RlZCBCQVNFX1VSTCA9ICdodHRwczovL2dlb2NvZGVyLmFwaS5nb3YuYmMuY2EnO1xyXG4gICAgcHJvdGVjdGVkICBBRERSRVNTX1VSTCA9IGAke3RoaXMuQkFTRV9VUkx9L2FkZHJlc3Nlcy5qc29uP2A7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgICAgICBzdXBlcihodHRwKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmNnb3YvYXBpLXNwZWNzL2Jsb2IvbWFzdGVyL2dlb2NvZGVyL2dlb2NvZGVyLWRldmVsb3Blci1ndWlkZS5tZFxyXG4gICAgbG9va3VwKGFkZHJlc3M6IHN0cmluZyk6IE9ic2VydmFibGU8R2VvQWRkcmVzc1Jlc3VsdFtdPiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAgICAgICAuc2V0KCdtaW5TY29yZScsICc1MCcpXHJcbiAgICAgICAgICAgIC5zZXQoJ21heFJlc3VsdHMnLCAnMTAnKVxyXG4gICAgICAgICAgICAuc2V0KCdlY2hvJywgJ3RydWUnKVxyXG4gICAgICAgICAgICAuc2V0KCdpbnRlcnBvbGF0aW9uJywgJ2FkYXB0aXZlJylcclxuICAgICAgICAgICAgLnNldCgnYWRkcmVzc1N0cmluZycsIGFkZHJlc3MpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy5BRERSRVNTX1VSTCwgcGFyYW1zKS5waXBlKG1hcCh0aGlzLnByb2Nlc3NSZXNwb25zZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybWF0cyB0aGUgcmVzcG9uc2UgZnJvbSBBRERSRVNTX1VSTCwgdHJpbW1pbmcgaXJyZWxldmFudCBmaWVsZHMuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyB3b3JrcyBmb3Igb3RoZXIgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIEFQSSB0b28sIGhvd2V2ZXIgaXQgbWF5IGVycm9yXHJcbiAgICAgKiBvdXQgb24gc29tZSBpdGVtcyBpZiBtYXRjaFByZWNpc2lvbk5vdCBpcyBub3Qgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvYmogVGhlIHJlc3BvbnNlIGZyb20gQUREUkVTU19VUkxcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NSZXNwb25zZShvYmopOiBHZW9BZGRyZXNzUmVzdWx0W10ge1xyXG4gICAgICAgIHJldHVybiBvYmouZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGZlYXR1cmUucHJvcGVydGllcztcclxuICAgICAgICAgICAgY29uc3QgY2l0eSA9IHByb3BzLmxvY2FsaXR5TmFtZTtcclxuICAgICAgICAgICAgLy8gV2UgZ2V0IHN0cmVldCBqdXN0IGJ5IHRyaW1taW5nIGV2ZXJ5dGhpbmcgYmVmb3JlIGNpdHksIG1vcmVcclxuICAgICAgICAgICAgLy8gc3RhYmxlIHRoYW4gbG9va2luZyBmb3IgY29tbWFzLCBldGMuXHJcbiAgICAgICAgICAgIGNvbnN0IGNpdHlJbmRleCA9IHByb3BzLmZ1bGxBZGRyZXNzLmluZGV4T2YoYCwgJHtjaXR5fWApO1xyXG4gICAgICAgICAgICBjb25zdCBzdHJlZXQgPSBwcm9wcy5mdWxsQWRkcmVzcy5zbGljZSgwLCBjaXR5SW5kZXgpO1xyXG4gICAgICAgICAgICBjb25zdCBwcm92aW5jZSA9IHByb3BzLnByb3ZpbmNlQ29kZTtcclxuICAgICAgICAgICAgY29uc3QgY291bnRyeSA9IENBTkFEQTsgLy8gQUxXQVlTIHJldHVybiBDYW5hZGFcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgZnVsbEFkZHJlc3M6IHByb3BzLmZ1bGxBZGRyZXNzLnJlcGxhY2UoJy0tJywgJy0nKSxcclxuICAgICAgICAgICAgICBjaXR5LFxyXG4gICAgICAgICAgICAgIHN0cmVldDogc3RyZWV0LnJlcGxhY2UoJy0tJywgJy0nKSxcclxuICAgICAgICAgICAgICBwcm92aW5jZSxcclxuICAgICAgICAgICAgICBjb3VudHJ5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZUVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0dlb0NvZGVyIG5ldHdvcmsgZXJyb3InLCB7IGVycm9yIH0pO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdHZW9jb2RlciBlcnJvcicpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==