Может кому-то пригодится.
Решение оказалось не удачным. Если поле вводит в поле договор только цифры, то происходит преобразование к числу, хотя поле должно быть в виде строки.
Придется делать преобразование данных внутри компонента через parse/format.
export const convertObjectValues = (obj, numToStr) => {
// Перебирает весь объект и производит конвертацию числа в строку и обратно.
// numToStr = true конвертирует числовые значения в строковые
// numToStr = false конвертирует строковые значения в числовые
if (numToStr !== true && numToStr !== false) return;
if (typeof obj === "object" && obj !== null) {
//Получен объект
if (Array.isArray(obj)) {
// Объект оказался массивом. Перебор массива
return obj.map(elem => convertObjectValues(elem, numToStr));
} else {
// Перебор объекта
const result = {};
for (const key in obj) {
result[key] = convertObjectValues(obj[key], numToStr)
}
return result;
}
} else {
// Получено простое значение (не объект и не массив)
return isNaN(obj) ? obj : numToStr ? obj + '' : +obj;
}
};
Тесты:
import chai from "chai";
import {convertObjectValues} from "./convertData";
const numbers = {
"id": 7302,
"enabled": 1,
"capacity": 4,
"manualEdited": 1,
"cutoffs": [
1235.25,
{
"id": 3468,
"cutoffType": {
"id": 1,
"name": "Cutoff общий",
"code": "MNFGNRL"
},
"value": "12:00"
},
{
"id": 3467,
"cutoffType": {
"id": 4,
"name": "Cutoff груза",
"code": "CRGRGST"
},
"value": "14:00"
}
]
};
const strings = {
"id": "7302",
"enabled": "1",
"capacity": "4",
"manualEdited": "1",
"cutoffs": [
"1235.25",
{
"id": "3468",
"cutoffType": {
"id": "1",
"name": "Cutoff общий",
"code": "MNFGNRL"
},
"value": "12:00"
},
{
"id": "3467",
"cutoffType": {
"id": "4",
"name": "Cutoff груза",
"code": "CRGRGST"
},
"value": "14:00"
}
]
};
describe("Тестирование глобальных функций конвертации данных", () => {
it("Преобразование числа в строку", () => {
const result = convertObjectValues(numbers, true);
// console.log(JSON.stringify(numbers));
// console.log(JSON.stringify(result));
chai.expect(result).to.deep.include(strings);
});
it("Преобразование строки число", () => {
const result = convertObjectValues(strings, false);
// console.log(JSON.stringify(strings));
// console.log(JSON.stringify(result));
chai.expect(result).to.deep.include(numbers);
});
});