-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #193 from Shopify/additional-address-split-ts
Additional address split in TypeScript
- Loading branch information
Showing
10 changed files
with
298 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
'@shopify/worldwide': minor | ||
--- | ||
|
||
Add parsing functions `splitAddress1` and `splitAddress2` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,4 @@ | ||
export {concatenateAddress1} from './concatenateAddress1'; | ||
export {concatenateAddress2} from './concatenateAddress2'; | ||
export {splitAddress1} from './splitAddress1'; | ||
export {splitAddress2} from './splitAddress2'; |
36 changes: 36 additions & 0 deletions
36
lang/typescript/src/extended-address/splitAddress1.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import {splitAddress1} from './splitAddress1'; | ||
|
||
describe('splitAddress1', () => { | ||
test('returns null when extended address is not defined for region', () => { | ||
expect(splitAddress1('US', '123 Main')).toBeNull(); | ||
}); | ||
|
||
test('returns empty object when extended address string is empty', () => { | ||
expect(splitAddress1('CL', '')).toEqual({}); | ||
expect(splitAddress1('BR', '')).toEqual({}); | ||
}); | ||
|
||
test('returns address1 as street name when no delimiter is present', () => { | ||
expect(splitAddress1('CL', '123 Main')).toEqual({streetName: '123 Main'}); | ||
expect(splitAddress1('BR', '123 Main')).toEqual({streetName: '123 Main'}); | ||
}); | ||
|
||
test('returns street number if string before delimiter is empty', () => { | ||
expect(splitAddress1('CL', '\u00A0123')).toEqual({streetNumber: '123'}); | ||
expect(splitAddress1('BR', '\u00A0123')).toEqual({streetNumber: '123'}); | ||
}); | ||
|
||
test('returns full address object when separated by delimiter', () => { | ||
expect(splitAddress1('CL', 'Main\u00A0123')).toEqual({ | ||
streetName: 'Main', | ||
streetNumber: '123', | ||
}); | ||
}); | ||
|
||
test('returns full address object when separated by delimiter and decorator', () => { | ||
expect(splitAddress1('BR', 'Main,\u00A0123')).toEqual({ | ||
streetName: 'Main', | ||
streetNumber: '123', | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import {Address} from '../types/address'; | ||
import {splitAddressField} from '../utils/address-fields'; | ||
import {getRegionConfig} from '../utils/regions'; | ||
|
||
/** | ||
* Parse a concatenated address1 string based on the region specified by | ||
* country code | ||
* @param countryCode 2-letter country code string | ||
* @param concatenatedAddress Combined address1 string | ||
* @returns Partial Address object containing parsed address fields or null if | ||
* the region does not define an extended address format | ||
*/ | ||
export function splitAddress1( | ||
countryCode: string, | ||
concatenatedAddress: string, | ||
): Partial<Address> | null { | ||
const config = getRegionConfig(countryCode); | ||
const address1CombinedFormat = config?.combined_address_format?.address1; | ||
|
||
if (address1CombinedFormat) { | ||
return splitAddressField(address1CombinedFormat, concatenatedAddress); | ||
} | ||
|
||
return null; | ||
} |
40 changes: 40 additions & 0 deletions
40
lang/typescript/src/extended-address/splitAddress2.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import {splitAddress2} from './splitAddress2'; | ||
|
||
describe('splitAddress2', () => { | ||
test('returns null when extended address is not defined for region', () => { | ||
expect(splitAddress2('US', '#2, Centretown')).toBeNull(); | ||
}); | ||
|
||
test('returns empty object when extended address string is empty', () => { | ||
expect(splitAddress2('CL', '')).toEqual({}); | ||
expect(splitAddress2('BR', '')).toEqual({}); | ||
}); | ||
|
||
test('returns address2 as line2 when no delimiter is present', () => { | ||
expect(splitAddress2('CL', 'dpto 4')).toEqual({line2: 'dpto 4'}); | ||
expect(splitAddress2('BR', 'dpto 4')).toEqual({line2: 'dpto 4'}); | ||
}); | ||
|
||
test('returns neighborhood if string before delimiter is empty', () => { | ||
expect(splitAddress2('CL', '\u00A0Centro')).toEqual({ | ||
neighborhood: 'Centro', | ||
}); | ||
expect(splitAddress2('BR', '\u00A0Centro')).toEqual({ | ||
neighborhood: 'Centro', | ||
}); | ||
}); | ||
|
||
test('returns full address object when separated by delimiter', () => { | ||
expect(splitAddress2('CL', 'dpto 4\u00A0Centro')).toEqual({ | ||
line2: 'dpto 4', | ||
neighborhood: 'Centro', | ||
}); | ||
}); | ||
|
||
test('returns full address object when separated by delimiter and decorator', () => { | ||
expect(splitAddress2('BR', 'dpto 4,\u00A0Centro')).toEqual({ | ||
line2: 'dpto 4', | ||
neighborhood: 'Centro', | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import {Address} from '../types/address'; | ||
import {splitAddressField} from '../utils/address-fields'; | ||
import {getRegionConfig} from '../utils/regions'; | ||
|
||
/** | ||
* Parse a concatenated address2 string based on the region specified by | ||
* country code | ||
* @param countryCode 2-letter country code string | ||
* @param concatenatedAddress Combined address2 string | ||
* @returns Partial Address object containing parsed address fields or null if | ||
* the region does not define an extended address format | ||
*/ | ||
export function splitAddress2( | ||
countryCode: string, | ||
concatenatedAddress: string, | ||
): Partial<Address> | null { | ||
const config = getRegionConfig(countryCode); | ||
const address2CombinedFormat = config?.combined_address_format?.address2; | ||
|
||
if (address2CombinedFormat) { | ||
return splitAddressField(address2CombinedFormat, concatenatedAddress); | ||
} | ||
|
||
return null; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,7 @@ | ||
export {RESERVED_DELIMITER} from './utils/address-fields'; | ||
export {concatenateAddress1, concatenateAddress2} from './extended-address'; | ||
export { | ||
concatenateAddress1, | ||
concatenateAddress2, | ||
splitAddress1, | ||
splitAddress2, | ||
} from './extended-address'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters