UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

155 lines (153 loc) • 7.1 kB
/** * DevExtreme (ui/grid_core/ui.grid_core.error_handling.js) * Version: 18.2.18 * Build date: Tue Oct 18 2022 * * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var _renderer = require("../../core/renderer"); var _renderer2 = _interopRequireDefault(_renderer); var _events_engine = require("../../events/core/events_engine"); var _events_engine2 = _interopRequireDefault(_events_engine); var _click = require("../../events/click"); var _click2 = _interopRequireDefault(_click); var _iterator = require("../../core/utils/iterator"); var _uiGrid_core = require("./ui.grid_core.modules"); var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj } } var ERROR_ROW_CLASS = "dx-error-row", ERROR_MESSAGE_CLASS = "dx-error-message", ERROR_CLOSEBUTTON_CLASS = "dx-closebutton", ACTION_CLASS = "action"; var ErrorHandlingController = _uiGrid_core2.default.ViewController.inherit({ init: function() { var that = this; that._columnHeadersView = that.getView("columnHeadersView"); that._rowsView = that.getView("rowsView") }, _createErrorRow: function(error, $tableElements) { var $errorRow, $closeButton, that = this, $errorMessage = this._renderErrorMessage(error); if ($tableElements) { $errorRow = (0, _renderer2.default)("<tr>").addClass(ERROR_ROW_CLASS); $closeButton = (0, _renderer2.default)("<div>").addClass(ERROR_CLOSEBUTTON_CLASS).addClass(that.addWidgetPrefix(ACTION_CLASS)); _events_engine2.default.on($closeButton, _click2.default.name, that.createAction(function(args) { var $errorRow, e = args.event, errorRowIndex = (0, _renderer2.default)(e.currentTarget).closest("." + ERROR_ROW_CLASS).index(); e.stopPropagation(); (0, _iterator.each)($tableElements, function(_, tableElement) { $errorRow = (0, _renderer2.default)(tableElement).children("tbody").children("tr").eq(errorRowIndex); that.removeErrorRow($errorRow) }); that.component._fireContentReadyAction() })); (0, _renderer2.default)("<td>").attr({ colSpan: that.getController("columns").getVisibleColumns().length, role: "presentation" }).prepend($closeButton).append($errorMessage).appendTo($errorRow); return $errorRow } return $errorMessage }, _renderErrorMessage: function(error) { var message = error.url ? error.message.replace(error.url, "") : error.message || error, $message = (0, _renderer2.default)("<div>").addClass(ERROR_MESSAGE_CLASS).text(message); if (error.url) { (0, _renderer2.default)("<a>").attr("href", error.url).text(error.url).appendTo($message) } return $message }, renderErrorRow: function(error, rowIndex, $popupContent) { var $row, $errorMessageElement, $firstErrorRow, rowElements, viewElement, $tableElements, that = this; if ($popupContent) { $popupContent.find("." + ERROR_MESSAGE_CLASS).remove(); $errorMessageElement = that._createErrorRow(error); $popupContent.prepend($errorMessageElement); return $errorMessageElement } viewElement = rowIndex >= 0 || !that._columnHeadersView.isVisible() ? that._rowsView : that._columnHeadersView, $tableElements = $popupContent || viewElement.getTableElements(); (0, _iterator.each)($tableElements, function(_, tableElement) { $errorMessageElement = that._createErrorRow(error, $tableElements); $firstErrorRow = $firstErrorRow || $errorMessageElement; if (rowIndex >= 0) { $row = viewElement._getRowElements((0, _renderer2.default)(tableElement)).eq(rowIndex); that.removeErrorRow($row.next()); $errorMessageElement.insertAfter($row) } else { var $tbody = (0, _renderer2.default)(tableElement).children("tbody"); rowElements = $tbody.children("tr"); if (that._columnHeadersView.isVisible()) { that.removeErrorRow(rowElements.last()); (0, _renderer2.default)(tableElement).append($errorMessageElement) } else { that.removeErrorRow(rowElements.first()); $tbody.first().prepend($errorMessageElement) } } }); return $firstErrorRow }, removeErrorRow: function($row) { if (!$row) { var $columnHeaders = this._columnHeadersView && this._columnHeadersView.element(); $row = $columnHeaders && $columnHeaders.find("." + ERROR_ROW_CLASS); if (!$row || !$row.length) { var $rowsViewElement = this._rowsView.element(); $row = $rowsViewElement && $rowsViewElement.find("." + ERROR_ROW_CLASS) } } $row && $row.hasClass(ERROR_ROW_CLASS) && $row.remove() }, optionChanged: function(args) { var that = this; switch (args.name) { case "errorRowEnabled": args.handled = true; break; default: that.callBase(args) } } }); module.exports = { defaultOptions: function() { return { errorRowEnabled: true } }, controllers: { errorHandling: ErrorHandlingController }, extenders: { controllers: { data: { init: function() { var that = this, errorHandlingController = that.getController("errorHandling"); that.callBase(); that.dataErrorOccurred.add(function(error, $popupContent) { if (that.option("errorRowEnabled")) { errorHandlingController.renderErrorRow(error, void 0, $popupContent) } }); that.changed.add(function(e) { if (e && "loadError" === e.changeType) { return } var errorHandlingController = that.getController("errorHandling"), editingController = that.getController("editing"); if (editingController && !editingController.hasChanges()) { errorHandlingController && errorHandlingController.removeErrorRow() } }) } } } } };