Remove accents from country labels to match geo detected country data (#39110)
* Remove accent for comparison * Add changelog * Use localCompare instead
This commit is contained in:
parent
7767f9e78f
commit
7c5b98ea02
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: fix
|
||||||
|
|
||||||
|
Remove accent from country labels when comparing against geo detected country
|
|
@ -51,6 +51,9 @@ export const findCountryOption = (
|
||||||
countryCode === location.country_short &&
|
countryCode === location.country_short &&
|
||||||
option.label.includes( '—' )
|
option.label.includes( '—' )
|
||||||
) {
|
) {
|
||||||
|
// WP GEO API Returns regions without accents.
|
||||||
|
// Remove accents from the region to compare.
|
||||||
|
// Málaga -> Malaga
|
||||||
const wcRegion = option.label.split( '—' )[ 1 ].trim();
|
const wcRegion = option.label.split( '—' )[ 1 ].trim();
|
||||||
|
|
||||||
// Region matches exactly with mapping.
|
// Region matches exactly with mapping.
|
||||||
|
@ -58,6 +61,17 @@ export const findCountryOption = (
|
||||||
return option;
|
return option;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
wcRegion.localeCompare( location.region || '', 'en', {
|
||||||
|
sensitivity: 'base',
|
||||||
|
} ) === 0 ||
|
||||||
|
wcRegion.localeCompare( location.city || '', 'en', {
|
||||||
|
sensitivity: 'base',
|
||||||
|
} ) === 0
|
||||||
|
) {
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
|
||||||
// Find the region with the highest similarity.
|
// Find the region with the highest similarity.
|
||||||
const similarity = Math.max(
|
const similarity = Math.max(
|
||||||
stringSimilarity.compareTwoStrings(
|
stringSimilarity.compareTwoStrings(
|
||||||
|
@ -81,7 +95,7 @@ export const findCountryOption = (
|
||||||
/**
|
/**
|
||||||
* Returns just the country portion of a country:state string that is delimited with a colon.
|
* Returns just the country portion of a country:state string that is delimited with a colon.
|
||||||
*
|
*
|
||||||
* @param countryPossiblyWithState Country string that may or may not have a state. e.g 'US:CA', 'UG:UG312'
|
* @param countryPossiblyWithState Country string that may or may not have a state. e.g 'US:CA', 'UG:UG312'
|
||||||
* @return Just the country portion of the string, or undefined if input is undefined. e.g 'US', 'UG'
|
* @return Just the country portion of the string, or undefined if input is undefined. e.g 'US', 'UG'
|
||||||
*/
|
*/
|
||||||
export const getCountry = ( countryPossiblyWithState: string ) =>
|
export const getCountry = ( countryPossiblyWithState: string ) =>
|
||||||
|
|
|
@ -21,6 +21,18 @@ describe( 'findCountryOption', () => {
|
||||||
expect( findCountryOption( countryStateOptions, location ) ).toBeNull();
|
expect( findCountryOption( countryStateOptions, location ) ).toBeNull();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
it( 'should ignore accents for comparsion', () => {
|
||||||
|
const location = {
|
||||||
|
city: 'Malaga',
|
||||||
|
region: 'Andalucia',
|
||||||
|
country_short: 'ES',
|
||||||
|
};
|
||||||
|
expect( findCountryOption( countryStateOptions, location ) ).toEqual( {
|
||||||
|
key: 'ES:MA',
|
||||||
|
label: 'Spain — Málaga',
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
it.each( [
|
it.each( [
|
||||||
{
|
{
|
||||||
location: { country_short: 'TW' },
|
location: { country_short: 'TW' },
|
||||||
|
|
Loading…
Reference in New Issue