mirror of
https://github.com/pinry/pinry.git
synced 2025-11-16 18:05:51 +01:00
90 lines
1.7 KiB
JavaScript
90 lines
1.7 KiB
JavaScript
|
|
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(errorRespObject) {
|
|
Object.entries(errorRespObject).forEach(
|
|
(errorTuple) => {
|
|
const [key, error] = errorTuple;
|
|
let msg;
|
|
if (Array.isArray(error)) {
|
|
[msg] = error;
|
|
} else {
|
|
msg = error;
|
|
}
|
|
markFieldAsDanger(key, msg);
|
|
},
|
|
);
|
|
}
|
|
function asData() {
|
|
const data = {};
|
|
Object.entries(form).forEach(
|
|
(formField) => {
|
|
const [name, value] = formField;
|
|
data[name] = value.value;
|
|
},
|
|
);
|
|
return data;
|
|
}
|
|
function assignToForm(data) {
|
|
Object.entries(data).forEach(
|
|
(dataField) => {
|
|
const [key, value] = dataField;
|
|
if (key in self) {
|
|
self[key].value = value;
|
|
}
|
|
},
|
|
);
|
|
}
|
|
function resetAllFields() {
|
|
fields.forEach(
|
|
(fieldName) => {
|
|
resetField(fieldName);
|
|
},
|
|
);
|
|
}
|
|
return {
|
|
form: self,
|
|
fields,
|
|
markFieldsAsDanger,
|
|
markFieldAsDanger,
|
|
resetField,
|
|
asData,
|
|
assignToForm,
|
|
resetAllFields,
|
|
};
|
|
}
|
|
|
|
function fromFields(fields) {
|
|
const form = createFormModel(fields);
|
|
return FormHelper(form, fields);
|
|
}
|
|
|
|
export default {
|
|
createFormModel,
|
|
FormHelper,
|
|
fromFields,
|
|
};
|