@superdispatch/phones 0.21.13 → 0.21.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/{pkg/dist-types → dist-types}/index.d.ts +2 -2
- package/package.json +14 -40
- package/.babelrc.js +0 -5
- package/.turbo/turbo-version.log +0 -26
- package/pkg/README.md +0 -10
- package/pkg/package.json +0 -34
- package/playroom.ts +0 -3
- package/src/__tests__/index.spec.ts +0 -23
- package/src/apn/APN.ts +0 -40
- package/src/country-code-metadata/CountryCodeMetadata.spec.ts +0 -1291
- package/src/country-code-metadata/CountryCodeMetadata.ts +0 -281
- package/src/formatted-phone-number/FormattedPhoneNumber.ts +0 -20
- package/src/index.ts +0 -6
- package/src/phone-field/PhoneField.playroom.tsx +0 -28
- package/src/phone-field/PhoneField.spec.tsx +0 -171
- package/src/phone-field/PhoneField.stories.tsx +0 -6
- package/src/phone-field/PhoneField.tsx +0 -200
- package/src/phone-field/PhoneFieldFlag.tsx +0 -54
- package/src/phone-field/PhoneFieldMenu.tsx +0 -53
- package/src/phone-field/PhoneFieldMenuItem.spec.tsx +0 -12
- package/src/phone-field/PhoneFieldMenuItem.tsx +0 -61
- package/src/phone-field/PhoneFieldStartAdornment.tsx +0 -68
- package/src/phone-link/PhoneLink.spec.tsx +0 -60
- package/src/phone-link/PhoneLink.stories.tsx +0 -9
- package/src/phone-link/PhoneLink.tsx +0 -59
- package/src/phone-service/PhoneService.spec.ts +0 -277
- package/src/phone-service/PhoneService.ts +0 -287
- package/src/phone-text/PhoneText.spec.tsx +0 -65
- package/src/phone-text/PhoneText.stories.tsx +0 -9
- package/src/phone-text/PhoneText.tsx +0 -38
- package/tsconfig.json +0 -19
- /package/{pkg/dist-node → dist-node}/index.js +0 -0
- /package/{pkg/dist-node → dist-node}/index.js.map +0 -0
- /package/{pkg/dist-src → dist-src}/apn/APN.js +0 -0
- /package/{pkg/dist-src → dist-src}/country-code-metadata/CountryCodeMetadata.js +0 -0
- /package/{pkg/dist-src → dist-src}/formatted-phone-number/FormattedPhoneNumber.js +0 -0
- /package/{pkg/dist-src → dist-src}/index.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-field/PhoneField.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-field/PhoneFieldFlag.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-field/PhoneFieldMenu.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-field/PhoneFieldMenuItem.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-field/PhoneFieldStartAdornment.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-link/PhoneLink.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-service/PhoneService.js +0 -0
- /package/{pkg/dist-src → dist-src}/phone-text/PhoneText.js +0 -0
- /package/{pkg/dist-web → dist-web}/index.js +0 -0
- /package/{pkg/dist-web → dist-web}/index.js.map +0 -0
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
const COUNTRY_CODE_METADATA = [
|
|
2
|
-
['US', 1, 'United States'],
|
|
3
|
-
['CA', 1, 'Canada'],
|
|
4
|
-
['AU', 61, 'Australia'],
|
|
5
|
-
['NZ', 64, 'New Zealand'],
|
|
6
|
-
['AC', 247, 'Ascension Island'],
|
|
7
|
-
['AD', 376, 'Andorra'],
|
|
8
|
-
['AE', 971, 'United Arab Emirates'],
|
|
9
|
-
['AF', 93, 'Afghanistan'],
|
|
10
|
-
['AG', 1, 'Antigua and Barbuda'],
|
|
11
|
-
['AI', 1, 'Anguilla'],
|
|
12
|
-
['AL', 355, 'Albania'],
|
|
13
|
-
['AM', 374, 'Armenia'],
|
|
14
|
-
['AO', 244, 'Angola'],
|
|
15
|
-
['AR', 54, 'Argentina'],
|
|
16
|
-
['AS', 1, 'American Samoa'],
|
|
17
|
-
['AT', 43, 'Austria'],
|
|
18
|
-
['AW', 297, 'Aruba'],
|
|
19
|
-
['AX', 358, 'Åland Islands'],
|
|
20
|
-
['AZ', 994, 'Azerbaijan'],
|
|
21
|
-
['BA', 387, 'Bosnia and Herzegovina'],
|
|
22
|
-
['BB', 1, 'Barbados'],
|
|
23
|
-
['BD', 880, 'Bangladesh'],
|
|
24
|
-
['BE', 32, 'Belgium'],
|
|
25
|
-
['BF', 226, 'Burkina Faso'],
|
|
26
|
-
['BG', 359, 'Bulgaria'],
|
|
27
|
-
['BH', 973, 'Bahrain'],
|
|
28
|
-
['BI', 257, 'Burundi'],
|
|
29
|
-
['BJ', 229, 'Benin'],
|
|
30
|
-
['BL', 590, 'Saint Barthélemy'],
|
|
31
|
-
['BM', 1, 'Bermuda'],
|
|
32
|
-
['BN', 673, 'Brunei'],
|
|
33
|
-
['BO', 591, 'Bolivia'],
|
|
34
|
-
['BQ', 599, 'Caribbean Netherlands'],
|
|
35
|
-
['BR', 55, 'Brazil'],
|
|
36
|
-
['BS', 1, 'Bahamas'],
|
|
37
|
-
['BT', 975, 'Bhutan'],
|
|
38
|
-
['BW', 267, 'Botswana'],
|
|
39
|
-
['BY', 375, 'Belarus'],
|
|
40
|
-
['BZ', 501, 'Belize'],
|
|
41
|
-
['CC', 61, 'Cocos'],
|
|
42
|
-
['CD', 243, 'Congo'],
|
|
43
|
-
['CF', 236, 'Central African Republic'],
|
|
44
|
-
['CG', 242, 'Congo'],
|
|
45
|
-
['CH', 41, 'Switzerland'],
|
|
46
|
-
['CI', 225, 'Côte d’Ivoire'],
|
|
47
|
-
['CK', 682, 'Cook Islands'],
|
|
48
|
-
['CL', 56, 'Chile'],
|
|
49
|
-
['CM', 237, 'Cameroon'],
|
|
50
|
-
['CN', 86, 'China'],
|
|
51
|
-
['CO', 57, 'Colombia'],
|
|
52
|
-
['CR', 506, 'Costa Rica'],
|
|
53
|
-
['CU', 53, 'Cuba'],
|
|
54
|
-
['CV', 238, 'Cape Verde'],
|
|
55
|
-
['CW', 599, 'Curaçao'],
|
|
56
|
-
['CX', 61, 'Christmas Island'],
|
|
57
|
-
['CY', 357, 'Cyprus'],
|
|
58
|
-
['CZ', 420, 'Czech Republic'],
|
|
59
|
-
['DE', 49, 'Germany'],
|
|
60
|
-
['DJ', 253, 'Djibouti'],
|
|
61
|
-
['DK', 45, 'Denmark'],
|
|
62
|
-
['DM', 1, 'Dominica'],
|
|
63
|
-
['DO', 1, 'Dominican Republic'],
|
|
64
|
-
['DZ', 213, 'Algeria'],
|
|
65
|
-
['EC', 593, 'Ecuador'],
|
|
66
|
-
['EE', 372, 'Estonia'],
|
|
67
|
-
['EG', 20, 'Egypt'],
|
|
68
|
-
['EH', 212, 'Western Sahara'],
|
|
69
|
-
['ER', 291, 'Eritrea'],
|
|
70
|
-
['ES', 34, 'Spain'],
|
|
71
|
-
['ET', 251, 'Ethiopia'],
|
|
72
|
-
['FI', 358, 'Finland'],
|
|
73
|
-
['FJ', 679, 'Fiji'],
|
|
74
|
-
['FK', 500, 'Falkland Islands'],
|
|
75
|
-
['FM', 691, 'Micronesia'],
|
|
76
|
-
['FO', 298, 'Faroe Islands'],
|
|
77
|
-
['FR', 33, 'France'],
|
|
78
|
-
['GA', 241, 'Gabon'],
|
|
79
|
-
['GB', 44, 'United Kingdom'],
|
|
80
|
-
['GD', 1, 'Grenada'],
|
|
81
|
-
['GE', 995, 'Georgia'],
|
|
82
|
-
['GF', 594, 'French Guiana'],
|
|
83
|
-
['GG', 44, 'Guernsey'],
|
|
84
|
-
['GH', 233, 'Ghana'],
|
|
85
|
-
['GI', 350, 'Gibraltar'],
|
|
86
|
-
['GL', 299, 'Greenland'],
|
|
87
|
-
['GM', 220, 'Gambia'],
|
|
88
|
-
['GN', 224, 'Guinea'],
|
|
89
|
-
['GP', 590, 'Guadeloupe'],
|
|
90
|
-
['GQ', 240, 'Equatorial Guinea'],
|
|
91
|
-
['GR', 30, 'Greece'],
|
|
92
|
-
['GT', 502, 'Guatemala'],
|
|
93
|
-
['GU', 1, 'Guam'],
|
|
94
|
-
['GW', 245, 'Guinea-Bissau'],
|
|
95
|
-
['GY', 592, 'Guyana'],
|
|
96
|
-
['HK', 852, 'Hong Kong'],
|
|
97
|
-
['HN', 504, 'Honduras'],
|
|
98
|
-
['HR', 385, 'Croatia'],
|
|
99
|
-
['HT', 509, 'Haiti'],
|
|
100
|
-
['HU', 36, 'Hungary'],
|
|
101
|
-
['ID', 62, 'Indonesia'],
|
|
102
|
-
['IE', 353, 'Ireland'],
|
|
103
|
-
['IL', 972, 'Israel'],
|
|
104
|
-
['IM', 44, 'Isle of Man'],
|
|
105
|
-
['IN', 91, 'India'],
|
|
106
|
-
['IO', 246, 'British Indian Ocean Territory'],
|
|
107
|
-
['IQ', 964, 'Iraq'],
|
|
108
|
-
['IR', 98, 'Iran'],
|
|
109
|
-
['IS', 354, 'Iceland'],
|
|
110
|
-
['IT', 39, 'Italy'],
|
|
111
|
-
['JE', 44, 'Jersey'],
|
|
112
|
-
['JM', 1, 'Jamaica'],
|
|
113
|
-
['JO', 962, 'Jordan'],
|
|
114
|
-
['JP', 81, 'Japan'],
|
|
115
|
-
['KE', 254, 'Kenya'],
|
|
116
|
-
['KG', 996, 'Kyrgyzstan'],
|
|
117
|
-
['KH', 855, 'Cambodia'],
|
|
118
|
-
['KI', 686, 'Kiribati'],
|
|
119
|
-
['KM', 269, 'Comoros'],
|
|
120
|
-
['KN', 1, 'Saint Kitts and Nevis'],
|
|
121
|
-
['KP', 850, 'North Korea'],
|
|
122
|
-
['KR', 82, 'South Korea'],
|
|
123
|
-
['KW', 965, 'Kuwait'],
|
|
124
|
-
['KY', 1, 'Cayman Islands'],
|
|
125
|
-
['KZ', 7, 'Kazakhstan'],
|
|
126
|
-
['LA', 856, 'Laos'],
|
|
127
|
-
['LB', 961, 'Lebanon'],
|
|
128
|
-
['LC', 1, 'Saint Lucia'],
|
|
129
|
-
['LI', 423, 'Liechtenstein'],
|
|
130
|
-
['LK', 94, 'Sri Lanka'],
|
|
131
|
-
['LR', 231, 'Liberia'],
|
|
132
|
-
['LS', 266, 'Lesotho'],
|
|
133
|
-
['LT', 370, 'Lithuania'],
|
|
134
|
-
['LU', 352, 'Luxembourg'],
|
|
135
|
-
['LV', 371, 'Latvia'],
|
|
136
|
-
['LY', 218, 'Libya'],
|
|
137
|
-
['MA', 212, 'Morocco'],
|
|
138
|
-
['MC', 377, 'Monaco'],
|
|
139
|
-
['MD', 373, 'Moldova'],
|
|
140
|
-
['ME', 382, 'Montenegro'],
|
|
141
|
-
['MF', 590, 'Saint Martin'],
|
|
142
|
-
['MG', 261, 'Madagascar'],
|
|
143
|
-
['MH', 692, 'Marshall Islands'],
|
|
144
|
-
['MK', 389, 'Macedonia'],
|
|
145
|
-
['ML', 223, 'Mali'],
|
|
146
|
-
['MM', 95, 'Myanmar'],
|
|
147
|
-
['MN', 976, 'Mongolia'],
|
|
148
|
-
['MO', 853, 'Macau'],
|
|
149
|
-
['MP', 1, 'Northern Mariana Islands'],
|
|
150
|
-
['MQ', 596, 'Martinique'],
|
|
151
|
-
['MR', 222, 'Mauritania'],
|
|
152
|
-
['MS', 1, 'Montserrat'],
|
|
153
|
-
['MT', 356, 'Malta'],
|
|
154
|
-
['MU', 230, 'Mauritius'],
|
|
155
|
-
['MV', 960, 'Maldives'],
|
|
156
|
-
['MW', 265, 'Malawi'],
|
|
157
|
-
['MX', 52, 'Mexico'],
|
|
158
|
-
['MY', 60, 'Malaysia'],
|
|
159
|
-
['MZ', 258, 'Mozambique'],
|
|
160
|
-
['NA', 264, 'Namibia'],
|
|
161
|
-
['NC', 687, 'New Caledonia'],
|
|
162
|
-
['NE', 227, 'Niger'],
|
|
163
|
-
['NF', 672, 'Norfolk Island'],
|
|
164
|
-
['NG', 234, 'Nigeria'],
|
|
165
|
-
['NI', 505, 'Nicaragua'],
|
|
166
|
-
['NL', 31, 'Netherlands'],
|
|
167
|
-
['NO', 47, 'Norway'],
|
|
168
|
-
['NP', 977, 'Nepal'],
|
|
169
|
-
['NR', 674, 'Nauru'],
|
|
170
|
-
['NU', 683, 'Niue'],
|
|
171
|
-
['OM', 968, 'Oman'],
|
|
172
|
-
['PA', 507, 'Panama'],
|
|
173
|
-
['PE', 51, 'Peru'],
|
|
174
|
-
['PF', 689, 'French Polynesia'],
|
|
175
|
-
['PG', 675, 'Papua New Guinea'],
|
|
176
|
-
['PH', 63, 'Philippines'],
|
|
177
|
-
['PK', 92, 'Pakistan'],
|
|
178
|
-
['PL', 48, 'Poland'],
|
|
179
|
-
['PM', 508, 'Saint Pierre and Miquelon'],
|
|
180
|
-
['PR', 1, 'Puerto Rico'],
|
|
181
|
-
['PS', 970, 'Palestine'],
|
|
182
|
-
['PT', 351, 'Portugal'],
|
|
183
|
-
['PW', 680, 'Palau'],
|
|
184
|
-
['PY', 595, 'Paraguay'],
|
|
185
|
-
['QA', 974, 'Qatar'],
|
|
186
|
-
['RE', 262, 'Réunion'],
|
|
187
|
-
['RO', 40, 'Romania'],
|
|
188
|
-
['RS', 381, 'Serbia'],
|
|
189
|
-
['RU', 7, 'Russia'],
|
|
190
|
-
['RW', 250, 'Rwanda'],
|
|
191
|
-
['SA', 966, 'Saudi Arabia'],
|
|
192
|
-
['SB', 677, 'Solomon Islands'],
|
|
193
|
-
['SC', 248, 'Seychelles'],
|
|
194
|
-
['SD', 249, 'Sudan'],
|
|
195
|
-
['SE', 46, 'Sweden'],
|
|
196
|
-
['SG', 65, 'Singapore'],
|
|
197
|
-
['SH', 290, 'Saint Helena'],
|
|
198
|
-
['SI', 386, 'Slovenia'],
|
|
199
|
-
['SJ', 47, 'Svalbard and Jan Mayen'],
|
|
200
|
-
['SK', 421, 'Slovakia'],
|
|
201
|
-
['SL', 232, 'Sierra Leone'],
|
|
202
|
-
['SM', 378, 'San Marino'],
|
|
203
|
-
['SN', 221, 'Senegal'],
|
|
204
|
-
['SO', 252, 'Somalia'],
|
|
205
|
-
['SR', 597, 'Suriname'],
|
|
206
|
-
['SS', 211, 'South Sudan'],
|
|
207
|
-
['ST', 239, 'São Tomé and Príncipe'],
|
|
208
|
-
['SV', 503, 'El Salvador'],
|
|
209
|
-
['SX', 1, 'Sint Maarten'],
|
|
210
|
-
['SY', 963, 'Syria'],
|
|
211
|
-
['SZ', 268, 'Swaziland'],
|
|
212
|
-
['TA', 290, 'Tristan da Cunha'],
|
|
213
|
-
['TC', 1, 'Turks and Caicos Islands'],
|
|
214
|
-
['TD', 235, 'Chad'],
|
|
215
|
-
['TG', 228, 'Togo'],
|
|
216
|
-
['TH', 66, 'Thailand'],
|
|
217
|
-
['TJ', 992, 'Tajikistan'],
|
|
218
|
-
['TK', 690, 'Tokelau'],
|
|
219
|
-
['TL', 670, 'Timor-Leste'],
|
|
220
|
-
['TM', 993, 'Turkmenistan'],
|
|
221
|
-
['TN', 216, 'Tunisia'],
|
|
222
|
-
['TO', 676, 'Tonga'],
|
|
223
|
-
['TR', 90, 'Turkey'],
|
|
224
|
-
['TT', 1, 'Trinidad and Tobago'],
|
|
225
|
-
['TV', 688, 'Tuvalu'],
|
|
226
|
-
['TW', 886, 'Taiwan'],
|
|
227
|
-
['TZ', 255, 'Tanzania'],
|
|
228
|
-
['UA', 380, 'Ukraine'],
|
|
229
|
-
['UG', 256, 'Uganda'],
|
|
230
|
-
['UY', 598, 'Uruguay'],
|
|
231
|
-
['UZ', 998, 'Uzbekistan'],
|
|
232
|
-
['VA', 39, 'Vatican City'],
|
|
233
|
-
['VC', 1, 'Saint Vincent and the Grenadines'],
|
|
234
|
-
['VE', 58, 'Venezuela'],
|
|
235
|
-
['VG', 1, 'British Virgin Islands'],
|
|
236
|
-
['VI', 1, 'U.S. Virgin Islands'],
|
|
237
|
-
['VN', 84, 'Vietnam'],
|
|
238
|
-
['VU', 678, 'Vanuatu'],
|
|
239
|
-
['WF', 681, 'Wallis and Futuna'],
|
|
240
|
-
['WS', 685, 'Samoa'],
|
|
241
|
-
['XK', 383, 'Kosovo'],
|
|
242
|
-
['YE', 967, 'Yemen'],
|
|
243
|
-
['YT', 262, 'Mayotte'],
|
|
244
|
-
['ZA', 27, 'South Africa'],
|
|
245
|
-
['ZM', 260, 'Zambia'],
|
|
246
|
-
['ZW', 263, 'Zimbabwe'],
|
|
247
|
-
] as const;
|
|
248
|
-
|
|
249
|
-
export type CountryISO = typeof COUNTRY_CODE_METADATA[number][0];
|
|
250
|
-
|
|
251
|
-
export const DEFAULT_COUNTRY: CountryISO = 'US';
|
|
252
|
-
|
|
253
|
-
const COUNTRIES: CountryISO[] = [];
|
|
254
|
-
const COUNTRY_CODE_MAP = new Map<CountryISO, number>();
|
|
255
|
-
const COUNTRY_NAME_MAP = new Map<CountryISO, string>();
|
|
256
|
-
|
|
257
|
-
for (const [country, code, name] of COUNTRY_CODE_METADATA) {
|
|
258
|
-
COUNTRIES.push(country);
|
|
259
|
-
COUNTRY_CODE_MAP.set(country, code);
|
|
260
|
-
COUNTRY_NAME_MAP.set(country, name);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
export function listCountries(): readonly CountryISO[] {
|
|
264
|
-
return COUNTRIES;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
export function isCountryISO(value: unknown): value is CountryISO {
|
|
268
|
-
return typeof value == 'string' && COUNTRY_CODE_MAP.has(value as CountryISO);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
export function toCountryISO(value: unknown): CountryISO {
|
|
272
|
-
return isCountryISO(value) ? value : DEFAULT_COUNTRY;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
export function getCountryCode(country: CountryISO): number {
|
|
276
|
-
return COUNTRY_CODE_MAP.get(country) || 0;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
export function formatCountry(country: CountryISO): string {
|
|
280
|
-
return COUNTRY_NAME_MAP.get(country) || 'Invalid Country ISO';
|
|
281
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
PhoneFormatOptions,
|
|
4
|
-
usePhoneService,
|
|
5
|
-
} from '../phone-service/PhoneService';
|
|
6
|
-
|
|
7
|
-
export function useFormattedPhoneNumber(
|
|
8
|
-
input: unknown,
|
|
9
|
-
{ format, country, fallback = '' }: PhoneFormatOptions = {},
|
|
10
|
-
): string {
|
|
11
|
-
const phoneService = usePhoneService();
|
|
12
|
-
|
|
13
|
-
return useMemo(() => {
|
|
14
|
-
if (phoneService.checkPossibility(input) !== 'is-possible') {
|
|
15
|
-
return fallback;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return phoneService.format(input, { format, country, fallback });
|
|
19
|
-
}, [phoneService, input, format, country, fallback]);
|
|
20
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from './country-code-metadata/CountryCodeMetadata';
|
|
2
|
-
export * from './formatted-phone-number/FormattedPhoneNumber';
|
|
3
|
-
export * from './phone-field/PhoneField';
|
|
4
|
-
export * from './phone-link/PhoneLink';
|
|
5
|
-
export * from './phone-service/PhoneService';
|
|
6
|
-
export * from './phone-text/PhoneText';
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { forwardRef, useMemo, useState } from 'react';
|
|
2
|
-
import { usePhoneService } from '../phone-service/PhoneService';
|
|
3
|
-
import { PhoneField as SdPhoneField, PhoneFieldProps } from './PhoneField';
|
|
4
|
-
|
|
5
|
-
export const PhoneField = forwardRef<HTMLDivElement, PhoneFieldProps>(
|
|
6
|
-
({ value, onChange, error, helperText, ...props }, ref) => {
|
|
7
|
-
const [state, setState] = useState('');
|
|
8
|
-
const phoneService = usePhoneService();
|
|
9
|
-
const errorMessage = useMemo(
|
|
10
|
-
() => phoneService.validate(value),
|
|
11
|
-
[value, phoneService],
|
|
12
|
-
);
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<SdPhoneField
|
|
16
|
-
{...props}
|
|
17
|
-
ref={ref}
|
|
18
|
-
value={value ?? state}
|
|
19
|
-
error={error ?? !!errorMessage}
|
|
20
|
-
helperText={helperText ?? errorMessage}
|
|
21
|
-
onChange={(nextValue) => {
|
|
22
|
-
setState(nextValue);
|
|
23
|
-
onChange?.(nextValue);
|
|
24
|
-
}}
|
|
25
|
-
/>
|
|
26
|
-
);
|
|
27
|
-
},
|
|
28
|
-
);
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { extractCSS, renderComponent } from '@superdispatch/ui-testutils';
|
|
2
|
-
import { screen } from '@testing-library/react';
|
|
3
|
-
import userEvent from '@testing-library/user-event';
|
|
4
|
-
import { useEffect, useState } from 'react';
|
|
5
|
-
import { PhoneField, PhoneFieldProps } from './PhoneField';
|
|
6
|
-
|
|
7
|
-
function UncontrolledPhoneField({ value, ...props }: PhoneFieldProps) {
|
|
8
|
-
const [phone, setPhone] = useState(value);
|
|
9
|
-
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
setPhone(value);
|
|
12
|
-
}, [value]);
|
|
13
|
-
|
|
14
|
-
return <PhoneField {...props} value={phone} onChange={setPhone} />;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
test('basic', async () => {
|
|
18
|
-
renderComponent(<PhoneField />);
|
|
19
|
-
|
|
20
|
-
await screen.findByRole('textbox');
|
|
21
|
-
|
|
22
|
-
expect(screen.getByRole('textbox')).toHaveAttribute(
|
|
23
|
-
'placeholder',
|
|
24
|
-
'201-555-0123',
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
expect(screen.getByRole('button')).toHaveTextContent('+1');
|
|
28
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
29
|
-
'title',
|
|
30
|
-
'United States: +1',
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
expect(screen.getByRole('button')).toContainElement(
|
|
34
|
-
screen.getByRole('img', { name: 'US' }),
|
|
35
|
-
);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
test('controlled', async () => {
|
|
39
|
-
renderComponent(<PhoneField value="+123" />);
|
|
40
|
-
|
|
41
|
-
await screen.findByRole('textbox');
|
|
42
|
-
|
|
43
|
-
expect(screen.getByRole('textbox')).toHaveValue('23');
|
|
44
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
45
|
-
'title',
|
|
46
|
-
'United States: +1',
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
userEvent.type(screen.getByRole('textbox'), '123123');
|
|
50
|
-
|
|
51
|
-
expect(screen.getByRole('textbox')).toHaveValue('23');
|
|
52
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
53
|
-
'title',
|
|
54
|
-
'United States: +1',
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
userEvent.click(screen.getByRole('button'));
|
|
58
|
-
userEvent.click(screen.getByRole('menuitem', { name: /Australia/ }));
|
|
59
|
-
|
|
60
|
-
expect(screen.getByRole('textbox')).toHaveValue('23');
|
|
61
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
62
|
-
'title',
|
|
63
|
-
'United States: +1',
|
|
64
|
-
);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test('interactive', async () => {
|
|
68
|
-
renderComponent(<UncontrolledPhoneField />);
|
|
69
|
-
|
|
70
|
-
await screen.findByRole('textbox');
|
|
71
|
-
|
|
72
|
-
expect(screen.getByRole('textbox')).toHaveValue('');
|
|
73
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
74
|
-
'title',
|
|
75
|
-
'United States: +1',
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
userEvent.click(screen.getByRole('button'));
|
|
79
|
-
userEvent.click(screen.getByRole('menuitem', { name: /Australia/ }));
|
|
80
|
-
|
|
81
|
-
expect(screen.getByRole('textbox')).toHaveValue('');
|
|
82
|
-
expect(screen.getByRole('button')).toHaveAttribute('title', 'Australia: +61');
|
|
83
|
-
|
|
84
|
-
userEvent.type(screen.getByRole('textbox'), '123');
|
|
85
|
-
|
|
86
|
-
expect(screen.getByRole('textbox')).toHaveValue('123');
|
|
87
|
-
expect(screen.getByRole('button')).toHaveAttribute('title', 'Australia: +61');
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test('local state sync with the props', async () => {
|
|
91
|
-
const view = renderComponent(<UncontrolledPhoneField />);
|
|
92
|
-
|
|
93
|
-
await screen.findByRole('textbox');
|
|
94
|
-
|
|
95
|
-
expect(screen.getByRole('textbox')).toHaveValue('');
|
|
96
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
97
|
-
'title',
|
|
98
|
-
'United States: +1',
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
userEvent.type(screen.getByRole('textbox'), '!5@0#6$ %2^3&4* (5)6-7_8=');
|
|
102
|
-
|
|
103
|
-
expect(screen.getByRole('textbox')).toHaveValue('506-234-5678');
|
|
104
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
105
|
-
'title',
|
|
106
|
-
'United States: +1',
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
// Using same phone as in the state.
|
|
110
|
-
view.rerender(<UncontrolledPhoneField value="+15062345678" />);
|
|
111
|
-
|
|
112
|
-
expect(screen.getByRole('textbox')).toHaveValue('506-234-5678');
|
|
113
|
-
expect(screen.getByRole('button')).toHaveAttribute(
|
|
114
|
-
'title',
|
|
115
|
-
'United States: +1',
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
// Using same phone number with the different format
|
|
119
|
-
view.rerender(<UncontrolledPhoneField value="+1 (506) 234-5678" />);
|
|
120
|
-
|
|
121
|
-
expect(screen.getByRole('textbox')).toHaveValue('506-234-5678');
|
|
122
|
-
expect(screen.getByRole('button')).toHaveAttribute('title', 'Canada: +1');
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test('css', async () => {
|
|
126
|
-
renderComponent(<PhoneField />);
|
|
127
|
-
|
|
128
|
-
await screen.findByRole('textbox');
|
|
129
|
-
|
|
130
|
-
expect(
|
|
131
|
-
extractCSS([
|
|
132
|
-
'SD-PhoneFieldFlag',
|
|
133
|
-
'SD-PhoneFieldMenu',
|
|
134
|
-
'SD-PhoneFieldStartAdornment',
|
|
135
|
-
]),
|
|
136
|
-
).toMatchInlineSnapshot(`
|
|
137
|
-
.SD-PhoneFieldFlag-root {
|
|
138
|
-
min-width: 22px;
|
|
139
|
-
min-height: 16px;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.SD-PhoneFieldMenu-paper {
|
|
143
|
-
max-height: 240px;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
.SD-PhoneFieldStartAdornment-root {
|
|
147
|
-
margin-left: -8px;
|
|
148
|
-
margin-right: 0;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.SD-PhoneFieldStartAdornment-button {
|
|
152
|
-
color: Color.Blue300;
|
|
153
|
-
padding: 4px 4px 4px 8px;
|
|
154
|
-
border-radius: 4px 0px 0px 4px;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.SD-PhoneFieldStartAdornment-button:hover,
|
|
158
|
-
.SD-PhoneFieldStartAdornment-button:focus {
|
|
159
|
-
background-color: Color.Blue50;
|
|
160
|
-
}
|
|
161
|
-
`);
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
test('without national code', async () => {
|
|
165
|
-
renderComponent(<PhoneField value="+79220059805" />);
|
|
166
|
-
|
|
167
|
-
await screen.findByRole('textbox');
|
|
168
|
-
|
|
169
|
-
expect(screen.getByRole('button')).toHaveAttribute('title', 'Russia: +7');
|
|
170
|
-
expect(screen.getByRole('textbox')).toHaveValue('922 005-98-05');
|
|
171
|
-
});
|