@digigov/form 1.1.5-496927f3 → 1.2.0-01ea6f24
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/Questions/__snapshots__/index.spec.tsx.snap +30 -30
- package/cjs/Questions/__snapshots__/index.spec.tsx.snap +30 -30
- package/cjs/inputs/ImageInput/index.js +2 -2
- package/cjs/inputs/Input/Input.stories/index.js +12 -0
- package/cjs/inputs/Input/__stories__/LandlineNumber/index.js +36 -0
- package/cjs/inputs/Input/__stories__/MobilePhone/index.js +4 -0
- package/cjs/inputs/Input/__stories__/PhoneNumber/index.js +4 -1
- package/cjs/lazy/index.js +517 -0
- package/cjs/validators/utils/phone/index.js +94 -70
- package/index.js +1 -1
- package/inputs/ImageInput/index.js +2 -2
- package/inputs/Input/Input.stories/index.js +1 -0
- package/inputs/Input/Input.stories.d.ts +1 -0
- package/inputs/Input/__stories__/LandlineNumber/index.js +26 -0
- package/inputs/Input/__stories__/LandlineNumber/package.json +6 -0
- package/inputs/Input/__stories__/LandlineNumber.d.ts +3 -0
- package/inputs/Input/__stories__/MobilePhone/index.js +4 -0
- package/inputs/Input/__stories__/PhoneNumber/index.js +4 -1
- package/lazy/index.js +395 -0
- package/lazy/package.json +6 -0
- package/lazy.d.ts +69 -0
- package/package.json +4 -5
- package/src/Questions/__snapshots__/index.spec.tsx.snap +30 -30
- package/src/inputs/ImageInput/index.tsx +2 -2
- package/src/inputs/Input/Input.stories.js +1 -0
- package/src/inputs/Input/__stories__/LandlineNumber.tsx +27 -0
- package/src/inputs/Input/__stories__/MobilePhone.tsx +4 -0
- package/src/inputs/Input/__stories__/PhoneNumber.tsx +4 -1
- package/src/lazy.js +60 -0
- package/src/validators/utils/phone.ts +152 -72
- package/validators/utils/phone/index.js +92 -66
- package/validators/utils/phone.d.ts +2 -2
|
@@ -1,76 +1,102 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
// add more countries from here libphonenumber-js/metadata.full.json
|
|
3
|
+
var countryPhoneData = {
|
|
4
|
+
"GR": ["30", "00", "5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}", [10, 11, 12], [["(\\d{2})(\\d{4})(\\d{4})", "$1 $2 $3", ["21|7"]], ["(\\d{4})(\\d{6})", "$1 $2", ["2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5"]], ["(\\d{3})(\\d{3})(\\d{4})", "$1 $2 $3", ["[2689]"]], ["(\\d{3})(\\d{3,4})(\\d{5})", "$1 $2 $3", ["8"]]], 0, 0, 0, 0, 0, 0, [["2(?:1\\d\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-57]))\\d{6}", [10]], ["68[57-9]\\d{7}|(?:69|94)\\d{8}", [10]], ["800\\d{7,9}"], ["90[19]\\d{7}", [10]], ["70\\d{8}", [10]], 0, ["5005000\\d{3}", [10]], 0, 0, ["8(?:0[16]|12|[27]5|50)\\d{7}", [10]]]]
|
|
5
|
+
};
|
|
6
|
+
function expandPhoneNumberStructure(compressed) {
|
|
7
|
+
var countries = Object.keys(compressed);
|
|
8
|
+
var expanded = {};
|
|
9
|
+
for (var _i = 0, _countries = countries; _i < _countries.length; _i++) {
|
|
10
|
+
var country = _countries[_i];
|
|
11
|
+
expanded[country] = {
|
|
12
|
+
fixedLine: {
|
|
13
|
+
possibleLengths: {
|
|
14
|
+
_national: compressed[country][3].map(String)
|
|
15
|
+
},
|
|
16
|
+
nationalNumberPattern: compressed[country][11][0][0]
|
|
17
|
+
},
|
|
18
|
+
mobile: {
|
|
19
|
+
nationalNumberPattern: compressed[country][11][1][0]
|
|
20
|
+
},
|
|
21
|
+
tollFree: {
|
|
22
|
+
nationalNumberPattern: compressed[country][11][2][0]
|
|
23
|
+
},
|
|
24
|
+
premiumRate: {
|
|
25
|
+
nationalNumberPattern: compressed[country][11][3][0]
|
|
26
|
+
},
|
|
27
|
+
sharedCost: {
|
|
28
|
+
nationalNumberPattern: compressed[country][11][9][0]
|
|
29
|
+
},
|
|
30
|
+
personalNumber: {
|
|
31
|
+
nationalNumberPattern: compressed[country][11][4][0]
|
|
32
|
+
},
|
|
33
|
+
uan: {
|
|
34
|
+
nationalNumberPattern: compressed[country][11][6][0]
|
|
35
|
+
},
|
|
36
|
+
id: country,
|
|
37
|
+
countryCode: compressed[country][0],
|
|
38
|
+
internationalPrefix: compressed[country][1]
|
|
39
|
+
};
|
|
8
40
|
}
|
|
9
|
-
return
|
|
10
|
-
try {
|
|
11
|
-
var phone = phoneUtil.parse(phoneNumber, country.toUpperCase());
|
|
12
|
-
if (phoneUtil.isValidNumber(phone)) {
|
|
13
|
-
if (typeOfPhoneNumber) {
|
|
14
|
-
if (matchTypeOfPhoneNumber(phone, typeOfPhoneNumber, phoneUtil)) {
|
|
15
|
-
return true;
|
|
16
|
-
} else {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
} else {
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return false;
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error(error);
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
41
|
+
return expanded;
|
|
29
42
|
}
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
var PHONENUMBER_SPEC = expandPhoneNumberStructure(countryPhoneData);
|
|
44
|
+
export function discoverPhoneType(phoneNumber, config) {
|
|
45
|
+
var cleanNumber = phoneNumber.replace(/\D/g, "").replace(/\s/g, "").replace(/^\+/, "").replace(new RegExp("^" + config.internationalPrefix, ""), "").replace(new RegExp("^" + config.countryCode, ""), "");
|
|
46
|
+
var categories = {
|
|
47
|
+
"landline": config.fixedLine,
|
|
48
|
+
mobile: config.mobile,
|
|
49
|
+
"toll-free": config.tollFree,
|
|
50
|
+
"premium-rate": config.premiumRate
|
|
51
|
+
};
|
|
52
|
+
for (var _i2 = 0, _Object$entries = Object.entries(categories); _i2 < _Object$entries.length; _i2++) {
|
|
53
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
|
|
54
|
+
categoryName = _Object$entries$_i[0],
|
|
55
|
+
categoryDetails = _Object$entries$_i[1];
|
|
56
|
+
var pattern = new RegExp("^(" + categoryDetails.nationalNumberPattern.replace(/\s/g, "") + ")$", "");
|
|
57
|
+
if (cleanNumber.match(pattern)) {
|
|
58
|
+
return categoryName; // Returns the category name if the number matches the pattern
|
|
43
59
|
}
|
|
44
|
-
} catch (error) {
|
|
45
|
-
console.error(error);
|
|
46
|
-
return false;
|
|
47
60
|
}
|
|
61
|
+
|
|
62
|
+
// If no category matches, return 'Unknown'
|
|
63
|
+
return "unknown";
|
|
48
64
|
}
|
|
49
|
-
function
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!value.match(/^((\+|00){0,1}\d{1,3}[- ]?)?\d{10}$/)) {
|
|
54
|
-
return false;
|
|
65
|
+
function getNumberType(phoneNumber, country) {
|
|
66
|
+
var spec = PHONENUMBER_SPEC[country.toUpperCase()];
|
|
67
|
+
if (!spec) {
|
|
68
|
+
throw new Error("Country ".concat(country, " is not supported"));
|
|
55
69
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
value = '+30' + origValue;
|
|
66
|
-
phone = phoneUtil.parse(value);
|
|
67
|
-
}
|
|
70
|
+
var type = discoverPhoneType(phoneNumber, spec);
|
|
71
|
+
return type;
|
|
72
|
+
}
|
|
73
|
+
function isPhoneNumberValid(phoneNumber, countries) {
|
|
74
|
+
var types = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['mobile', 'landline'];
|
|
75
|
+
return countries.some(function (country) {
|
|
76
|
+
var numberType = getNumberType(phoneNumber, country);
|
|
77
|
+
if (numberType && types.includes(numberType)) {
|
|
78
|
+
return true;
|
|
68
79
|
}
|
|
69
|
-
return phoneUtil.isValidNumber(phone);
|
|
70
|
-
} catch (err) {
|
|
71
|
-
console.error(err);
|
|
72
80
|
return false;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function isNumberOfType(phoneNumber, country, type) {
|
|
84
|
+
var numberType = getNumberType(phoneNumber, country);
|
|
85
|
+
if (numberType === type) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
export function validatePhoneNumber(phoneNumber) {
|
|
91
|
+
var countries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['gr'];
|
|
92
|
+
var typeOfPhoneNumber = arguments.length > 2 ? arguments[2] : undefined;
|
|
93
|
+
if (!countries || countries.length === 0) {
|
|
94
|
+
return true;
|
|
73
95
|
}
|
|
96
|
+
return isPhoneNumberValid(phoneNumber, countries, typeOfPhoneNumber ? [typeOfPhoneNumber] : undefined);
|
|
97
|
+
}
|
|
98
|
+
function validateMobile(value) {
|
|
99
|
+
return isNumberOfType(value, 'gr', 'mobile');
|
|
74
100
|
}
|
|
75
101
|
export var MOBILE_PHONE_VALIDATOR = {
|
|
76
102
|
name: 'mobile-phone-validator',
|
|
@@ -84,7 +110,7 @@ export var MOBILE_PHONE_VALIDATOR = {
|
|
|
84
110
|
};
|
|
85
111
|
export var PHONE_NUMBER_VALIDATOR = function PHONE_NUMBER_VALIDATOR(field) {
|
|
86
112
|
var _field$extra, _field$extra2;
|
|
87
|
-
var
|
|
113
|
+
var countryCodes = field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.countries;
|
|
88
114
|
var typeOfPhone = field === null || field === void 0 ? void 0 : (_field$extra2 = field.extra) === null || _field$extra2 === void 0 ? void 0 : _field$extra2.phoneType;
|
|
89
115
|
return {
|
|
90
116
|
name: 'phone-number-validator',
|
|
@@ -102,7 +128,7 @@ export var PHONE_NUMBER_VALIDATOR = function PHONE_NUMBER_VALIDATOR(field) {
|
|
|
102
128
|
if (!value) {
|
|
103
129
|
return true;
|
|
104
130
|
}
|
|
105
|
-
return validatePhoneNumber(value,
|
|
131
|
+
return validatePhoneNumber(value, countryCodes, typeOfPhone);
|
|
106
132
|
}
|
|
107
133
|
};
|
|
108
134
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { FieldSpec } from '@digigov/form/types';
|
|
2
2
|
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
3
3
|
export type PhoneNumberType = 'landline' | 'mobile' | null;
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
4
|
+
export declare function discoverPhoneType(phoneNumber: string, config: any): string;
|
|
5
|
+
export declare function validatePhoneNumber(phoneNumber: string, countries?: Array<string>, typeOfPhoneNumber?: PhoneNumberType): boolean;
|
|
6
6
|
export declare const MOBILE_PHONE_VALIDATOR: {
|
|
7
7
|
name: string;
|
|
8
8
|
message: string;
|