/
Field.ts
64 lines (53 loc) · 2.08 KB
/
Field.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { clearArray } from './clearArray';
import { FieldFeedbackType } from './FieldFeedbackType';
import { FieldFeedbackValidation } from './FieldFeedbackValidation';
import { HTMLInput, TextInput } from './InputElement';
// Field is a better name than Input, [Django Form fields](https://docs.djangoproject.com/en/1.11/ref/forms/fields/)
export class Field {
public readonly validations: FieldFeedbackValidation[] = [];
// Can be useful for the user to get the DOM element
// https://github.com/tkrotoff/react-form-with-constraints/issues/41
//
// Populated by FormWithConstraints.validateField()
//
// Cannot be set as readonly :/
public element?: HTMLInput | TextInput;
constructor(public readonly name: string) {}
addOrReplaceValidation(validation: FieldFeedbackValidation) {
// [Update if exists or add new element to array of objects](https://stackoverflow.com/a/49375465/990356)
const i = this.validations.findIndex(_validation => _validation.key === validation.key);
if (i > -1) this.validations[i] = validation;
else this.validations.push(validation);
}
clearValidations() {
clearArray(this.validations);
}
hasFeedbacksOfType(type: FieldFeedbackType, fieldFeedbacksKey?: string) {
return this.validations.some(
fieldFeedback =>
(fieldFeedbacksKey === undefined ||
fieldFeedback.key.startsWith(`${fieldFeedbacksKey}.`)) &&
fieldFeedback.type === type &&
fieldFeedback.show === true
);
}
hasErrors(fieldFeedbacksKey?: string) {
return this.hasFeedbacksOfType(FieldFeedbackType.Error, fieldFeedbacksKey);
}
hasWarnings(fieldFeedbacksKey?: string) {
return this.hasFeedbacksOfType(FieldFeedbackType.Warning, fieldFeedbacksKey);
}
hasInfos(fieldFeedbacksKey?: string) {
return this.hasFeedbacksOfType(FieldFeedbackType.Info, fieldFeedbacksKey);
}
hasFeedbacks(fieldFeedbacksKey?: string) {
return (
this.hasErrors(fieldFeedbacksKey) ||
this.hasWarnings(fieldFeedbacksKey) ||
this.hasInfos(fieldFeedbacksKey)
);
}
isValid() {
return !this.hasErrors();
}
}