UNPKG

formiojs

Version:

Common js library for client side interaction with <form.io>

691 lines (689 loc) • 248 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } require("core-js/modules/es.object.define-property.js"); require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.symbol.iterator.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/es.symbol.async-iterator.js"); require("core-js/modules/es.symbol.to-string-tag.js"); require("core-js/modules/es.json.to-string-tag.js"); require("core-js/modules/es.math.to-string-tag.js"); require("core-js/modules/es.object.create.js"); require("core-js/modules/es.object.get-prototype-of.js"); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.object.set-prototype-of.js"); require("core-js/modules/es.array.reverse.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.symbol.to-primitive.js"); require("core-js/modules/es.date.to-primitive.js"); require("core-js/modules/es.number.constructor.js"); require("core-js/modules/es.object.keys.js"); require("core-js/modules/es.array.filter.js"); require("core-js/modules/es.object.get-own-property-descriptor.js"); require("core-js/modules/es.object.get-own-property-descriptors.js"); require("core-js/modules/es.object.define-properties.js"); require("core-js/modules/es.array.from.js"); require("core-js/modules/es.array.is-array.js"); require("core-js/modules/es.weak-map.js"); require("core-js/modules/web.timers.js"); require("core-js/modules/es.array.for-each.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/web.dom-collections.for-each.js"); require("core-js/modules/es.promise.js"); require("core-js/modules/es.string.trim.js"); require("core-js/modules/es.array.includes.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.string.replace.js"); require("core-js/modules/es.string.includes.js"); require("core-js/modules/es.promise.finally.js"); var _powerAssert = _interopRequireDefault(require("power-assert")); var _chai = require("chai"); var _sinon = _interopRequireDefault(require("sinon")); var _lodash = _interopRequireDefault(require("lodash")); var _each = _interopRequireDefault(require("lodash/each")); var _i18next = _interopRequireDefault(require("i18next")); var _harness = _interopRequireDefault(require("../test/harness")); var _forms = _interopRequireDefault(require("../test/forms")); var _Webform = _interopRequireDefault(require("./Webform")); require("flatpickr"); var _Formio = _interopRequireDefault(require("./Formio")); var _components = _interopRequireDefault(require("./components")); var _formtest = require("../test/formtest"); var _updateErrorClassesWidgets = _interopRequireDefault(require("../test/forms/updateErrorClasses-widgets")); var _nestedModalWizard = _interopRequireDefault(require("../test/forms/nestedModalWizard")); var _disableSubmitButton = _interopRequireDefault(require("../test/forms/disableSubmitButton")); var _formWithAddressComponent = _interopRequireDefault(require("../test/forms/formWithAddressComponent")); var _dataGridWithInitEmpty = _interopRequireDefault(require("../test/forms/dataGridWithInitEmpty")); var _dataGridNestedForm = _interopRequireDefault(require("../test/forms/dataGrid-nestedForm")); var _formWithDataGrid = _interopRequireDefault(require("../test/forms/formWithDataGrid")); var _translationTestForm = _interopRequireDefault(require("../test/forms/translationTestForm")); var _dataGridWithConditionalColumn = _interopRequireDefault(require("../test/forms/dataGridWithConditionalColumn")); var _fixtures = require("../test/fixtures"); var _nativePromiseOnly = _interopRequireDefault(require("native-promise-only")); var _utils = require("../lib/utils/utils"); var _dataGridOnBlurValidation = _interopRequireDefault(require("../test/forms/dataGridOnBlurValidation")); var _checkBlurFocusEventForm = _interopRequireDefault(require("../test/forms/checkBlurFocusEventForm")); var _truncateMultipleSpaces = _interopRequireDefault(require("../test/forms/truncateMultipleSpaces")); var _calculatedValue = _interopRequireDefault(require("../test/forms/calculatedValue")); var _conditionalDataGridWithTableAndRadio = _interopRequireDefault(require("../test/forms/conditionalDataGridWithTableAndRadio")); var _calculateValueWithManualOverrideLableValueDataGrid = _interopRequireDefault(require("../test/forms/calculateValueWithManualOverrideLableValueDataGrid")); var _nestedDataGridsAndContainers = _interopRequireDefault(require("../test/forms/nestedDataGridsAndContainers")); var _columnWithConditionalComponents = _interopRequireDefault(require("../test/forms/columnWithConditionalComponents")); var _formWithSurvey = _interopRequireDefault(require("../test/forms/formWithSurvey")); var _formWithSelectBoxes = _interopRequireDefault(require("../test/forms/formWithSelectBoxes")); var _formWithDayComp = _interopRequireDefault(require("../test/forms/formWithDayComp")); var _formWithCalcValue = _interopRequireDefault(require("../test/forms/formWithCalcValue")); var _formWithAllowCalculateOverride = _interopRequireDefault(require("../test/forms/formWithAllowCalculateOverride")); var _clearOnHideInsideEditGrid = _interopRequireDefault(require("../test/forms/clearOnHideInsideEditGrid")); var _nestedDataGridWithInitEmpty = _interopRequireDefault(require("../test/forms/nestedDataGridWithInitEmpty")); var _formWithEventLogicInHiddenComponent = _interopRequireDefault(require("../test/forms/formWithEventLogicInHiddenComponent")); var FormioUtils = _interopRequireWildcard(require("./utils/utils")); var _htmlRenderMode = _interopRequireDefault(require("../test/forms/htmlRenderMode")); var _optionalSanitize = _interopRequireDefault(require("../test/forms/optionalSanitize")); var _formsWithNewSimpleConditions = _interopRequireDefault(require("../test/forms/formsWithNewSimpleConditions")); var _formWithRadioInsideDataGrid = _interopRequireDefault(require("../test/forms/formWithRadioInsideDataGrid")); var _formWithCheckboxRadioType = _interopRequireDefault(require("../test/forms/formWithCheckboxRadioType")); var _formWithFormController = _interopRequireDefault(require("../test/forms/formWithFormController")); var _calculateValueOnServerForEditGrid = _interopRequireDefault(require("../test/forms/calculateValueOnServerForEditGrid")); var _formsWithAllowOverrideComps = _interopRequireDefault(require("../test/forms/formsWithAllowOverrideComps")); var _formWithDeeplyNestedConditionalComps = _interopRequireDefault(require("../test/forms/formWithDeeplyNestedConditionalComps")); var _formWithValidation = _interopRequireDefault(require("../test/forms/formWithValidation")); var _formWithNotAllowedTags = _interopRequireDefault(require("../test/forms/formWithNotAllowedTags")); var _formWithValidateWhenHidden = _interopRequireDefault(require("../test/forms/formWithValidateWhenHidden")); var _formsWithSimpleConditionals = _interopRequireDefault(require("../test/forms/formsWithSimpleConditionals.js")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } global.requestAnimationFrame = function (cb) { return cb(); }; global.cancelAnimationFrame = function () {}; if (_lodash["default"].has(_Formio["default"], 'Components.setComponents')) { _Formio["default"].Components.setComponents(_components["default"]); } /* eslint-disable max-statements */ describe('Webform tests', function () { this.retries(3); it('Should show fields correctly if there are 2 components with the same key in the form', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement); form.setForm(_formsWithSimpleConditionals["default"].form1).then(function () { var compWithDuplicatedKey1 = form.getComponent('anotherContainerKey.someDuplicatedKey'); var compWithDuplicatedKey2 = form.getComponent('someDuplicatedKey'); var conditionalCompShownOnDupl1 = form.getComponent('anotherContainerKey.textField'); var conditionalCompShownOnDupl2 = form.getComponent('anotherContainerKey.additionalContainer'); _powerAssert["default"].equal(conditionalCompShownOnDupl1.visible, false); _powerAssert["default"].equal(conditionalCompShownOnDupl2.visible, false); compWithDuplicatedKey1.setValue('more'); setTimeout(function () { _powerAssert["default"].equal(conditionalCompShownOnDupl1.visible, true); _powerAssert["default"].equal(conditionalCompShownOnDupl2.visible, false); compWithDuplicatedKey2.setValue('more'); setTimeout(function () { _powerAssert["default"].equal(conditionalCompShownOnDupl1.visible, true); _powerAssert["default"].equal(conditionalCompShownOnDupl2.visible, true); compWithDuplicatedKey1.setValue('less'); setTimeout(function () { _powerAssert["default"].equal(conditionalCompShownOnDupl1.visible, false); _powerAssert["default"].equal(conditionalCompShownOnDupl2.visible, true); done(); }, 300); }, 300); }, 300); })["catch"](function (err) { return done(err); }); }); it('Should show fields correctly inside dataGrid row if there are components with the same key in the form and dataGrid component visibility depennds on component inside row and outside dataGrid', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement); form.setForm(_formsWithSimpleConditionals["default"].form2).then(function () { var compWithDuplicatedKey1 = form.getComponent('container.textField'); var compWithDuplicatedKey2 = form.getComponent('dataGrid.container.textField')[0]; var conditionalCompShownOnDupl1Or2 = form.getComponent('dataGrid.number')[0]; var dataGrid = form.getComponent('dataGrid'); _powerAssert["default"].equal(conditionalCompShownOnDupl1Or2.visible, false); compWithDuplicatedKey1.setValue('6'); setTimeout(function () { _powerAssert["default"].equal(conditionalCompShownOnDupl1Or2.visible, true); compWithDuplicatedKey1.setValue('7'); setTimeout(function () { var conditionalCompShownOnDupl1Or2 = form.getComponent('dataGrid.number')[0]; _powerAssert["default"].equal(conditionalCompShownOnDupl1Or2.visible, false); compWithDuplicatedKey2.setValue('5'); setTimeout(function () { _powerAssert["default"].equal(conditionalCompShownOnDupl1Or2.visible, true); dataGrid.addRow(); setTimeout(function () { var conditionalComp2ShownOnDupl1Or2 = form.getComponent('dataGrid.number')[1]; _powerAssert["default"].equal(conditionalCompShownOnDupl1Or2.visible, true); _powerAssert["default"].equal(conditionalComp2ShownOnDupl1Or2.visible, false); compWithDuplicatedKey1.setValue('6'); setTimeout(function () { _powerAssert["default"].equal(conditionalCompShownOnDupl1Or2.visible, true); _powerAssert["default"].equal(conditionalComp2ShownOnDupl1Or2.visible, true); done(); }, 400); }, 400); }, 400); }, 400); }, 300); })["catch"](function (err) { return done(err); }); }); it('Should validate hidden and conditionally hidden components when validateWhenHidden is enabled for those components', function (done) { var formElement = document.createElement('div'); _Formio["default"].createForm(formElement, _formWithValidateWhenHidden["default"]).then(function (form) { var errorClasses = ['has-error', 'has-message', form.options.componentErrorClass]; var number1 = form.getComponent('number1'); var number2 = form.getComponent('number2'); var number = form.getComponent('number'); var textField = form.getComponent('textField'); var textArea = form.getComponent('textArea'); var checkbox = form.getComponent('checkbox'); _powerAssert["default"].equal(form.errors.length, 0); number1.setValue(5); number2.setValue(7); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 1); _powerAssert["default"].equal(!!number.error, true); errorClasses.forEach(function (cl) { return _powerAssert["default"].equal(number.element.classList.contains(cl), false, '(1) Should not set error classes for hidden components.'); }); number2.setValue(3); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 0); _powerAssert["default"].equal(!!number.error, false); errorClasses.forEach(function (cl) { return _powerAssert["default"].equal(number.element.classList.contains(cl), false, '(2) Should not set error classes for hidden components.'); }); textField.setValue('test'); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 1); _powerAssert["default"].equal(!!textArea.error, true); _powerAssert["default"].equal(textArea.visible, true); checkbox.setValue(true); setTimeout(function () { _powerAssert["default"].equal(textArea.visible, false); _powerAssert["default"].equal(form.errors.length, 1); _powerAssert["default"].equal(!!textArea.error, true); errorClasses.forEach(function (cl) { return _powerAssert["default"].equal(textArea.element.classList.contains(cl), false); }); number2.setValue(9); form.submit(); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 2); _powerAssert["default"].equal(!!textArea.error, true); _powerAssert["default"].equal(!!number.error, true); _powerAssert["default"].equal(!!form.alert, true); _powerAssert["default"].equal(form.refs.errorRef.length, 2); errorClasses.forEach(function (cl) { return _powerAssert["default"].equal(number.element.classList.contains(cl), false); }); errorClasses.forEach(function (cl) { return _powerAssert["default"].equal(textArea.element.classList.contains(cl), false); }); textField.setValue('test test test'); number2.setValue(1); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 0); _powerAssert["default"].equal(!!textArea.error, false); _powerAssert["default"].equal(!!number.error, false); _powerAssert["default"].equal(!!form.alert, false); done(); }, 300); }, 300); }, 300); }, 300); }, 300); }, 300); })["catch"](done); }); it('Should not validate hidden and conditionally hidden components when validateWhenHidden is not enabled for those components', function (done) { var formElement = document.createElement('div'); var testForm = (0, _utils.fastCloneDeep)(_formWithValidateWhenHidden["default"]); _lodash["default"].each(testForm.components, function (comp) { comp.validateWhenHidden = false; }); _Formio["default"].createForm(formElement, testForm).then(function (form) { var number1 = form.getComponent('number1'); var number2 = form.getComponent('number2'); var number = form.getComponent('number'); var textField = form.getComponent('textField'); var textArea = form.getComponent('textArea'); var checkbox = form.getComponent('checkbox'); _powerAssert["default"].equal(form.errors.length, 0); number1.setValue(5); number2.setValue(7); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 0); _powerAssert["default"].equal(!!number.error, false); textField.setValue('test'); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 1); _powerAssert["default"].equal(!!textArea.error, true); _powerAssert["default"].equal(textArea.visible, true); checkbox.setValue(true); setTimeout(function () { _powerAssert["default"].equal(textArea.visible, false); _powerAssert["default"].equal(form.errors.length, 0); _powerAssert["default"].equal(!!textArea.error, false); done(); }, 300); }, 300); }, 300); })["catch"](done); }); it('Should not lose values of conditionally visible components on setValue when server option is passed', function (done) { var formElement = document.createElement('div'); _Formio["default"].createForm(formElement, _formWithDeeplyNestedConditionalComps["default"], { server: true }).then(function (form) { var submission = { data: { submit: false, radio1: 'yes', container: { checkbox: true, checkboxInPanelInHiddenContainer: true, textField: 'test', editGrid: [{ number: 1, textField: 'test2' }, { number: 2 }] } } }; form.setValue((0, _utils.fastCloneDeep)(submission), { sanitize: true }); setTimeout(function () { _powerAssert["default"].deepEqual(form.data, submission.data); _powerAssert["default"].deepEqual(form.getValue(), submission); done(); }, 500); })["catch"](function (err) { return done(err); }); }); it('Should not lose values of conditionally visible components on setValue when server option is not passed', function (done) { var formElement = document.createElement('div'); _Formio["default"].createForm(formElement, _formWithDeeplyNestedConditionalComps["default"]).then(function (form) { var submission = { data: { submit: false, radio1: 'yes', container: { checkbox: true, checkboxInPanelInHiddenContainer: true, textField: 'test', editGrid: [{ number: 1, textField: 'test2' }, { number: 2 }] } } }; form.setValue((0, _utils.fastCloneDeep)(submission), { sanitize: true }); setTimeout(function () { _powerAssert["default"].deepEqual(form.data, submission.data); _powerAssert["default"].deepEqual(form.getValue(), submission); done(); }, 500); })["catch"](function (err) { return done(err); }); }); it('Should fire error and submitError events with args on attempt to submit invalid form', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement); form.setForm(_formWithValidation["default"]).then(function () { var errorEvents = 0; var submitErrorEvents = 0; form.on('error', function (arg) { _powerAssert["default"].equal(!!arg, true, 'Error event should have argument'); errorEvents = errorEvents + 1; }); form.on('submitError', function (arg) { _powerAssert["default"].equal(!!arg, true, 'submitError event should have argument'); submitErrorEvents = submitErrorEvents + 1; }); var clickEvent = new Event('click'); var submitBtn = form.element.querySelector('[name="data[submit]"]'); submitBtn.dispatchEvent(clickEvent); setTimeout(function () { _powerAssert["default"].equal(form.errors.length, 1); _powerAssert["default"].equal(errorEvents, 1); _powerAssert["default"].equal(submitErrorEvents, 1); done(); }, 300); })["catch"](function (err) { return done(err); }); }); it('Should keep non-component server errors visible after changes in the form', function (done) { var element = document.createElement('div'); var form = (0, _utils.fastCloneDeep)(_formWithValidation["default"]); form.components[0].validate = {}; var originalMakeRequest = _Formio["default"].makeRequest; var errorText = 'Server error'; _Formio["default"].makeRequest = function () { return new Promise(function (res, rej) { setTimeout(function () { rej(errorText); }, 50); }); }; _Formio["default"].createForm(element, form).then(function (instance) { instance.formio = new _Formio["default"]('http://localhost:3000/test'); _powerAssert["default"].equal(instance.errors.length, 0); _powerAssert["default"].equal(!!(instance.serverErrors && instance.serverErrors.length), false); _powerAssert["default"].equal(!!(instance.refs.errorRef && instance.refs.errorRef.length), false); var clickEvent = new Event('click'); var submitBtn = instance.element.querySelector('[name="data[submit]"]'); submitBtn.dispatchEvent(clickEvent); setTimeout(function () { _powerAssert["default"].equal(instance.errors.length, 0); _powerAssert["default"].equal(instance.serverErrors.length, 1); _powerAssert["default"].equal(instance.refs.errorRef.length, 1); _powerAssert["default"].equal(instance.refs.errorRef[0].textContent.trim(), errorText); var inputEvent = new Event('input'); var textField = instance.element.querySelector('input[name="data[name]"]'); textField.value = 'test'; textField.dispatchEvent(inputEvent); setTimeout(function () { _powerAssert["default"].equal(instance.errors.length, 0); _powerAssert["default"].equal(instance.serverErrors.length, 1); _powerAssert["default"].equal(instance.refs.errorRef.length, 1); _powerAssert["default"].equal(instance.refs.errorRef[0].textContent.trim(), errorText); _Formio["default"].makeRequest = originalMakeRequest; done(); }, 400); }, 400); })["catch"](done); }); it('Should execute form controller', function (done) { _Formio["default"].createForm(_formWithFormController["default"]).then(function (form) { setTimeout(function () { var textField = form.getComponent('textField'); _powerAssert["default"].equal(textField.getValue(), 'Hello World'); _powerAssert["default"].equal(textField.disabled, true); _powerAssert["default"].equal(form.components[0].disabled, true); done(); }, 300); })["catch"](function (err) { return done(err); }); }); it('Should set radio components value inside data grid correctly', function (done) { _Formio["default"].createForm(_formWithRadioInsideDataGrid["default"]).then(function (form) { var dataGridData = [{ radio: 'two' }, { radio: 'two' }, { radio: 'three' }]; form.setValue({ data: { dataGrid: (0, _utils.fastCloneDeep)(dataGridData) } }); setTimeout(function () { var dataGrid = form.getComponent('dataGrid'); _powerAssert["default"].deepEqual(dataGrid.dataValue, dataGridData); done(); }, 200); })["catch"](function (err) { return done(err); }); }); it('Should not fall into setValue calls loop when doing value calculation on server', function (done) { var formElement = document.createElement('div'); // Set a spy for Edit Grid setValue method var spy = _sinon["default"].spy(_Formio["default"].Components.components.editgrid.prototype, 'setValue'); _Formio["default"].createForm(formElement, _calculateValueOnServerForEditGrid["default"], { server: true, noDefaults: true }).then(function (form) { _powerAssert["default"].deepEqual(form.data, { editGrid: [{ fielda: undefined, fieldb: 'test' }] }); _powerAssert["default"].equal(spy.callCount, 1); var first = form.getComponent('first'); first.setValue('test value'); setTimeout(function () { _powerAssert["default"].deepEqual(form.data, { first: 'test value', editGrid: [{ fielda: 'test value', fieldb: 'test' }] }); _powerAssert["default"].equal(spy.callCount, 2); // Remove the spy from setValue method _Formio["default"].Components.components.editgrid.prototype.setValue.restore(); done(); }, 300); })["catch"](done); }); it('Should fire blur and focus events for address and select components', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement); form.setForm(_checkBlurFocusEventForm["default"]).then(function () { var blurEvents = 0; var focusEvents = 0; form.on('blur', function () { blurEvents = blurEvents + 1; }); form.on('focus', function () { focusEvents = focusEvents + 1; }); var focusEvent = new Event('focus'); var blurEvent = new Event('blur'); var selectChoices = form.getComponent('selectChoices'); selectChoices.focusableElement.dispatchEvent(focusEvent); setTimeout(function () { selectChoices.focusableElement.dispatchEvent(blurEvent); var selectHtml = form.getComponent('selectHtml'); selectHtml.refs.selectContainer.dispatchEvent(focusEvent); setTimeout(function () { selectHtml.refs.selectContainer.dispatchEvent(blurEvent); var address = form.getComponent('address'); address.refs.searchInput[0].dispatchEvent(focusEvent); setTimeout(function () { address.refs.searchInput[0].dispatchEvent(blurEvent); setTimeout(function () { _powerAssert["default"].equal(focusEvents, 3); _powerAssert["default"].equal(blurEvents, 3); done(); }, 300); }, 300); }, 300); }, 300); })["catch"](function (err) { return done(err); }); }); it('Should return correct string value for checkbox radio type', function (done) { _Formio["default"].createForm(_formWithCheckboxRadioType["default"]).then(function (form) { form.setValue({ data: { radio: 'value1', checkbox: true } }); setTimeout(function () { var stringValues = { checkbox1: 'Yes', checkbox2: 'No', checkbox: 'Yes' }; form.eachComponent(function (comp) { _powerAssert["default"].equal(comp.getValueAsString(comp.dataValue), stringValues["".concat(comp.component.key)], "Error for string value of ".concat(comp.component.key)); }); form.setValue({ data: { radio: 'value2', checkbox: false } }); setTimeout(function () { var stringValues2 = { checkbox1: 'No', checkbox2: 'Yes', checkbox: 'No' }; form.eachComponent(function (comp) { _powerAssert["default"].equal(comp.getValueAsString(comp.dataValue), stringValues2["".concat(comp.component.key)], "Error for string value of ".concat(comp.component.key)); }); done(); }, 200); }, 200); })["catch"](function (err) { return done(err); }); }); it('Should set value for hidden nested component through the logic triggered by event', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement); form.setForm(_formWithEventLogicInHiddenComponent["default"]).then(function () { var regesteredAddress = form.getComponent('registeredAddressInformation').getComponent('streetAddress')[0]; var address = form.getComponent('addressInformation').getComponent('streetAddress')[0]; _powerAssert["default"].equal(address.visible, true); _powerAssert["default"].equal(regesteredAddress.visible, false); var value = 'Dallas'; address.setValue(value); setTimeout(function () { _powerAssert["default"].equal(address.dataValue, value); _powerAssert["default"].equal(regesteredAddress.dataValue, value); var role = form.getComponent('role'); role.setValue(['client']); setTimeout(function () { _powerAssert["default"].equal(address.visible, false); _powerAssert["default"].equal(regesteredAddress.visible, true); _powerAssert["default"].equal(regesteredAddress.dataValue, value); _powerAssert["default"].equal(address.dataValue, value); done(); }, 500); }, 500); })["catch"](function (err) { return done(err); }); }); it('Should recalculate value when submission is being set in edit mode', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement); form.setForm(_formWithCalcValue["default"]).then(function () { var numberComp = form.getComponent('number'); var checkbox = form.getComponent('checkbox'); form.setSubmission({}).then(function () { setTimeout(function () { _powerAssert["default"].equal(numberComp.dataValue, 0); _powerAssert["default"].equal(checkbox.dataValue, true); form.setSubmission({ data: { number: 7, checkbox: true } }).then(function () { setTimeout(function () { _powerAssert["default"].equal(numberComp.dataValue, 7); _powerAssert["default"].equal(checkbox.dataValue, false); done(); }, 500); }); }, 500); }); })["catch"](function (err) { return done(err); }); }); it('Should not activate checkbox when clicking tooltip icon', function (done) { var element = document.createElement('div'); var form = new _Webform["default"](element); form.setForm(_formtest.tooltipActivateCheckbox).then(function () { var checkboxValue = form.element.querySelector('[name="data[checkbox]"]').value; _harness["default"].clickElement(form, form.element.querySelector('[ref="tooltip"]')); setTimeout(function () { _powerAssert["default"].equal(form.element.querySelector('[name="data[checkbox]"]').value, checkboxValue); done(); }, 200); })["catch"](function (err) { return done(err); }); }); it('Should show survey values in html render mode', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement, { renderMode: 'html', readOnly: true }); form.setForm(_formWithSurvey["default"]).then(function () { form.setSubmission({ data: { survey: { question1: 'a3', question2: 'a1' } } }).then(function () { var survey = form.getComponent('survey'); var values = survey.element.querySelectorAll('td'); _powerAssert["default"].equal(values.length, 2); _powerAssert["default"].equal(values[0].innerHTML.trim(), 'a3'); _powerAssert["default"].equal(values[1].innerHTML.trim(), 'a1'); done(); }); })["catch"](function (err) { return done(err); }); }); it('Should show select boxes values in html render mode', function (done) { var formElement = document.createElement('div'); var form = new _Webform["default"](formElement, { renderMode: 'html', readOnly: true }); form.setForm(_formWithSelectBoxes["default"]).then(function () { form.setSubmission({ data: { selectBoxes: { a: true, b: true, c: false } } }).then(function () { var selectBoxes = form.getComponent('selectBoxes'); var values = selectBoxes.element.querySelector('[ref="value"]').textContent.trim(); _powerAssert["default"].equal(values, 'a, b'); done(); }); })