@rolster/forms 3.2.0 → 3.3.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.
- package/dist/cjs/helpers.js +84 -31
- package/dist/cjs/helpers.js.map +1 -1
- package/dist/cjs/index.js +81 -79
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/helpers.js +75 -25
- package/dist/es/helpers.js.map +1 -1
- package/dist/es/index.js +81 -79
- package/dist/es/index.js.map +1 -1
- package/dist/esm/form-array/form-array-control.d.ts +3 -3
- package/dist/esm/form-array/form-array-control.js +2 -2
- package/dist/esm/form-array/form-array-control.js.map +1 -1
- package/dist/esm/form-array/form-array-control.type.d.ts +11 -0
- package/dist/esm/form-array/form-array-control.type.js +2 -0
- package/dist/esm/form-array/form-array-control.type.js.map +1 -0
- package/dist/esm/form-array/form-array-group.d.ts +4 -4
- package/dist/esm/form-array/form-array-group.js +2 -2
- package/dist/esm/form-array/form-array-group.js.map +1 -1
- package/dist/esm/form-array/form-array-group.type.d.ts +20 -0
- package/dist/esm/form-array/form-array-group.type.js +2 -0
- package/dist/esm/form-array/form-array-group.type.js.map +1 -0
- package/dist/esm/form-array/form-array-list.d.ts +3 -3
- package/dist/esm/form-array/form-array-list.js +8 -8
- package/dist/esm/form-array/form-array-list.js.map +1 -1
- package/dist/esm/form-array/form-array-list.type.d.ts +8 -0
- package/dist/esm/form-array/form-array-list.type.js +2 -0
- package/dist/esm/form-array/form-array-list.type.js.map +1 -0
- package/dist/esm/form-array/form-array.d.ts +14 -14
- package/dist/esm/form-array/form-array.helper.d.ts +17 -0
- package/dist/esm/form-array/form-array.helper.js +34 -0
- package/dist/esm/form-array/form-array.helper.js.map +1 -0
- package/dist/esm/form-array/form-array.js +14 -14
- package/dist/esm/form-array/form-array.js.map +1 -1
- package/dist/esm/form-array/form-array.type.d.ts +34 -0
- package/dist/esm/form-array/form-array.type.js +2 -0
- package/dist/esm/form-array/form-array.type.js.map +1 -0
- package/dist/esm/{form-control.d.ts → form-control/form-control.d.ts} +2 -2
- package/dist/esm/form-control/form-control.helper.d.ts +13 -0
- package/dist/esm/form-control/form-control.helper.js +27 -0
- package/dist/esm/form-control/form-control.helper.js.map +1 -0
- package/dist/esm/{form-control.js → form-control/form-control.js} +3 -3
- package/dist/esm/form-control/form-control.js.map +1 -0
- package/dist/esm/form-control/form-control.type.d.ts +41 -0
- package/dist/esm/form-control/form-control.type.js +2 -0
- package/dist/esm/form-control/form-control.type.js.map +1 -0
- package/dist/esm/{form-group.d.ts → form-group/form-group.d.ts} +4 -3
- package/dist/esm/form-group/form-group.helper.d.ts +17 -0
- package/dist/esm/form-group/form-group.helper.js +36 -0
- package/dist/esm/form-group/form-group.helper.js.map +1 -0
- package/dist/esm/{form-group.js → form-group/form-group.js} +7 -8
- package/dist/esm/form-group/form-group.js.map +1 -0
- package/dist/esm/form-group/form-group.type.d.ts +36 -0
- package/dist/esm/form-group/form-group.type.js +2 -0
- package/dist/esm/form-group/form-group.type.js.map +1 -0
- package/dist/esm/helpers.d.ts +6 -23
- package/dist/esm/helpers.js +3 -46
- package/dist/esm/helpers.js.map +1 -1
- package/dist/esm/index.d.ts +11 -4
- package/dist/esm/index.js +11 -4
- package/dist/esm/index.js.map +1 -1
- package/helpers/package.json +4 -0
- package/package.json +6 -12
- package/arguments/package.json +0 -14
- package/dist/cjs/arguments.js +0 -54
- package/dist/cjs/arguments.js.map +0 -1
- package/dist/es/arguments.js +0 -50
- package/dist/es/arguments.js.map +0 -1
- package/dist/esm/arguments.d.ts +0 -18
- package/dist/esm/arguments.js +0 -48
- package/dist/esm/arguments.js.map +0 -1
- package/dist/esm/form-array/arguments.d.ts +0 -6
- package/dist/esm/form-array/arguments.js +0 -2
- package/dist/esm/form-array/arguments.js.map +0 -1
- package/dist/esm/form-array/index.d.ts +0 -5
- package/dist/esm/form-array/index.js +0 -6
- package/dist/esm/form-array/index.js.map +0 -1
- package/dist/esm/form-array/types.d.ts +0 -2
- package/dist/esm/form-array/types.js +0 -2
- package/dist/esm/form-array/types.js.map +0 -1
- package/dist/esm/form-control.js.map +0 -1
- package/dist/esm/form-group.js.map +0 -1
- package/dist/esm/types.d.ts +0 -143
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { v4 as uuid } from 'uuid';
|
|
2
|
-
import { FormControl } from '../form-control';
|
|
3
|
-
import {
|
|
2
|
+
import { FormControl } from '../form-control/form-control';
|
|
3
|
+
import { controlsToValue, verifyAllTrueInControls, verifyAnyTrueInControls } from '../form-group/form-group.helper';
|
|
4
4
|
export class FormArrayList extends FormControl {
|
|
5
5
|
constructor(valueToControls, value, validators) {
|
|
6
|
-
const
|
|
7
|
-
super(
|
|
6
|
+
const formValue = value || [];
|
|
7
|
+
super(formValue, validators);
|
|
8
8
|
this.valueToControls = valueToControls;
|
|
9
|
-
this._controls =
|
|
9
|
+
this._controls = formValue.map((value) => this.createControls(value));
|
|
10
10
|
this.uuid = uuid();
|
|
11
11
|
}
|
|
12
12
|
get controls() {
|
|
13
13
|
return this._controls;
|
|
14
14
|
}
|
|
15
15
|
get touched() {
|
|
16
|
-
return this.controls.reduce((valid, controls) => valid &&
|
|
16
|
+
return this.controls.reduce((valid, controls) => valid && verifyAnyTrueInControls(controls, 'touched'), true);
|
|
17
17
|
}
|
|
18
18
|
get dirty() {
|
|
19
|
-
return this.controls.reduce((valid, controls) => valid &&
|
|
19
|
+
return this.controls.reduce((valid, controls) => valid && verifyAnyTrueInControls(controls, 'dirty'), true);
|
|
20
20
|
}
|
|
21
21
|
get valid() {
|
|
22
22
|
return (this._valid &&
|
|
23
|
-
this.controls.reduce((valid, controls) => valid &&
|
|
23
|
+
this.controls.reduce((valid, controls) => valid && verifyAllTrueInControls(controls, 'valid'), true));
|
|
24
24
|
}
|
|
25
25
|
get value() {
|
|
26
26
|
return this.controls.map((controls) => controlsToValue(controls));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-array-list.js","sourceRoot":"","sources":["../../../src/form-array/form-array-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"form-array-list.js","sourceRoot":"","sources":["../../../src/form-array/form-array-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AbstractArrayControl } from './form-array-control.type';
|
|
2
|
+
import { AbstractArrayControls, ArrayControlsValue } from './form-array-group.type';
|
|
3
|
+
export interface AbstractArrayList<C extends AbstractArrayControls = AbstractArrayControls> extends AbstractArrayControl<ArrayControlsValue<C>[]> {
|
|
4
|
+
controls: C[];
|
|
5
|
+
push(controls: C): void;
|
|
6
|
+
remove(controls: C): void;
|
|
7
|
+
}
|
|
8
|
+
export type ArrayListValueToControls<C extends AbstractArrayControls = AbstractArrayControls> = (value: ArrayControlsValue<C>) => C;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-array-list.type.js","sourceRoot":"","sources":["../../../src/form-array/form-array-list.type.ts"],"names":[],"mappings":""}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { ValidatorError } from '@rolster/validators';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
type ArrayOptions<C extends FormArrayControls, R> = FormArrayOptions<C, R,
|
|
5
|
-
export declare class FormArray<C extends FormArrayControls = FormArrayControls, R = any> implements
|
|
2
|
+
import { ArrayControlsValue, FormArrayControls, ReactiveArrayGroup } from './form-array-group.type';
|
|
3
|
+
import { FormArrayOptions, ReactiveArray, SubscriberArray, ValidatorArrayFn } from './form-array.type';
|
|
4
|
+
type ArrayOptions<C extends FormArrayControls, R> = FormArrayOptions<C, R, ReactiveArrayGroup<C, R>>;
|
|
5
|
+
export declare class FormArray<C extends FormArrayControls = FormArrayControls, R = any> implements ReactiveArray<C, R, ReactiveArrayGroup<C, R>> {
|
|
6
6
|
private _groups;
|
|
7
|
-
private _map;
|
|
8
7
|
private _valid;
|
|
9
8
|
private _disabled;
|
|
10
9
|
private _errors;
|
|
11
10
|
private _error?;
|
|
11
|
+
private map;
|
|
12
12
|
private defaultValue?;
|
|
13
13
|
private validators?;
|
|
14
14
|
private observable;
|
|
15
15
|
private unsusbcriptions;
|
|
16
16
|
constructor();
|
|
17
17
|
constructor(options: ArrayOptions<C, R>);
|
|
18
|
-
constructor(groups:
|
|
19
|
-
get groups():
|
|
18
|
+
constructor(groups: ReactiveArrayGroup<C, R>[], validators?: ValidatorArrayFn<C, R>[]);
|
|
19
|
+
get groups(): ReactiveArrayGroup<C, R>[];
|
|
20
20
|
get controls(): C[];
|
|
21
21
|
get touched(): boolean;
|
|
22
22
|
get toucheds(): boolean;
|
|
@@ -39,12 +39,12 @@ export declare class FormArray<C extends FormArrayControls = FormArrayControls,
|
|
|
39
39
|
reset(): void;
|
|
40
40
|
disable(): void;
|
|
41
41
|
enable(): void;
|
|
42
|
-
findByUuid(uuid: string): Undefined<
|
|
43
|
-
push(group:
|
|
44
|
-
merge(groups:
|
|
45
|
-
setDefaultValue(groups:
|
|
46
|
-
setValue(groups:
|
|
47
|
-
remove(group:
|
|
42
|
+
findByUuid(uuid: string): Undefined<ReactiveArrayGroup<C, R>>;
|
|
43
|
+
push(group: ReactiveArrayGroup<C, R>): void;
|
|
44
|
+
merge(groups: ReactiveArrayGroup<C, R>[]): void;
|
|
45
|
+
setDefaultValue(groups: ReactiveArrayGroup<C, R>[]): void;
|
|
46
|
+
setValue(groups: ReactiveArrayGroup<C, R>[]): void;
|
|
47
|
+
remove(group: ReactiveArrayGroup<C, R>): void;
|
|
48
48
|
setValidators(validators: ValidatorArrayFn<C, R>[]): void;
|
|
49
49
|
subscribe(subscriber: SubscriberArray<C>): Unsubscription;
|
|
50
50
|
private subscription;
|
|
@@ -53,5 +53,5 @@ export declare class FormArray<C extends FormArrayControls = FormArrayControls,
|
|
|
53
53
|
}
|
|
54
54
|
export declare function formArray<G extends FormArrayControls = FormArrayControls, R = any>(): FormArray<G, R>;
|
|
55
55
|
export declare function formArray<G extends FormArrayControls = FormArrayControls, R = any>(options: ArrayOptions<G, R>): FormArray<G, R>;
|
|
56
|
-
export declare function formArray<G extends FormArrayControls = FormArrayControls, R = any>(groups:
|
|
56
|
+
export declare function formArray<G extends FormArrayControls = FormArrayControls, R = any>(groups: ReactiveArrayGroup<G, R>[], validators?: ValidatorArrayFn<G, R>[]): FormArray<G, R>;
|
|
57
57
|
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ValidatorError } from '@rolster/validators';
|
|
2
|
+
import { AbstractArrayControls, AbstractArrayGroup } from './form-array-group.type';
|
|
3
|
+
import { FormArrayOptions, ValidatorArrayFn } from './form-array.type';
|
|
4
|
+
import { AbstractControls, AbstractGroup } from '../form-group/form-group.type';
|
|
5
|
+
type ArrayArgsOptions<C extends AbstractArrayControls, R, G extends AbstractArrayGroup<C, R>> = [
|
|
6
|
+
Undefined<FormArrayOptions<C, R, G> | AbstractArrayGroup<C, R>[]>,
|
|
7
|
+
Undefined<ValidatorArrayFn<C, R, G>[]>
|
|
8
|
+
];
|
|
9
|
+
interface ArrayValidOptions<T extends AbstractArrayControls = AbstractArrayControls, R = any, G extends AbstractArrayGroup<T, R> = AbstractArrayGroup<T, R>> {
|
|
10
|
+
groups: G[];
|
|
11
|
+
validators: ValidatorArrayFn<T, R>[];
|
|
12
|
+
}
|
|
13
|
+
export declare function createFormArrayOptions<C extends AbstractArrayControls, R, G extends AbstractArrayGroup<C, R>, O extends FormArrayOptions<C, R, G>>(...argsOptions: ArrayArgsOptions<C, R, G>): O;
|
|
14
|
+
export declare const formArrayIsValid: <C extends AbstractArrayControls = AbstractArrayControls, R = any>({ groups, validators }: ArrayValidOptions<C, R>) => ValidatorError[];
|
|
15
|
+
export declare function verifyAllTrueInGroups<C extends AbstractControls>(groups: AbstractGroup<C>[], key: keyof AbstractGroup<C>): boolean;
|
|
16
|
+
export declare function verifyAnyTrueInGroups<C extends AbstractControls>(groups: AbstractGroup<C>[], key: keyof AbstractGroup<C>): boolean;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { parseBoolean } from '@rolster/commons';
|
|
2
|
+
function valueIsArrayOptions(options) {
|
|
3
|
+
return (typeof options === 'object' &&
|
|
4
|
+
('groups' in options || 'validators' in options));
|
|
5
|
+
}
|
|
6
|
+
export function createFormArrayOptions(...argsOptions) {
|
|
7
|
+
const [options, validators] = argsOptions;
|
|
8
|
+
if (!options) {
|
|
9
|
+
return { groups: options, validators };
|
|
10
|
+
}
|
|
11
|
+
if (!validators && valueIsArrayOptions(options)) {
|
|
12
|
+
return options;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
groups: options,
|
|
16
|
+
validators
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export const formArrayIsValid = ({ groups, validators }) => {
|
|
20
|
+
return validators.reduce((errors, validator) => {
|
|
21
|
+
const error = validator(groups);
|
|
22
|
+
if (error) {
|
|
23
|
+
errors.push(error);
|
|
24
|
+
}
|
|
25
|
+
return errors;
|
|
26
|
+
}, []);
|
|
27
|
+
};
|
|
28
|
+
export function verifyAllTrueInGroups(groups, key) {
|
|
29
|
+
return groups.reduce((value, group) => value && parseBoolean(group[key]), true);
|
|
30
|
+
}
|
|
31
|
+
export function verifyAnyTrueInGroups(groups, key) {
|
|
32
|
+
return groups.reduce((value, group) => value || parseBoolean(group[key]), false);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=form-array.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-array.helper.js","sourceRoot":"","sources":["../../../src/form-array/form-array.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2BhD,SAAS,mBAAmB,CAK1B,OAAY;IACZ,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,QAAQ,IAAI,OAAO,IAAI,YAAY,IAAI,OAAO,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAKpC,GAAG,WAAsC;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAO,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAa,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAqC;QAC7C,UAAU;KACN,CAAC;AACT,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAG9B,EACA,MAAM,EACN,UAAU,EACc,EAAoB,EAAE;IAC9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAsB,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACnC,MAA0B,EAC1B,GAA2B;IAE3B,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACnD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAA0B,EAC1B,GAA2B;IAE3B,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACnD,KAAK,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { observable } from '@rolster/commons';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { hasError, someErrors } from '../helpers';
|
|
3
|
+
import { createFormArrayOptions, formArrayIsValid, verifyAllTrueInGroups, verifyAnyTrueInGroups } from './form-array.helper';
|
|
4
4
|
export class FormArray {
|
|
5
5
|
constructor(options, validators) {
|
|
6
6
|
this._groups = [];
|
|
@@ -9,7 +9,7 @@ export class FormArray {
|
|
|
9
9
|
this._errors = [];
|
|
10
10
|
const formArray = createFormArrayOptions(options, validators);
|
|
11
11
|
this.unsusbcriptions = new Map();
|
|
12
|
-
this.
|
|
12
|
+
this.map = new Map();
|
|
13
13
|
this.defaultValue = formArray.groups;
|
|
14
14
|
this.validators = formArray.validators;
|
|
15
15
|
this.refresh(this.defaultValue);
|
|
@@ -25,10 +25,10 @@ export class FormArray {
|
|
|
25
25
|
return this.groups.map(({ controls }) => controls);
|
|
26
26
|
}
|
|
27
27
|
get touched() {
|
|
28
|
-
return
|
|
28
|
+
return verifyAnyTrueInGroups(this.groups, 'touched');
|
|
29
29
|
}
|
|
30
30
|
get toucheds() {
|
|
31
|
-
return
|
|
31
|
+
return verifyAllTrueInGroups(this.groups, 'toucheds');
|
|
32
32
|
}
|
|
33
33
|
get untouched() {
|
|
34
34
|
return !this.touched;
|
|
@@ -37,10 +37,10 @@ export class FormArray {
|
|
|
37
37
|
return !this.toucheds;
|
|
38
38
|
}
|
|
39
39
|
get dirty() {
|
|
40
|
-
return
|
|
40
|
+
return verifyAnyTrueInGroups(this.groups, 'dirty');
|
|
41
41
|
}
|
|
42
42
|
get dirties() {
|
|
43
|
-
return
|
|
43
|
+
return verifyAllTrueInGroups(this.groups, 'dirties');
|
|
44
44
|
}
|
|
45
45
|
get pristine() {
|
|
46
46
|
return !this.dirty;
|
|
@@ -55,7 +55,7 @@ export class FormArray {
|
|
|
55
55
|
return !this._disabled;
|
|
56
56
|
}
|
|
57
57
|
get valid() {
|
|
58
|
-
return this._valid &&
|
|
58
|
+
return this._valid && verifyAllTrueInGroups(this.groups, 'valid');
|
|
59
59
|
}
|
|
60
60
|
get invalid() {
|
|
61
61
|
return !this._valid;
|
|
@@ -88,7 +88,7 @@ export class FormArray {
|
|
|
88
88
|
this._disabled = false;
|
|
89
89
|
}
|
|
90
90
|
findByUuid(uuid) {
|
|
91
|
-
return this.
|
|
91
|
+
return this.map.get(uuid);
|
|
92
92
|
}
|
|
93
93
|
push(group) {
|
|
94
94
|
this.subscription(group);
|
|
@@ -131,7 +131,7 @@ export class FormArray {
|
|
|
131
131
|
}
|
|
132
132
|
updateValidityStatus(groups, validators) {
|
|
133
133
|
if (validators) {
|
|
134
|
-
const errors =
|
|
134
|
+
const errors = formArrayIsValid({ groups, validators });
|
|
135
135
|
this._errors = errors;
|
|
136
136
|
this._error = errors[0];
|
|
137
137
|
this._valid = errors.length === 0;
|
|
@@ -142,11 +142,11 @@ export class FormArray {
|
|
|
142
142
|
this._error = undefined;
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
|
-
refresh(
|
|
146
|
-
this._groups =
|
|
147
|
-
this.
|
|
145
|
+
refresh(groups) {
|
|
146
|
+
this._groups = groups || [];
|
|
147
|
+
this.map.clear();
|
|
148
148
|
this._groups.forEach((group) => {
|
|
149
|
-
this.
|
|
149
|
+
this.map.set(group.uuid, group);
|
|
150
150
|
});
|
|
151
151
|
this.updateValidityStatus(this._groups, this.validators);
|
|
152
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-array.js","sourceRoot":"","sources":["../../../src/form-array/form-array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"form-array.js","sourceRoot":"","sources":["../../../src/form-array/form-array.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Observer } from '@rolster/commons';
|
|
2
|
+
import { ValidatorResult } from '@rolster/validators';
|
|
3
|
+
import { AbstractControl } from '../form-control/form-control.type';
|
|
4
|
+
import { AbstractArrayControls, AbstractArrayGroup, ArrayControlsValue } from './form-array-group.type';
|
|
5
|
+
import { AbstractArrayControl } from './form-array-control.type';
|
|
6
|
+
export type ValidatorArrayFn<T extends AbstractArrayControls = AbstractArrayControls, R = any, G extends AbstractArrayGroup<T, R> = AbstractArrayGroup<T, R>, V = any> = (groups: G[]) => ValidatorResult<V>;
|
|
7
|
+
export interface AbstractArray<C extends AbstractArrayControls = AbstractArrayControls, R = any, G extends AbstractArrayGroup<C, R> = AbstractArrayGroup<C, R>> extends AbstractControl<ArrayControlsValue<C>[]> {
|
|
8
|
+
readonly controls: C[];
|
|
9
|
+
readonly dirties: boolean;
|
|
10
|
+
disable: () => void;
|
|
11
|
+
enable: () => void;
|
|
12
|
+
findByUuid: (uuid: string) => Undefined<G>;
|
|
13
|
+
readonly groups: G[];
|
|
14
|
+
merge: (groups: G[]) => void;
|
|
15
|
+
readonly pristines: boolean;
|
|
16
|
+
push: (group: G) => void;
|
|
17
|
+
remove: (group: G) => void;
|
|
18
|
+
setDefaultValue: (groups: G[]) => void;
|
|
19
|
+
setValue: (groups: G[]) => void;
|
|
20
|
+
setValidators: (validators: ValidatorArrayFn<C, R>[]) => void;
|
|
21
|
+
readonly toucheds: boolean;
|
|
22
|
+
readonly untoucheds: boolean;
|
|
23
|
+
readonly value: ArrayControlsValue<C>[];
|
|
24
|
+
readonly wrong: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ReactiveArray<C extends AbstractArrayControls = AbstractArrayControls, R = any, G extends AbstractArrayGroup<C, R> = AbstractArrayGroup<C, R>> extends AbstractArray<C, R, G> {
|
|
27
|
+
subscribe: (subscriber: SubscriberArray<C>) => Unsubscription;
|
|
28
|
+
}
|
|
29
|
+
export interface FormArrayOptions<C extends AbstractArrayControls = AbstractArrayControls, R = any, G extends AbstractArrayGroup<C, R> = AbstractArrayGroup<C, R>> {
|
|
30
|
+
groups?: G[];
|
|
31
|
+
validators?: ValidatorArrayFn<C, R>[];
|
|
32
|
+
}
|
|
33
|
+
export type ArrayFormControls<T extends AbstractArrayControl = AbstractArrayControl> = AbstractArrayControls<T>;
|
|
34
|
+
export type SubscriberArray<C extends ArrayFormControls> = Observer<ArrayControlsValue<C>[]>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-array.type.js","sourceRoot":"","sources":["../../../src/form-array/form-array.type.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Observable, Observer } from '@rolster/commons';
|
|
2
2
|
import { ValidatorError, ValidatorFn } from '@rolster/validators';
|
|
3
|
-
import {
|
|
4
|
-
export declare class FormControl<T = any> implements
|
|
3
|
+
import { ReactiveFormControl, FormControlOptions, FormValidatorsOptions, FormValueOptions } from './form-control.type';
|
|
4
|
+
export declare class FormControl<T = any> implements ReactiveFormControl<T> {
|
|
5
5
|
protected _focused: boolean;
|
|
6
6
|
protected _touched: boolean;
|
|
7
7
|
protected _dirty: boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ValidatorError, ValidatorFn } from '@rolster/validators';
|
|
2
|
+
import { FormControlOptions } from './form-control.type';
|
|
3
|
+
type ControlArgsOptions<T = any> = [
|
|
4
|
+
FormControlOptions<T> | T | undefined,
|
|
5
|
+
Undefined<ValidatorFn<T>[]>
|
|
6
|
+
];
|
|
7
|
+
interface ControlValidOptions<T> {
|
|
8
|
+
value: T;
|
|
9
|
+
validators: ValidatorFn<T>[];
|
|
10
|
+
}
|
|
11
|
+
export declare function createFormControlOptions<T, O extends FormControlOptions<T>>(...argsOptions: ControlArgsOptions<T>): O;
|
|
12
|
+
export declare const formControlIsValid: <T>({ value, validators }: ControlValidOptions<T>) => ValidatorError[];
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function valueIsControlOptions(options) {
|
|
2
|
+
return (typeof options === 'object' &&
|
|
3
|
+
('value' in options || 'validators' in options));
|
|
4
|
+
}
|
|
5
|
+
export function createFormControlOptions(...argsOptions) {
|
|
6
|
+
const [options, validators] = argsOptions;
|
|
7
|
+
if (!options) {
|
|
8
|
+
return { value: options, validators };
|
|
9
|
+
}
|
|
10
|
+
if (!validators && valueIsControlOptions(options)) {
|
|
11
|
+
return options;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
value: options,
|
|
15
|
+
validators
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export const formControlIsValid = ({ value, validators }) => {
|
|
19
|
+
return validators.reduce((errors, validator) => {
|
|
20
|
+
const error = validator(value);
|
|
21
|
+
if (error) {
|
|
22
|
+
errors.push(error);
|
|
23
|
+
}
|
|
24
|
+
return errors;
|
|
25
|
+
}, []);
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=form-control.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control.helper.js","sourceRoot":"","sources":["../../../src/form-control/form-control.helper.ts"],"names":[],"mappings":"AAaA,SAAS,qBAAqB,CAC5B,OAAY;IAEZ,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,OAAO,IAAI,OAAO,IAAI,YAAY,IAAI,OAAO,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAG,WAAkC;IAErC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAO,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,qBAAqB,CAAO,OAAO,CAAC,EAAE,CAAC;QACxD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAY;QACnB,UAAU;KACN,CAAC;AACT,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAI,EACpC,KAAK,EACL,UAAU,EACa,EAAoB,EAAE;IAC7C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAsB,CAAC,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { observable } from '@rolster/commons';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { hasError, someErrors } from '../helpers';
|
|
3
|
+
import { formControlIsValid, createFormControlOptions } from './form-control.helper';
|
|
4
4
|
export class FormControl {
|
|
5
5
|
constructor(options, validators) {
|
|
6
6
|
this._focused = false;
|
|
@@ -105,7 +105,7 @@ export class FormControl {
|
|
|
105
105
|
}
|
|
106
106
|
updateValueAndValidity(value, validators) {
|
|
107
107
|
if (validators) {
|
|
108
|
-
const errors =
|
|
108
|
+
const errors = formControlIsValid({ value, validators });
|
|
109
109
|
this._error = errors[0];
|
|
110
110
|
this._errors = errors;
|
|
111
111
|
this._valid = errors.length === 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control.js","sourceRoot":"","sources":["../../../src/form-control/form-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Observer } from '@rolster/commons';
|
|
2
|
+
import { ValidatorError, ValidatorFn } from '@rolster/validators';
|
|
3
|
+
export interface AbstractControl<T = any> {
|
|
4
|
+
readonly dirty: boolean;
|
|
5
|
+
readonly disabled: boolean;
|
|
6
|
+
readonly enabled: boolean;
|
|
7
|
+
readonly errors: ValidatorError[];
|
|
8
|
+
hasError: (key: string) => boolean;
|
|
9
|
+
readonly invalid: boolean;
|
|
10
|
+
readonly pristine: boolean;
|
|
11
|
+
reset: () => void;
|
|
12
|
+
someErrors: (key: string[]) => boolean;
|
|
13
|
+
readonly touched: boolean;
|
|
14
|
+
readonly untouched: boolean;
|
|
15
|
+
readonly valid: boolean;
|
|
16
|
+
readonly value: T;
|
|
17
|
+
readonly wrong: boolean;
|
|
18
|
+
readonly error?: ValidatorError;
|
|
19
|
+
}
|
|
20
|
+
export interface AbstractFormControl<T = any> extends AbstractControl<T> {
|
|
21
|
+
blur: () => void;
|
|
22
|
+
disable: () => void;
|
|
23
|
+
enable: () => void;
|
|
24
|
+
focus: () => void;
|
|
25
|
+
readonly focused: boolean;
|
|
26
|
+
setDefaultValue: (value: T) => void;
|
|
27
|
+
setStartValue: (value: T) => void;
|
|
28
|
+
setValue: (value: T) => void;
|
|
29
|
+
setValidators: (validators?: ValidatorFn<T>[]) => void;
|
|
30
|
+
touch: () => void;
|
|
31
|
+
readonly unfocused: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ReactiveFormControl<T = any> extends AbstractFormControl<T> {
|
|
34
|
+
subscribe: (subscriber: Observer<T>) => Unsubscription;
|
|
35
|
+
}
|
|
36
|
+
export interface FormControlOptions<T = any> {
|
|
37
|
+
value: T;
|
|
38
|
+
validators?: ValidatorFn<T>[];
|
|
39
|
+
}
|
|
40
|
+
export type FormValueOptions<T> = Omit<FormControlOptions<T>, 'validators'>;
|
|
41
|
+
export type FormValidatorsOptions<T> = Omit<FormControlOptions<T>, 'value'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control.type.js","sourceRoot":"","sources":["../../../src/form-control/form-control.type.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ValidatorError } from '@rolster/validators';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export
|
|
2
|
+
import { ReactiveFormControl } from '../form-control/form-control.type';
|
|
3
|
+
import { AbstractControls, ControlsValue, FormGroupOptions, ReactiveFormGroup, SubscriberGroup, ValidatorGroupFn } from './form-group.type';
|
|
4
|
+
export type FormControls<T extends ReactiveFormControl = ReactiveFormControl> = AbstractControls<T>;
|
|
5
|
+
export declare class FormGroup<C extends FormControls = FormControls> implements ReactiveFormGroup<C> {
|
|
5
6
|
protected _controls: C;
|
|
6
7
|
private _errors;
|
|
7
8
|
private _error?;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ValidatorError } from '@rolster/validators';
|
|
2
|
+
import { AbstractControl } from '../form-control/form-control.type';
|
|
3
|
+
import { AbstractControls, ControlsValue, FormGroupOptions, ValidatorGroupFn } from './form-group.type';
|
|
4
|
+
type GroupArgsOptions<C extends AbstractControls> = [
|
|
5
|
+
FormGroupOptions<C> | C,
|
|
6
|
+
Undefined<ValidatorGroupFn<C>[]>
|
|
7
|
+
];
|
|
8
|
+
interface GroupValidOptions<T extends AbstractControls> {
|
|
9
|
+
controls: T;
|
|
10
|
+
validators: ValidatorGroupFn<T>[];
|
|
11
|
+
}
|
|
12
|
+
export declare function createFormGroupOptions<C extends AbstractControls, O extends FormGroupOptions<C>>(...argsOptions: GroupArgsOptions<C>): O;
|
|
13
|
+
export declare const formGroupIsValid: <C extends AbstractControls>({ controls, validators }: GroupValidOptions<C>) => ValidatorError[];
|
|
14
|
+
export declare const controlsToValue: <C extends AbstractControls>(controls: C) => ControlsValue<C>;
|
|
15
|
+
export declare const verifyAllTrueInControls: <T extends AbstractControl>(controls: AbstractControls<T>, key: keyof T) => boolean;
|
|
16
|
+
export declare const verifyAnyTrueInControls: <T extends AbstractControl>(controls: AbstractControls<T>, key: keyof T) => boolean;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { parseBoolean } from '@rolster/commons';
|
|
2
|
+
function valueIsGroupOptions(options) {
|
|
3
|
+
return typeof options === 'object' && 'controls' in options;
|
|
4
|
+
}
|
|
5
|
+
export function createFormGroupOptions(...argsOptions) {
|
|
6
|
+
const [options, validators] = argsOptions;
|
|
7
|
+
if (!validators && valueIsGroupOptions(options)) {
|
|
8
|
+
return options;
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
controls: options,
|
|
12
|
+
validators
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export const formGroupIsValid = ({ controls, validators }) => {
|
|
16
|
+
return validators.reduce((errors, validator) => {
|
|
17
|
+
const error = validator(controls);
|
|
18
|
+
if (error) {
|
|
19
|
+
errors.push(error);
|
|
20
|
+
}
|
|
21
|
+
return errors;
|
|
22
|
+
}, []);
|
|
23
|
+
};
|
|
24
|
+
export const controlsToValue = (controls) => {
|
|
25
|
+
return Object.entries(controls).reduce((result, [key, { value }]) => {
|
|
26
|
+
result[key] = value;
|
|
27
|
+
return result;
|
|
28
|
+
}, {});
|
|
29
|
+
};
|
|
30
|
+
export const verifyAllTrueInControls = (controls, key) => {
|
|
31
|
+
return Object.values(controls).reduce((value, control) => control.disabled ? value : value && parseBoolean(control[key]), true);
|
|
32
|
+
};
|
|
33
|
+
export const verifyAnyTrueInControls = (controls, key) => {
|
|
34
|
+
return Object.values(controls).reduce((value, control) => control.disabled ? value : value || parseBoolean(control[key]), false);
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=form-group.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-group.helper.js","sourceRoot":"","sources":["../../../src/form-group/form-group.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAoBhD,SAAS,mBAAmB,CAG1B,OAAY;IACZ,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAGpC,GAAG,WAAgC;IACnC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC;IAE1C,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAO,OAAO,CAAC,EAAE,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,OAAY;QACtB,UAAU;KACN,CAAC;AACT,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAA6B,EAC3D,QAAQ,EACR,UAAU,EACW,EAAoB,EAAE;IAC3C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAsB,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAW,EACO,EAAE;IACpB,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,CAAC,GAAc,CAAC,GAAG,KAAK,CAAC;QAE/B,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAsB,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAA6B,EAC7B,GAAY,EACH,EAAE;IACX,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACnC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACjB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAChE,IAAI,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAA6B,EAC7B,GAAY,EACH,EAAE;IACX,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACnC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACjB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAChE,KAAK,CACN,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { observable } from '@rolster/commons';
|
|
2
|
-
import { createFormGroupOptions } from './
|
|
3
|
-
import { controlsAllChecked, controlsPartialChecked, controlsToValue, groupIsValid } from './helpers';
|
|
2
|
+
import { controlsToValue, createFormGroupOptions, formGroupIsValid, verifyAllTrueInControls, verifyAnyTrueInControls } from './form-group.helper';
|
|
4
3
|
export class FormGroup {
|
|
5
4
|
constructor(options, validators) {
|
|
6
5
|
this._errors = [];
|
|
@@ -21,10 +20,10 @@ export class FormGroup {
|
|
|
21
20
|
return this._controls;
|
|
22
21
|
}
|
|
23
22
|
get touched() {
|
|
24
|
-
return
|
|
23
|
+
return verifyAnyTrueInControls(this.controls, 'touched');
|
|
25
24
|
}
|
|
26
25
|
get toucheds() {
|
|
27
|
-
return
|
|
26
|
+
return verifyAllTrueInControls(this.controls, 'touched');
|
|
28
27
|
}
|
|
29
28
|
get untouched() {
|
|
30
29
|
return !this.touched;
|
|
@@ -33,10 +32,10 @@ export class FormGroup {
|
|
|
33
32
|
return !this.toucheds;
|
|
34
33
|
}
|
|
35
34
|
get dirty() {
|
|
36
|
-
return
|
|
35
|
+
return verifyAnyTrueInControls(this.controls, 'dirty');
|
|
37
36
|
}
|
|
38
37
|
get dirties() {
|
|
39
|
-
return
|
|
38
|
+
return verifyAllTrueInControls(this.controls, 'dirty');
|
|
40
39
|
}
|
|
41
40
|
get pristine() {
|
|
42
41
|
return !this.dirty;
|
|
@@ -45,7 +44,7 @@ export class FormGroup {
|
|
|
45
44
|
return this.dirties;
|
|
46
45
|
}
|
|
47
46
|
get valid() {
|
|
48
|
-
return this._valid &&
|
|
47
|
+
return this._valid && verifyAllTrueInControls(this.controls, 'valid');
|
|
49
48
|
}
|
|
50
49
|
get invalid() {
|
|
51
50
|
return !this.valid;
|
|
@@ -76,7 +75,7 @@ export class FormGroup {
|
|
|
76
75
|
}
|
|
77
76
|
updateValueAndValidity(controls, validators) {
|
|
78
77
|
if (validators) {
|
|
79
|
-
const errors =
|
|
78
|
+
const errors = formGroupIsValid({ controls, validators });
|
|
80
79
|
this._errors = errors;
|
|
81
80
|
this._error = errors[0];
|
|
82
81
|
this._valid = errors.length === 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-group.js","sourceRoot":"","sources":["../../../src/form-group/form-group.ts"],"names":[],"mappings":"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"}
|