UNPKG

@egjs/ngx-conveyer

Version:

Angular Conveyer adds Drag gestures to your Native Scroll.

68 lines 9.66 kB
import { Directive, EventEmitter, Input, } from '@angular/core'; import { REACTIVE_CONVEYER } from '@egjs/conveyer'; import { useReactive } from '@cfcs/angular'; import { ANGULAR_CONVEYER_EVENTS } from './consts'; import { NgxConveyerInterface } from './ngx-conveyer.interface'; import * as i0 from "@angular/core"; export class NgxConveyerDirective extends NgxConveyerInterface { constructor(_host, _ngZone) { super(); this._host = _host; this._ngZone = _ngZone; /** Event emitters below will be created by `@cfcs/angular`. */ // automatic methods, reactive state this._reactiveConveyer = useReactive(this, { data: () => { return { container: { current: this._host.nativeElement }, props: this.ngxConveyer || {}, }; }, ...REACTIVE_CONVEYER, }); } ngAfterViewInit() { this._patchEventEmitters(); this._ngZone.runOutsideAngular(() => this._reactiveConveyer.mounted()); } ngOnDestroy() { this._reactiveConveyer.destroy(); } _patchEventEmitters() { // Pick `ngxReachStart`, ngxReachEnd` and other event emitters. // They will be created by `@cfcs/angular`. const eventEmitters = Object.values(this).filter((value) => value instanceof EventEmitter); for (const eventEmitter of eventEmitters) { const emit = eventEmitter.emit; // We must patch event generators because we're not responsible for // calling `emit` since this is done by `@cfcs/angular`. The `conveyer` // is created outside of the Angular zone to reduce the number of change // detections since it setups mouse listeners (as `mousemove`). eventEmitter.emit = (value) => { // `observed` is available only in newer RxJS version (7.2+). if (eventEmitter.observed || eventEmitter.observers.length > 0) { // Given event emitter is `ngxBeginScroll`; this will re-enter the Angular // zone if there're any listeners added in template, for instance: // `<div ngxConveyer (beginScroll)="onBeginScroll()"></div>`.ngxConveyer return this._ngZone.run(() => emit.call(eventEmitter, value)); } else { return emit.call(eventEmitter, value); } }; } } } NgxConveyerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NgxConveyerDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); NgxConveyerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: NgxConveyerDirective, selector: "[ngxConveyer]", inputs: { ngxConveyer: "ngxConveyer" }, outputs: { ngxReachStart: "reachStart", ngxReachEnd: "reachEnd", ngxLeaveStart: "leaveStart", ngxLeaveEnd: "leaveEnd", ngxBeginScroll: "beginScroll", ngxFinishScroll: "finishScroll" }, exportAs: ["ngxConveyer"], usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NgxConveyerDirective, decorators: [{ type: Directive, args: [{ selector: '[ngxConveyer]', exportAs: 'ngxConveyer', outputs: ANGULAR_CONVEYER_EVENTS, }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { ngxConveyer: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNvbnZleWVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb252ZXllci9zcmMvbGliL25neC1jb252ZXllci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFPaEUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG9CQUFvQjtJQWdCNUQsWUFBb0IsS0FBOEIsRUFBVSxPQUFlO1FBQ3pFLEtBQUssRUFBRSxDQUFDO1FBRFUsVUFBSyxHQUFMLEtBQUssQ0FBeUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBYjNFLCtEQUErRDtRQUUvRCxvQ0FBb0M7UUFDNUIsc0JBQWlCLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRTtZQUM1QyxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULE9BQU87b0JBQ0wsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYyxFQUFFO29CQUNqRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO2lCQUM5QixDQUFDO1lBQ0osQ0FBQztZQUNELEdBQUcsaUJBQWlCO1NBQ3JCLENBQUMsQ0FBQztJQUlILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLCtEQUErRDtRQUMvRCwyQ0FBMkM7UUFDM0MsTUFBTSxhQUFhLEdBQTRCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLFlBQVksQ0FDekMsQ0FBQztRQUVGLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFFL0IsbUVBQW1FO1lBQ25FLHVFQUF1RTtZQUN2RSx3RUFBd0U7WUFDeEUsK0RBQStEO1lBQy9ELFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDNUIsNkRBQTZEO2dCQUM3RCxJQUFJLFlBQVksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUM5RCwwRUFBMEU7b0JBQzFFLGtFQUFrRTtvQkFDbEUsd0VBQXdFO29CQUN4RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQy9EO3FCQUFNO29CQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQyxDQUFDO1NBQ0g7SUFDSCxDQUFDOztpSEF2RFUsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLE9BQU8sRUFBRSx1QkFBdUI7aUJBQ2pDO3NIQUVVLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb252ZXllck9wdGlvbnMsIFJFQUNUSVZFX0NPTlZFWUVSIH0gZnJvbSAnQGVnanMvY29udmV5ZXInO1xuaW1wb3J0IHsgdXNlUmVhY3RpdmUgfSBmcm9tICdAY2Zjcy9hbmd1bGFyJztcblxuaW1wb3J0IHsgQU5HVUxBUl9DT05WRVlFUl9FVkVOVFMgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQgeyBOZ3hDb252ZXllckludGVyZmFjZSB9IGZyb20gJy4vbmd4LWNvbnZleWVyLmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ3hDb252ZXllcl0nLFxuICBleHBvcnRBczogJ25neENvbnZleWVyJyxcbiAgb3V0cHV0czogQU5HVUxBUl9DT05WRVlFUl9FVkVOVFMsXG59KVxuZXhwb3J0IGNsYXNzIE5neENvbnZleWVyRGlyZWN0aXZlIGV4dGVuZHMgTmd4Q29udmV5ZXJJbnRlcmZhY2Uge1xuICBASW5wdXQoKSBuZ3hDb252ZXllciE6IENvbnZleWVyT3B0aW9ucyB8ICcnO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVycyBiZWxvdyB3aWxsIGJlIGNyZWF0ZWQgYnkgYEBjZmNzL2FuZ3VsYXJgLiAqL1xuXG4gIC8vIGF1dG9tYXRpYyBtZXRob2RzLCByZWFjdGl2ZSBzdGF0ZVxuICBwcml2YXRlIF9yZWFjdGl2ZUNvbnZleWVyID0gdXNlUmVhY3RpdmUodGhpcywge1xuICAgIGRhdGE6ICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRhaW5lcjogeyBjdXJyZW50OiB0aGlzLl9ob3N0Lm5hdGl2ZUVsZW1lbnQhIH0sXG4gICAgICAgIHByb3BzOiB0aGlzLm5neENvbnZleWVyIHx8IHt9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIC4uLlJFQUNUSVZFX0NPTlZFWUVSLFxuICB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX3BhdGNoRXZlbnRFbWl0dGVycygpO1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9yZWFjdGl2ZUNvbnZleWVyLm1vdW50ZWQoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWFjdGl2ZUNvbnZleWVyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhdGNoRXZlbnRFbWl0dGVycygpOiB2b2lkIHtcbiAgICAvLyBQaWNrIGBuZ3hSZWFjaFN0YXJ0YCwgbmd4UmVhY2hFbmRgIGFuZCBvdGhlciBldmVudCBlbWl0dGVycy5cbiAgICAvLyBUaGV5IHdpbGwgYmUgY3JlYXRlZCBieSBgQGNmY3MvYW5ndWxhcmAuXG4gICAgY29uc3QgZXZlbnRFbWl0dGVyczogRXZlbnRFbWl0dGVyPHVua25vd24+W10gPSBPYmplY3QudmFsdWVzKHRoaXMpLmZpbHRlcihcbiAgICAgICh2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXJcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBldmVudEVtaXR0ZXIgb2YgZXZlbnRFbWl0dGVycykge1xuICAgICAgY29uc3QgZW1pdCA9IGV2ZW50RW1pdHRlci5lbWl0O1xuXG4gICAgICAvLyBXZSBtdXN0IHBhdGNoIGV2ZW50IGdlbmVyYXRvcnMgYmVjYXVzZSB3ZSdyZSBub3QgcmVzcG9uc2libGUgZm9yXG4gICAgICAvLyBjYWxsaW5nIGBlbWl0YCBzaW5jZSB0aGlzIGlzIGRvbmUgYnkgYEBjZmNzL2FuZ3VsYXJgLiBUaGUgYGNvbnZleWVyYFxuICAgICAgLy8gaXMgY3JlYXRlZCBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIHpvbmUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2hhbmdlXG4gICAgICAvLyBkZXRlY3Rpb25zIHNpbmNlIGl0IHNldHVwcyBtb3VzZSBsaXN0ZW5lcnMgKGFzIGBtb3VzZW1vdmVgKS5cbiAgICAgIGV2ZW50RW1pdHRlci5lbWl0ID0gKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIGBvYnNlcnZlZGAgaXMgYXZhaWxhYmxlIG9ubHkgaW4gbmV3ZXIgUnhKUyB2ZXJzaW9uICg3LjIrKS5cbiAgICAgICAgaWYgKGV2ZW50RW1pdHRlci5vYnNlcnZlZCB8fCBldmVudEVtaXR0ZXIub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBHaXZlbiBldmVudCBlbWl0dGVyIGlzIGBuZ3hCZWdpblNjcm9sbGA7IHRoaXMgd2lsbCByZS1lbnRlciB0aGUgQW5ndWxhclxuICAgICAgICAgIC8vIHpvbmUgaWYgdGhlcmUncmUgYW55IGxpc3RlbmVycyBhZGRlZCBpbiB0ZW1wbGF0ZSwgZm9yIGluc3RhbmNlOlxuICAgICAgICAgIC8vIGA8ZGl2IG5neENvbnZleWVyIChiZWdpblNjcm9sbCk9XCJvbkJlZ2luU2Nyb2xsKClcIj48L2Rpdj5gLm5neENvbnZleWVyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gZW1pdC5jYWxsKGV2ZW50RW1pdHRlciwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZW1pdC5jYWxsKGV2ZW50RW1pdHRlciwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIl19