Skip to content

Commit 33a0bbb

Browse files
committed
New errorMap diff method
1 parent 3e9bee7 commit 33a0bbb

File tree

3 files changed

+9
-6
lines changed

3 files changed

+9
-6
lines changed

src/Components.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export function Listener<T, Key extends keyof T, State = DefaultState, Error ext
6161
* Wrapper around useAnyListener.
6262
* Listens for any change on this form. Behaves like useState.
6363
* You shouldn't use this hook in large components, as it rerenders each time something changes. Use the wrapper <AnyListener /> instead.
64-
* @param form The form to listen to.
64+
* @param form The form that was passed in.
6565
*/
6666
export function AnyListener<T, State = DefaultState, Error extends string = DefaultError>(props: {
6767
form: FormState<T, State, Error>;

src/form.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,12 +345,14 @@ export class FormState<T, State = DefaultState, Error extends string = DefaultEr
345345
* @param notifyParent Should this form notify the parent form about this change?
346346
*/
347347
public setErrors(errors: ErrorMap<T, Error>, notifyChild: boolean = true, notifyParent: boolean = true) {
348-
let localKeys = Object.keys(this.errorMap);
348+
let keys = Object.keys(this.errorMap);
349349
let newKeys = Object.keys(errors);
350-
let mostKeys = newKeys.length > localKeys.length ? newKeys : localKeys;
350+
for (let i = 0; i < newKeys.length; i++) {
351+
if (!keys.includes(newKeys[i])) keys.push(newKeys[i]);
352+
}
351353
let changed = false;
352-
for (let i = 0; i < mostKeys.length; i++) {
353-
let key = mostKeys[i] as keyof T;
354+
for (let i = keys.length; i >= 0; i--) {
355+
let key = keys[i] as keyof T;
354356
changed =
355357
changed ||
356358
this.setError(

src/hooks.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ export function useListener<T, Key extends keyof T, State = DefaultState, Error
106106
/**
107107
* Listens for any change on this form. Behaves like useState.
108108
* You shouldn't use this hook in large components, as it rerenders each time something changes. Use the wrapper <AnyListener /> instead.
109-
* @param form The form to listen to.
109+
*
110+
* @param form The form that was passed in.
110111
*/
111112
export function useAnyListener<T, State = DefaultState, Error extends string = DefaultError>(form: FormState<T, State, Error>) {
112113
const [, setRender] = useState(0);

0 commit comments

Comments
 (0)