@firestitch/filter
Version:
774 lines • 63 kB
JavaScript
/**
* @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