Skip to content

Commit d230723

Browse files
authored
Merge pull request #2901 from JoinColony/feat/2821-add-subdivisions-for-all-countries
Feat: Add subdivisions for all countries
2 parents dc1f3a1 + 318a2ed commit d230723

File tree

201 files changed

+24992
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

201 files changed

+24992
-75
lines changed

src/components/frame/v5/pages/UserCryptoToFiatPage/partials/ContactDetailsForm/CountrySelect.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,21 @@ export const CountrySelect = () => {
2525
country: item,
2626
}));
2727

28-
const { setValue } = useFormContext();
28+
const {
29+
setValue,
30+
trigger,
31+
formState: { isSubmitted },
32+
} = useFormContext();
2933

3034
const handleSelect = () => {
3135
// if country changed user should choose state of new country
3236
setValue('state', '');
37+
38+
// If no attempt to submit the form has been made yet, do not trigger state validation
39+
if (!isSubmitted) {
40+
return;
41+
}
42+
trigger('state');
3343
};
3444

3545
return (

src/components/frame/v5/pages/UserCryptoToFiatPage/partials/ContactDetailsForm/SubdivisionSelect.tsx

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
import React, { useMemo } from 'react';
1+
import React, { useEffect, useState } from 'react';
22
import { useWatch } from 'react-hook-form';
33

4-
import { getCountryByCode } from '~utils/countries.ts';
4+
import {
5+
type SubdivisionData,
6+
getSubdivisionsByCountryCode,
7+
} from '~utils/subdivisions.ts';
58

69
import { FormSelect } from '../FormSelect.tsx';
710

@@ -10,10 +13,20 @@ export const SubdivisionSelect = () => {
1013
name: 'country',
1114
});
1215

