devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
107 lines • 11.4 kB
JavaScript
/*!
* devextreme-angular
* Version: 20.2.5
* Build date: Fri Jan 15 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
import * as tslib_1 from "tslib";
/* tslint:disable:use-input-property-decorator */
import { Directive, NgModule, TemplateRef, ViewContainerRef, Input, Renderer2, NgZone, EmbeddedViewRef } from '@angular/core';
import { DxTemplateHost } from './template-host';
import { getElement } from './utils';
import * as events from 'devextreme/events';
import * as domAdapter from 'devextreme/core/dom_adapter';
export const DX_TEMPLATE_WRAPPER_CLASS = 'dx-template-wrapper';
export class RenderData {
}
let DxTemplateDirective = class DxTemplateDirective {
constructor(templateRef, viewContainerRef, templateHost, renderer, zone) {
this.templateRef = templateRef;
this.viewContainerRef = viewContainerRef;
this.renderer = renderer;
this.zone = zone;
templateHost.setTemplate(this);
}
set dxTemplateOf(value) {
this.name = value;
}
;
renderTemplate(renderData) {
const childView = this.viewContainerRef.createEmbeddedView(this.templateRef, {
'$implicit': renderData.model,
index: renderData.index
});
const container = getElement(renderData.container);
if (renderData.container) {
childView.rootNodes.forEach((element) => {
this.renderer.appendChild(container, element);
});
}
return childView;
}
render(renderData) {
let childView;
if (this.zone.isStable) {
childView = this.zone.run(() => {
return this.renderTemplate(renderData);
});
}
else {
childView = this.renderTemplate(renderData);
// =========== WORKAROUND =============
// https://github.com/angular/angular/issues/12243
childView['detectChanges']();
// =========== /WORKAROUND =============
}
childView.rootNodes.forEach((element) => {
if (element.nodeType === 1) {
domAdapter.setClass(element, DX_TEMPLATE_WRAPPER_CLASS, true);
}
events.one(element, 'dxremove', ({}, params) => {
if (!params || !params._angularIntegration) {
childView.destroy();
}
});
});
return childView.rootNodes;
}
};
DxTemplateDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef },
{ type: DxTemplateHost },
{ type: Renderer2 },
{ type: NgZone }
];
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", Object),
tslib_1.__metadata("design:paramtypes", [Object])
], DxTemplateDirective.prototype, "dxTemplateOf", null);
DxTemplateDirective = tslib_1.__decorate([
Directive({
selector: '[dxTemplate]'
}),
tslib_1.__metadata("design:paramtypes", [TemplateRef,
ViewContainerRef,
DxTemplateHost,
Renderer2,
NgZone])
], DxTemplateDirective);
export { DxTemplateDirective };
let DxTemplateModule = class DxTemplateModule {
};
DxTemplateModule = tslib_1.__decorate([
NgModule({
declarations: [DxTemplateDirective],
exports: [DxTemplateDirective]
})
], DxTemplateModule);
export { DxTemplateModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kZXZleHRyZW1lLWFuZ3VsYXIvY29yZS8iLCJzb3VyY2VzIjpbInRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILGlEQUFpRDtBQUVqRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLGVBQWUsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssVUFBVSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDO0FBRS9ELE1BQU0sT0FBTyxVQUFVO0NBSXRCO0FBS0QsSUFBYSxtQkFBbUIsR0FBaEMsTUFBYSxtQkFBbUI7SUFPNUIsWUFBb0IsV0FBNkIsRUFDckMsZ0JBQWtDLEVBQzFDLFlBQTRCLEVBQ3BCLFFBQW1CLEVBQ25CLElBQVk7UUFKSixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUVsQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDcEIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBWEQsSUFBSSxZQUFZLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQUEsQ0FBQztJQVdNLGNBQWMsQ0FBQyxVQUFzQjtRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN6RSxXQUFXLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDN0IsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1NBQzFCLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFO1lBQ3RCLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFzQjtRQUN6QixJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEIsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLHVDQUF1QztZQUN2QyxrREFBa0Q7WUFDbEQsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDN0Isd0NBQXdDO1NBQzNDO1FBRUQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNqRTtZQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtvQkFDeEMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN2QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztDQUNKLENBQUE7O1lBcERvQyxXQUFXO1lBQ2QsZ0JBQWdCO1lBQzVCLGNBQWM7WUFDVixTQUFTO1lBQ2IsTUFBTTs7QUFUeEI7SUFEQyxLQUFLLEVBQUU7Ozt1REFHUDtBQUpRLG1CQUFtQjtJQUgvQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsY0FBYztLQUMzQixDQUFDOzZDQVFtQyxXQUFXO1FBQ2QsZ0JBQWdCO1FBQzVCLGNBQWM7UUFDVixTQUFTO1FBQ2IsTUFBTTtHQVhmLG1CQUFtQixDQTJEL0I7U0EzRFksbUJBQW1CO0FBaUVoQyxJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFnQjtDQUFJLENBQUE7QUFBcEIsZ0JBQWdCO0lBSjVCLFFBQVEsQ0FBQztRQUNOLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1FBQ25DLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO0tBQ2pDLENBQUM7R0FDVyxnQkFBZ0IsQ0FBSTtTQUFwQixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjAuMi41XG4gKiBCdWlsZCBkYXRlOiBGcmkgSmFuIDE1IDIwMjFcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxuICpcbiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXNcbiAqIG9mIHRoZSBNSVQgbGljZW5zZS4gU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZm9yIGRldGFpbHMuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKi9cblxuLyogdHNsaW50OmRpc2FibGU6dXNlLWlucHV0LXByb3BlcnR5LWRlY29yYXRvciAqL1xyXG5cclxuaW1wb3J0IHtcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIE5nTW9kdWxlLFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgSW5wdXQsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBFbWJlZGRlZFZpZXdSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IER4VGVtcGxhdGVIb3N0IH0gZnJvbSAnLi90ZW1wbGF0ZS1ob3N0JztcclxuaW1wb3J0IHsgZ2V0RWxlbWVudCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnZGV2ZXh0cmVtZS9ldmVudHMnO1xyXG5pbXBvcnQgKiBhcyBkb21BZGFwdGVyIGZyb20gJ2RldmV4dHJlbWUvY29yZS9kb21fYWRhcHRlcic7XHJcblxyXG5leHBvcnQgY29uc3QgRFhfVEVNUExBVEVfV1JBUFBFUl9DTEFTUyA9ICdkeC10ZW1wbGF0ZS13cmFwcGVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZW5kZXJEYXRhIHtcclxuICAgIG1vZGVsOiBhbnk7XHJcbiAgICBpbmRleDogbnVtYmVyO1xyXG4gICAgY29udGFpbmVyOiBhbnk7XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbZHhUZW1wbGF0ZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeFRlbXBsYXRlRGlyZWN0aXZlIHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZHhUZW1wbGF0ZU9mKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIHRlbXBsYXRlSG9zdDogRHhUZW1wbGF0ZUhvc3QsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgem9uZTogTmdab25lKSB7XHJcbiAgICAgICAgdGVtcGxhdGVIb3N0LnNldFRlbXBsYXRlKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVuZGVyVGVtcGxhdGUocmVuZGVyRGF0YTogUmVuZGVyRGF0YSk6IEVtYmVkZGVkVmlld1JlZjxhbnk+IHtcclxuICAgICAgICBjb25zdCBjaGlsZFZpZXcgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHtcclxuICAgICAgICAgICAgJyRpbXBsaWNpdCc6IHJlbmRlckRhdGEubW9kZWwsXHJcbiAgICAgICAgICAgIGluZGV4OiByZW5kZXJEYXRhLmluZGV4XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldEVsZW1lbnQocmVuZGVyRGF0YS5jb250YWluZXIpO1xyXG4gICAgICAgIGlmIChyZW5kZXJEYXRhLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBjaGlsZFZpZXcucm9vdE5vZGVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hpbGRWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcihyZW5kZXJEYXRhOiBSZW5kZXJEYXRhKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkVmlldztcclxuICAgICAgICBpZiAodGhpcy56b25lLmlzU3RhYmxlKSB7XHJcbiAgICAgICAgICAgIGNoaWxkVmlldyA9IHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVGVtcGxhdGUocmVuZGVyRGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNoaWxkVmlldyA9IHRoaXMucmVuZGVyVGVtcGxhdGUocmVuZGVyRGF0YSk7XHJcbiAgICAgICAgICAgIC8vID09PT09PT09PT09IFdPUktBUk9VTkQgPT09PT09PT09PT09PVxyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMjI0M1xyXG4gICAgICAgICAgICBjaGlsZFZpZXdbJ2RldGVjdENoYW5nZXMnXSgpO1xyXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PSAvV09SS0FST1VORCA9PT09PT09PT09PT09XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGlsZFZpZXcucm9vdE5vZGVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGRvbUFkYXB0ZXIuc2V0Q2xhc3MoZWxlbWVudCwgRFhfVEVNUExBVEVfV1JBUFBFUl9DTEFTUywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGV2ZW50cy5vbmUoZWxlbWVudCwgJ2R4cmVtb3ZlJywgKHt9LCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMuX2FuZ3VsYXJJbnRlZ3JhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVmlldy5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hpbGRWaWV3LnJvb3ROb2RlcztcclxuICAgIH1cclxufVxyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW0R4VGVtcGxhdGVEaXJlY3RpdmVdLFxyXG4gICAgZXhwb3J0czogW0R4VGVtcGxhdGVEaXJlY3RpdmVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeFRlbXBsYXRlTW9kdWxlIHsgfVxyXG4iXX0=