0

I want to validate before submitting my values and in order not to write the same code for all the fields I want to create a for loop in order to validate all of them. More specifically:

const validate = values => {
const errors = {};
if (!values.measuring_point) {
    errors.measuring_point = i18n.t("Required");
}
if (values.image) {
    if (!/^image.*$/.test(values.image.type)) {
        errors.image = i18n.t("Only image files are allowed");
    }
}
let i = null;
let measurements = [values.measurement_1, values.measurement_2, values.measurement_3, values.measurement_4, values.measurement_5, values.measurement_6];
let errors_measurements = [errors.measurement_1, errors.measurement_2, errors.measurement_3, errors.measurement_4, errors.measurement_5, errors.measurement_6];
let types = [values.measurement_type_1, values.measurement_type_2, values.measurement_type_3, values.measurement_type_4, values.measurement_type_5, values.measurement_type_6];
let errors_types = [errors.measurement_type_1, errors.measurement_type_2, errors.measurement_type_3, errors.measurement_type_4, errors.measurement_type_5, errors.measurement_type_6];
let unit = [values.measurement_unit_1, values.measurement_unit_2, values.measurement_unit_3, values.measurement_unit_4, values.measurement_unit_5, values.measurement_unit_6];
let errors_unit = [errors.measurement_unit_1, errors.measurement_unit_2, errors.measurement_unit_3, errors.measurement_unit_4, errors.measurement_unit_5, errors.measurement_unit_6];
for (i = 1; i < 7; i++) {
    if (types[i] && measurements[i] && !unit[i]) {
        errors_unit[i] = i18n.t("Required");
    }
}
return errors;};

But it does not work and it does not give any error

George
  • 169
  • 2
  • 14
  • You update `errors_unit` but never pass it to `errors`. – blaz Apr 06 '18 at 10:02
  • I do because `errors_unit[1] ` for example is equal to `errors.measurement_unit_1` – George Apr 06 '18 at 10:13
  • Primitives in Javascript are passed by values. Even if you update `error_units[1]`, `errors` will not be updated. Source: https://stackoverflow.com/a/13104500/2404452 – blaz Apr 06 '18 at 10:31

1 Answers1

0

I fixed it Tho Vu you were right:

const validate = values => {
const errors = {};
if (!values.measuring_point) {
    errors.measuring_point = i18n.t("Required");
}
if (values.image) {
    if (!/^image.*$/.test(values.image.type)) {
        errors.image = i18n.t("Only image files are allowed");
    }
}
let measurements = [
    values.measurement_1,
    values.measurement_2,
    values.measurement_3,
    values.measurement_4,
    values.measurement_5,
    values.measurement_6
];
let errors_measurements = [
    errors.measurement_1,
    errors.measurement_2,
    errors.measurement_3,
    errors.measurement_4,
    errors.measurement_5,
    errors.measurement_6
];
let types = [
    values.measurement_type_1,
    values.measurement_type_2,
    values.measurement_type_3,
    values.measurement_type_4,
    values.measurement_type_5,
    values.measurement_type_6
];
let errors_types = [
    errors.measurement_type_1,
    errors.measurement_type_2,
    errors.measurement_type_3,
    errors.measurement_type_4,
    errors.measurement_type_5,
    errors.measurement_type_6
];
let unit = [
    values.measurement_unit_1,
    values.measurement_unit_2,
    values.measurement_unit_3,
    values.measurement_unit_4,
    values.measurement_unit_5,
    values.measurement_unit_6
];
let errors_unit = [
    "measurement_unit_1",
    "measurement_unit_2",
    "measurement_unit_3",
    "measurement_unit_4",
    "measurement_unit_5",
    "measurement_unit_6"
];
for (let i = 0; i < 6; i++) {
    if (types[i] && measurements[i] && !unit[i]) {
        errors[errors_unit[i]] = i18n.t("Required");
    }
}
return errors;};
George
  • 169
  • 2
  • 14