Skip to content
This repository was archived by the owner on Aug 23, 2022. It is now read-only.

Commit 4c101ae

Browse files
committed
More form actions reducer cleanup
1 parent 9989297 commit 4c101ae

File tree

3 files changed

+75
-80
lines changed

3 files changed

+75
-80
lines changed

src/reducers/form/focus-action-reducer.js renamed to src/reducers/form-actions-reducer.js

Lines changed: 73 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,51 @@
1-
import actionTypes from '../../action-types';
2-
import updateField, { getFieldAndForm } from '../../utils/update-field';
3-
import updateParentForms from '../../utils/update-parent-forms';
4-
import updateSubFields from '../../utils/update-sub-fields';
5-
import getFieldForm from '../../utils/get-field-form';
6-
import isPristine from '../../form/is-pristine';
7-
import map from '../../utils/map';
1+
import actionTypes from '../action-types';
2+
import updateField, { getFieldAndForm } from '../utils/update-field';
3+
import updateParentForms from '../utils/update-parent-forms';
4+
import updateSubFields from '../utils/update-sub-fields';
5+
import getFieldForm from '../utils/get-field-form';
6+
import isPristine from '../form/is-pristine';
7+
import map from '../utils/map';
88
import isPlainObject from 'lodash/isPlainObject';
9-
import mapValues from '../../utils/map-values';
10-
import inverse from '../../utils/inverse';
11-
import isValid, { fieldsValid } from '../../form/is-valid';
12-
import isValidityValid from '../../utils/is-validity-valid';
13-
import isValidityInvalid from '../../utils/is-validity-invalid';
14-
import fieldActions from '../../actions/field-actions';
15-
import toPath from '../../utils/to-path';
16-
import initialFieldState from '../../constants/initial-field-state';
9+
import mapValues from '../utils/map-values';
10+
import inverse from '../utils/inverse';
11+
import isValid, { fieldsValid } from '../form/is-valid';
12+
import isValidityValid from '../utils/is-validity-valid';
13+
import isValidityInvalid from '../utils/is-validity-invalid';
14+
import fieldActions from '../actions/field-actions';
15+
import toPath from '../utils/to-path';
16+
import initialFieldState from '../constants/initial-field-state';
17+
import i from 'icepick';
18+
19+
const resetFieldState = (field, key) => {
20+
if (!isPlainObject(field) || key === '$form') return field;
21+
22+
if (field.$form) return mapValues(field, resetFieldState);
23+
24+
return i.merge(initialFieldState, {
25+
value: field.initialValue,
26+
model: field.model,
27+
intents: [{ type: 'validate' }],
28+
});
29+
};
1730

