devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
155 lines (153 loc) • 5.34 kB
JavaScript
/**
* DevExtreme (cjs/__internal/core/m_action.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Action = void 0;
var _renderer = _interopRequireDefault(require("../../core/renderer"));
var _iterator = require("../../core/utils/iterator");
var _type = require("../../core/utils/type");
var _window = require("../../core/utils/window");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
class Action {
constructor(action, config) {
config = config || {};
this._action = action;
this._context = config.context || (0, _window.getWindow)();
this._beforeExecute = config.beforeExecute;
this._afterExecute = config.afterExecute;
this._component = config.component;
this._validatingTargetName = config.validatingTargetName;
const excludeValidators = this._excludeValidators = {};
if (config.excludeValidators) {
for (let i = 0; i < config.excludeValidators.length; i++) {
excludeValidators[config.excludeValidators[i]] = true
}
}
}
execute() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key]
}
const e = {
action: this._action,
args: Array.prototype.slice.call(args),
context: this._context,
component: this._component,
validatingTargetName: this._validatingTargetName,
cancel: false,
handled: false
};
const beforeExecute = this._beforeExecute;
const afterExecute = this._afterExecute;
const argsBag = e.args[0] || {};
if (!this._validateAction(e)) {
return
}
null === beforeExecute || void 0 === beforeExecute || beforeExecute.call(this._context, e);
if (e.cancel) {
return
}
const result = this._executeAction(e);
if (argsBag.cancel) {
return
}
null === afterExecute || void 0 === afterExecute || afterExecute.call(this._context, e);
return result
}
_validateAction(e) {
const excludeValidators = this._excludeValidators;
const {
executors: executors
} = Action;
for (const name in executors) {
if (!excludeValidators[name]) {
var _executor$validate;
const executor = executors[name];
null === (_executor$validate = executor.validate) || void 0 === _executor$validate || _executor$validate.call(executor, e);
if (e.cancel) {
return false
}
}
}
return true
}
_executeAction(e) {
let result;
const {
executors: executors
} = Action;
for (const name in executors) {
var _executor$execute;
const executor = executors[name];
null === (_executor$execute = executor.execute) || void 0 === _executor$execute || _executor$execute.call(executor, e);
if (e.handled) {
result = e.result;
break
}
}
return result
}
static registerExecutor(name, executor) {
if ((0, _type.isPlainObject)(name)) {
(0, _iterator.each)(name, Action.registerExecutor);
return
}
Action.executors[name] = executor
}
static unregisterExecutor() {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2]
}(0, _iterator.each)(args, (function() {
delete Action.executors[this]
}))
}
}
exports.Action = Action;
Action.executors = {};
const createValidatorByTargetElement = condition => e => {
if (!e.args.length) {
return
}
const args = e.args[0];
const element = args[e.validatingTargetName] || args.element;
if (element && condition((0, _renderer.default)(element))) {
e.cancel = true
}
};
Action.registerExecutor({
disabled: {
validate: createValidatorByTargetElement(($target => $target.is(".dx-state-disabled, .dx-state-disabled *")))
},
readOnly: {
validate: createValidatorByTargetElement(($target => $target.is(".dx-state-readonly, .dx-state-readonly *:not(.dx-state-independent)")))
},
undefined: {
execute: e => {
if (!e.action) {
e.result = void 0;
e.handled = true
}
}
},
func: {
execute: e => {
if ((0, _type.isFunction)(e.action)) {
e.result = e.action.call(e.context, e.args[0]);
e.handled = true
}
}
}
});
var _default = exports.default = Action;