UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

182 lines (180 loc) 7.06 kB
/** * DevExtreme (ui/validation_summary.js) * Version: 20.1.7 * Build date: Tue Aug 25 2020 * * Copyright (c) 2012 - 2020 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var _component_registrator = require("../core/component_registrator"); var _component_registrator2 = _interopRequireDefault(_component_registrator); var _events_engine = require("../events/core/events_engine"); var _events_engine2 = _interopRequireDefault(_events_engine); var _common = require("../core/utils/common"); var _extend = require("../core/utils/extend"); var _iterator = require("../core/utils/iterator"); var _iterator2 = _interopRequireDefault(_iterator); var _validation_engine = require("./validation_engine"); var _validation_engine2 = _interopRequireDefault(_validation_engine); var _uiCollection_widget = require("./collection/ui.collection_widget.edit"); var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj } } var VALIDATION_SUMMARY_CLASS = "dx-validationsummary"; var ITEM_CLASS = VALIDATION_SUMMARY_CLASS + "-item"; var ITEM_DATA_KEY = VALIDATION_SUMMARY_CLASS + "-item-data"; var ValidationSummary = _uiCollection_widget2.default.inherit({ _getDefaultOptions: function() { return (0, _extend.extend)(this.callBase(), { focusStateEnabled: false, noDataText: null }) }, _setOptionsByReference: function() { this.callBase(); (0, _extend.extend)(this._optionsByReference, { validationGroup: true }) }, _init: function() { this.callBase(); this._initGroupRegistration() }, _initGroupRegistration: function() { var $element = this.$element(); var group = this.option("validationGroup") || _validation_engine2.default.findGroup($element, this._modelByElement($element)); var groupConfig = _validation_engine2.default.addGroup(group); this._unsubscribeGroup(); this._groupWasInit = true; this._validationGroup = group; this.groupSubscription = this._groupValidationHandler.bind(this); groupConfig.on("validated", this.groupSubscription) }, _unsubscribeGroup: function() { var groupConfig = _validation_engine2.default.getGroupConfig(this._validationGroup); groupConfig && groupConfig.off("validated", this.groupSubscription) }, _getOrderedItems: function(validators, items) { var orderedItems = []; _iterator2.default.each(validators, function(_, validator) { var foundItems = (0, _common.grep)(items, function(item) { if (item.validator === validator) { return true } }); if (foundItems.length) { orderedItems = orderedItems.concat(foundItems) } }); return orderedItems }, _groupValidationHandler: function(params) { var _this = this; var items = this._getOrderedItems(params.validators, _iterator2.default.map(params.brokenRules, function(rule) { return { text: rule.message, validator: rule.validator, index: rule.index } })); this.validators = params.validators; _iterator2.default.each(this.validators, function(_, validator) { if (validator._validationSummary !== _this) { var handler = _this._itemValidationHandler.bind(_this); var disposingHandler = function() { validator.off("validated", handler); validator._validationSummary = null; handler = null }; validator.on("validated", handler); validator.on("disposing", disposingHandler); validator._validationSummary = _this } }); this.option("items", items) }, _itemValidationHandler: function(_ref) { var isValid = _ref.isValid, validator = _ref.validator, brokenRules = _ref.brokenRules; var items = this.option("items"); var itemsChanged = false; var itemIndex = 0; var _loop = function() { var item = items[itemIndex]; if (item.validator === validator) { var foundRule = (0, _common.grep)(brokenRules || [], function(rule) { return rule.index === item.index })[0]; if (isValid || !foundRule) { items.splice(itemIndex, 1); itemsChanged = true; return "continue" } if (foundRule.message !== item.text) { item.text = foundRule.message; itemsChanged = true } } itemIndex++ }; while (itemIndex < items.length) { var _ret = _loop(); if ("continue" === _ret) { continue } } _iterator2.default.each(brokenRules, function(_, rule) { var foundItem = (0, _common.grep)(items, function(item) { return item.validator === validator && item.index === rule.index })[0]; if (!foundItem) { items.push({ text: rule.message, validator: validator, index: rule.index }); itemsChanged = true } }); if (itemsChanged) { items = this._getOrderedItems(this.validators, items); this.option("items", items) } }, _initMarkup: function() { this.$element().addClass(VALIDATION_SUMMARY_CLASS); this.callBase() }, _optionChanged: function(args) { switch (args.name) { case "validationGroup": this._initGroupRegistration(); break; default: this.callBase(args) } }, _itemClass: function() { return ITEM_CLASS }, _itemDataKey: function() { return ITEM_DATA_KEY }, _postprocessRenderItem: function(params) { _events_engine2.default.on(params.itemElement, "click", function() { params.itemData.validator && params.itemData.validator.focus && params.itemData.validator.focus() }) }, _dispose: function() { this.callBase(); this._unsubscribeGroup() } }); (0, _component_registrator2.default)("dxValidationSummary", ValidationSummary); module.exports = ValidationSummary; module.exports.default = module.exports;