Skip to content

Commit 4037245

Browse files
Implement advanced country filtering (GH-39)
2 parents 9893ecd + a1ff3e5 commit 4037245

File tree

6 files changed

+28
-17
lines changed

6 files changed

+28
-17
lines changed

development/src/AntDemo.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ const AntDemo = () => {
4949
<Form>
5050
<FormItem name="phone" rules={[{validator}]}>
5151
<PhoneInput
52-
enableArrow
5352
enableSearch
5453
onChange={(e) => setValue(e as any)}
5554
/>

development/src/MuiDemo.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const Demo = () => {
3232
)}
3333
<form noValidate autoComplete="off" onSubmit={e => e.preventDefault()}>
3434
<PhoneInput
35-
enableArrow
3635
enableSearch
3736
error={error}
3837
variant="filled"

development/src/phone-hooks/index.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,15 @@ export const usePhone = ({
129129

130130
const countriesOnly = useMemo(() => {
131131
const allowList = onlyCountries.length > 0 ? onlyCountries : countries.map(([iso]) => iso);
132-
return countries.map(([iso]) => iso).filter((iso) => {
133-
return allowList.includes(iso) && !excludeCountries.includes(iso);
132+
return countries.filter(([iso, _1, dial]) => {
133+
return (allowList.includes(iso) || allowList.includes(dial)) && !excludeCountries.includes(iso) && !excludeCountries.includes(dial);
134134
});
135135
}, [onlyCountries, excludeCountries])
136136

137137
const countriesList = useMemo(() => {
138-
const filteredCountries = countries.filter(([iso, name, _1, dial]) => {
139-
return countriesOnly.includes(iso) && (
140-
name.toLowerCase().startsWith(query.toLowerCase()) || dial.includes(query)
141-
);
142-
});
138+
const filteredCountries = countriesOnly.filter(([_1, name, dial, mask]) => (
139+
name.toLowerCase().startsWith(query.toLowerCase()) || dial.includes(query) || mask.includes(query)
140+
));
143141
return [
144142
...filteredCountries.filter(([iso]) => preferredCountries.includes(iso)),
145143
...filteredCountries.filter(([iso]) => !preferredCountries.includes(iso)),

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "0.1.6",
2+
"version": "0.1.7",
33
"name": "react-phone-hooks",
44
"description": "React hooks and utility functions for parsing and validating phone numbers.",
55
"keywords": [

src/index.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,15 @@ export const usePhone = ({
129129

130130
const countriesOnly = useMemo(() => {
131131
const allowList = onlyCountries.length > 0 ? onlyCountries : countries.map(([iso]) => iso);
132-
return countries.map(([iso]) => iso).filter((iso) => {
133-
return allowList.includes(iso) && !excludeCountries.includes(iso);
132+
return countries.filter(([iso, _1, dial]) => {
133+
return (allowList.includes(iso) || allowList.includes(dial)) && !excludeCountries.includes(iso) && !excludeCountries.includes(dial);
134134
});
135135
}, [onlyCountries, excludeCountries])
136136

137137
const countriesList = useMemo(() => {
138-
const filteredCountries = countries.filter(([iso, name, _1, dial]) => {
139-
return countriesOnly.includes(iso) && (
140-
name.toLowerCase().startsWith(query.toLowerCase()) || dial.includes(query)
141-
);
142-
});
138+
const filteredCountries = countriesOnly.filter(([_1, name, dial, mask]) => (
139+
name.toLowerCase().startsWith(query.toLowerCase()) || dial.includes(query) || mask.includes(query)
140+
));
143141
return [
144142
...filteredCountries.filter(([iso]) => preferredCountries.includes(iso)),
145143
...filteredCountries.filter(([iso]) => !preferredCountries.includes(iso)),

tests/hooks.test.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,23 @@ describe("Verifying the functionality of hooks", () => {
124124
expect((result.current.metadata as any)[0]).toBe("am");
125125
})
126126

127+
it("Check usePhone for advanced country filtering", () => {
128+
const {result} = renderHook(usePhoneTester, {
129+
initialProps: {
130+
onlyCountries: ["ae", "gb", "us"] as any,
131+
excludeCountries: ["1907", "1205", "1251"] as any,
132+
}
133+
});
134+
135+
expect(result.current.countriesList.map(c => c[2]).includes("1"));
136+
expect(result.current.countriesList.map(c => c[2]).includes("44"));
137+
expect(result.current.countriesList.map(c => c[2]).includes("971"));
138+
139+
expect(!result.current.countriesList.map(c => c[2]).includes("1907"));
140+
expect(!result.current.countriesList.map(c => c[2]).includes("1205"));
141+
expect(!result.current.countriesList.map(c => c[2]).includes("1251"));
142+
})
143+
127144
it("Check usePhone without parentheses", () => {
128145
const {result} = renderHook(usePhoneTester, {
129146
initialProps: {

0 commit comments

Comments
 (0)