Refactor: Use ModelForm instead of copy-and-paste

This commit is contained in:
winkidney
2019-12-05 20:22:45 +08:00
committed by Isaac Bythewood
parent c1cff2ecb6
commit bd6960fcf1
5 changed files with 71 additions and 103 deletions

View File

@@ -0,0 +1,67 @@
function createFormModel(fields) {
const form = {};
fields.forEach(
(fieldName) => {
form[fieldName] = {
value: null,
error: null,
type: null,
};
},
);
return form;
}
function FormHelper(form, fields = []) {
const self = form;
function resetField(fieldName) {
self[fieldName].type = 'is-info';
self[fieldName].error = null;
}
function markFieldAsDanger(fieldName, errorMsg) {
self[fieldName].error = errorMsg;
self[fieldName].type = 'is-danger';
}
function markFieldsAsDanger(errorRespObjecct) {
Object.entries(errorRespObjecct).forEach(
(errorTuple) => {
const [key, error] = errorTuple;
let msg;
if (Array.isArray(error)) {
[msg] = error;
} else {
msg = error;
}
markFieldAsDanger(key, msg);
},
);
}
function resetAllFields() {
fields.forEach(
(fieldName) => {
resetField(fieldName);
},
);
}
return {
form,
fields,
markFieldsAsDanger,
markFieldAsDanger,
resetField,
resetAllFields,
};
}
function fromFields(fields) {
const form = createFormModel(fields);
return FormHelper(form, fields);
}
export default {
createFormModel,
FormHelper,
fromFields,
};