UNPKG

@firestitch/filter

Version:
165 lines 12.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { FILTER_DRAWER_DATA } from '../injectors/filter-drawer-data'; import { Overlay, OverlayConfig } from '@angular/cdk/overlay'; import { ComponentPortal, PortalInjector } from '@angular/cdk/portal'; import { FilterDrawerComponent } from '../components/filter-drawer/filter-drawer.component'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { FILTER_DRAWER_OVERLAY } from '../injectors/filter-drawer-overlay'; export class FsFilterOverlayService { /** * @param {?} _overlay */ constructor(_overlay) { this._overlay = _overlay; this.detach$ = new Subject(); this.attach$ = new Subject(); this._destroy$ = new Subject(); this.detach$ .pipe(takeUntil(this._destroy$)) .subscribe(this.detach.bind(this)); this.attach$ .pipe(takeUntil(this._destroy$)) .subscribe(this.attach.bind(this)); } /** * @private * @return {?} */ detach() { window.document.body.classList.remove('fs-filter-open'); } /** * @private * @return {?} */ attach() { window.document.body.classList.add('fs-filter-open'); } /** * @return {?} */ close() { this.detach(); if (this._overlayRef) { this._overlayRef.detach(); this._overlayRef = null; } } /** * @param {?} injector * @param {?} data * @return {?} */ open(injector, data) { this._overlayRef = this._createOverlay(); this._overlayRef.backdropClick() .pipe(takeUntil(this._destroy$)) .subscribe((/** * @return {?} */ () => { this._overlayRef.detach(); })); this._overlayRef.detachments() .pipe(takeUntil(this._destroy$)) .subscribe((/** * @return {?} */ () => { this.detach$.next(); })); this._overlayRef.attachments() .pipe(takeUntil(this._destroy$)) .subscribe((/** * @return {?} */ () => { this.attach$.next(); })); return this.openPortalPreview(injector, this._overlayRef, data); } /** * @return {?} */ ngOnDestroy() { this._destroy$.next(); this._destroy$.complete(); } /** * @private * @return {?} */ _createOverlay() { /** @type {?} */ const overlayConfig = new OverlayConfig({ hasBackdrop: true, backdropClass: 'fs-filter-backdrop' }); return this._overlay.create(overlayConfig); } /** * @private * @param {?} parentInjector * @param {?} overlayRef * @param {?} data * @return {?} */ openPortalPreview(parentInjector, overlayRef, data) { /** @type {?} */ const injector = this._createInjector(parentInjector, data, overlayRef); /** @type {?} */ const containerPortal = new ComponentPortal(FilterDrawerComponent, undefined, injector); /** @type {?} */ const containerRef = overlayRef.attach(containerPortal); return containerRef.instance; } /** * @private * @param {?} parentInjector * @param {?} data * @param {?} overlayRef * @return {?} */ _createInjector(parentInjector, data, overlayRef) { /** @type {?} */ const injectionTokens = new WeakMap([ [FILTER_DRAWER_DATA, data], [FILTER_DRAWER_OVERLAY, overlayRef], ]); return new PortalInjector(parentInjector, injectionTokens); } } FsFilterOverlayService.decorators = [ { type: Injectable } ]; /** @nocollapse */ FsFilterOverlayService.ctorParameters = () => [ { type: Overlay } ]; if (false) { /** @type {?} */ FsFilterOverlayService.prototype.detach$; /** @type {?} */ FsFilterOverlayService.prototype.attach$; /** * @type {?} * @private */ FsFilterOverlayService.prototype._destroy$; /** * @type {?} * @private */ FsFilterOverlayService.prototype._overlayRef; /** * @type {?} * @private */ FsFilterOverlayService.prototype._overlay; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW92ZXJsYXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXJlc3RpdGNoL2ZpbHRlci8iLCJzb3VyY2VzIjpbImFwcC9zZXJ2aWNlcy9maWx0ZXItb3ZlcmxheS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHM0UsTUFBTSxPQUFPLHNCQUFzQjs7OztJQVFqQyxZQUFvQixRQUFpQjtRQUFqQixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBTjlCLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXZCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS2hDLElBQUksQ0FBQyxPQUFPO2FBQ1gsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLE9BQU87YUFDWCxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUks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RUFBRSxJQUFJLENBQUM7WUFDMUIsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUM7U0FDcEMsQ0FBQztRQUVGLE9BQU8sSUFBSSxjQUFjLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELENBQUM7OztZQTFHRixVQUFVOzs7O1lBUEYsT0FBTzs7OztJQVVkLHlDQUErQjs7SUFDL0IseUNBQStCOzs7OztJQUUvQiwyQ0FBa0M7Ozs7O0lBQ2xDLDZDQUFnQzs7Ozs7SUFFcEIsMENBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRklMVEVSX0RSQVdFUl9EQVRBIH0gZnJvbSAnLi4vaW5qZWN0b3JzL2ZpbHRlci1kcmF3ZXItZGF0YSc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBQb3J0YWxJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgRmlsdGVyRHJhd2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWx0ZXItZHJhd2VyL2ZpbHRlci1kcmF3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZJTFRFUl9EUkFXRVJfT1ZFUkxBWSB9IGZyb20gJy4uL2luamVjdG9ycy9maWx0ZXItZHJhd2VyLW92ZXJsYXknO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRnNGaWx0ZXJPdmVybGF5U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIGRldGFjaCQgPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgYXR0YWNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXkpIHtcblxuICAgIHRoaXMuZGV0YWNoJFxuICAgIC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKHRoaXMuZGV0YWNoLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5hdHRhY2gkXG4gICAgLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUodGhpcy5hdHRhY2guYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGRldGFjaCgpIHtcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdmcy1maWx0ZXItb3BlbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2goKSB7XG4gICAgd2luZG93LmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZnMtZmlsdGVyLW9wZW4nKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpIHtcblxuICAgIHRoaXMuZGV0YWNoKCk7XG5cbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuKGluamVjdG9yOiBJbmplY3RvciwgZGF0YTogYW55KSB7XG5cbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xuXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKClcbiAgICAucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICApXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpXG4gICAgLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5kZXRhY2gkLm5leHQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNobWVudHMoKVxuICAgIC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoJC5uZXh0KCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5vcGVuUG9ydGFsUHJldmlldyhpbmplY3RvciwgdGhpcy5fb3ZlcmxheVJlZiwgZGF0YSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkoKSB7XG4gICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2ZzLWZpbHRlci1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblBvcnRhbFByZXZpZXcoXG4gICAgcGFyZW50SW5qZWN0b3I6IEluamVjdG9yLFxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXG4gICAgZGF0YTogYW55LFxuICApIHtcbiAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2NyZWF0ZUluamVjdG9yKHBhcmVudEluamVjdG9yLCBkYXRhLCBvdmVybGF5UmVmKTtcbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKEZpbHRlckRyYXdlckNvbXBvbmVudCwgdW5kZWZpbmVkLCBpbmplY3Rvcik7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gb3ZlcmxheVJlZi5hdHRhY2g8RmlsdGVyRHJhd2VyQ29tcG9uZW50Pihjb250YWluZXJQb3J0YWwpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUluamVjdG9yKHBhcmVudEluamVjdG9yLCBkYXRhLCBvdmVybGF5UmVmKSB7XG4gICAgY29uc3QgaW5qZWN0aW9uVG9rZW5zID0gbmV3IFdlYWtNYXA8YW55LCBhbnk+KFtcbiAgICAgIFtGSUxURVJfRFJBV0VSX0RBVEEsIGRhdGFdLFxuICAgICAgW0ZJTFRFUl9EUkFXRVJfT1ZFUkxBWSwgb3ZlcmxheVJlZl0sXG4gICAgXSk7XG5cbiAgICByZXR1cm4gbmV3IFBvcnRhbEluamVjdG9yKHBhcmVudEluamVjdG9yLCBpbmplY3Rpb25Ub2tlbnMpO1xuICB9XG59XG4iXX0=