@w11k/ngx-present
Version:
Angular based Presentation Tool
151 lines • 11.5 kB
JavaScript
/**
* @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==