1831
export default function setFocusActionReducer(state, action, localPath) {
1932
const [field] = getFieldAndForm(state, localPath);
2033
const fieldState = field && field.$form
2134
? field.$form
2235
: field;
2336

24-
const fieldUpdates = {};
25-
const subFieldUpdates = {};
37+
let fieldUpdates = {};
38+
let subFieldUpdates = {};
2639
let parentFormUpdates;
2740

2841
switch (action.type) {
2942
case actionTypes.FOCUS: {
30-
Object.assign(fieldUpdates, {
43+
fieldUpdates = {
3144
focus: true,
3245
intents: action.silent
3346
? []
3447
: [action],
35-
});
48+
};
3649

3750
break;
3851
}
@@ -41,24 +54,24 @@ export default function setFocusActionReducer(state, action, localPath) {
4154
case actionTypes.SET_TOUCHED: {
4255
const fieldForm = getFieldForm(state, localPath).$form;
4356

44-
Object.assign(fieldUpdates, {
57+
fieldUpdates = {
4558
focus: action.type === actionTypes.BLUR
4659
? false
4760
: field.focus,
4861
touched: true,
4962
retouched: fieldForm
5063
? !!(fieldForm.submitted || fieldForm.submitFailed)
5164
: false,
52-
});
65+
};
5366

5467
break;
5568
}
5669

5770
case actionTypes.SET_UNTOUCHED: {
58-
Object.assign(fieldUpdates, {
71+
fieldUpdates = {
5972
focus: false,
6073
touched: false,
61-
});
74+
};
6275

6376
break;
6477
}
@@ -67,24 +80,24 @@ export default function setFocusActionReducer(state, action, localPath) {
6780
case actionTypes.SET_DIRTY: {
6881
const pristine = action.type === actionTypes.SET_PRISTINE;
6982

70-
Object.assign(fieldUpdates, {
83+
fieldUpdates = {
7184
pristine,
72-
});
85+
};
7386

74-
Object.assign(subFieldUpdates, {
87+
subFieldUpdates = {
7588
pristine,
76-
});
89+
};
7790

7891
parentFormUpdates = (form) => ({ pristine: isPristine(form) });
7992

8093
break;
8194
}
8295

8396
case actionTypes.SET_VALIDATING: {
84-
Object.assign(fieldUpdates, {
97+
fieldUpdates = {
8598
validating: action.validating,
8699
validated: !action.validating,
87-
});
100+
};
88101

89102
break;
90103
}
@@ -104,15 +117,15 @@ export default function setFocusActionReducer(state, action, localPath) {
104117
? fieldsValid(field)
105118
: true;
106119

107-
Object.assign(fieldUpdates, {
120+
fieldUpdates = {
108121
[isErrors ? 'errors' : 'validity']: validity,
109122
[isErrors ? 'validity' : 'errors']: inverseValidity,
110123
validating: false,
111124
validated: true,
112125
valid: areFieldsValid && (isErrors
113126
? !isValidityInvalid(validity)
114127
: isValidityValid(validity)),
115-
});
128+
};
116129

117130
parentFormUpdates = (form) => ({ valid: isValid(form) });
118131

@@ -129,28 +142,28 @@ export default function setFocusActionReducer(state, action, localPath) {
129142
}
130143

131144
case actionTypes.RESET_VALIDITY: {
132-
Object.assign(fieldUpdates, {
145+
fieldUpdates = {
133146
valid: initialFieldState.valid,
134147
validity: initialFieldState.validity,
135148
errors: initialFieldState.errors,
136-
});
149+
};
137150

138-
Object.assign(subFieldUpdates, {
151+
subFieldUpdates = {
139152
valid: initialFieldState.valid,
140153
validity: initialFieldState.validity,
141154
errors: initialFieldState.errors,
142-
});
155+
};
143156

144157
break;
145158
}
146159

147160
case actionTypes.SET_PENDING: {
148-
Object.assign(fieldUpdates, {
161+
fieldUpdates = {
149162
pending: action.pending,
150163
submitted: false,
151164
submitFailed: false,
152165
retouched: false,
153-
});
166+
};
154167

155168
parentFormUpdates = { pending: action.pending };
156169

@@ -160,51 +173,64 @@ export default function setFocusActionReducer(state, action, localPath) {
160173
case actionTypes.SET_SUBMITTED: {
161174
const submitted = !!action.submitted;
162175

163-
Object.assign(fieldUpdates, {
176+
fieldUpdates = {
164177
pending: false,
165178
submitted,
166179
submitFailed: submitted
167180
? false
168181
: fieldState && fieldState.submitFailed,
169182
touched: true,
170183
retouched: false,
171-
});
184+
};
172185

173-
Object.assign(subFieldUpdates, {
186+
subFieldUpdates = {
174187
submitted,
175188
submitFailed: submitted
176189
? false
177190
: fieldUpdates.submitFailed,
178191
retouched: false,
179-
});
192+
};
180193

181194
break;
182195
}
183196

184197
case actionTypes.SET_SUBMIT_FAILED: {
185-
Object.assign(fieldUpdates, {
198+
fieldUpdates = {
186199
pending: false,
187200
submitted: fieldState.submitted && !action.submitFailed,
188201
submitFailed: !!action.submitFailed,
189202
touched: true,
190203
retouched: false,
191-
});
204+
};
192205

193-
Object.assign(subFieldUpdates, {
206+
subFieldUpdates = {
194207
pending: false,
195208
submitted: !action.submitFailed,
196209
submitFailed: !!action.submitFailed,
197210
touched: true,
198211
retouched: false,
199-
});
212+
};
200213

201214
break;
202215
}
203216

217+
case actionTypes.RESET:
218+
case actionTypes.SET_INITIAL: {
219+
return updateField(state, localPath, resetFieldState, resetFieldState);
220+
}
221+
204222
case actionTypes.ADD_INTENT: {
205-
Object.assign(fieldUpdates, {
223+
fieldUpdates = {
206224
intents: [action.intent],
207-
});
225+
};
226+
227+
break;
228+
}
229+
230+
case actionTypes.CLEAR_INTENTS: {
231+
fieldUpdates = {
232+
intents: [],
233+
};
208234

209235
break;
210236
}

src/reducers/form-reducer.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ import createBatchReducer from '../enhancers/batched-enhancer';
1010
import initialFieldState from '../constants/initial-field-state';
1111

1212
import changeActionReducer from './form/change-action-reducer';
13-
import focusActionReducer from './form/focus-action-reducer';
14-
import resetActionReducer from './form/reset-action-reducer';
15-
import intentsActionReducer from './form/intents-action-reducer';
13+
import formActionsReducer from './form-actions-reducer';
1614

1715
function getSubModelString(model, subModel) {
1816
if (!model) return subModel;
@@ -62,10 +60,8 @@ function wrapFormReducer(plugin, modelPath, initialState) {
6260
}
6361

6462
const defaultPlugins = [
65-
focusActionReducer,
63+
formActionsReducer,
6664
changeActionReducer,
67-
resetActionReducer,
68-
intentsActionReducer,
6965
];
7066

7167
export default function createFormReducer(

src/reducers/form/reset-action-reducer.js

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)