]>
Commit | Line | Data |
---|---|---|
7ed1edbb C |
1 | import { AbstractControl, FormControl, ValidatorFn, Validators } from '@angular/forms' |
2 | import { BuildFormValidator } from './form-validator.model' | |
3 | import { validateHost } from './host' | |
4 | ||
5 | export function getNotEmptyHosts (hosts: string) { | |
6 | return hosts | |
7 | .split('\n') | |
8 | .filter((host: string) => host && host.length !== 0) // Eject empty hosts | |
9 | } | |
10 | ||
11 | const validDomains: ValidatorFn = (control: FormControl) => { | |
12 | if (!control.value) return null | |
13 | ||
14 | const newHostsErrors = [] | |
15 | const hosts = getNotEmptyHosts(control.value) | |
16 | ||
17 | for (const host of hosts) { | |
18 | if (validateHost(host) === false) { | |
19 | newHostsErrors.push($localize`${host} is not valid`) | |
20 | } | |
21 | } | |
22 | ||
23 | /* Is not valid. */ | |
24 | if (newHostsErrors.length !== 0) { | |
25 | return { | |
26 | 'validDomains': { | |
27 | reason: 'invalid', | |
28 | value: newHostsErrors.join('. ') + '.' | |
29 | } | |
30 | } | |
31 | } | |
32 | ||
33 | /* Is valid. */ | |
34 | return null | |
35 | } | |
36 | ||
37 | const isHostsUnique: ValidatorFn = (control: AbstractControl) => { | |
38 | if (!control.value) return null | |
39 | ||
40 | const hosts = getNotEmptyHosts(control.value) | |
41 | ||
42 | if (hosts.every((host: string) => hosts.indexOf(host) === hosts.lastIndexOf(host))) { | |
43 | return null | |
44 | } else { | |
45 | return { | |
46 | 'uniqueDomains': { | |
47 | reason: 'invalid' | |
48 | } | |
49 | } | |
50 | } | |
51 | } | |
52 | ||
53 | export const DOMAINS_VALIDATOR: BuildFormValidator = { | |
54 | VALIDATORS: [Validators.required, validDomains, isHostsUnique], | |
55 | MESSAGES: { | |
56 | 'required': $localize`Domain is required.`, | |
57 | 'validDomains': $localize`Domains entered are invalid.`, | |
58 | 'uniqueDomains': $localize`Domains entered contain duplicates.` | |
59 | } | |
60 | } |