devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
102 lines (100 loc) • 3.57 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/collection/m_item.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 = void 0;
var _class = _interopRequireDefault(require("../../../core/class"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _iterator = require("../../../core/utils/iterator");
var _public_component = require("../../../core/utils/public_component");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const INVISIBLE_STATE_CLASS = "dx-state-invisible";
const DISABLED_STATE_CLASS = "dx-state-disabled";
const ITEM_CONTENT_PLACEHOLDER_CLASS = "dx-item-content-placeholder";
const forcibleWatcher = (watchMethod, fn, callback) => {
const filteredCallback = (() => {
let oldValue;
return value => {
if (oldValue !== value) {
callback(value, oldValue);
oldValue = value
}
}
})();
return {
dispose: watchMethod(fn, filteredCallback),
force() {
filteredCallback(fn())
}
}
};
class CollectionItem extends(_class.default.inherit({})) {
ctor($element, options, rawData) {
this._$element = $element;
this._options = options;
this._rawData = rawData;
(0, _public_component.attachInstanceToElement)($element, this, this._dispose);
this._render()
}
_render() {
const $placeholder = (0, _renderer.default)("<div>").addClass("dx-item-content-placeholder");
this._$element.append($placeholder);
this._watchers = [];
this._renderWatchers()
}
_renderWatchers() {
this._startWatcher("disabled", this._renderDisabled.bind(this));
this._startWatcher("visible", this._renderVisible.bind(this))
}
_startWatcher(field, render) {
const rawData = this._rawData;
const exprGetter = this._options.fieldGetter(field);
const watcher = forcibleWatcher(this._options.watchMethod(), (() => exprGetter(rawData)), ((value, oldValue) => {
this._dirty = true;
render(value, oldValue)
}));
this._watchers.push(watcher)
}
setDataField() {
this._dirty = false;
(0, _iterator.each)(this._watchers, ((_, watcher) => {
watcher.force()
}));
return this._dirty
}
_renderDisabled(value, oldValue) {
this._$element.toggleClass("dx-state-disabled", !!value);
this._$element.attr("aria-disabled", !!value);
this._updateOwnerFocus(value)
}
_updateOwnerFocus(isDisabled) {
const ownerComponent = this._options.owner;
if (ownerComponent && isDisabled) {
ownerComponent._resetItemFocus(this._$element)
}
}
_renderVisible(value, oldValue) {
this._$element.toggleClass("dx-state-invisible", void 0 !== value && !value)
}
_dispose() {
(0, _iterator.each)(this._watchers, ((_, watcher) => {
watcher.dispose()
}))
}
static getInstance($element) {
return (0, _public_component.getInstanceByElement)($element, this)
}
}
var _default = exports.default = CollectionItem;