UNPKG

@altiore/form

Version:

Form helper for building powerful forms

99 lines (98 loc) 5.06 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFormValues = exports.toFlatErrors = exports.getArrayValue = void 0; var get_1 = __importDefault(require("lodash/get")); var set_1 = __importDefault(require("lodash/set")); var types_1 = require("../@common/types"); var utils_1 = require("../@common/utils"); var getArrayValue = function (fieldName, values, items) { var arrValue = (0, get_1.default)(values, fieldName); if (arrValue) { var resArr_1 = []; items.forEach(function (index) { if (typeof index === 'number' && (arrValue === null || arrValue === void 0 ? void 0 : arrValue[index]) !== undefined) { resArr_1.push(arrValue === null || arrValue === void 0 ? void 0 : arrValue[index]); } }); return resArr_1; } else { return []; } }; exports.getArrayValue = getArrayValue; var toFlatErrors = function (errors, setErrors, prefix) { if (prefix === void 0) { prefix = ''; } Object.entries(errors).forEach(function (_a) { var namePart = _a[0], errorField = _a[1]; var name = (prefix ? prefix + "." : '') + namePart; if ((Array.isArray(errorField) && typeof errorField[0] === 'string') || typeof errorField === 'string') { setErrors(name, typeof errorField === 'string' ? [errorField] : errorField); } else { (0, exports.toFlatErrors)(errorField, setErrors, name); } }); }; exports.toFlatErrors = toFlatErrors; var getFormValues = function (formRefCurrent, fields) { var formData = new window.FormData(formRefCurrent !== null && formRefCurrent !== void 0 ? formRefCurrent : undefined); var values = {}; var formDataMap = new Map(Array.from(formData)); var fieldKeys = Object.keys(fields); fieldKeys.forEach(function (name) { var _a, _b; var value = formDataMap.has(name) ? formDataMap.get(name) : undefined; // Мы не можем проверить ошибки валидации внутри этого цикла, т.к. данные еще не // полностью сформированы (особенно для массивов) var fieldType = (_a = fields[name]) === null || _a === void 0 ? void 0 : _a.fieldType; // TODO: возможно, не нужно пропускать это значение // пропускаем массив, т.к. если мы найдем это значение позже вложенных в массив элементов, // то они могут затереться if (fieldType === types_1.FieldType.ARRAY) { return; } if (fieldType === types_1.FieldType.SELECT_MULTIPLE) { if (!Array.isArray(value)) { value = Array.from(((_b = document.querySelector("select[name='" + name + "']")) === null || _b === void 0 ? void 0 : _b.options) || []) .filter(function (el) { return el.selected; }) .map(function (el) { return el.value; }); } } // TODO: возможно, этот код больше не актуален и полностью покрывается кодом выше про SELECT_MULTIPLE var prevValue = (0, get_1.default)(values, name); if (prevValue) { // если предыдущее значение существует, значит это массив value = Array.isArray(prevValue) ? __spreadArray(__spreadArray([], prevValue, true), [value], false) : [prevValue, value]; } // если функция преобразования данных к правильному формату есть - // применяем ее var prepareValue = utils_1.parseValueByType.get(fieldType); (0, set_1.default)(values, name, prepareValue ? prepareValue(value) : value); }); // установить данные из полей, которые не были зарегистрированы в библиотеке, но есть в форме // (только с непустым полем name) Array.from(formDataMap.keys()) .filter(function (key) { return !fieldKeys.includes(key); }) .forEach(function (name) { if (name) { (0, set_1.default)(values, name, formDataMap.get(name)); } }); return values; }; exports.getFormValues = getFormValues;