@ng-zi/extensions-ag-grid
Version:
AgGrid Extension for Ag-grid
66 lines • 11.4 kB
JavaScript
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==