@rolster/forms 2.0.0

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.
Files changed (42) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/helpers.js +73 -0
  3. package/dist/cjs/helpers.js.map +1 -0
  4. package/dist/cjs/index.js +476 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/es/helpers.js +61 -0
  7. package/dist/es/helpers.js.map +1 -0
  8. package/dist/es/index.js +465 -0
  9. package/dist/es/index.js.map +1 -0
  10. package/dist/esm/arguments.d.ts +18 -0
  11. package/dist/esm/arguments.js +37 -0
  12. package/dist/esm/arguments.js.map +1 -0
  13. package/dist/esm/form-array/form-array-control.d.ts +11 -0
  14. package/dist/esm/form-array/form-array-control.js +11 -0
  15. package/dist/esm/form-array/form-array-control.js.map +1 -0
  16. package/dist/esm/form-array/form-array-group.d.ts +11 -0
  17. package/dist/esm/form-array/form-array-group.js +12 -0
  18. package/dist/esm/form-array/form-array-group.js.map +1 -0
  19. package/dist/esm/form-array/form-array.d.ts +46 -0
  20. package/dist/esm/form-array/form-array.js +127 -0
  21. package/dist/esm/form-array/form-array.js.map +1 -0
  22. package/dist/esm/form-array/index.d.ts +3 -0
  23. package/dist/esm/form-array/index.js +4 -0
  24. package/dist/esm/form-array/index.js.map +1 -0
  25. package/dist/esm/form-control.d.ts +44 -0
  26. package/dist/esm/form-control.js +114 -0
  27. package/dist/esm/form-control.js.map +1 -0
  28. package/dist/esm/form-group.d.ts +33 -0
  29. package/dist/esm/form-group.js +94 -0
  30. package/dist/esm/form-group.js.map +1 -0
  31. package/dist/esm/helpers.d.ts +24 -0
  32. package/dist/esm/helpers.js +59 -0
  33. package/dist/esm/helpers.js.map +1 -0
  34. package/dist/esm/index.d.ts +5 -0
  35. package/dist/esm/index.js +6 -0
  36. package/dist/esm/index.js.map +1 -0
  37. package/dist/esm/types.d.ts +127 -0
  38. package/dist/esm/types.js +2 -0
  39. package/dist/esm/types.js.map +1 -0
  40. package/helpers/package.json +8 -0
  41. package/package.json +76 -0
  42. package/readme.md +13 -0
