44 * SPDX-License-Identifier: Apache-2.0
55 */
66
7- import { Address , AddressValidationResponse , Granularity , ValidationResult } from '../utils/googlemaps_types.js' ;
7+ import { Address , AddressValidation , Granularity } from '../utils/googlemaps_types.js' ;
88
99
1010/** Suggested action to take for this validation result. */
@@ -32,8 +32,8 @@ function isUSA(address: Address): boolean {
3232 return address . postalAddress ?. regionCode === 'US' ;
3333}
3434
35- function isMissingNonSubpremiseComponent ( result : ValidationResult ) : boolean {
36- const missingComponents = result . address . missingComponentTypes || [ ] ;
35+ function isMissingNonSubpremiseComponent ( result : AddressValidation ) : boolean {
36+ const missingComponents = result . address ? .missingComponentTypes || [ ] ;
3737 return ( missingComponents . length > 1 ) ||
3838 ( ( missingComponents . length === 1 ) &&
3939 ( missingComponents [ 0 ] !== SUBPREMISE ) ) ;
@@ -44,47 +44,54 @@ function isMissingNonSubpremiseComponent(result: ValidationResult): boolean {
4444 * `ROUTE` level. `PREMISE`, `SUBPREMISE`, and `PREMISE_PROXIMITY` are all
4545 * considered as good as `ROUTE` or better.
4646 */
47- function hasValidationGranularityOther ( result : ValidationResult ) : boolean {
47+ function hasValidationGranularityOther ( result : AddressValidation ) : boolean {
4848 return ! result . verdict ?. validationGranularity ||
4949 result . verdict . validationGranularity === Granularity . OTHER ;
5050}
5151
52- function hasSuspiciousComponent ( result : ValidationResult ) : boolean {
53- return result . address . addressComponents . some (
54- c => c . confirmationLevel === 'UNCONFIRMED_AND_SUSPICIOUS' ) ;
52+ function hasSuspiciousComponent ( result : AddressValidation ) : boolean {
53+ return ! ! result . address &&
54+ result . address . components . some (
55+ c => c . confirmationLevel === 'UNCONFIRMED_AND_SUSPICIOUS' ) ;
5556}
5657
57- function hasUnresolvedToken ( result : ValidationResult ) : boolean {
58- return ( result . address . unresolvedTokens || [ ] ) . length > 0 ;
58+ function hasUnresolvedToken ( result : AddressValidation ) : boolean {
59+ return ! ! result . address &&
60+ ( result . address . unresolvedTokens || [ ] ) . length > 0 ;
5961}
6062
6163/**
6264 * Returns true if the result has an inference for a component other than the
6365 * postal code, administrative area (1, 2, or 3), or country.
6466 */
65- function hasMajorInference ( result : ValidationResult ) : boolean {
67+ function hasMajorInference ( result : AddressValidation ) : boolean {
6668 const minorComponents = new Set ( [
6769 POSTAL_CODE , POSTAL_CODE_SUFFIX , ADMINISTRATIVE_AREA_LEVEL_1 ,
6870 ADMINISTRATIVE_AREA_LEVEL_2 , ADMINISTRATIVE_AREA_LEVEL_3 , COUNTRY
6971 ] ) ;
70- return result . address . addressComponents . some (
71- c => c . isInferred && ! minorComponents . has ( c . componentType ) ) ;
72+ return ! ! result . address &&
73+ result . address . components . some (
74+ c => c . isInferred && ! minorComponents . has ( c . componentType ) )
7275}
7376
74- function hasReplacement ( result : ValidationResult ) : boolean {
77+ function hasReplacement ( result : AddressValidation ) : boolean {
7578 return ! ! result . verdict ?. hasReplacedComponents ;
7679}
7780
7881/**
7982 * Returns true if this is a US address that is missing a subpremise component
8083 * (and nothing else).
8184 */
82- function isMissingExactlyUSASubpremise ( result : ValidationResult ) : boolean {
83- return isUSA ( result . address ) &&
85+ function isMissingExactlyUSASubpremise ( result : AddressValidation ) : boolean {
86+ return ! ! result . address && isUSA ( result . address ) &&
8487 ( result . address . missingComponentTypes ?. length === 1 ) &&
8588 ( result . address . missingComponentTypes [ 0 ] === SUBPREMISE ) ;
8689}
8790
91+ function isIncompleteResult ( result : AddressValidation ) : boolean {
92+ return ! result . verdict || ! result . address ;
93+ }
94+
8895/**
8996 * This is a JavaScript function that analyzes an Address Validation API
9097 * response and outputs a single recommended follow-up action you should take
@@ -137,16 +144,16 @@ function isMissingExactlyUSASubpremise(result: ValidationResult): boolean {
137144 * @param response - A response object from the Address Validation API in the
138145 * Maps JS SDK.
139146 */
140- export function suggestValidationAction ( response : AddressValidationResponse ) :
147+ export function suggestValidationAction ( response : AddressValidation ) :
141148 ValidationSuggestion {
142- const result = response . result ;
143- if ( isMissingNonSubpremiseComponent ( result ) ||
144- hasValidationGranularityOther ( result ) || hasSuspiciousComponent ( result ) ||
145- hasUnresolvedToken ( result ) ) {
149+ if ( isIncompleteResult ( response ) ||
150+ isMissingNonSubpremiseComponent ( response ) ||
151+ hasValidationGranularityOther ( response ) ||
152+ hasSuspiciousComponent ( response ) || hasUnresolvedToken ( response ) ) {
146153 return { suggestedAction : SuggestedAction . FIX } ;
147- } else if ( hasMajorInference ( result ) || hasReplacement ( result ) ) {
154+ } else if ( hasMajorInference ( response ) || hasReplacement ( response ) ) {
148155 return { suggestedAction : SuggestedAction . CONFIRM } ;
149- } else if ( isMissingExactlyUSASubpremise ( result ) ) {
156+ } else if ( isMissingExactlyUSASubpremise ( response ) ) {
150157 return { suggestedAction : SuggestedAction . ADD_SUBPREMISES } ;
151158 } else {
152159 return { suggestedAction : SuggestedAction . ACCEPT } ;
0 commit comments