Skip to content

Commit cbb1017

Browse files
JeanMechealxhub
authored andcommitted
fix(forms): allow resetting with empty string
Both empty string and null values should be accepted when resetting fixes #65949 (cherry picked from commit 14713d0)
1 parent 834593b commit cbb1017

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

packages/forms/signals/src/field/node.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ export class FieldNode implements FieldState<unknown> {
228228
}
229229

230230
private _reset(value?: unknown) {
231-
if (value) {
231+
if (value !== undefined) {
232232
this.value.set(value);
233233
}
234234

packages/forms/signals/test/node/field_node.spec.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* found in the LICENSE file at https://angular.dev/license
77
*/
88

9-
import {computed, effect, Injector, signal} from '@angular/core';
9+
import {computed, effect, Injector, signal, WritableSignal} from '@angular/core';
1010
import {TestBed} from '@angular/core/testing';
1111
import {
1212
apply,
@@ -121,6 +121,41 @@ describe('FieldNode', () => {
121121
f().reset();
122122
expect(f.a().value()).toBe(1);
123123
});
124+
125+
it('can reset with empty string', () => {
126+
const model = signal('hello');
127+
const f = form(model, {injector: TestBed.inject(Injector)});
128+
f().reset('');
129+
expect(f().value()).toBe('');
130+
});
131+
132+
it('can reset with false', () => {
133+
const model = signal(true);
134+
const f = form(model, {injector: TestBed.inject(Injector)});
135+
f().reset(false);
136+
expect(f().value()).toBe(false);
137+
});
138+
139+
it('can reset with null', () => {
140+
const model: WritableSignal<string | null> = signal('hello');
141+
const f = form(model, {injector: TestBed.inject(Injector)});
142+
f().reset(null);
143+
expect(f().value()).toBeNull();
144+
});
145+
146+
it('can reset with 0', () => {
147+
const model = signal(5);
148+
const f = form(model, {injector: TestBed.inject(Injector)});
149+
f().reset(0);
150+
expect(f().value()).toBe(0);
151+
});
152+
153+
it('can reset with NaN', () => {
154+
const model = signal(5);
155+
const f = form(model, {injector: TestBed.inject(Injector)});
156+
f().reset(NaN);
157+
expect(f().value()).toBeNaN();
158+
});
124159
});
125160

126161
describe('dirty', () => {

0 commit comments

Comments
 (0)