13-
const subdivisions = useMemo(
14-
() => getCountryByCode(countryCode)?.subdivisions ?? [],
15-
[countryCode],
16-
);
16+
const [subdivisions, setSubdivisions] = useState<SubdivisionData[]>([]);
17+
18+
useEffect(() => {
19+
if (!countryCode) {
20+
setSubdivisions([]);
21+
return;
22+
}
23+
24+
(async () => {
25+
const data = await getSubdivisionsByCountryCode(countryCode);
26+
setSubdivisions(data);
27+
})();
28+
}, [countryCode]);
29+
1730
return (
1831
<div className="ml-1 flex-1">
1932
<FormSelect
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import * as Yup from 'yup';
22

3+
import { COUNTRIES_WITHOUT_STATES } from '~utils/countries.ts';
4+
35
export const addressValidationSchema = Yup.object({
6+
country: Yup.string().required(),
47
address1: Yup.string().required(),
58
address2: Yup.string().notRequired(),
69
city: Yup.string().required(),
7-
state: Yup.string().required(),
10+
state: Yup.string().when('country', {
11+
is: (country) => COUNTRIES_WITHOUT_STATES.includes(country),
12+
then: Yup.string().notRequired(),
13+
otherwise: Yup.string().required(),
14+
}),
815
postcode: Yup.string().required(),
916
}).defined();
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[
2+
{
3+
"code": "AD-07",
4+
"name": "Andorra la Vella",
5+
"category": null
6+
},
7+
{
8+
"code": "AD-02",
9+
"name": "Canillo",
10+
"category": null
11+
},
12+
{
13+
"code": "AD-03",
14+
"name": "Encamp",
15+
"category": null
16+
},
17+
{
18+
"code": "AD-08",
19+
"name": "Escaldes-Engordany",
20+
"category": null
21+
},
22+
{
23+
"code": "AD-04",
24+
"name": "La Massana",
25+
"category": null
26+
},
27+
{
28+
"code": "AD-05",
29+
"name": "Ordino",
30+
"category": null
31+
},
32+
{
33+
"code": "AD-06",
34+
"name": "Sant Julià de Lòria",
35+
"category": null
36+
}
37+
]
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[
2+
{
3+
"code": "AE-AZ",
4+
"name": "Abū Z̧aby",
5+
"category": null
6+
},
7+
{
8+
"code": "AE-AJ",
9+
"name": "‘Ajmān",
10+
"category": null
11+
},
12+
{
13+
"code": "AE-FU",
14+
"name": "Al Fujayrah",
15+
"category": null
16+
},
17+
{
18+
"code": "AE-SH",
19+
"name": "Ash Shāriqah",
20+
"category": null
21+
},
22+
{
23+
"code": "AE-DU",
24+
"name": "Dubayy",
25+
"category": null
26+
},
27+
{
28+
"code": "AE-RK",
29+
"name": "Ra’s al Khaymah",
30+
"category": null
31+
},
32+
{
33+
"code": "AE-UQ",
34+
"name": "Umm al Qaywayn",
35+
"category": null
36+
}
37+
]
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
[
2+
{
3+
"code": "AF-BDS",
4+
"name": "Badakhshan",
5+
"category": null
6+
},
7+
{
8+
"code": "AF-BDG",
9+
"name": "Badghis",
10+
"category": null
11+
},
12+
{
13+
"code": "AF-BGL",
14+
"name": "Baghlan",
15+
"category": null
16+
},
17+
{
18+
"code": "AF-BAL",
19+
"name": "Balkh",
20+
"category": null
21+
},
22+
{
23+
"code": "AF-BAM",
24+
"name": "Bamyan",
25+
"category": null
26+
},
27+
{
28+
"code": "AF-DAY",
29+
"name": "Daykundi",
30+
"category": null
31+
},
32+
{
33+
"code": "AF-FRA",
34+
"name": "Farah",
35+
"category": null
36+
},
37+
{
38+
"code": "AF-FYB",
39+
"name": "Faryab",
40+
"category": null
41+
},
42+
{
43+
"code": "AF-GHA",
44+
"name": "Ghazni",
45+
"category": null
46+
},
47+
{
48+
"code": "AF-GHO",
49+
"name": "Ghōr",
50+
"category": null
51+
},
52+
{
53+
"code": "AF-HEL",
54+
"name": "Helmand",
55+
"category": null
56+
},
57+
{
58+
"code": "AF-HER",
59+
"name": "Herat",
60+
"category": null
61+
},
62+
{
63+
"code": "AF-JOW",
64+
"name": "Jowzjan",
65+
"category": null
66+
},
67+
{
68+
"code": "AF-KAB",
69+
"name": "Kabul",
70+
"category": null
71+
},
72+
{
73+
"code": "AF-KAN",
74+
"name": "Kandahar",
75+
"category": null
76+
},
77+
{
78+
"code": "AF-KAP",
79+
"name": "Kapisa",
80+
"category": null
81+
},
82+
{
83+
"code": "AF-KHO",
84+
"name": "Khost",
85+
"category": null
86+
},
87+
{
88+
"code": "AF-KNR",
89+
"name": "Kunar",
90+
"category": null
91+
},
92+
{
93+
"code": "AF-KDZ",
94+
"name": "Kunduz",
95+
"category": null
96+
},
97+
{
98+
"code": "AF-LAG",
99+
"name": "Laghman",
100+
"category": null
101+
},
102+
{
103+
"code": "AF-LOG",
104+
"name": "Logar",
105+
"category": null
106+
},
107+
{
108+
"code": "AF-NAN",
109+
"name": "Nangarhar",
110+
"category": null
111+
},
112+
{
113+
"code": "AF-NIM",
114+
"name": "Nimruz",
115+
"category": null
116+
},
117+
{
118+
"code": "AF-NUR",
119+
"name": "Nuristan",
120+
"category": null
121+
},
122+
{
123+
"code": "AF-PKA",
124+
"name": "Paktika",
125+
"category": null
126+
},
127+
{
128+
"code": "AF-PIA",
129+
"name": "Paktia",
130+
"category": null
131+
},
132+
{
133+
"code": "AF-PAN",
134+
"name": "Panjshir",
135+
"category": null
136+
},
137+
{
138+
"code": "AF-PAR",
139+
"name": "Parwan",
140+
"category": null
141+
},
142+
{
143+
"code": "AF-SAM",
144+
"name": "Samangan",
145+
"category": null
146+
},
147+
{
148+
"code": "AF-SAR",
149+
"name": "Sar-e Pol",
150+
"category": null
151+
},
152+
{
153+
"code": "AF-TAK",
154+
"name": "Takhar",
155+
"category": null
156+
},
157+
{
158+
"code": "AF-URU",
159+
"name": "Urozgan",
160+
"category": null
161+
},
162+
{
163+
"code": "AF-WAR",
164+
"name": "Maidan Wardak",
165+
"category": null
166+
},
167+
{
168+
"code": "AF-ZAB",
169+
"name": "Zabul",
170+
"category": null
171+
}
172+
]
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
[
2+
{
3+
"code": "AG-03",
4+
"name": "Saint George",
5+
"category": "parish"
6+
},
7+
{
8+
"code": "AG-04",
9+
"name": "Saint John",
10+
"category": "parish"
11+
},
12+
{
13+
"code": "AG-05",
14+
"name": "Saint Mary",
15+
"category": "parish"
16+
},
17+
{
18+
"code": "AG-06",
19+
"name": "Saint Paul",
20+
"category": "parish"
21+
},
22+
{
23+
"code": "AG-07",
24+
"name": "Saint Peter",
25+
"category": "parish"
26+
},
27+
{
28+
"code": "AG-08",
29+
"name": "Saint Philip",
30+
"category": "parish"
31+
},
32+
{
33+
"code": "AG-10",
34+
"name": "Barbuda",
35+
"category": "dependency"
36+
},
37+
{
38+
"code": "AG-11",
39+
"name": "Redonda",
40+
"category": "dependency"
41+
}
42+
]

0 commit comments

Comments
 (0)