UNPKG

@firestitch/filter

Version:
774 lines 63 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, ViewChild, ViewEncapsulation, HostListener } from '@angular/core'; import { Location } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; import { FsStore } from '@firestitch/store'; import { cloneDeep } from 'lodash-es'; import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { isAfter, subMinutes } from 'date-fns'; import { FsFilterConfig } from '../../models/filter-config'; import { objectsAreEquals } from '../../helpers/compare'; import { QueryParams } from '../../models/query-params'; var FilterComponent = /** @class */ (function () { function FilterComponent(_store, _location, _route, _router) { this._store = _store; this._location = _location; this._route = _route; this._router = _router; this.filter = null; this.sortUpdate = null; this.showSortBy = true; this.showFilterInput = true; this.changedFilters = []; this.searchText = ''; this.persists = null; this.activeFiltersCount = 0; this.activeFiltersWithInputCount = 0; this.showFilterMenu = false; this.modelChanged = new EventEmitter(); this._searchTextInput = null; this._firstOpen = true; this._query = {}; this._sort = {}; } /** * @param {?} event * @return {?} */ FilterComponent.prototype.keyEvent = /** * @param {?} event * @return {?} */ function (event) { if (event.code === 'Escape' && this.showFilterMenu) { this.changeVisibility(false); } }; Object.defineProperty(FilterComponent.prototype, "searchTextInput", { set: /** * @param {?} value * @return {?} */ function (value) { this._searchTextInput = value; }, enumerable: true, configurable: true }); /** * @return {?} */ FilterComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.config = new FsFilterConfig(this.filter); this.restorePersistValues(); this.config.initItems(this.filter.items, this._route, this.persists); if (this.config.queryParam) { this._queryParams = new QueryParams(this._router, this._route, this.config.items); } // Set search input value after restore from STORE this.updateSearchText(); // Count active filters after restore this.updateFilledCounter(); this.watchSearchInput(); if (this.sortUpdate) { this.sortUpdate .pipe(takeUntil(this.config.destroy$)) .subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.config.updateSort(data); })); } if (this.config.init) { this.fireInitCallback(); } // Avoid ngChanges error setTimeout((/** * @return {?} */ function () { if (_this._searchTextInput && _this.config.autofocus) { _this._searchTextInput.nativeElement.focus(); } })); }; /** * @return {?} */ FilterComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.config) { this.config.destroy(); } }; /** * * Do update value of some field * * @param {any} values - values for update * @param {boolean} changeEvent - should change event to be fired * * To update text value just pass new text value * * public updateSelectValue(val) { * this.filterEl.updateValues({ keyword: val }); * } * * To update select or observable select you could pass suitable value * * public updateSelectValue(val: number) { * this.filterEl.updateValues({ simple_select: val }, { observable_select: val }); * } * * To update checkbox value just pass true/false as value * * public updateCheckox(val: boolean) { * this.filterEl.updateValues({ checkbox: val }); * } * * To update range value just pass object with min&max object or just with one of targets * * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 } * * public updateRange(val) { * this.filterEl.updateValues({ range: val }); * } * * To update autocomplete just pass object with name/value fields * * Ex.: { name: 'John Doe', value: 1 } * * public updateAutocomplete(val) { * this.filterEl.updateValues({ autocomplete_user_id: val }); * } * * To update autocompletechips just pass: * * 1) object with name/value fields - will be appended to existing set of values * * { name: 'John Doe', value: 1 } * * 2) array of objects - will be appended to existing set of values * * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }] * * 3) null - clear existing set of values * * public updateAutocomplete(val) { * this.filterEl.updateValues({ autocompletechips_user_id: val }); * } * */ /** * * Do update value of some field * * * To update text value just pass new text value * * public updateSelectValue(val) { * this.filterEl.updateValues({ keyword: val }); * } * * To update select or observable select you could pass suitable value * * public updateSelectValue(val: number) { * this.filterEl.updateValues({ simple_select: val }, { observable_select: val }); * } * * To update checkbox value just pass true/false as value * * public updateCheckox(val: boolean) { * this.filterEl.updateValues({ checkbox: val }); * } * * To update range value just pass object with min&max object or just with one of targets * * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 } * * public updateRange(val) { * this.filterEl.updateValues({ range: val }); * } * * To update autocomplete just pass object with name/value fields * * Ex.: { name: 'John Doe', value: 1 } * * public updateAutocomplete(val) { * this.filterEl.updateValues({ autocomplete_user_id: val }); * } * * To update autocompletechips just pass: * * 1) object with name/value fields - will be appended to existing set of values * * { name: 'John Doe', value: 1 } * * 2) array of objects - will be appended to existing set of values * * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }] * * 3) null - clear existing set of values * * public updateAutocomplete(val) { * this.filterEl.updateValues({ autocompletechips_user_id: val }); * } * * @param {?} values * @param {?=} changeEvent * @return {?} */ FilterComponent.prototype.updateValues = /** * * Do update value of some field * * * To update text value just pass new text value * * public updateSelectValue(val) { * this.filterEl.updateValues({ keyword: val }); * } * * To update select or observable select you could pass suitable value * * public updateSelectValue(val: number) { * this.filterEl.updateValues({ simple_select: val }, { observable_select: val }); * } * * To update checkbox value just pass true/false as value * * public updateCheckox(val: boolean) { * this.filterEl.updateValues({ checkbox: val }); * } * * To update range value just pass object with min&max object or just with one of targets * * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 } * * public updateRange(val) { * this.filterEl.updateValues({ range: val }); * } * * To update autocomplete just pass object with name/value fields * * Ex.: { name: 'John Doe', value: 1 } * * public updateAutocomplete(val) { * this.filterEl.updateValues({ autocomplete_user_id: val }); * } * * To update autocompletechips just pass: * * 1) object with name/value fields - will be appended to existing set of values * * { name: 'John Doe', value: 1 } * * 2) array of objects - will be appended to existing set of values * * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }] * * 3) null - clear existing set of values * * public updateAutocomplete(val) { * this.filterEl.updateValues({ autocompletechips_user_id: val }); * } * * @param {?} values * @param {?=} changeEvent * @return {?} */ function (values, changeEvent) { var _this = this; if (changeEvent === void 0) { changeEvent = true; } Object.keys(values).forEach((/** * @param {?} key * @return {?} */ function (key) { /** @type {?} */ var filterItem = _this.config.items.find((/** * @param {?} item * @return {?} */ function (item) { return item.name === key; })); if (!filterItem) { return; } filterItem.updateValue(values[key]); if (filterItem === _this.config.searchInput) { _this.updateSearchText(); } })); this.updateFilledCounter(); if (changeEvent) { this.filterChange(); } }; /** * @return {?} */ FilterComponent.prototype.watchSearchInput = /** * @return {?} */ function () { var _this = this; this.modelChanged .pipe(distinctUntilChanged(), debounceTime(500), takeUntil(this.config.destroy$)) .subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.config.searchInput.model = value; _this.filterChange(); })); }; /** * @param {?} text * @return {?} */ FilterComponent.prototype.modelChange = /** * @param {?} text * @return {?} */ function (text) { this.modelChanged.next(text); }; /** * @param {?} event * @return {?} */ FilterComponent.prototype.backdropClick = /** * @param {?} event * @return {?} */ function (event) { this.switchFilterVisibility(event); }; /** * @return {?} */ FilterComponent.prototype.done = /** * @return {?} */ function () { this.changeVisibility(false); }; /** * @param {?=} event * @return {?} */ FilterComponent.prototype.switchFilterVisibility = /** * @param {?=} event * @return {?} */ function (event) { if (event === void 0) { event = null; } if (event) { event.stopPropagation(); } this.changeVisibility(!this.showFilterMenu); }; /** * @param {?} event * @return {?} */ FilterComponent.prototype.filterInputClick = /** * @param {?} event * @return {?} */ function (event) { if (['Enter', 'NumpadEnter', 'Escape'].indexOf(event.code) >= 0) { return this.changeVisibility(false); } this.changeVisibility(true); }; /** * @param {?} state * @return {?} */ FilterComponent.prototype.changeVisibility = /** * @param {?} state * @return {?} */ function (state) { this.showFilterMenu = state; if (this._firstOpen) { this.config.loadValuesForPendingItems(); this._firstOpen = false; } if (this.showFilterMenu) { window.document.body.classList.add('fs-filter-open'); } else { window.document.body.classList.remove('fs-filter-open'); this.updateFilledCounter(); } }; /** * @param {?=} event * @return {?} */ FilterComponent.prototype.clear = /** * @param {?=} event * @return {?} */ function (event) { if (event === void 0) { event = null; } if (event) { event.stopPropagation(); } if (this.config.searchInput) { this.config.searchInput.model = ''; this.modelChange(this.config.searchInput.model); } this.searchText = ''; this.changedFilters = []; this.config.filtersClear(); this.activeFiltersCount = 0; this.activeFiltersWithInputCount = 0; this.filterChange(); this.changeVisibility(false); }; /** * Close filter window and do change callback */ /** * Close filter window and do change callback * @return {?} */ FilterComponent.prototype.search = /** * Close filter window and do change callback * @return {?} */ function () { this.switchFilterVisibility(); this.filterChange(); }; /** * Call change callback and apply new filter values */ /** * Call change callback and apply new filter values * @return {?} */ FilterComponent.prototype.change = /** * Call change callback and apply new filter values * @return {?} */ function () { this.config.updateModelValues(); /** @type {?} */ var query = this.config.gets({ flatten: true }); /** @type {?} */ var sort = this.config.getSort(); /** @type {?} */ var queryChanged = !objectsAreEquals(this._query, query); if (queryChanged) { this._query = query; this.storePersistValues(); this.updateFilledCounter(); if (this.config.change) { this.config.change(cloneDeep(query), sort); } if (this.config.queryParam) { this._queryParams.updateQueryParams(query); } } /** @type {?} */ var sortingChanged = ((!sort || !this._sort) && sort !== this._sort) || (sort && this._sort && !objectsAreEquals(this._sort, sort)); if (sortingChanged) { this._sort = sort; if (this.config.sortChange) { this.config.sortChange(cloneDeep(query), sort); } } }; /** * Do update count of filled filters */ /** * Do update count of filled filters * @return {?} */ FilterComponent.prototype.updateFilledCounter = /** * Do update count of filled filters * @return {?} */ function () { this.changedFilters = this.config.getFilledItems(); this.changedFilters .filter((/** * @param {?} item * @return {?} */ function (item) { return item.hasPendingValues; })) .forEach((/** * @param {?} item * @return {?} */ function (item) { return item.loadValues(false); })); this.activeFiltersWithInputCount = (this.searchText !== '') ? this.changedFilters.length + 1 : this.changedFilters.length; }; /** * Store updated filter data into localstorage * @param changedItem */ /** * Store updated filter data into localstorage * @param {?=} changedItem * @return {?} */ FilterComponent.prototype.filterChange = /** * Store updated filter data into localstorage * @param {?=} changedItem * @return {?} */ function (changedItem) { if (changedItem === void 0) { changedItem = null; } if (changedItem) { if (changedItem === this.config.searchInput) { this.searchText = changedItem.model; } changedItem.checkIfValueChanged(); } this.storePersistValues(); this.change(); }; /** * Just reload with same values */ /** * Just reload with same values * @param {?} event * @return {?} */ FilterComponent.prototype.reload = /** * Just reload with same values * @param {?} event * @return {?} */ function (event) { event.stopPropagation(); /** @type {?} */ var query = this.config.gets({ flatten: true }); if (this.config.reload) { this.config.reload(cloneDeep(query), this.config.getSort()); } }; /** * Restoring values from local storage */ /** * Restoring values from local storage * @return {?} */ FilterComponent.prototype.restorePersistValues = /** * Restoring values from local storage * @return {?} */ function () { this.persists = this._store.get(this.config.namespace + '-persist', {}); if (this.persists === undefined) { this.persists = {}; } if (this.config.persist) { if (typeof this.config.persist.persist !== 'object') { this.config.persist = { name: this.config.persist }; } if (!this.config.persist.name) { this.config.persist.name = this._location.path(); } if (!this.persists[this.config.persist.name] || !this.persists[this.config.persist.name].data) { this.persists[this.config.persist.name] = { data: {}, date: new Date() }; } if (this.config.persist.timeout) { /** @type {?} */ var date = new Date(this.persists[this.config.persist.name].date); if (isAfter(subMinutes(date, this.config.persist.timeout), new Date())) { this.persists[this.config.persist.name] = { data: {}, date: new Date() }; } } } }; /** * Store values to local storage */ /** * Store values to local storage * @return {?} */ FilterComponent.prototype.storePersistValues = /** * Store values to local storage * @return {?} */ function () { if (this.config.persist) { this.persists[this.config.persist.name] = { data: this.config.gets({ expand: true, names: false }), date: new Date() }; this._store.set(this.config.namespace + '-persist', this.persists, {}); } }; /** * Reset filter * @param item */ /** * Reset filter * @param {?} item * @return {?} */ FilterComponent.prototype.resetFilter = /** * Reset filter * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var index = this.changedFilters.indexOf(item); if (index > -1) { this.changedFilters.splice(index, 1); item.clear(); } this.change(); }; /** * @private * @return {?} */ FilterComponent.prototype.updateSearchText = /** * @private * @return {?} */ function () { if (this.config.searchInput && this.config.searchInput.model) { this.searchText = this.config.searchInput.model; } }; /** * @private * @return {?} */ FilterComponent.prototype.fireInitCallback = /** * @private * @return {?} */ function () { this._query = this.config.gets({ flatten: true }); this._sort = this.config.getSort(); this.config.init(this._query, this.config.getSort()); }; FilterComponent.decorators = [ { type: Component, args: [{ selector: 'fs-filter', template: "<div class=\"fs-filter\"\n *ngIf=\"config?.items?.length\"\n [ngClass]=\"{\n 'filters-open': showFilterMenu,\n 'no-input': !showFilterInput\n }\">\n <div fxLayou=\"row\" fxLayoutAlign=\"start center\" class=\"menu-filter\" fxFlex=\"1 1 0\">\n <div class=\"menu-filter-input\" fxFlex=\"grow\">\n <div class=\"main-filter-bar\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <form autocomplete=\"off\" role=\"presentation\">\n <mat-form-field\n class=\"filter-input-field\"\n (click)=\"changeVisibility(true)\"\n floatLabel=\"never\">\n <span matPrefix><mat-icon matPrefix>search</mat-icon></span>\n\n <input matInput\n [(ngModel)]=\"searchText\"\n name=\"filter-input\"\n #searchTextInput\n (keydown)=\"filterInputClick($event)\"\n class=\"filter-input\"\n (ngModelChange)=\"modelChange(searchText)\">\n\n <mat-placeholder>Search</mat-placeholder>\n <a matSuffix\n *ngIf=\"searchText && showFilterInput\"\n (click)=\"clear($event)\"\n href=\"javascript:void(0)\"\n class=\"clear\">\n <mat-icon>clear</mat-icon>\n </a>\n <a matSuffix\n (click)=\"reload($event)\"\n href=\"javascript:void(0)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n <a (click)=\"switchFilterVisibility($event)\"\n matSuffix\n href=\"javascript:void(0)\"\n class=\"filter\"\n *ngIf=\"!config.chips && config.singleTextFilter === false\">\n <mat-icon>filter_list</mat-icon>\n </a>\n <span class=\"active-filters-counter\"\n matSuffix\n (click)=\"switchFilterVisibility($event)\"\n *ngIf=\"!config.chips && activeFiltersCount > 0\">\n {{ activeFiltersCount }}\n </span>\n <span class=\"active-filters-counter\"\n matSuffix\n (click)=\"switchFilterVisibility($event)\"\n *ngIf=\"!config.chips && activeFiltersWithInputCount > 0\">\n {{ activeFiltersWithInputCount }}\n </span>\n </mat-form-field>\n </form>\n <filters-list\n [items]=\"config.items\"\n [showSortBy]=\"showSortBy\"\n [sortBy]=\"config.sortByItem\"\n [sortDirection]=\"config.sortDirectionItem\"\n (filterChanged)=\"filterChange($event)\"\n (search)=\"search()\"\n (done)=\"done()\"\n (clear)=\"clear()\"\n >\n </filters-list>\n </div>\n <div class=\"backdrop\" *ngIf=\"showFilterMenu\" (click)=\"backdropClick($event)\"></div>\n </div>\n </div>\n <fs-filter-chips class=\"filter-chips\"\n *ngIf=\"config.chips\"\n [filters]=\"changedFilters\"\n (remove)=\"resetFilter($event)\">\n </fs-filter-chips>\n</div>\n", encapsulation: ViewEncapsulation.None, styles: ["@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.fs-filter{flex-direction:column;box-sizing:border-box;place-content:stretch flex-start;align-items:stretch;max-width:100%;position:relative;margin-bottom:20px}.fs-filter .title{display:none}.fs-filter.no-input .filter-input-field .mat-input-infix,.fs-filter.no-input .filter-input-field .mat-input-prefix,.fs-filter.no-input .filter-input-field .mat-input-underline{display:none!important}.fs-filter .results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}.fs-filter .status{position:relative}.fs-filter .status .progress-infinite{position:absolute;top:0;width:100%}.fs-filter .full-search .filter.filter-date>span{display:inline-block}.fs-filter .filter-chips{display:block}.fs-filter .filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:10px 0 15px}.fs-filter .filter-by .text{font-weight:400;font-size:19px}.fs-filter .filter-actions{display:flex;width:100%;height:55px;background:#fff;left:0;box-sizing:border-box;padding-left:5px;flex-direction:row;align-items:center}.fs-filter .filter-actions button{margin-right:6px;text-transform:uppercase}.fs-filter .filter-actions button:last-child{margin-right:0}.fs-filter .menu-filter{position:relative}.fs-filter .menu-filter .search{top:8px;position:absolute;margin-left:1px;left:0}.fs-filter .menu-filter .search mat-icon{-webkit-transform:scale(.9);transform:scale(.9)}.fs-filter .menu-filter .backdrop{position:fixed;top:0;bottom:0;left:0;right:0;z-index:69;outline:0}.fs-filter .menu-filter .menu-filter-input mat-form-field{width:100%}.fs-filter .menu-filter .menu-filter-input .main-filter-bar{height:40px}.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-input-infix{padding-bottom:.3em}.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-prefix,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-suffix{align-self:flex-end;display:flex;align-items:center;white-space:nowrap}.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-prefix a,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-prefix mat-icon,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-suffix a,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-suffix mat-icon{cursor:pointer;color:initial}.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-prefix a:hover,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-prefix mat-icon:hover,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-suffix a:hover,.fs-filter .menu-filter .menu-filter-input .main-filter-bar .mat-form-field-suffix mat-icon:hover{color:inherit}.fs-filter .menu-filter .menu-filter-input .filters{position:absolute;min-width:400px;width:100%;display:block;visibility:hidden;left:0;margin-top:15px}.fs-filter .menu-filter .menu-filter-input .filters .filters-wrap{-webkit-animation:.3s slideInRight;animation:.3s slideInRight;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);position:fixed;width:75vw;max-width:350px;top:0;bottom:0;right:0;z-index:999}.fs-filter .menu-filter .menu-filter-input .filters .filters-wrap .filter-items{max-height:calc(100% - 55px);overflow-y:auto;padding:10px 20px 0;box-sizing:border-box}.fs-filter .menu-filter .menu-filter-input .filters .filter-group{margin:10px 0 0}.fs-filter .menu-filter .menu-filter-input .filters .filter-group:first-child{margin:0}.fs-filter .menu-filter .menu-filter-input .filters .filter.filter-checkbox{padding-bottom:1.25em;padding-top:7px}.fs-filter .menu-filter .menu-filter-input .filters .filter.filter-autocompletechips .mat-form-field{overflow:hidden}.fs-filter .menu-filter .menu-filter-input .filters .filter .interface.interface-range,.fs-filter .menu-filter .menu-filter-input .filters .filter .interface.interface-range .mat-input-wrapper,.fs-filter .menu-filter .menu-filter-input .filters .filter .interface.interface-range input{text-align:center}.fs-filter .menu-filter .menu-filter-input .filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.fs-filter .menu-filter .menu-filter-input .filters .filter .interface fs-datetime-range input{text-align:center}.fs-filter .menu-filter .menu-filter-input .filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.fs-filter .menu-filter .menu-filter-input .filters md-autocomplete-container md-input-container{margin:0}.fs-filter .menu-filter .menu-filter-input .filters .isolate{margin-top:-12px}.fs-filter .menu-filter .menu-filter-input .filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.fs-filter .menu-filter .menu-filter-input .filters .isolate md-checkbox{margin:0 0 0 2px}.fs-filter .filter label{white-space:nowrap;color:rgba(0,0,0,.54)}.fs-filter .filter.filter-range mat-form-field{min-width:initial;width:50px}.fs-filter .filter.filter-range mat-form-field.filter-range-min{margin-right:5px}.fs-filter .infinite-records{color:#999;font-size:13px;margin-left:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.fs-filter .infinite-records .order-toggle{cursor:pointer;padding-left:4px}.fs-filter .md-datepicker-calendar-pane{margin-left:-10px}.fs-filter.filters-open .main-filter-bar md-input-container input,.fs-filter.filters-open .menu-filter-input .filters{visibility:visible}.fs-filter.filters-open .filter-chips,.fs-filter.filters-open .filter-input-field{z-index:998;position:relative}.main-filter-bar{overflow:hidden}.main-filter-bar form{width:100%}.main-filter-bar .filter-input-field .mat-form-field-underline{bottom:auto}.main-filter-bar .filter-input-field .mat-form-field-infix{border-top:0}.main-filter-bar .filter-input-field .mat-form-field-wrapper{padding-bottom:0}.main-filter-bar .filter-input-field .mat-form-field-flex{align-items:center}.active-filters-counter{min-width:22px;line-height:22px;height:22px;-webkit-transform:scale(.65);transform:scale(.65);font-size:116%;margin-left:-2px;background:#ccc;border-radius:50%;text-align:center;padding:3px;color:#fff;cursor:pointer}.active-filters-counter.with-input{display:none}body.fs-filter-open{overflow:hidden!important}body.fs-filter-open .mat-drawer-container,body.fs-filter-open .mat-drawer-content{z-index:auto!important}@media screen and (max-width:600px){.fs-filter .reload{display:none}}"] }] } ]; /** @nocollapse */ FilterComponent.ctorParameters = function () { return [ { type: FsStore }, { type: Location }, { type: ActivatedRoute }, { type: Router } ]; }; FilterComponent.propDecorators = { filter: [{ type: Input }], sortUpdate: [{ type: Input }], showSortBy: [{ type: Input }], showFilterInput: [{ type: Input }], keyEvent: [{ type: HostListener, args: ['window:keyup', ['$event'],] }], searchTextInput: [{ type: ViewChild, args: ['searchTextInput',] }] }; return FilterComponent; }()); export { FilterComponent }; if (false) { /** @type {?} */ FilterComponent.prototype.filter; /** @type {?} */ FilterComponent.prototype.sortUpdate; /** @type {?} */ FilterComponent.prototype.showSortBy; /** @type {?} */ FilterComponent.prototype.showFilterInput; /** @type {?} */ FilterComponent.prototype.changedFilters; /** @type {?} */ FilterComponent.prototype.config; /** @type {?} */ FilterComponent.prototype.searchText; /** @type {?} */ FilterComponent.prototype.persists; /** @type {?} */ FilterComponent.prototype.activeFiltersCount; /** @type {?} */ FilterComponent.prototype.activeFiltersWithInputCount; /** @type {?} */ FilterComponent.prototype.showFilterMenu; /** @type {?} */ FilterComponent.prototype.modelChanged; /** * @type {?} * @private */ FilterComponent.prototype._searchTextInput; /** * @type {?} * @private */ FilterComponent.prototype._firstOpen; /** * @type {?} * @private */ FilterComponent.prototype._query; /** * @type {?} * @private */ FilterComponent.prototype._queryParams; /** * @type {?} * @private */ FilterComponent.prototype._sort; /** * @type {?} * @private */ FilterComponent.prototype._store; /** * @type {?} * @private */ FilterComponent.prototype._location; /** * @type {?} * @private */ FilterComponent.prototype._route; /** * @type {?} * @private */ FilterComponent.prototype._router; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXJlc3RpdGNoL2ZpbHRlci8iLCJzb3VyY2VzIjpbImFwcC9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBUSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3hEO0lBeUNFLHlCQUNVLE1BQWUsRUFDZixTQUFtQixFQUNuQixNQUFzQixFQUN0QixPQUFlO1FBSGYsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQXJDVCxXQUFNLEdBQWlCLElBQUksQ0FBQztRQUM1QixlQUFVLEdBQXNCLElBQUksQ0FBQztR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QUVuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDOztnQkFuYUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUVyQixzcEdBQXNDO29CQUN0QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7aUJBQ3RDOzs7O2dCQWxCUSxPQUFPO2dCQUhQLFFBQVE7Z0JBQ1IsY0FBYztnQkFBRSxNQUFNOzs7eUJBdUI1QixLQUFLOzZCQUNMLEtBQUs7NkJBQ0wsS0FBSztrQ0FDTCxLQUFLOzJCQUVMLFlBQVksU0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7a0NBUXZDLFNBQVMsU0FBQyxpQkFBaUI7O0lBK1k5QixzQkFBQztDQUFBLEFBcGFELElBb2FDO1NBOVpZLGVBQWU7OztJQUUxQixpQ0FBNEM7O0lBQzVDLHFDQUFxRDs7SUFDckQscUNBQXVDOztJQUN2QywwQ0FBdUM7O0lBZXZDLHlDQUEyQjs7SUFDM0IsaUNBQThCOztJQUM5QixxQ0FBdUI7O0lBQ3ZCLG1DQUF1Qjs7SUFDdkIsNkNBQThCOztJQUM5QixzREFBdUM7O0lBQ3ZDLHlDQUE4Qjs7SUFDOUIsdUNBQXlDOzs7OztJQUV6QywyQ0FBNEM7Ozs7O0lBQzVDLHFDQUEwQjs7Ozs7SUFDMUIsaUNBQW9COzs7OztJQUNwQix1Q0FBa0M7Ozs7O0lBQ2xDLGdDQUFtQjs7Ozs7SUFHakIsaUNBQXVCOzs7OztJQUN2QixvQ0FBMkI7Ozs7O0lBQzNCLGlDQUE4Qjs7Ozs7SUFDOUIsa0NBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEZzU3RvcmUgfSBmcm9tICdAZmlyZXN0aXRjaC9zdG9yZSc7XG5cbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc0FmdGVyLCBzdWJNaW51dGVzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXItY29uZmlnJztcbmltcG9ydCB7IEZpbHRlckNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVyLWl0ZW0nO1xuaW1wb3J0IHsgb2JqZWN0c0FyZUVxdWFscyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvY29tcGFyZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVyeS1wYXJhbXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWZpbHRlcicsXG4gIHN0eWxlVXJsczogWyAnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyOiBGaWx0ZXJDb25maWcgPSBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgc29ydFVwZGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd1NvcnRCeTogYW55ID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHNob3dGaWx0ZXJJbnB1dCA9IHRydWU7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwJywgWyckZXZlbnQnXSlcbiAga2V5RXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblxuICAgIGlmIChldmVudC5jb2RlID09PSAnRXNjYXBlJyAmJiB0aGlzLnNob3dGaWx0ZXJNZW51KSB7XG4gICAgICB0aGlzLmNoYW5nZVZpc2liaWxpdHkoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFRleHRJbnB1dCcpXG4gIHNldCBzZWFyY2hUZXh0SW5wdXQodmFsdWUpIHtcbiAgICB0aGlzLl9zZWFyY2hUZXh0SW5wdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VkRmlsdGVycyA9IFtdO1xuICBwdWJsaWMgY29uZmlnOiBGc0ZpbHRlckNvbmZpZztcbiAgcHVibGljIHNlYXJjaFRleHQgPSAnJztcbiAgcHVibGljIHBlcnNpc3RzID0gbnVsbDtcbiAgcHVibGljIGFjdGl2ZUZpbHRlcnNDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3RpdmVGaWx0ZXJzV2l0aElucHV0Q291bnQgPSAwO1xuICBwdWJsaWMgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcbiAgcHVibGljIG1vZGVsQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx