@rolster/react-forms 18.0.8 → 18.2.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/index.js +208 -107
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/index.js +207 -106
- package/dist/es/index.js.map +1 -1
- package/dist/esm/form-array/form-array-control.hook.d.ts +49 -0
- package/dist/esm/form-array/form-array-control.hook.js +88 -0
- package/dist/esm/form-array/form-array-control.hook.js.map +1 -0
- package/dist/esm/form-array/form-array-group.hook.d.ts +31 -0
- package/dist/esm/form-array/form-array-group.hook.js +46 -0
- package/dist/esm/form-array/form-array-group.hook.js.map +1 -0
- package/dist/esm/form-array/form-array.hook.d.ts +8 -0
- package/dist/esm/form-array/form-array.hook.js +107 -0
- package/dist/esm/form-array/form-array.hook.js.map +1 -0
- package/dist/esm/form-array/index.d.ts +3 -0
- package/dist/esm/form-array/index.js +4 -0
- package/dist/esm/form-array/index.js.map +1 -0
- package/dist/esm/form-array/types.d.ts +23 -0
- package/dist/esm/form-array/types.js +2 -0
- package/dist/esm/form-array/types.js.map +1 -0
- package/dist/esm/form-control.hook.d.ts +13 -4
- package/dist/esm/form-control.hook.js +23 -5
- package/dist/esm/form-control.hook.js.map +1 -1
- package/dist/esm/form-group.hook.d.ts +2 -1
- package/dist/esm/form-group.hook.js +12 -1
- package/dist/esm/form-group.hook.js.map +1 -1
- package/dist/esm/form-ref.hook.d.ts +17 -0
- package/dist/esm/form-ref.hook.js +45 -0
- package/dist/esm/form-ref.hook.js.map +1 -0
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types.d.ts +3 -3
- package/package.json +2 -2
- package/dist/esm/form-array.hook.d.ts +0 -36
- package/dist/esm/form-array.hook.js +0 -206
- package/dist/esm/form-array.hook.js.map +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ArrayStateGroup, ArrayValueGroup, FormArrayGroupProps, ValidatorGroupFn } from '@rolster/helpers-forms';
|
|
2
|
+
import { ValidatorError } from '@rolster/validators';
|
|
3
|
+
import { AbstractRolsterArrayGroup, RolsterArrayControls, RolsterFormArray } from './types';
|
|
4
|
+
export declare class RolsterArrayGroup<C extends RolsterArrayControls = RolsterArrayControls, R = any> implements AbstractRolsterArrayGroup<C, R> {
|
|
5
|
+
readonly uuid: string;
|
|
6
|
+
readonly resource?: R;
|
|
7
|
+
readonly controls: C;
|
|
8
|
+
readonly dirty: boolean;
|
|
9
|
+
readonly dirties: boolean;
|
|
10
|
+
readonly errors: ValidatorError<any>[];
|
|
11
|
+
readonly invalid: boolean;
|
|
12
|
+
readonly pristine: boolean;
|
|
13
|
+
readonly pristines: boolean;
|
|
14
|
+
readonly touched: boolean;
|
|
15
|
+
readonly toucheds: boolean;
|
|
16
|
+
readonly untouched: boolean;
|
|
17
|
+
readonly untoucheds: boolean;
|
|
18
|
+
readonly valid: boolean;
|
|
19
|
+
readonly wrong: boolean;
|
|
20
|
+
readonly error?: ValidatorError<any>;
|
|
21
|
+
readonly validators?: ValidatorGroupFn<C>[];
|
|
22
|
+
readonly state: ArrayStateGroup<C>;
|
|
23
|
+
readonly value: ArrayValueGroup<C>;
|
|
24
|
+
parent?: RolsterFormArray<C>;
|
|
25
|
+
constructor(props: FormArrayGroupProps<C>);
|
|
26
|
+
setValidators(validators: ValidatorGroupFn<C>[]): void;
|
|
27
|
+
}
|
|
28
|
+
type RolsterGroupProps<C extends RolsterArrayControls = RolsterArrayControls, R = any> = Omit<FormArrayGroupProps<C, R>, 'uuid'>;
|
|
29
|
+
export declare function useFormArrayGroup<C extends RolsterArrayControls = RolsterArrayControls, R = any>(controls: C, validators?: ValidatorGroupFn<C, R>[]): AbstractRolsterArrayGroup<C, R>;
|
|
30
|
+
export declare function useFormArrayGroup<C extends RolsterArrayControls = RolsterArrayControls, R = any>(props: RolsterGroupProps<C, R>): AbstractRolsterArrayGroup<C, R>;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { controlsAllChecked, controlsPartialChecked, controlsToState, controlsToValue, groupIsValid } from '@rolster/helpers-forms/helpers';
|
|
2
|
+
import { v4 as uuid } from 'uuid';
|
|
3
|
+
export class RolsterArrayGroup {
|
|
4
|
+
constructor(props) {
|
|
5
|
+
const { controls, resource, uuid, validators } = props;
|
|
6
|
+
Object.values(controls).forEach((control) => (control.group = this));
|
|
7
|
+
this.uuid = uuid;
|
|
8
|
+
this.controls = controls;
|
|
9
|
+
this.validators = validators;
|
|
10
|
+
this.resource = resource;
|
|
11
|
+
this.errors = validators ? groupIsValid({ controls, validators }) : [];
|
|
12
|
+
this.error = this.errors[0];
|
|
13
|
+
this.valid =
|
|
14
|
+
this.errors.length === 0 && controlsAllChecked(controls, 'valid');
|
|
15
|
+
this.invalid = !this.valid;
|
|
16
|
+
this.touched = controlsPartialChecked(controls, 'touched');
|
|
17
|
+
this.toucheds = controlsAllChecked(controls, 'touched');
|
|
18
|
+
this.dirty = controlsPartialChecked(controls, 'dirty');
|
|
19
|
+
this.dirties = controlsAllChecked(controls, 'dirty');
|
|
20
|
+
this.untouched = !this.touched;
|
|
21
|
+
this.untoucheds = !this.toucheds;
|
|
22
|
+
this.pristine = !this.dirty;
|
|
23
|
+
this.pristines = !this.dirties;
|
|
24
|
+
this.wrong = this.touched && this.invalid;
|
|
25
|
+
this.state = controlsToState(controls);
|
|
26
|
+
this.value = controlsToValue(controls);
|
|
27
|
+
}
|
|
28
|
+
setValidators(validators) {
|
|
29
|
+
this.parent?.refreshGroup(this, { validators });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function instanceOfReactArrayGroupProps(props) {
|
|
33
|
+
return (typeof props === 'object' && ('controls' in props || 'validators' in props));
|
|
34
|
+
}
|
|
35
|
+
function getReactArrayGroupProps(props, validators) {
|
|
36
|
+
if (instanceOfReactArrayGroupProps(props)) {
|
|
37
|
+
return props;
|
|
38
|
+
}
|
|
39
|
+
const controls = props;
|
|
40
|
+
return { controls, validators };
|
|
41
|
+
}
|
|
42
|
+
export function useFormArrayGroup(reactProps, validators) {
|
|
43
|
+
const props = getReactArrayGroupProps(reactProps, validators);
|
|
44
|
+
return new RolsterArrayGroup({ ...props, uuid: uuid() });
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=form-array-group.hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-array-group.hook.js","sourceRoot":"","sources":["../../../src/form-array/form-array-group.hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FormArrayProps, ValidatorArrayFn } from '@rolster/helpers-forms';
|
|
2
|
+
import { ReactArrayControls, ReactFormArray } from '../types';
|
|
3
|
+
import { AbstractRolsterArrayGroup } from './types';
|
|
4
|
+
type RolsterArrayProps<C extends ReactArrayControls = ReactArrayControls, R = any> = FormArrayProps<C, R, AbstractRolsterArrayGroup<C, R>>;
|
|
5
|
+
export declare function useFormArray<G extends ReactArrayControls, R = any>(): ReactFormArray<G, R>;
|
|
6
|
+
export declare function useFormArray<G extends ReactArrayControls, R = any>(groups: AbstractRolsterArrayGroup<G, R>[], validatorsFn?: ValidatorArrayFn<G, R>[]): ReactFormArray<G, R>;
|
|
7
|
+
export declare function useFormArray<G extends ReactArrayControls, R = any>(props: RolsterArrayProps<G>): ReactFormArray<G, R>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { arrayIsValid, controlsToState, groupAllChecked, groupPartialChecked } from '@rolster/helpers-forms/helpers';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { RolsterArrayControl } from './form-array-control.hook';
|
|
4
|
+
import { RolsterArrayGroup } from './form-array-group.hook';
|
|
5
|
+
function cloneFormArrayControl(control, changes) {
|
|
6
|
+
return new RolsterArrayControl({ ...control, ...changes });
|
|
7
|
+
}
|
|
8
|
+
function cloneFormArrayGroup(group, changes) {
|
|
9
|
+
return new RolsterArrayGroup({ ...group, ...changes });
|
|
10
|
+
}
|
|
11
|
+
function cloneFormControlForArrayGroup(group, control, changes) {
|
|
12
|
+
const newControl = cloneFormArrayControl(control, changes);
|
|
13
|
+
const { uuid } = newControl;
|
|
14
|
+
const controls = Object.entries(group.controls).reduce((controls, [key, control]) => {
|
|
15
|
+
controls[key] = control.uuid === uuid ? newControl : control;
|
|
16
|
+
return controls;
|
|
17
|
+
}, {});
|
|
18
|
+
return new RolsterArrayGroup({ ...group, controls });
|
|
19
|
+
}
|
|
20
|
+
function instanceOfReactArrayProps(props) {
|
|
21
|
+
return (typeof props === 'object' && ('groups' in props || 'validators' in props));
|
|
22
|
+
}
|
|
23
|
+
function getReactArrayProps(props, validators) {
|
|
24
|
+
if (props === undefined || props === null) {
|
|
25
|
+
return { groups: undefined, validators: undefined };
|
|
26
|
+
}
|
|
27
|
+
if (instanceOfReactArrayProps(props)) {
|
|
28
|
+
return props;
|
|
29
|
+
}
|
|
30
|
+
const groups = props;
|
|
31
|
+
return { groups, validators };
|
|
32
|
+
}
|
|
33
|
+
export function useFormArray(reactProps, validatorsFn) {
|
|
34
|
+
const props = getReactArrayProps(reactProps, validatorsFn);
|
|
35
|
+
const [currentState] = useState(props.groups);
|
|
36
|
+
const [state, setState] = useState([]);
|
|
37
|
+
const [validators, setValidators] = useState(props.validators);
|
|
38
|
+
const [controls, setControls] = useState([]);
|
|
39
|
+
const [groups, setGroups] = useState(props.groups || []);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
setControls(groups.map(({ controls }) => controls));
|
|
42
|
+
setState(groups.map(({ controls }) => controlsToState(controls)));
|
|
43
|
+
}, [groups]);
|
|
44
|
+
const errors = validators ? arrayIsValid({ groups, validators }) : [];
|
|
45
|
+
const error = errors[0];
|
|
46
|
+
const valid = errors.length === 0 && groupAllChecked(groups, 'valid');
|
|
47
|
+
const touched = groupPartialChecked(groups, 'touched');
|
|
48
|
+
const toucheds = groupAllChecked(groups, 'touched');
|
|
49
|
+
const dirties = groupAllChecked(groups, 'dirty');
|
|
50
|
+
const dirty = groupPartialChecked(groups, 'dirty');
|
|
51
|
+
function push(group) {
|
|
52
|
+
setGroups([...groups, group]);
|
|
53
|
+
}
|
|
54
|
+
function merge(newGroups) {
|
|
55
|
+
setGroups([...groups, ...newGroups]);
|
|
56
|
+
}
|
|
57
|
+
function set(groups) {
|
|
58
|
+
setGroups(groups);
|
|
59
|
+
}
|
|
60
|
+
function refreshControl(control, changes) {
|
|
61
|
+
if (control.group) {
|
|
62
|
+
const group = cloneFormControlForArrayGroup(control.group, control, changes);
|
|
63
|
+
setGroups(groups.map((currentGroup) => currentGroup.uuid === group.uuid ? group : currentGroup));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function refreshGroup(group, changes) {
|
|
67
|
+
const newGroup = cloneFormArrayGroup(group, changes);
|
|
68
|
+
const { uuid } = newGroup;
|
|
69
|
+
setGroups(groups.map((currentGroup) => currentGroup.uuid === uuid ? newGroup : currentGroup));
|
|
70
|
+
}
|
|
71
|
+
function remove(group) {
|
|
72
|
+
setGroups(groups.filter(({ uuid }) => group.uuid !== uuid));
|
|
73
|
+
}
|
|
74
|
+
function reset() {
|
|
75
|
+
setGroups(currentState || []);
|
|
76
|
+
}
|
|
77
|
+
const formArray = {
|
|
78
|
+
controls,
|
|
79
|
+
dirty,
|
|
80
|
+
dirties,
|
|
81
|
+
error,
|
|
82
|
+
errors,
|
|
83
|
+
groups,
|
|
84
|
+
invalid: !valid,
|
|
85
|
+
merge,
|
|
86
|
+
pristine: !dirty,
|
|
87
|
+
pristines: !dirties,
|
|
88
|
+
push,
|
|
89
|
+
refreshControl,
|
|
90
|
+
refreshGroup,
|
|
91
|
+
remove,
|
|
92
|
+
reset,
|
|
93
|
+
set,
|
|
94
|
+
setValidators,
|
|
95
|
+
state,
|
|
96
|
+
touched,
|
|
97
|
+
toucheds,
|
|
98
|
+
untouched: !touched,
|
|
99
|
+
untoucheds: !toucheds,
|
|
100
|
+
valid,
|
|
101
|
+
value: state,
|
|
102
|
+
wrong: touched && !valid
|
|
103
|
+
};
|
|
104
|
+
groups.forEach((group) => (group.parent = formArray));
|
|
105
|
+
return formArray;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=form-array.hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-array.hook.js","sourceRoot":"","sources":["../../../src/form-array/form-array.hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/form-array/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FormArrayControlProps, FormArrayGroupProps, FormState, ValidatorGroupFn } from '@rolster/helpers-forms';
|
|
2
|
+
import { ValidatorFn } from '@rolster/validators';
|
|
3
|
+
import { ReactArrayControl, ReactArrayControls, ReactArrayGroup, ReactFormArray } from '../types';
|
|
4
|
+
export type RolsterArrayControls = ReactArrayControls<AbstractRolsterArrayControl>;
|
|
5
|
+
export interface AbtractFormArrayControlProps<T = any> extends FormArrayControlProps<T> {
|
|
6
|
+
dirty?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
initialState?: FormState<T>;
|
|
9
|
+
focused?: boolean;
|
|
10
|
+
touched?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface AbstractRolsterArrayControl<T = any, C extends ReactArrayControls = any, E extends HTMLElement = HTMLElement> extends ReactArrayControl<E, T> {
|
|
13
|
+
group?: AbstractRolsterArrayGroup<C>;
|
|
14
|
+
validators?: ValidatorFn<T>[];
|
|
15
|
+
}
|
|
16
|
+
export interface RolsterFormArray<C extends ReactArrayControls> extends ReactFormArray<C> {
|
|
17
|
+
refreshControl(control: AbstractRolsterArrayControl<any, C>, changes: Partial<AbtractFormArrayControlProps<any>>): void;
|
|
18
|
+
refreshGroup(group: AbstractRolsterArrayGroup<C>, changes: Partial<FormArrayGroupProps<C>>): void;
|
|
19
|
+
}
|
|
20
|
+
export interface AbstractRolsterArrayGroup<C extends RolsterArrayControls = RolsterArrayControls, R = any> extends ReactArrayGroup<C, R> {
|
|
21
|
+
parent?: RolsterFormArray<C>;
|
|
22
|
+
validators?: ValidatorGroupFn<C>[];
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/form-array/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import { FormControlProps } from '@rolster/helpers-forms';
|
|
1
|
+
import { FormControlProps, FormState } from '@rolster/helpers-forms';
|
|
2
|
+
import { ValidatorFn } from '@rolster/validators';
|
|
2
3
|
import { ReactFormControl, ReactHtmlControl, ReactInputControl } from './types';
|
|
3
4
|
interface ReactControlProps<T = any> extends FormControlProps<T> {
|
|
4
5
|
touched?: boolean;
|
|
5
6
|
}
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function instanceOfReactControlProps<T = any>(props: any): props is ReactControlProps<T>;
|
|
8
|
+
export declare function getReactControlProps<T = any>(props?: ReactControlProps<T> | FormState<T>, validators?: ValidatorFn<T>[]): ReactControlProps<T>;
|
|
9
|
+
export declare function useReactControl<E extends HTMLElement, T = any>(): ReactFormControl<E, T>;
|
|
10
|
+
export declare function useReactControl<E extends HTMLElement, T = any>(state: FormState<T>, validators?: ValidatorFn<T>[]): ReactFormControl<E, T>;
|
|
11
|
+
export declare function useReactControl<E extends HTMLElement, T = any>(props: ReactControlProps<T>): ReactFormControl<E, T>;
|
|
12
|
+
export declare function useFormControl<T = any>(): ReactHtmlControl<T>;
|
|
13
|
+
export declare function useFormControl<T = any>(state: FormState<T>, validators?: ValidatorFn<T>[]): ReactHtmlControl<T>;
|
|
14
|
+
export declare function useFormControl<T = any>(props: ReactControlProps<T>): ReactHtmlControl<T>;
|
|
15
|
+
export declare function useInputControl<T = any>(): ReactInputControl<T>;
|
|
16
|
+
export declare function useInputControl<T = any>(state: FormState<T>, validators?: ValidatorFn<T>[]): ReactInputControl<T>;
|
|
17
|
+
export declare function useInputControl<T = any>(props: ReactControlProps<T>): ReactInputControl<T>;
|
|
9
18
|
export {};
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { controlIsValid } from '@rolster/helpers-forms/helpers';
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
export function
|
|
4
|
+
export function instanceOfReactControlProps(props) {
|
|
5
|
+
return (typeof props === 'object' && ('state' in props || 'validators' in props));
|
|
6
|
+
}
|
|
7
|
+
export function getReactControlProps(props, validators) {
|
|
8
|
+
if (props === undefined || props === null) {
|
|
9
|
+
return { state: undefined, validators: undefined };
|
|
10
|
+
}
|
|
11
|
+
if (instanceOfReactControlProps(props)) {
|
|
12
|
+
return props;
|
|
13
|
+
}
|
|
14
|
+
const state = props;
|
|
15
|
+
return { state, validators };
|
|
16
|
+
}
|
|
17
|
+
export function useReactControl(reactProps, validatorsFn) {
|
|
18
|
+
const props = getReactControlProps(reactProps, validatorsFn);
|
|
5
19
|
const [state, setCurrentState] = useState(props.state);
|
|
6
20
|
const [value, setValue] = useState(props.state);
|
|
7
21
|
const [touched, setTouched] = useState(props.touched || false);
|
|
@@ -81,10 +95,14 @@ export function useReactControl(props = {}) {
|
|
|
81
95
|
wrong: touched && !valid
|
|
82
96
|
};
|
|
83
97
|
}
|
|
84
|
-
export function useFormControl(
|
|
85
|
-
return
|
|
98
|
+
export function useFormControl(reactProps, validatorsFn) {
|
|
99
|
+
return instanceOfReactControlProps(reactProps)
|
|
100
|
+
? useReactControl(reactProps)
|
|
101
|
+
: useReactControl(reactProps, validatorsFn);
|
|
86
102
|
}
|
|
87
|
-
export function useInputControl(
|
|
88
|
-
return
|
|
103
|
+
export function useInputControl(reactProps, validatorsFn) {
|
|
104
|
+
return instanceOfReactControlProps(reactProps)
|
|
105
|
+
? useReactControl(reactProps)
|
|
106
|
+
: useReactControl(reactProps, validatorsFn);
|
|
89
107
|
}
|
|
90
108
|
//# sourceMappingURL=form-control.hook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-control.hook.js","sourceRoot":"","sources":["../../src/form-control.hook.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"form-control.hook.js","sourceRoot":"","sources":["../../src/form-control.hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { FormGroupProps } from '@rolster/helpers-forms';
|
|
1
|
+
import { FormGroupProps, ValidatorGroupFn } from '@rolster/helpers-forms';
|
|
2
2
|
import { ReactControls, ReactGroup } from './types';
|
|
3
|
+
export declare function useFormGroup<T extends ReactControls>(controls: T, validators?: ValidatorGroupFn<T>[]): ReactGroup<T>;
|
|
3
4
|
export declare function useFormGroup<T extends ReactControls>(props: FormGroupProps<T>): ReactGroup<T>;
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { controlsAllChecked, controlsPartialChecked, controlsToState, controlsToValue, groupIsValid } from '@rolster/helpers-forms/helpers';
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
|
|
3
|
+
function instanceOfReactGroupProps(props) {
|
|
4
|
+
return (typeof props === 'object' && ('controls' in props || 'validators' in props));
|
|
5
|
+
}
|
|
6
|
+
function getReactGroupProps(props, validators) {
|
|
7
|
+
if (instanceOfReactGroupProps(props)) {
|
|
8
|
+
return props;
|
|
9
|
+
}
|
|
10
|
+
const controls = props;
|
|
11
|
+
return { controls, validators };
|
|
12
|
+
}
|
|
13
|
+
export function useFormGroup(reactProps, validatorsFn) {
|
|
14
|
+
const props = getReactGroupProps(reactProps, validatorsFn);
|
|
4
15
|
const [validators, setValidators] = useState(props.validators);
|
|
5
16
|
const { controls } = props;
|
|
6
17
|
const errors = (() => validators ? groupIsValid({ controls, validators }) : [])();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-group.hook.js","sourceRoot":"","sources":["../../src/form-group.hook.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,MAAM,UAAU,YAAY,CAC1B,
|
|
1
|
+
{"version":3,"file":"form-group.hook.js","sourceRoot":"","sources":["../../src/form-group.hook.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,SAAS,yBAAyB,CAChC,KAAU;IAEV,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAA4B,EAC5B,UAAkC;IAElC,IAAI,yBAAyB,CAAI,KAAK,CAAC,EAAE;QACvC,OAAO,KAAK,CAAC;KACd;IAED,MAAM,QAAQ,GAAG,KAAU,CAAC;IAE5B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AASD,MAAM,UAAU,YAAY,CAC1B,UAAiC,EACjC,YAAoC;IAEpC,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE/D,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE3B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CACnB,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAE9D,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAClB,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAElE,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAEhE,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IAElD,SAAS,KAAK;QACZ,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,QAAQ;QACR,KAAK;QACL,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAChB,MAAM;QACN,OAAO,EAAE,CAAC,KAAK;QACf,QAAQ,EAAE,CAAC,KAAK;QAChB,SAAS,EAAE,CAAC,OAAO;QACnB,KAAK;QACL,KAAK;QACL,aAAa;QACb,OAAO;QACP,QAAQ;QACR,SAAS,EAAE,CAAC,OAAO;QACnB,UAAU,EAAE,CAAC,QAAQ;QACrB,KAAK;QACL,KAAK;QACL,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FormControlProps, FormState } from '@rolster/helpers-forms';
|
|
2
|
+
import { ValidatorFn } from '@rolster/validators';
|
|
3
|
+
import { ReactInputControl } from './types';
|
|
4
|
+
interface ReactRefProps<T = any> extends FormControlProps<T> {
|
|
5
|
+
setValue: (r: ReactInputControl<T>, value: string) => void;
|
|
6
|
+
touched?: boolean;
|
|
7
|
+
}
|
|
8
|
+
type InputRefProps<T = any> = Omit<ReactRefProps<T>, 'setValue'>;
|
|
9
|
+
type TextRefProps = InputRefProps<string>;
|
|
10
|
+
type NumberRefProps = InputRefProps<number>;
|
|
11
|
+
export declare function useTextRefControl(): ReactInputControl<string>;
|
|
12
|
+
export declare function useTextRefControl(state?: FormState<string>, validators?: ValidatorFn<string>[]): ReactInputControl<string>;
|
|
13
|
+
export declare function useTextRefControl(props?: TextRefProps): ReactInputControl<string>;
|
|
14
|
+
export declare function useNumberRefControl(): ReactInputControl<number>;
|
|
15
|
+
export declare function useNumberRefControl(state?: FormState<number>, validators?: ValidatorFn<number>[]): ReactInputControl<number>;
|
|
16
|
+
export declare function useNumberRefControl(props?: NumberRefProps): ReactInputControl<number>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { instanceOfReactControlProps, useInputControl } from './form-control.hook';
|
|
3
|
+
function getInputRefControlProps(props, validators) {
|
|
4
|
+
if (props === undefined || props === null) {
|
|
5
|
+
return { state: undefined, validators: undefined };
|
|
6
|
+
}
|
|
7
|
+
if (instanceOfReactControlProps(props)) {
|
|
8
|
+
return props;
|
|
9
|
+
}
|
|
10
|
+
const state = props;
|
|
11
|
+
return { state, validators };
|
|
12
|
+
}
|
|
13
|
+
function useInputRefControl(props) {
|
|
14
|
+
const { setValue, state, validators } = props;
|
|
15
|
+
const inputControl = useInputControl(state, validators);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const { elementRef } = inputControl;
|
|
18
|
+
elementRef?.current?.addEventListener('focus', () => {
|
|
19
|
+
inputControl.focus();
|
|
20
|
+
});
|
|
21
|
+
elementRef?.current?.addEventListener('blur', () => {
|
|
22
|
+
inputControl.blur();
|
|
23
|
+
if (!inputControl.touched) {
|
|
24
|
+
inputControl.touch();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
elementRef?.current?.addEventListener('change', ({ target }) => {
|
|
28
|
+
setValue(inputControl, target.value);
|
|
29
|
+
});
|
|
30
|
+
}, []);
|
|
31
|
+
return inputControl;
|
|
32
|
+
}
|
|
33
|
+
export function useTextRefControl(reactProps, validators) {
|
|
34
|
+
return useInputRefControl({
|
|
35
|
+
...getInputRefControlProps(reactProps, validators),
|
|
36
|
+
setValue: (inputControl, value) => inputControl.setState(value)
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export function useNumberRefControl(reactProps, validators) {
|
|
40
|
+
return useInputRefControl({
|
|
41
|
+
...getInputRefControlProps(reactProps, validators),
|
|
42
|
+
setValue: (inputControl, value) => inputControl.setState(+value)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=form-ref.hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-ref.hook.js","sourceRoot":"","sources":["../../src/form-ref.hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,2BAA2B,EAC3B,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAa7B,SAAS,uBAAuB,CAC9B,KAAuC,EACvC,UAA6B;IAE7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;QACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;KACpD;IAED,IAAI,2BAA2B,CAAI,KAAK,CAAC,EAAE;QACzC,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,KAAqB,CAAC;IAEpC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAU,KAAuB;IAC1D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE9C,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QAEpC,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAClD,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACjD,YAAY,CAAC,IAAI,EAAE,CAAC;YAEpB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;gBACzB,YAAY,CAAC,KAAK,EAAE,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7D,QAAQ,CAAC,YAAY,EAAG,MAA2B,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,YAAY,CAAC;AACtB,CAAC;AAUD,MAAM,UAAU,iBAAiB,CAC/B,UAA6C,EAC7C,UAAkC;IAElC,OAAO,kBAAkB,CAAC;QACxB,GAAG,uBAAuB,CAAC,UAAU,EAAE,UAAU,CAAC;QAClD,QAAQ,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;KAChE,CAAC,CAAC;AACL,CAAC;AAUD,MAAM,UAAU,mBAAmB,CACjC,UAA+C,EAC/C,UAAkC;IAElC,OAAO,kBAAkB,CAAC;QACxB,GAAG,uBAAuB,CAAC,UAAU,EAAE,UAAU,CAAC;QAClD,QAAQ,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;KACjE,CAAC,CAAC;AACL,CAAC"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { useFormArray, useFormArrayControl, useFormArrayGroup, useInputArrayControl } from './form-array';
|
|
2
|
+
export { useFormControl, useInputControl, useReactControl } from './form-control.hook';
|
|
3
|
+
export { useFormGroup } from './form-group.hook';
|
|
4
|
+
export { useNumberRefControl, useTextRefControl } from './form-ref.hook';
|
|
4
5
|
export { ReactArrayControl, ReactArrayControls, ReactArrayGroup, ReactArrayHtmlControl, ReactArrayInputControl, ReactControl, ReactControls, ReactFormArray, ReactFormControl, ReactGroup, ReactHtmlControl, ReactInputControl } from './types';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { useFormArray, useFormArrayControl, useFormArrayGroup, useInputArrayControl } from './form-array';
|
|
2
|
+
export { useFormControl, useInputControl, useReactControl } from './form-control.hook';
|
|
3
|
+
export { useFormGroup } from './form-group.hook';
|
|
4
|
+
export { useNumberRefControl, useTextRefControl } from './form-ref.hook';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AbstractArray, AbstractArrayControl, AbstractArrayControls, AbstractArrayGroup, AbstractFormControl, AbstractFormGroup, AbstractGroupControls } from '@rolster/helpers-forms';
|
|
2
|
-
import {
|
|
2
|
+
import { RefObject } from 'react';
|
|
3
3
|
export interface ReactFormControl<E extends HTMLElement = HTMLElement, T = any> extends AbstractFormControl<T> {
|
|
4
|
-
elementRef?:
|
|
4
|
+
elementRef?: RefObject<E>;
|
|
5
5
|
}
|
|
6
6
|
export interface ReactArrayControl<E extends HTMLElement = HTMLElement, T = any> extends AbstractArrayControl<T> {
|
|
7
|
-
elementRef?:
|
|
7
|
+
elementRef?: RefObject<E>;
|
|
8
8
|
}
|
|
9
9
|
export type ReactControl<E extends HTMLElement = HTMLElement, T = any> = ReactFormControl<E, T> | ReactArrayControl<E, T>;
|
|
10
10
|
export type ReactInputControl<T = any> = ReactFormControl<HTMLInputElement, T>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rolster/react-forms",
|
|
3
|
-
"version": "18.0
|
|
3
|
+
"version": "18.2.0",
|
|
4
4
|
"description": "It implements a set of classes that allow managing the control of states of the input components in React",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"prepublishOnly": "npm run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@rolster/helpers-forms": "^1.
|
|
29
|
+
"@rolster/helpers-forms": "^1.10.2",
|
|
30
30
|
"@rolster/validators": "^1.0.5",
|
|
31
31
|
"rxjs": "^7.8.0",
|
|
32
32
|
"uuid": "^9.0.1"
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ValidatorFn } from '@rolster/validators';
|
|
2
|
-
import { FormArrayControlProps, FormArrayGroupProps, FormArrayProps, FormState, ValidatorGroupFn } from '@rolster/helpers-forms';
|
|
3
|
-
import { ReactArrayControl, ReactArrayControls, ReactArrayGroup, ReactFormArray } from './types';
|
|
4
|
-
interface AbtractFormArrayControlProps<T = any> extends FormArrayControlProps<T> {
|
|
5
|
-
dirty?: boolean;
|
|
6
|
-
disabled?: boolean;
|
|
7
|
-
initialState?: FormState<T>;
|
|
8
|
-
focused?: boolean;
|
|
9
|
-
touched?: boolean;
|
|
10
|
-
}
|
|
11
|
-
interface AbstractRolsterArrayControl<T = any, C extends ReactArrayControls = any, E extends HTMLElement = HTMLElement> extends ReactArrayControl<E, T> {
|
|
12
|
-
group?: AbstractRolsterArrayGroup<C>;
|
|
13
|
-
validators?: ValidatorFn<T>[];
|
|
14
|
-
}
|
|
15
|
-
type RolsterArrayControls = ReactArrayControls<AbstractRolsterArrayControl>;
|
|
16
|
-
interface AbstractRolsterArrayGroup<C extends RolsterArrayControls = RolsterArrayControls, R = any> extends ReactArrayGroup<C, R> {
|
|
17
|
-
parent?: RolsterFormArray<C>;
|
|
18
|
-
validators?: ValidatorGroupFn<C>[];
|
|
19
|
-
}
|
|
20
|
-
interface RolsterFormArray<C extends ReactArrayControls> extends ReactFormArray<C> {
|
|
21
|
-
refreshControl(control: AbstractRolsterArrayControl<any, C>, changes: Partial<AbtractFormArrayControlProps<any>>): void;
|
|
22
|
-
refreshGroup(group: AbstractRolsterArrayGroup<C>, changes: Partial<FormArrayGroupProps<C>>): void;
|
|
23
|
-
}
|
|
24
|
-
interface RolsterControlProps<T = any> extends FormArrayControlProps<T> {
|
|
25
|
-
touched?: boolean;
|
|
26
|
-
}
|
|
27
|
-
type ReactControlProps<T = any> = Omit<RolsterControlProps<T>, 'uuid'>;
|
|
28
|
-
export declare function cloneFormArrayControl<T = any, C extends ReactArrayControls = ReactArrayControls, E extends HTMLElement = HTMLElement>(control: AbstractRolsterArrayControl<T, C, E>, changes: Partial<AbtractFormArrayControlProps<T>>): ReactArrayControl<E, T>;
|
|
29
|
-
export declare function cloneFormArrayGroup<C extends ReactArrayControls = ReactArrayControls>(group: AbstractRolsterArrayGroup<C>, changes: Partial<FormArrayGroupProps<C>>): ReactArrayGroup<C>;
|
|
30
|
-
export declare function useFormArrayControl<T = any, C extends ReactArrayControls = any, E extends HTMLElement = HTMLElement>(props: ReactControlProps<T>): AbstractRolsterArrayControl<T, C, E>;
|
|
31
|
-
export declare function useInputArrayControl<T = any, C extends ReactArrayControls = any>(props: ReactControlProps<T>): AbstractRolsterArrayControl<T, C, HTMLInputElement>;
|
|
32
|
-
type RolsterGroupProps<C extends RolsterArrayControls = RolsterArrayControls, R = any> = Omit<FormArrayGroupProps<C, R>, 'uuid'>;
|
|
33
|
-
export declare function useFormArrayGroup<C extends RolsterArrayControls = RolsterArrayControls, R = any>(props: RolsterGroupProps<C>): AbstractRolsterArrayGroup<C, R>;
|
|
34
|
-
type RolsterArrayProps<C extends ReactArrayControls = ReactArrayControls, R = any> = FormArrayProps<C, R, AbstractRolsterArrayGroup<C, R>>;
|
|
35
|
-
export declare function useFormArray<C extends ReactArrayControls, R = any>(props: RolsterArrayProps<C, R>): ReactFormArray<C, R>;
|
|
36
|
-
export {};
|