UNPKG

form-serialize-js

Version:
94 lines (92 loc) 2.48 kB
import _toConsumableArray from "reshow-runtime/es/helpers/toConsumableArray"; // @ts-check import set from "set-object-value"; /** * @param {any} formParams */ var maybeArray = function maybeArray(formParams, _ref) { var { name, value, arrayMode } = _ref; switch (arrayMode) { case "arrayKeyKeep": case "arrayKey": var len = name.length; if ("[]" === name.substring(len - 2, len)) { var thisName = arrayMode === "arrayKeyKeep" ? name : name.substring(0, len - 2); set(formParams, [thisName], value, true); } else { formParams[name] = value; } break; case "auto": if (formParams[name]) { set(formParams, [name], value, true); } else { formParams[name] = value; } break; default: formParams[name] = value; break; } }; /** * @param {HTMLFormElement} formEl * @param {string=} arrayMode */ var formSerialize = function formSerialize(formEl, arrayMode) { arrayMode = null != arrayMode ? arrayMode : "auto"; var formParams = {}; var elements = _toConsumableArray( /**@type any*/formEl.elements); elements.forEach(function (el) { var { name, value, type, checked } = /**@type any*/el; var booleanValue = el.getAttribute("data-boolean") ? !!(-1 !== "|0|null|true|false|".indexOf("|" + value.toLowerCase() + "|") ? JSON.parse(value.toLowerCase()) : value) : value; if (name) { switch (type.toLowerCase()) { case "checkbox": if (checked) { maybeArray(formParams, { name, value: booleanValue, arrayMode }); } break; case "radio": if (checked) { formParams[name] = booleanValue; } break; case "select-multiple": var options = /**@type NodeListOf<HTMLOptionElement>*/ el.querySelectorAll("option[selected]"); _toConsumableArray( /**@type any*/options).forEach(function (opt) { var optValue = opt.value || opt.text; maybeArray(formParams, { name, value: optValue, arrayMode }); }); break; default: maybeArray(formParams, { name, value, arrayMode }); break; } } }); return formParams; }; export default formSerialize;