UNPKG

@ng-zi/extensions-ag-grid

Version:

AgGrid Extension for Ag-grid

66 lines 11.4 kB
import { Injectable, NgZone } from "@angular/core"; import { VanillaFrameworkOverrides } from "ag-grid-community"; import * as i0 from "@angular/core"; export class AngularFrameworkOverrides extends VanillaFrameworkOverrides { constructor(_ngZone) { super('angular'); this._ngZone = _ngZone; // Flag used to control Zone behaviour when running tests as many test features rely on Zone. this.isRunningWithinTestZone = false; // Make all events run outside Angular as they often trigger the setup of event listeners // By having the event listeners outside Angular we can avoid triggering change detection // This also means that if a user calls an AG Grid API method from within their component // the internal side effects will not trigger change detection. Without this the events would // run inside Angular and trigger change detection as the source of the event was within the angular zone. this.wrapIncoming = (callback, source) => this.runOutside(callback, source); /** * Make sure that any code that is executed outside of AG Grid is running within the Angular zone. * This means users can update templates and use binding without having to do anything extra. */ this.wrapOutgoing = (callback) => this.runInsideAngular(callback); this.isRunningWithinTestZone = window?.AG_GRID_UNDER_TEST ?? !!(window?.Zone?.AsyncTestZoneSpec); if (!this._ngZone) { this.runOutside = (callback) => callback(); } else if (this.isRunningWithinTestZone) { this.runOutside = (callback, source) => { if (source === 'resize-observer') { // ensure resize observer callbacks are run outside of Angular even under test due to Jest not supporting ResizeObserver // which means it just loops continuously with a setTimeout with no way to flush the queue or have fixture.whenStable() resolve. return this._ngZone.runOutsideAngular(callback); } // When under test run inside Angular so that tests can use fixture.whenStable() to wait for async operations to complete. return callback(); }; } else { this.runOutside = (callback) => this._ngZone.runOutsideAngular(callback); } } // Only setup wrapping when the call is coming from within Angular zone, i.e from a users application code. // Used to distinguish between user code and AG Grid code setting up events against RowNodes and Columns get shouldWrapOutgoing() { return this._ngZone && NgZone.isInAngularZone(); } isFrameworkComponent(comp) { if (!comp) { return false; } const prototype = comp.prototype; const isAngularComp = prototype && 'agInit' in prototype; return isAngularComp; } runInsideAngular(callback) { // Check for _ngZone existence as it is not present when Zoneless return this._ngZone ? this._ngZone.run(callback) : callback(); } runOutsideAngular(callback, source) { return this.runOutside(callback, source); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AngularFrameworkOverrides, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AngularFrameworkOverrides }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AngularFrameworkOverrides, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i0.NgZone }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3JlZmVyZW5jZS9hbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyx5QkFBeUIsRUFBbUMsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHOUYsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHlCQUF5QjtJQU1wRSxZQUFvQixPQUFlO1FBQy9CLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQURELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFMbkMsNkZBQTZGO1FBQ3JGLDRCQUF1QixHQUFZLEtBQUssQ0FBQztRQTBCakQseUZBQXlGO1FBQ3pGLHlGQUF5RjtRQUN6Rix5RkFBeUY7UUFDekYsNkZBQTZGO1FBQzdGLDBHQUEwRztRQUMxRyxpQkFBWSxHQUE0RSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBUWhKOzs7V0FHRztRQUNILGlCQUFZLEdBQWlDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFwQ3ZGLElBQUksQ0FBQyx1QkFBdUIsR0FBSSxNQUFjLEVBQUUsa0JBQWtCLElBQUksQ0FBQyxDQUFDLENBQUUsTUFBYyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRW5ILElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQyxDQUFDO2FBQUssSUFBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNuQyxJQUFHLE1BQU0sS0FBSyxpQkFBaUIsRUFBQyxDQUFDO29CQUM3Qix3SEFBd0g7b0JBQ3hILGdJQUFnSTtvQkFDaEksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO2dCQUNELDBIQUEwSDtnQkFDMUgsT0FBTyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUM7UUFDTixDQUFDO2FBQUksQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNMLENBQUM7SUFTRCwyR0FBMkc7SUFDM0csd0dBQXdHO0lBQ3hHLElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQVFELG9CQUFvQixDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTyxLQUFLLENBQUM7UUFBQyxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsTUFBTSxhQUFhLEdBQUcsU0FBUyxJQUFJLFFBQVEsSUFBSSxTQUFTLENBQUM7UUFDekQsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFLLFFBQWlCO1FBQ2xDLGlFQUFpRTtRQUNqRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsaUJBQWlCLENBQUksUUFBaUIsRUFBRSxNQUF5QztRQUM3RSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7a0lBN0RRLHlCQUF5QjtzSUFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7VmFuaWxsYUZyYW1ld29ya092ZXJyaWRlcywgRnJhbWV3b3JrT3ZlcnJpZGVzSW5jb21pbmdTb3VyY2V9IGZyb20gXCJhZy1ncmlkLWNvbW11bml0eVwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyBleHRlbmRzIFZhbmlsbGFGcmFtZXdvcmtPdmVycmlkZXMge1xyXG4gICAgLy8gRmxhZyB1c2VkIHRvIGNvbnRyb2wgWm9uZSBiZWhhdmlvdXIgd2hlbiBydW5uaW5nIHRlc3RzIGFzIG1hbnkgdGVzdCBmZWF0dXJlcyByZWx5IG9uIFpvbmUuXHJcbiAgICBwcml2YXRlIGlzUnVubmluZ1dpdGhpblRlc3Rab25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBydW5PdXRzaWRlOiA8VD4oY2FsbGJhY2s6ICgpID0+IFQsIHNvdXJjZT86IEZyYW1ld29ya092ZXJyaWRlc0luY29taW5nU291cmNlKSA9PiBUO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX25nWm9uZTogTmdab25lICkge1xyXG4gICAgICAgIHN1cGVyKCdhbmd1bGFyJyk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nV2l0aGluVGVzdFpvbmUgPSAod2luZG93IGFzIGFueSk/LkFHX0dSSURfVU5ERVJfVEVTVCA/PyAhISgod2luZG93IGFzIGFueSk/LlpvbmU/LkFzeW5jVGVzdFpvbmVTcGVjKTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuX25nWm9uZSl7XHJcbiAgICAgICAgICAgIHRoaXMucnVuT3V0c2lkZSA9IChjYWxsYmFjaykgPT4gY2FsbGJhY2soKTtcclxuICAgICAgICB9ZWxzZSBpZih0aGlzLmlzUnVubmluZ1dpdGhpblRlc3Rab25lKXtcclxuICAgICAgICAgICAgdGhpcy5ydW5PdXRzaWRlID0gKGNhbGxiYWNrLCBzb3VyY2UpID0+e1xyXG4gICAgICAgICAgICAgICAgaWYoc291cmNlID09PSAncmVzaXplLW9ic2VydmVyJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIHJlc2l6ZSBvYnNlcnZlciBjYWxsYmFja3MgYXJlIHJ1biBvdXRzaWRlIG9mIEFuZ3VsYXIgZXZlbiB1bmRlciB0ZXN0IGR1ZSB0byBKZXN0IG5vdCBzdXBwb3J0aW5nIFJlc2l6ZU9ic2VydmVyXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggbWVhbnMgaXQganVzdCBsb29wcyBjb250aW51b3VzbHkgd2l0aCBhIHNldFRpbWVvdXQgd2l0aCBubyB3YXkgdG8gZmx1c2ggdGhlIHF1ZXVlIG9yIGhhdmUgZml4dHVyZS53aGVuU3RhYmxlKCkgcmVzb2x2ZS5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdW5kZXIgdGVzdCBydW4gaW5zaWRlIEFuZ3VsYXIgc28gdGhhdCB0ZXN0cyBjYW4gdXNlIGZpeHR1cmUud2hlblN0YWJsZSgpIHRvIHdhaXQgZm9yIGFzeW5jIG9wZXJhdGlvbnMgdG8gY29tcGxldGUuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5ydW5PdXRzaWRlID0gKGNhbGxiYWNrKSA9PiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIGFsbCBldmVudHMgcnVuIG91dHNpZGUgQW5ndWxhciBhcyB0aGV5IG9mdGVuIHRyaWdnZXIgdGhlIHNldHVwIG9mIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgLy8gQnkgaGF2aW5nIHRoZSBldmVudCBsaXN0ZW5lcnMgb3V0c2lkZSBBbmd1bGFyIHdlIGNhbiBhdm9pZCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgIC8vIFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIGEgdXNlciBjYWxscyBhbiBBRyBHcmlkIEFQSSBtZXRob2QgZnJvbSB3aXRoaW4gdGhlaXIgY29tcG9uZW50XHJcbiAgICAvLyB0aGUgaW50ZXJuYWwgc2lkZSBlZmZlY3RzIHdpbGwgbm90IHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbi4gV2l0aG91dCB0aGlzIHRoZSBldmVudHMgd291bGRcclxuICAgIC8vIHJ1biBpbnNpZGUgQW5ndWxhciBhbmQgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IHdhcyB3aXRoaW4gdGhlIGFuZ3VsYXIgem9uZS5cclxuICAgIHdyYXBJbmNvbWluZzogPFQ+KGNhbGxiYWNrOiAoKSA9PiBULCBzb3VyY2U/OiBGcmFtZXdvcmtPdmVycmlkZXNJbmNvbWluZ1NvdXJjZSkgPT4gVCAgPSAoY2FsbGJhY2ssIHNvdXJjZSkgPT4gdGhpcy5ydW5PdXRzaWRlKGNhbGxiYWNrLCBzb3VyY2UpO1xyXG5cclxuICAgIC8vIE9ubHkgc2V0dXAgd3JhcHBpbmcgd2hlbiB0aGUgY2FsbCBpcyBjb21pbmcgZnJvbSB3aXRoaW4gQW5ndWxhciB6b25lLCBpLmUgZnJvbSBhIHVzZXJzIGFwcGxpY2F0aW9uIGNvZGUuXHJcbiAgICAvLyBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdXNlciBjb2RlIGFuZCBBRyBHcmlkIGNvZGUgc2V0dGluZyB1cCBldmVudHMgYWdhaW5zdCBSb3dOb2RlcyBhbmQgQ29sdW1uc1xyXG4gICAgZ2V0IHNob3VsZFdyYXBPdXRnb2luZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbmdab25lICYmIE5nWm9uZS5pc0luQW5ndWxhclpvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ha2Ugc3VyZSB0aGF0IGFueSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgb3V0c2lkZSBvZiBBRyBHcmlkIGlzIHJ1bm5pbmcgd2l0aGluIHRoZSBBbmd1bGFyIHpvbmUuXHJcbiAgICAgKiBUaGlzIG1lYW5zIHVzZXJzIGNhbiB1cGRhdGUgdGVtcGxhdGVzIGFuZCB1c2UgYmluZGluZyB3aXRob3V0IGhhdmluZyB0byBkbyBhbnl0aGluZyBleHRyYS5cclxuICAgICAqL1xyXG4gICAgd3JhcE91dGdvaW5nOiA8VD4oIGNhbGxiYWNrOiAoKSA9PiBUKSA9PiBUID0gKGNhbGxiYWNrKSA9PiB0aGlzLnJ1bkluc2lkZUFuZ3VsYXIoY2FsbGJhY2spO1xyXG5cclxuICAgIGlzRnJhbWV3b3JrQ29tcG9uZW50KGNvbXA6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghY29tcCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICBjb25zdCBwcm90b3R5cGUgPSBjb21wLnByb3RvdHlwZTtcclxuICAgICAgICBjb25zdCBpc0FuZ3VsYXJDb21wID0gcHJvdG90eXBlICYmICdhZ0luaXQnIGluIHByb3RvdHlwZTtcclxuICAgICAgICByZXR1cm4gaXNBbmd1bGFyQ29tcDtcclxuICAgIH1cclxuXHJcbiAgICBydW5JbnNpZGVBbmd1bGFyPFQ+KCBjYWxsYmFjazogKCkgPT4gVCk6IFQge1xyXG4gICAgICAgIC8vIENoZWNrIGZvciBfbmdab25lIGV4aXN0ZW5jZSBhcyBpdCBpcyBub3QgcHJlc2VudCB3aGVuIFpvbmVsZXNzXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25nWm9uZSA/IHRoaXMuX25nWm9uZS5ydW4oY2FsbGJhY2spIDogY2FsbGJhY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBydW5PdXRzaWRlQW5ndWxhcjxUPihjYWxsYmFjazogKCkgPT4gVCwgc291cmNlPzogRnJhbWV3b3JrT3ZlcnJpZGVzSW5jb21pbmdTb3VyY2UpOiBUIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5PdXRzaWRlKGNhbGxiYWNrLCBzb3VyY2UpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==