Skip to content

Commit

Permalink
fix: allow marking empty array controls as dirty
Browse files Browse the repository at this point in the history
  • Loading branch information
MrWolfZ committed Nov 17, 2021
1 parent 7fef985 commit b4df005
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/array/reducer/mark-as-dirty.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { MarkAsDirtyAction } from '../../actions';
import { createFormArrayState } from '../../state';
import { markAsDirtyReducer } from './mark-as-dirty';
import {
FORM_CONTROL_ID,
Expand Down Expand Up @@ -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);
});
});
2 changes: 1 addition & 1 deletion src/array/reducer/mark-as-dirty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export function markAsDirtyReducer<TValue>(

const controls = dispatchActionPerChild(state.controls, controlId => new MarkAsDirtyAction(controlId));

if (controls === state.controls) {
if (controls === state.controls && state.isDirty) {
return state;
}

Expand Down
8 changes: 8 additions & 0 deletions src/array/reducer/mark-as-pristine.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { MarkAsPristineAction } from '../../actions';
import { createFormArrayState } from '../../state';
import { markAsPristineReducer } from './mark-as-pristine';
import {
FORM_CONTROL_ID,
Expand Down Expand Up @@ -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);
});
});

0 comments on commit b4df005

Please sign in to comment.