@@ -0,0 +1,11 @@
1
+ import { ValidatorFn } from '@rolster/validators';
2
+ import { FormControl } from '../form-control';
3
+ import { AbstractArrayControl, FormArrayControlProps, FormState } from '../types';
4
+ type ArrayControlProps<T> = Omit<FormArrayControlProps<T>, 'uuid'>;
5
+ export declare class FormArrayControl<T = any> extends FormControl<T> implements AbstractArrayControl<T> {
6
+ readonly uuid: string;
7
+ constructor();
8
+ constructor(props: ArrayControlProps<T>);
9
+ constructor(state: FormState<T>, validators?: ValidatorFn<T>[]);
10
+ }
11
+ export {};
@@ -0,0 +1,11 @@
1
+ import { v4 as uuid } from 'uuid';
2
+ import { createFormControlProps } from '../arguments';
3
+ import { FormControl } from '../form-control';
4
+ export class FormArrayControl extends FormControl {
5
+ constructor(controlProps, controlValidators) {
6
+ const { state, validators } = createFormControlProps(controlProps, controlValidators);
7
+ super(state, validators);
8
+ this.uuid = uuid();
9
+ }
10
+ }
11
+ //# sourceMappingURL=form-array-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-array-control.js","sourceRoot":"","sources":["../../../src/form-array/form-array-control.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAS9C,MAAM,OAAO,gBACX,SAAQ,WAAc;IAQtB,YACE,YAAkD,EAClD,iBAAoC;QAEpC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,sBAAsB,CAClD,YAAY,EACZ,iBAAiB,CAClB,CAAC;QAEF,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { FormGroup } from '../form-group';
2
+ import { AbstractArrayControl, AbstractArrayGroup, AbstractControls, FormArrayGroupProps, ValidatorGroupFn } from '../types';
3
+ export type FormArrayControls<T extends AbstractArrayControl = AbstractArrayControl> = AbstractControls<T>;
4
+ type ArrayGroupProps<T extends FormArrayControls> = Omit<FormArrayGroupProps<T>, 'uuid'>;
5
+ export declare class FormArrayGroup<C extends FormArrayControls = FormArrayControls, R = any> extends FormGroup<C> implements AbstractArrayGroup<C> {
6
+ readonly uuid: string;
7
+ readonly resource?: R;
8
+ constructor(controls: C, validators?: ValidatorGroupFn<C>[]);
9
+ constructor(props: ArrayGroupProps<C>);
10
+ }
11
+ export {};
@@ -0,0 +1,12 @@
1
+ import { v4 as uuid } from 'uuid';
2
+ import { createFormGroupProps } from '../arguments';
3
+ import { FormGroup } from '../form-group';
4
+ export class FormArrayGroup extends FormGroup {
5
+ constructor(groupProps, groupValidators) {
6
+ const { controls, resource, validators } = createFormGroupProps(groupProps, groupValidators);
7
+ super(controls, validators);
8
+ this.uuid = uuid();
9
+ this.resource = resource;
10
+ }
11
+ }
12
+ //# sourceMappingURL=form-array-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-array-group.js","sourceRoot":"","sources":["../../../src/form-array/form-array-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAkB1C,MAAM,OAAO,cAIX,SAAQ,SAAY;IASpB,YACE,UAAkC,EAClC,eAAuC;QAEvC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAG7D,UAAU,EAAE,eAAe,CAAC,CAAC;QAE/B,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ import { ValidatorError } from '@rolster/validators';
2
+ import { AbstractArray, AbstractArrayControl, AbstractArrayGroup, AbstractControls, ArrayStateGroup, ArrayValueGroup, FormArrayProps, SubscriberControl, ValidatorArrayFn } from '../types';
3
+ type FormControls<T extends AbstractArrayControl = AbstractArrayControl> = AbstractControls<T>;
4
+ type ArrayProps<G extends FormControls, R> = FormArrayProps<G, R, AbstractArrayGroup<G, R>>;
5
+ type SubscriberArray<G extends FormControls> = SubscriberControl<ArrayStateGroup<G>[]>;
6
+ export declare class FormArray<G extends FormControls = FormControls, R = any> implements AbstractArray<G, R> {
7
+ private currentGroups;
8
+ private initialState?;
9
+ private currentValid;
10
+ private currentError?;
11
+ private currentErrors;
12
+ private validators?;
13
+ private observable;
14
+ private unsusbcriptions;
15
+ constructor();
16
+ constructor(props: ArrayProps<G, R>);
17
+ constructor(groups: AbstractArrayGroup<G, R>[], validators?: ValidatorArrayFn<G, R>[]);
18
+ get groups(): AbstractArrayGroup<G, R>[];
19
+ get controls(): G[];
20
+ get touched(): boolean;
21
+ get toucheds(): boolean;
22
+ get untouched(): boolean;
23
+ get untoucheds(): boolean;
24
+ get dirty(): boolean;
25
+ get dirties(): boolean;
26
+ get pristine(): boolean;
27
+ get pristines(): boolean;
28
+ get valid(): boolean;
29
+ get invalid(): boolean;
30
+ get state(): ArrayStateGroup<G>[];
31
+ get value(): ArrayValueGroup<G>[];
32
+ get error(): ValidatorError | undefined;
33
+ get errors(): ValidatorError[];
34
+ get wrong(): boolean;
35
+ reset(): void;
36
+ push(group: AbstractArrayGroup<G, R>): void;
37
+ merge(groups: AbstractArrayGroup<G, R>[]): void;
38
+ set(groups: AbstractArrayGroup<G, R>[]): void;
39
+ remove({ uuid }: AbstractArrayGroup<G, R>): void;
40
+ setValidators(validators: ValidatorArrayFn<G, R>[]): void;
41
+ subscribe(subscriber: SubscriberArray<G>): Unsubscription;
42
+ private subscription;
43
+ private updateValidityStatus;
44
+ private refresh;
45
+ }
46
+ export {};
@@ -0,0 +1,127 @@
1
+ import { observable } from '@rolster/commons';
2
+ import { createFormArrayProps } from '../arguments';
3
+ import { arrayIsValid, groupAllChecked, groupPartialChecked } from '../helpers';
4
+ export class FormArray {
5
+ constructor(arrayProps, arrayValidators) {
6
+ this.currentGroups = [];
7
+ this.currentValid = true;
8
+ this.currentErrors = [];
9
+ const { groups, validators } = createFormArrayProps(arrayProps, arrayValidators);
10
+ this.unsusbcriptions = new Map();
11
+ this.initialState = groups;
12
+ this.validators = validators;
13
+ this.refresh(this.initialState);
14
+ this.observable = observable(this.state);
15
+ groups?.forEach((group) => {
16
+ this.subscription(group);
17
+ });
18
+ }
19
+ get groups() {
20
+ return this.currentGroups;
21
+ }
22
+ get controls() {
23
+ return this.groups.map(({ controls }) => controls);
24
+ }
25
+ get touched() {
26
+ return groupPartialChecked(this.groups, 'touched');
27
+ }
28
+ get toucheds() {
29
+ return groupAllChecked(this.groups, 'toucheds');
30
+ }
31
+ get untouched() {
32
+ return !this.touched;
33
+ }
34
+ get untoucheds() {
35
+ return !this.toucheds;
36
+ }
37
+ get dirty() {
38
+ return groupPartialChecked(this.groups, 'dirty');
39
+ }
40
+ get dirties() {
41
+ return groupAllChecked(this.groups, 'dirties');
42
+ }
43
+ get pristine() {
44
+ return !this.dirty;
45
+ }
46
+ get pristines() {
47
+ return !this.dirties;
48
+ }
49
+ get valid() {
50
+ return this.currentValid && groupAllChecked(this.groups, 'valid');
51
+ }
52
+ get invalid() {
53
+ return !this.currentValid;
54
+ }
55
+ get state() {
56
+ return this.groups.map(({ state }) => state);
57
+ }
58
+ get value() {
59
+ return this.groups.map(({ value }) => value);
60
+ }
61
+ get error() {
62
+ return this.currentError;
63
+ }
64
+ get errors() {
65
+ return this.currentErrors;
66
+ }
67
+ get wrong() {
68
+ return this.touched && this.invalid;
69
+ }
70
+ reset() {
71
+ this.refresh(this.initialState);
72
+ }
73
+ push(group) {
74
+ this.subscription(group);
75
+ this.refresh([...this.groups, group]);
76
+ }
77
+ merge(groups) {
78
+ groups.forEach((group) => {
79
+ this.subscription(group);
80
+ });
81
+ this.refresh([...this.groups, ...groups]);
82
+ }
83
+ set(groups) {
84
+ this.currentGroups.forEach(({ uuid }) => {
85
+ this.unsusbcriptions.delete(uuid);
86
+ });
87
+ groups.forEach((group) => {
88
+ this.subscription(group);
89
+ });
90
+ this.refresh(groups); // Update groups
91
+ }
92
+ remove({ uuid }) {
93
+ this.refresh(this.groups.filter((group) => group.uuid !== uuid));
94
+ }
95
+ setValidators(validators) {
96
+ this.validators = validators;
97
+ this.updateValidityStatus(this.groups, validators);
98
+ }
99
+ subscribe(subscriber) {
100
+ return this.observable.subscribe(subscriber);
101
+ }
102
+ subscription(group) {
103
+ const unsusbcription = group.subscribe(() => {
104
+ this.updateValidityStatus(this.groups, this.validators);
105
+ });
106
+ this.unsusbcriptions.set(group.uuid, unsusbcription);
107
+ }
108
+ updateValidityStatus(groups, validators) {
109
+ if (validators) {
110
+ const errors = arrayIsValid({ groups, validators });
111
+ this.currentErrors = errors;
112
+ this.currentError = errors[0];
113
+ this.currentValid = errors.length === 0;
114
+ }
115
+ else {
116
+ this.currentValid = true;
117
+ this.currentErrors = [];
118
+ this.currentError = undefined;
119
+ }
120
+ }
121
+ refresh(newGroups) {
122
+ const groups = newGroups || [];
123
+ this.currentGroups = groups;
124
+ this.updateValidityStatus(groups, this.validators);
125
+ }
126
+ }
127
+ //# sourceMappingURL=form-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-array.js","sourceRoot":"","sources":["../../../src/form-array/form-array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { FormArray } from './form-array';
2
+ export { FormArrayControl } from './form-array-control';
3
+ export { FormArrayControls, FormArrayGroup } from './form-array-group';
@@ -0,0 +1,4 @@
1
+ export { FormArray } from './form-array';
2
+ export { FormArrayControl } from './form-array-control';
3
+ export { FormArrayGroup } from './form-array-group';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/form-array/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAqB,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { ValidatorError, ValidatorFn } from '@rolster/validators';
2
+ import { AbstractControl, FormControlProps, FormState, SubscriberControl } from './types';
3
+ export declare class FormControl<T = any> implements AbstractControl<T> {
4
+ private currentFocused;
5
+ private currentTouched;
6
+ private currentDirty;
7
+ private currentDisabled;
8
+ private currentValid;
9
+ private initialState;
10
+ private currentState?;
11
+ private currentError?;
12
+ private currentErrors;
13
+ private validators?;
14
+ private observable;
15
+ constructor();
16
+ constructor(props: FormControlProps<T>);
17
+ constructor(state: FormState<T>, validators?: ValidatorFn<T>[]);
18
+ get focused(): boolean;
19
+ get unfocused(): boolean;
20
+ get touched(): boolean;
21
+ get untouched(): boolean;
22
+ get dirty(): boolean;
23
+ get pristine(): boolean;
24
+ get disabled(): boolean;
25
+ get enabled(): boolean;
26
+ get valid(): boolean;
27
+ get invalid(): boolean;
28
+ get state(): FormState<T>;
29
+ get value(): T;
30
+ get errors(): ValidatorError[];
31
+ get error(): ValidatorError | undefined;
32
+ get wrong(): boolean;
33
+ reset(): void;
34
+ focus(): void;
35
+ blur(): void;
36
+ touch(): void;
37
+ untouch(): void;
38
+ disable(): void;
39
+ enable(): void;
40
+ setState(state?: FormState<T>): void;
41
+ setValidators(validators?: ValidatorFn<T>[]): void;
42
+ subscribe(subscriber: SubscriberControl<T>): Unsubscription;
43
+ private updateValueAndValidity;
44
+ }
@@ -0,0 +1,114 @@
1
+ import { observable } from '@rolster/commons';
2
+ import { createFormControlProps } from './arguments';
3
+ import { controlIsValid } from './helpers';
4
+ export class FormControl {
5
+ constructor(controlProps, controlValidators) {
6
+ this.currentFocused = false;
7
+ this.currentTouched = false;
8
+ this.currentDirty = false;
9
+ this.currentDisabled = false;
10
+ this.currentValid = true;
11
+ this.currentErrors = [];
12
+ const { state, validators } = createFormControlProps(controlProps, controlValidators);
13
+ this.observable = observable(state);
14
+ this.initialState = state;
15
+ this.validators = validators;
16
+ this.currentState = state;
17
+ this.updateValueAndValidity(state, validators);
18
+ }
19
+ get focused() {
20
+ return this.currentFocused;
21
+ }
22
+ get unfocused() {
23
+ return !this.currentFocused;
24
+ }
25
+ get touched() {
26
+ return this.currentTouched;
27
+ }
28
+ get untouched() {
29
+ return !this.currentTouched;
30
+ }
31
+ get dirty() {
32
+ return this.currentDirty;
33
+ }
34
+ get pristine() {
35
+ return !this.currentDirty;
36
+ }
37
+ get disabled() {
38
+ return this.currentDisabled;
39
+ }
40
+ get enabled() {
41
+ return !this.currentDisabled;
42
+ }
43
+ get valid() {
44
+ return this.currentValid;
45
+ }
46
+ get invalid() {
47
+ return !this.currentValid;
48
+ }
49
+ get state() {
50
+ return this.currentState;
51
+ }
52
+ get value() {
53
+ return this.currentState;
54
+ }
55
+ get errors() {
56
+ return this.currentErrors;
57
+ }
58
+ get error() {
59
+ return this.currentError;
60
+ }
61
+ get wrong() {
62
+ return this.touched && this.invalid;
63
+ }
64
+ reset() {
65
+ this.setState(this.initialState);
66
+ this.untouch();
67
+ this.currentDirty = false;
68
+ }
69
+ focus() {
70
+ this.currentFocused = true;
71
+ }
72
+ blur() {
73
+ this.currentFocused = false;
74
+ }
75
+ touch() {
76
+ this.currentTouched = true;
77
+ }
78
+ untouch() {
79
+ this.currentTouched = false;
80
+ }
81
+ disable() {
82
+ this.currentDisabled = true;
83
+ }
84
+ enable() {
85
+ this.currentDisabled = false;
86
+ }
87
+ setState(state) {
88
+ this.currentState = state;
89
+ this.currentDirty = true;
90
+ this.updateValueAndValidity(state, this.validators);
91
+ this.observable.next(state);
92
+ }
93
+ setValidators(validators = []) {
94
+ this.validators = validators;
95
+ this.updateValueAndValidity(this.state, validators);
96
+ }
97
+ subscribe(subscriber) {
98
+ return this.observable.subscribe(subscriber);
99
+ }
100
+ updateValueAndValidity(state, validators) {
101
+ if (validators) {
102
+ const errors = controlIsValid({ state, validators });
103
+ this.currentError = errors[0];
104
+ this.currentErrors = errors;
105
+ this.currentValid = errors.length === 0;
106
+ }
107
+ else {
108
+ this.currentValid = true;
109
+ this.currentError = undefined;
110
+ this.currentErrors = [];
111
+ }
112
+ }
113
+ }
114
+ //# sourceMappingURL=form-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-control.js","sourceRoot":"","sources":["../../src/form-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ValidatorError } from '@rolster/validators';
2
+ import { AbstractControls, AbstractFormGroup, AbstractGroupControl, FormGroupProps, StateGroup, SubscriberGroup, ValidatorGroupFn, ValueGroup } from './types';
3
+ export type FormControls<T extends AbstractGroupControl = AbstractGroupControl> = AbstractControls<T>;
4
+ export declare class FormGroup<C extends FormControls = FormControls> implements AbstractFormGroup<C> {
5
+ protected currentControls: C;
6
+ private currentError?;
7
+ private currentErrors;
8
+ private currentValid;
9
+ private validators?;
10
+ private observable;
11
+ constructor(props: FormGroupProps<C>);
12
+ constructor(controls: C, validators?: ValidatorGroupFn<C>[]);
13
+ get controls(): C;
14
+ get touched(): boolean;
15
+ get toucheds(): boolean;
16
+ get untouched(): boolean;
17
+ get untoucheds(): boolean;
18
+ get dirty(): boolean;
19
+ get dirties(): boolean;
20
+ get pristine(): boolean;
21
+ get pristines(): boolean;
22
+ get valid(): boolean;
23
+ get invalid(): boolean;
24
+ get state(): StateGroup<C>;
25
+ get value(): ValueGroup<C>;
26
+ get errors(): ValidatorError[];
27
+ get error(): ValidatorError | undefined;
28
+ get wrong(): boolean;
29
+ reset(): void;
30
+ setValidators(validators: ValidatorGroupFn<C>[]): void;
31
+ subscribe(subscriber: SubscriberGroup<C>): Unsubscription;
32
+ private updateValueAndValidity;
33
+ }
@@ -0,0 +1,94 @@
1
+ import { observable } from '@rolster/commons';
2
+ import { createFormGroupProps } from './arguments';
3
+ import { controlsAllChecked, controlsPartialChecked, controlsToState, controlsToValue, groupIsValid } from './helpers';
4
+ export class FormGroup {
5
+ constructor(groupProps, groupValidators) {
6
+ this.currentErrors = [];
7
+ this.currentValid = true;
8
+ const { controls, validators } = createFormGroupProps(groupProps, groupValidators);
9
+ this.currentControls = controls;
10
+ this.validators = validators;
11
+ this.updateValueAndValidity(controls, validators);
12
+ this.observable = observable(this.state);
13
+ Object.values(controls).forEach((control) => {
14
+ control.subscribe(() => {
15
+ this.updateValueAndValidity(this.controls, this.validators);
16
+ this.observable.next(this.state);
17
+ });
18
+ });
19
+ }
20
+ get controls() {
21
+ return this.currentControls;
22
+ }
23
+ get touched() {
24
+ return controlsPartialChecked(this.controls, 'touched');
25
+ }
26
+ get toucheds() {
27
+ return controlsAllChecked(this.controls, 'touched');
28
+ }
29
+ get untouched() {
30
+ return !this.touched;
31
+ }
32
+ get untoucheds() {
33
+ return !this.toucheds;
34
+ }
35
+ get dirty() {
36
+ return controlsPartialChecked(this.controls, 'dirty');
37
+ }
38
+ get dirties() {
39
+ return controlsAllChecked(this.controls, 'dirty');
40
+ }
41
+ get pristine() {
42
+ return !this.dirty;
43
+ }
44
+ get pristines() {
45
+ return this.dirties;
46
+ }
47
+ get valid() {
48
+ return this.currentValid && controlsAllChecked(this.controls, 'valid');
49
+ }
50
+ get invalid() {
51
+ return !this.valid;
52
+ }
53
+ get state() {
54
+ return controlsToState(this.controls);
55
+ }
56
+ get value() {
57
+ return controlsToValue(this.controls);
58
+ }
59
+ get errors() {
60
+ return this.currentErrors;
61
+ }
62
+ get error() {
63
+ return this.currentError;
64
+ }
65
+ get wrong() {
66
+ return this.touched && this.invalid;
67
+ }
68
+ reset() {
69
+ Object.values(this.controls).forEach((control) => {
70
+ control.reset();
71
+ });
72
+ }
73
+ setValidators(validators) {
74
+ this.validators = validators;
75
+ this.updateValueAndValidity(this.controls, validators);
76
+ }
77
+ subscribe(subscriber) {
78
+ return this.observable.subscribe(subscriber);
79
+ }
80
+ updateValueAndValidity(controls, validators) {
81
+ if (validators) {
82
+ const errors = groupIsValid({ controls, validators });
83
+ this.currentErrors = errors;
84
+ this.currentError = errors[0];
85
+ this.currentValid = errors.length === 0;
86
+ }
87
+ else {
88
+ this.currentErrors = [];
89
+ this.currentError = undefined;
90
+ this.currentValid = true;
91
+ }
92
+ }
93
+ }
94
+ //# sourceMappingURL=form-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-group.js","sourceRoot":"","sources":["../../src/form-group.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { ValidatorError, ValidatorFn } from '@rolster/validators';
2
+ import { AbstractArrayGroupControls, AbstractArrayGroup, AbstractControl, AbstractControls, AbstractGroup, AbstractGroupControls, FormState, StateGroup, ValidatorArrayFn, ValidatorGroupFn, ValueGroup } from './types';
3
+ interface ControlValidProps<T> {
4
+ state: FormState<T>;
5
+ validators: ValidatorFn<T>[];
6
+ }
7
+ interface GroupValidProps<T extends AbstractGroupControls> {
8
+ controls: T;
9
+ validators: ValidatorGroupFn<T>[];
10
+ }
11
+ interface ArrayValidProps<T extends AbstractArrayGroupControls = AbstractArrayGroupControls, R = any, G extends AbstractArrayGroup<T, R> = AbstractArrayGroup<T, R>> {
12
+ groups: G[];
13
+ validators: ValidatorArrayFn<T, R>[];
14
+ }
15
+ export declare const controlIsValid: <T>(props: ControlValidProps<T>) => ValidatorError[];
16
+ export declare const controlsAllChecked: <T extends AbstractControl<any>>(controls: AbstractControls<T>, props: keyof T) => boolean;
17
+ export declare const controlsPartialChecked: <T extends AbstractControl<any>>(controls: AbstractControls<T>, props: keyof T) => boolean;
18
+ export declare const controlsToState: <C extends AbstractGroupControls<import("./types").AbstractGroupControl<any>>>(controls: C) => StateGroup<C>;
19
+ export declare const controlsToValue: <C extends AbstractGroupControls<import("./types").AbstractGroupControl<any>>>(controls: C) => ValueGroup<C>;
20
+ export declare const groupIsValid: <C extends AbstractGroupControls<import("./types").AbstractGroupControl<any>>>({ controls, validators }: GroupValidProps<C>) => ValidatorError[];
21
+ export declare function groupAllChecked<C extends AbstractGroupControls>(groups: AbstractGroup<C>[], key: keyof AbstractGroup<C>): boolean;
22
+ export declare function groupPartialChecked<C extends AbstractGroupControls>(groups: AbstractGroup<C>[], key: keyof AbstractGroup<C>): boolean;
23
+ export declare const arrayIsValid: <C extends AbstractArrayGroupControls<import("./types").AbstractArrayControl<any>> = AbstractArrayGroupControls<import("./types").AbstractArrayControl<any>>, R = any>({ groups, validators }: ArrayValidProps<C, R, AbstractArrayGroup<C, R>>) => ValidatorError[];
24
+ export {};
@@ -0,0 +1,59 @@
1
+ const FALSY_VALUE = ['false', 'undefined', '0', 0];
2
+ function toBoolean(value) {
3
+ return !(!(typeof value !== 'undefined' && value !== null) ||
4
+ value === false ||
5
+ FALSY_VALUE.includes(value));
6
+ }
7
+ export const controlIsValid = (props) => {
8
+ const { state, validators } = props;
9
+ return validators.reduce((errors, validator) => {
10
+ const error = validator(state);
11
+ if (error) {
12
+ errors.push(error);
13
+ }
14
+ return errors;
15
+ }, []);
16
+ };
17
+ export const controlsAllChecked = (controls, props) => {
18
+ return Object.values(controls).reduce((value, control) => value && toBoolean(control[props]), true);
19
+ };
20
+ export const controlsPartialChecked = (controls, props) => {
21
+ return Object.values(controls).reduce((value, control) => value || toBoolean(control[props]), false);
22
+ };
23
+ export const controlsToState = (controls) => {
24
+ return Object.entries(controls).reduce((json, [key, { state }]) => {
25
+ json[key] = state;
26
+ return json;
27
+ }, {});
28
+ };
29
+ export const controlsToValue = (controls) => {
30
+ return Object.entries(controls).reduce((json, [key, { value }]) => {
31
+ json[key] = value;
32
+ return json;
33
+ }, {});
34
+ };
35
+ export const groupIsValid = ({ controls, validators }) => {
36
+ return validators.reduce((errors, validator) => {
37
+ const error = validator(controls);
38
+ if (error) {
39
+ errors.push(error);
40
+ }
41
+ return errors;
42
+ }, []);
43
+ };
44
+ export function groupAllChecked(groups, key) {
45
+ return groups.reduce((value, group) => value && toBoolean(group[key]), true);
46
+ }
47
+ export function groupPartialChecked(groups, key) {
48
+ return groups.reduce((value, group) => value || toBoolean(group[key]), false);
49
+ }
50
+ export const arrayIsValid = ({ groups, validators }) => {
51
+ return validators.reduce((errors, validator) => {
52
+ const error = validator(groups);
53
+ if (error) {
54
+ errors.push(error);
55
+ }
56
+ return errors;
57
+ }, []);
58
+ };
59
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { createFormArrayProps, createFormControlProps, createFormGroupProps } from './arguments';
2
+ export { FormArray, FormArrayControl, FormArrayControls, FormArrayGroup } from './form-array';
3
+ export { FormControl } from './form-control';
4
+ export { FormControls, FormGroup } from './form-group';
5
+ export * from './types';