From e89391b03e3e5d8dc86087a2c7ece367aa677a56 Mon Sep 17 00:00:00 2001 From: tienifr Date: Tue, 21 Mar 2023 23:22:45 +0700 Subject: [PATCH 1/5] fix: suggested address not populate if unknown to google db --- src/components/AddressSearch.js | 17 ++++++++++++----- src/libs/GooglePlacesUtils.js | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/components/AddressSearch.js b/src/components/AddressSearch.js index 7e22542c0484..a3daa0ca6250 100644 --- a/src/components/AddressSearch.js +++ b/src/components/AddressSearch.js @@ -69,7 +69,8 @@ const propTypes = { const defaultProps = { inputID: undefined, shouldSaveDraft: false, - onBlur: () => {}, + onBlur: () => { + }, errorText: '', hint: '', value: undefined, @@ -95,7 +96,8 @@ const AddressSearch = (props) => { query.components = 'country:us'; } - const saveLocationDetails = (details) => { + const saveLocationDetails = (autocompleteData, details) => { + console.log(autocompleteData, details); const addressComponents = details.address_components; if (!addressComponents) { return; @@ -128,11 +130,16 @@ const AddressSearch = (props) => { administrative_area_level_1: 'long_name', }); + const { + state: stateAutoCompleteFallback = '', + city: cityAutocompleteFallback = '', + } = GooglePlacesUtils.getPlaceAutocompleteTerms(autocompleteData.terms); + const values = { street: props.value ? props.value.trim() : '', - city: city || cityFallback, + city: city || cityFallback || cityAutocompleteFallback, zipCode, - state, + state: state || stateAutoCompleteFallback, country: '', }; @@ -191,7 +198,7 @@ const AddressSearch = (props) => { suppressDefaultStyles enablePoweredByContainer={false} onPress={(data, details) => { - saveLocationDetails(details); + saveLocationDetails(data, details); // After we select an option, we set displayListViewBorder to false to prevent UI flickering setDisplayListViewBorder(false); diff --git a/src/libs/GooglePlacesUtils.js b/src/libs/GooglePlacesUtils.js index 36b776e05a52..c1cd29dc0619 100644 --- a/src/libs/GooglePlacesUtils.js +++ b/src/libs/GooglePlacesUtils.js @@ -27,7 +27,25 @@ function getAddressComponents(addressComponents, fieldsToExtract) { return result; } +/** + * Finds an address term by type, and returns the value associated to key. Note that each term in the address must + * conform to the following ORDER: + * + * @param {Array} addressTerms + * @returns {Object} + */ +function getPlaceAutocompleteTerms(addressTerms) { + const fieldsToExtract = ['country', 'state', 'city', 'street']; + const result = _.map(fieldsToExtract, () => ''); + _.each(fieldsToExtract, (fieldToExtract, index) => { + const fieldTermIndex = addressTerms.length - (index + 1); + result[fieldToExtract] = fieldTermIndex >= 0 && addressTerms[fieldTermIndex].value; + }); + return result; +} + export { // eslint-disable-next-line import/prefer-default-export getAddressComponents, + getPlaceAutocompleteTerms, }; From 3a30f385cd613c2b88ce09b106465299c19dc100 Mon Sep 17 00:00:00 2001 From: tienifr Date: Tue, 21 Mar 2023 23:24:37 +0700 Subject: [PATCH 2/5] remove console log --- src/components/AddressSearch.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/AddressSearch.js b/src/components/AddressSearch.js index a3daa0ca6250..6af25b01931f 100644 --- a/src/components/AddressSearch.js +++ b/src/components/AddressSearch.js @@ -97,7 +97,6 @@ const AddressSearch = (props) => { } const saveLocationDetails = (autocompleteData, details) => { - console.log(autocompleteData, details); const addressComponents = details.address_components; if (!addressComponents) { return; From 231e9f15eb14065ad58d48185384fdd85fbedcee Mon Sep 17 00:00:00 2001 From: tienifr Date: Tue, 21 Mar 2023 23:27:20 +0700 Subject: [PATCH 3/5] reformat code --- src/components/AddressSearch.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/AddressSearch.js b/src/components/AddressSearch.js index 6af25b01931f..322ba85301cb 100644 --- a/src/components/AddressSearch.js +++ b/src/components/AddressSearch.js @@ -69,8 +69,7 @@ const propTypes = { const defaultProps = { inputID: undefined, shouldSaveDraft: false, - onBlur: () => { - }, + onBlur: () => {}, errorText: '', hint: '', value: undefined, From 8791252a0622add87c030805565516f510305ec4 Mon Sep 17 00:00:00 2001 From: tienifr Date: Fri, 24 Mar 2023 14:54:19 +0700 Subject: [PATCH 4/5] refactor: initialize result variable --- src/libs/GooglePlacesUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/GooglePlacesUtils.js b/src/libs/GooglePlacesUtils.js index c1cd29dc0619..867f9898e9c2 100644 --- a/src/libs/GooglePlacesUtils.js +++ b/src/libs/GooglePlacesUtils.js @@ -36,7 +36,7 @@ function getAddressComponents(addressComponents, fieldsToExtract) { */ function getPlaceAutocompleteTerms(addressTerms) { const fieldsToExtract = ['country', 'state', 'city', 'street']; - const result = _.map(fieldsToExtract, () => ''); + const result = {}; _.each(fieldsToExtract, (fieldToExtract, index) => { const fieldTermIndex = addressTerms.length - (index + 1); result[fieldToExtract] = fieldTermIndex >= 0 && addressTerms[fieldTermIndex].value; From 824f35eb51d97b695966a0dc9137e63d8de40160 Mon Sep 17 00:00:00 2001 From: tienifr Date: Mon, 27 Mar 2023 10:38:10 +0700 Subject: [PATCH 5/5] fix: empty string for unknow values --- src/libs/GooglePlacesUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/GooglePlacesUtils.js b/src/libs/GooglePlacesUtils.js index 867f9898e9c2..8723598264fb 100644 --- a/src/libs/GooglePlacesUtils.js +++ b/src/libs/GooglePlacesUtils.js @@ -39,7 +39,7 @@ function getPlaceAutocompleteTerms(addressTerms) { const result = {}; _.each(fieldsToExtract, (fieldToExtract, index) => { const fieldTermIndex = addressTerms.length - (index + 1); - result[fieldToExtract] = fieldTermIndex >= 0 && addressTerms[fieldTermIndex].value; + result[fieldToExtract] = fieldTermIndex >= 0 ? addressTerms[fieldTermIndex].value : ''; }); return result; }