UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

74 lines (73 loc) 2.65 kB
/** * DevExtreme (esm/__internal/ui/collection/m_collection_widget.async.js) * Version: 24.2.7 * Build date: Mon Apr 28 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import _extends from "@babel/runtime/helpers/esm/extends"; import Guid from "../../../core/guid"; import { Deferred, when } from "../../../core/utils/deferred"; import CollectionWidgetEdit from "../../ui/collection/m_collection_widget.edit"; class CollectionWidgetAsync extends CollectionWidgetEdit { _initMarkup() { this._asyncTemplateItemsMap = {}; super._initMarkup() } _render() { super._render(); this._planPostRenderActions() } _renderItemContent(args) { const renderContentDeferred = Deferred(); const itemDeferred = Deferred(); const uniqueKey = `dx${new Guid}`; this._asyncTemplateItemsMap[uniqueKey] = itemDeferred; const $itemContent = super._renderItemContent(_extends({}, args, { uniqueKey: uniqueKey })); itemDeferred.done((() => { renderContentDeferred.resolve($itemContent) })); return renderContentDeferred.promise() } _onItemTemplateRendered(itemTemplate, renderArgs) { return () => { const { uniqueKey: uniqueKey } = renderArgs; if (uniqueKey) { var _this$_asyncTemplateI; null === (_this$_asyncTemplateI = this._asyncTemplateItemsMap[uniqueKey]) || void 0 === _this$_asyncTemplateI || _this$_asyncTemplateI.resolve() } } } _postProcessRenderItems() {} _planPostRenderActions() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key] } const d = Deferred(); const asyncTemplateItems = Object.values(this._asyncTemplateItemsMap); when.apply(this, asyncTemplateItems).done((() => { this._postProcessRenderItems(...args); d.resolve().done((() => { this._asyncTemplateItemsMap = {} })) })); return d.promise() } _clean() { super._clean(); const asyncTemplateItems = Object.values(this._asyncTemplateItemsMap); asyncTemplateItems.forEach((item => { item.reject() })); this._asyncTemplateItemsMap = {} } } export default CollectionWidgetAsync;