Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit b2fca74

Browse files
authored
fix: Number fields validation (#19)
* fix: Number fields validation * chore: Remove console calls
1 parent 64f3fbe commit b2fca74

File tree

4 files changed

+25
-9
lines changed

4 files changed

+25
-9
lines changed

packages/react-forms/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@heetch/react-forms",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"license": "MIT",
55
"author": "Heetch",
66
"devDependencies": {

packages/react-forms/src/lib/form-field-number-renderer/form-field-number-renderer.stories.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ _tests.play = async () => {
102102
const input: HTMLInputElement = screen.getByLabelText('Amount', {
103103
selector: 'input',
104104
});
105-
await userEvent.type(input, '1. ', { delay: 50 });
106-
expect(input).toHaveStyle({ color: '#cd2703' });
107-
await userEvent.type(input, '1.5 ', { delay: 50 });
105+
await userEvent.type(input, '1.5', { delay: 50 });
106+
expect(input).not.toHaveStyle({ color: '#cd2703' });
107+
await userEvent.clear(input);
108108
expect(input).not.toHaveStyle({ color: '#cd2703' });
109109
};

packages/react-forms/src/lib/form-field-number-renderer/form-field-number-renderer.tsx

+13-3
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,19 @@ function NumberFieldRenderer({
6464
);
6565

6666
const onChange = (e: ChangeEvent<HTMLInputElement>) => {
67-
fieldProps.onChange(
68-
e.target.value === '' ? undefined : parseFloat(e.target.value)
69-
);
67+
if (e.target.value === '') {
68+
if (e.target.validity.valid) {
69+
// Actually empty
70+
fieldProps.onChange(undefined);
71+
} else {
72+
// Not empty but something that cannot be parsed as a number
73+
fieldProps.onChange(NaN);
74+
}
75+
} else {
76+
fieldProps.onChange(
77+
parseFloat(e.target.value));
78+
}
79+
7080
setValue(e.target.value);
7181
};
7282

packages/react-forms/src/utils.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ function buildValidationRulesNumber(
116116
validate: {
117117
...(baseRules?.validate || {}),
118118
integer: (value: number) =>
119-
Number.isInteger(value) || texts?.errors?.integer || false,
119+
value === undefined ||
120+
Number.isInteger(value) ||
121+
texts?.errors?.integer ||
122+
false,
120123
},
121124
};
122125
} else {
@@ -125,7 +128,10 @@ function buildValidationRulesNumber(
125128
validate: {
126129
...(baseRules?.validate || {}),
127130
number: (value: number) =>
128-
!isNaN(value) || texts?.errors?.number || false,
131+
value === undefined ||
132+
!isNaN(value) ||
133+
texts?.errors?.number ||
134+
false,
129135
},
130136
};
131137
}

0 commit comments

Comments
 (0)