UNPKG

@w11k/ngx-present

Version:

Angular based Presentation Tool

151 lines 11.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/core/slide-link.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, Input, Optional, Type } from '@angular/core'; import { Router, RouterLinkWithHref } from '@angular/router'; import { OnDestroyMixin, untilComponentDestroyed } from '@w11k/ngx-componentdestroyed'; import { skipNil } from '@w11k/rx-ninja'; import { fromEvent, ReplaySubject } from 'rxjs'; import { filter, map, take, withLatestFrom } from 'rxjs/operators'; import { SlideBySlideService } from '../slide-by-slide/slide-by-slide.service'; /** * @param {?} event * @return {?} */ function isMouseEvent(event) { return event instanceof MouseEvent; } /** * Use in conjunction with routerLink on an anchor tag for real links. * Use on any tag for click event handling. */ export class SlideLinkDirective extends OnDestroyMixin { /** * @param {?} service * @param {?} router * @param {?} element * @param {?} routerLinkDirective */ constructor(service, router, element, routerLinkDirective) { super(); this.service = service; this.router = router; this.element = element; this.routerLinkDirective = routerLinkDirective; this.slide$ = new ReplaySubject(1); if (routerLinkDirective) { this.slide$ .pipe(untilComponentDestroyed(this)) .subscribe((/** * @param {?} slide * @return {?} */ slide => { /** @type {?} */ let link; if (slide) { /** @type {?} */ const mode = `/${this.service.state.currentMode}`; link = ([mode, ...slide.coordinates]); } else { link = []; } this.routerLinkDirective.routerLink = link; // update href on link this.routerLinkDirective.ngOnChanges({}); })); } fromEvent(element.nativeElement, 'click') .pipe(filter(isMouseEvent), filter((/** * @param {?} event * @return {?} */ event => event.altKey)), withLatestFrom(this.slide$), untilComponentDestroyed(this)) .subscribe((/** * @param {?} __0 * @return {?} */ ([event, slide]) => { event.preventDefault(); /** @type {?} */ const link = (['/presenter', ...slide.coordinates]); this.router.navigate(link, { queryParamsHandling: 'merge' }); })); } /** * @param {?} component * @return {?} */ set ngxPresentSlideLink(component) { this.service.select(((/** * @param {?} state * @return {?} */ state => state.slides))) .pipe(skipNil(), untilComponentDestroyed(this)) .pipe(map((/** * @param {?} slides * @return {?} */ slides => slides.find((/** * @param {?} slide * @return {?} */ slide => slide.component === component)))), filter((/** * @param {?} slide * @return {?} */ slide => slide !== undefined)), take(1)) .subscribe((/** * @param {?} slide * @return {?} */ slide => this.slide$.next(slide))); } } SlideLinkDirective.decorators = [ { type: Directive, args: [{ selector: '[ngxPresentSlideLink]' },] } ]; /** @nocollapse */ SlideLinkDirective.ctorParameters = () => [ { type: SlideBySlideService }, { type: Router }, { type: ElementRef }, { type: RouterLinkWithHref, decorators: [{ type: Optional }] } ]; SlideLinkDirective.propDecorators = { ngxPresentSlideLink: [{ type: Input }] }; if (false) { /** * @type {?} * @private */ SlideLinkDirective.prototype.slide$; /** * @type {?} * @private */ SlideLinkDirective.prototype.service; /** * @type {?} * @private */ SlideLinkDirective.prototype.router; /** * @type {?} * @private */ SlideLinkDirective.prototype.element; /** * @type {?} * @private */ SlideLinkDirective.prototype.routerLinkDirective; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGUtbGluay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdzExay9uZ3gtcHJlc2VudC8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL3NsaWRlLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQUcvRSxTQUFTLFlBQVksQ0FBQyxLQUFVO0lBQzlCLE9BQU8sS0FBSyxZQUFZLFVBQVUsQ0FBQztBQUNyQyxDQUFDOzs7OztBQVNELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjOzs7Ozs7O0lBSXBELFlBQTZCLE9BQTRCLEVBQzVCLE1BQWMsRUFDZCxPQUFtQixFQUNQLG1CQUF1QztRQUM5RSxLQUFLLEVBQUUsQ0FBQztRQUptQixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFML0QsV0FBTSxHQUFHLElBQUksYUFBYSxDQUFRLENBQUMsQ0FBQyxDQUFDO1FBUXBELElBQUksbUJBQW1CLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU07aUJBQ1IsSUFBSSxDQUNILHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUM5QjtpQkFDQSxTQUFTOzs7O1lBQUMsS0FBSyxDQUFDLEVBQUU7O29CQUNiLElBQVc7Z0JBRWYsSUFBSSxLQUFLLEVBQUU7OzBCQUNILElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtvQkFDakQsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0wsSUFBSSxHQUFHLEVBQUUsQ0FBQztpQkFDWDtnQkFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDM0Msc0JBQXNCO2dCQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUMsRUFBQyxDQUFDO1NBQ047UUFFRCxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7YUFDdEMsSUFBSSxDQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFDcEIsTUFBTTs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBQyxFQUM3QixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUMzQix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FDOUI7YUFDQSxTQUFTOzs7O1FBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzVCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7a0JBRWpCLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVELElBQ1csbUJBQW1CLENBQUMsU0FBb0I7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUMsQ0FBQzthQUN6QyxJQUFJLENBQ0gsT0FBTyxFQUFFLEVBQ1QsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0IsSUFBSSxDQUNILEdBQUc7Ozs7UUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBQyxFQUFDLEVBQ2xFLE1BQU07Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUMsRUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsU0FBUzs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztJQUNqRCxDQUFDOzs7WUE5REYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx1QkFBdUI7YUFDbEM7Ozs7WUFiUSxtQkFBbUI7WUFObkIsTUFBTTtZQURLLFVBQVU7WUFDYixrQkFBa0IsdUJBMkJwQixRQUFROzs7a0NBd0NwQixLQUFLOzs7Ozs7O0lBN0NOLG9DQUFzRDs7Ozs7SUFFMUMscUNBQTZDOzs7OztJQUM3QyxvQ0FBK0I7Ozs7O0lBQy9CLHFDQUFvQzs7Ozs7SUFDcEMsaURBQW9FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT3B0aW9uYWwsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTGlua1dpdGhIcmVmIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9uRGVzdHJveU1peGluLCB1bnRpbENvbXBvbmVudERlc3Ryb3llZCB9IGZyb20gJ0B3MTFrL25neC1jb21wb25lbnRkZXN0cm95ZWQnO1xuaW1wb3J0IHsgc2tpcE5pbCB9IGZyb20gJ0B3MTFrL3J4LW5pbmphJztcbmltcG9ydCB7IGZyb21FdmVudCwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTbGlkZUJ5U2xpZGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2xpZGUtYnktc2xpZGUvc2xpZGUtYnktc2xpZGUuc2VydmljZSc7XG5pbXBvcnQgeyBTbGlkZSB9IGZyb20gJy4vcHJlc2VudGF0aW9uLnR5cGVzJztcblxuZnVuY3Rpb24gaXNNb3VzZUV2ZW50KGV2ZW50OiBhbnkpOiBldmVudCBpcyBNb3VzZUV2ZW50IHtcbiAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudDtcbn1cblxuLyoqXG4gKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCByb3V0ZXJMaW5rIG9uIGFuIGFuY2hvciB0YWcgZm9yIHJlYWwgbGlua3MuXG4gKiBVc2Ugb24gYW55IHRhZyBmb3IgY2xpY2sgZXZlbnQgaGFuZGxpbmcuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ3hQcmVzZW50U2xpZGVMaW5rXSdcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVMaW5rRGlyZWN0aXZlIGV4dGVuZHMgT25EZXN0cm95TWl4aW4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2xpZGUkID0gbmV3IFJlcGxheVN1YmplY3Q8U2xpZGU+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogU2xpZGVCeVNsaWRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IHJvdXRlckxpbmtEaXJlY3RpdmU6IFJvdXRlckxpbmtXaXRoSHJlZikge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAocm91dGVyTGlua0RpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5zbGlkZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdW50aWxDb21wb25lbnREZXN0cm95ZWQodGhpcyksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzbGlkZSA9PiB7XG4gICAgICAgICAgbGV0IGxpbms6IGFueVtdO1xuXG4gICAgICAgICAgaWYgKHNsaWRlKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlID0gYC8ke3RoaXMuc2VydmljZS5zdGF0ZS5jdXJyZW50TW9kZX1gO1xuICAgICAgICAgICAgbGluayA9IChbbW9kZSwgLi4uc2xpZGUuY29vcmRpbmF0ZXNdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluayA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucm91dGVyTGlua0RpcmVjdGl2ZS5yb3V0ZXJMaW5rID0gbGluaztcbiAgICAgICAgICAvLyB1cGRhdGUgaHJlZiBvbiBsaW5rXG4gICAgICAgICAgdGhpcy5yb3V0ZXJMaW5rRGlyZWN0aXZlLm5nT25DaGFuZ2VzKHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnJvbUV2ZW50KGVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNNb3VzZUV2ZW50KSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50LmFsdEtleSksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc2xpZGUkKSxcbiAgICAgICAgdW50aWxDb21wb25lbnREZXN0cm95ZWQodGhpcyksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbZXZlbnQsIHNsaWRlXSkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGxpbmsgPSAoWycvcHJlc2VudGVyJywgLi4uc2xpZGUuY29vcmRpbmF0ZXNdKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShsaW5rLCB7IHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSd9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBuZ3hQcmVzZW50U2xpZGVMaW5rKGNvbXBvbmVudDogVHlwZTxhbnk+KSB7XG4gICAgdGhpcy5zZXJ2aWNlLnNlbGVjdCgoc3RhdGUgPT4gc3RhdGUuc2xpZGVzKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwTmlsKCksXG4gICAgICAgIHVudGlsQ29tcG9uZW50RGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChzbGlkZXMgPT4gc2xpZGVzLmZpbmQoc2xpZGUgPT4gc2xpZGUuY29tcG9uZW50ID09PSBjb21wb25lbnQpKSxcbiAgICAgICAgZmlsdGVyKHNsaWRlID0+IHNsaWRlICE9PSB1bmRlZmluZWQpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzbGlkZSA9PiB0aGlzLnNsaWRlJC5uZXh0KHNsaWRlKSk7XG4gIH1cbn1cbiJdfQ==