diff --git a/src/array/reducer/mark-as-dirty.spec.ts b/src/array/reducer/mark-as-dirty.spec.ts index 33c364ca..eb3a471d 100644 --- a/src/array/reducer/mark-as-dirty.spec.ts +++ b/src/array/reducer/mark-as-dirty.spec.ts @@ -1,4 +1,5 @@ import { MarkAsDirtyAction } from '../../actions'; +import { createFormArrayState } from '../../state'; import { markAsDirtyReducer } from './mark-as-dirty'; import { FORM_CONTROL_ID, @@ -61,4 +62,10 @@ describe(`form array ${markAsDirtyReducer.name}`, () => { const resultState = markAsDirtyReducer(INITIAL_STATE, new MarkAsDirtyAction(INITIAL_STATE.controls[0].id)); expect(resultState).not.toBe(INITIAL_STATE); }); + + it('should mark itself as dirty even if empty', () => { + const initialState = createFormArrayState(FORM_CONTROL_ID, []); + const resultState = markAsDirtyReducer(initialState, new MarkAsDirtyAction(FORM_CONTROL_ID)); + expect(resultState.isDirty).toBe(true); + }); }); diff --git a/src/array/reducer/mark-as-dirty.ts b/src/array/reducer/mark-as-dirty.ts index 6203064a..2faf9e8c 100644 --- a/src/array/reducer/mark-as-dirty.ts +++ b/src/array/reducer/mark-as-dirty.ts @@ -16,7 +16,7 @@ export function markAsDirtyReducer( const controls = dispatchActionPerChild(state.controls, controlId => new MarkAsDirtyAction(controlId)); - if (controls === state.controls) { + if (controls === state.controls && state.isDirty) { return state; } diff --git a/src/array/reducer/mark-as-pristine.spec.ts b/src/array/reducer/mark-as-pristine.spec.ts index 771d60d6..80b3b4be 100644 --- a/src/array/reducer/mark-as-pristine.spec.ts +++ b/src/array/reducer/mark-as-pristine.spec.ts @@ -1,4 +1,5 @@ import { MarkAsPristineAction } from '../../actions'; +import { createFormArrayState } from '../../state'; import { markAsPristineReducer } from './mark-as-pristine'; import { FORM_CONTROL_ID, @@ -47,4 +48,11 @@ describe(`form array ${markAsPristineReducer.name}`, () => { const resultState = markAsPristineReducer(state, new MarkAsPristineAction(state.controls[0].id)); expect(resultState).not.toBe(state); }); + + it('should update state if dirty and empty', () => { + const state = { ...createFormArrayState(FORM_CONTROL_ID, []), isDirty: true, isPristine: false }; + const resultState = markAsPristineReducer(state, new MarkAsPristineAction(FORM_CONTROL_ID)); + expect(resultState.isDirty).toEqual(false); + expect(resultState.isPristine).toEqual(true); + }); });