aboutsummaryrefslogtreecommitdiffstats
path: root/src/helpers/validation-helpers.ts
diff options
context:
space:
mode:
authorLibravatar Markus Hatvan <markus_hatvan@aon.at>2021-09-14 10:34:04 +0200
committerLibravatar GitHub <noreply@github.com>2021-09-14 10:34:04 +0200
commit979ec02c9a1019152be08705986337e470eabb57 (patch)
tree6021179ad8649112717a499780f475275af487f2 /src/helpers/validation-helpers.ts
parentrefactor: defensive programming to avoid javascript error for unread badges (diff)
downloadferdium-app-979ec02c9a1019152be08705986337e470eabb57.tar.gz
ferdium-app-979ec02c9a1019152be08705986337e470eabb57.tar.zst
ferdium-app-979ec02c9a1019152be08705986337e470eabb57.zip
chore: codebase improvements (#1930)
Diffstat (limited to 'src/helpers/validation-helpers.ts')
-rw-r--r--src/helpers/validation-helpers.ts97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/helpers/validation-helpers.ts b/src/helpers/validation-helpers.ts
new file mode 100644
index 000000000..80d368b2e
--- /dev/null
+++ b/src/helpers/validation-helpers.ts
@@ -0,0 +1,97 @@
1import { defineMessages } from 'react-intl';
2import isEmail from 'validator/lib/isEmail';
3
4const messages = defineMessages({
5 required: {
6 id: 'validation.required',
7 defaultMessage: 'Field is required',
8 },
9 email: {
10 id: 'validation.email',
11 defaultMessage: 'Email not valid',
12 },
13 url: {
14 id: 'validation.url',
15 defaultMessage: 'Not a valid URL',
16 },
17 minLength: {
18 id: 'validation.minLength',
19 defaultMessage: 'Too few characters',
20 },
21 oneRequired: {
22 id: 'validation.oneRequired',
23 defaultMessage: 'At least one is required',
24 },
25});
26
27export function required({ field }) {
28 const isValid = field.value.trim() !== '';
29 return [
30 isValid,
31 (window as any).ferdi.intl.formatMessage(messages.required, {
32 field: field.label,
33 }),
34 ];
35}
36
37export function email({ field }) {
38 const value = field.value.trim();
39 const isValid = isEmail(value);
40 return [
41 isValid,
42 (window as any).ferdi.intl.formatMessage(messages.email, {
43 field: field.label,
44 }),
45 ];
46}
47
48export function url({ field }) {
49 const value = field.value.trim();
50 let isValid = false;
51
52 if (value !== '') {
53 // eslint-disable-next-line
54 isValid = Boolean(
55 value.match(
56 /(^|[\s.:;?\-\]<(])(https?:\/\/[-\w;/?:@&=+$|_.!~*|'()[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',|().:;?\-[\]>)])/i,
57 ),
58 );
59 } else {
60 isValid = true;
61 }
62
63 return [
64 isValid,
65 (window as any).ferdi.intl.formatMessage(messages.url, {
66 field: field.label,
67 }),
68 ];
69}
70
71export function minLength(length: number) {
72 return ({ field }) => {
73 let isValid = true;
74 if (field.touched) {
75 isValid = field.value.length >= length;
76 }
77 return [
78 isValid,
79 (window as any).ferdi.intl.formatMessage(messages.minLength, {
80 field: field.label,
81 length,
82 }),
83 ];
84 };
85}
86
87export function oneRequired(targets: string[]) {
88 return ({ field, form }) => {
89 const invalidFields = targets.filter(target => form.$(target).value === '');
90 return [
91 targets.length !== invalidFields.length,
92 (window as any).ferdi.intl.formatMessage(messages.required, {
93 field: field.label,
94 }),
95 ];
96 };
97}