blob: fdbd8f5b89c6154575a461afc163d9c6c24a2495 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ember from 'ember';
import layout from '../templates/components/em-table-facet-panel';
export default Ember.Component.extend({
layout: layout,
classNames: ["em-table-facet-panel"],
classNameBindings: ['isEmpty', 'hideFilter'],
isVisible: Ember.computed.alias('tableDefinition.enableFaceting'),
tableDefinition: null,
dataProcessor: null,
tmpFacetConditions: {},
filterText: null,
isEmpty: Ember.computed("dataProcessor.facetedFields.length", function () {
return this.get("dataProcessor.facetedFields.length") === 0;
}),
hideFilter: Ember.computed("dataProcessor.facetedFields.length", "tableDefinition.minFieldsForFilter", function () {
return this.get("dataProcessor.facetedFields.length") < this.get("tableDefinition.minFieldsForFilter");
}),
didInsertElement: Ember.observer("filterText", "dataProcessor.facetedFields", function () {
var fields = this.get("dataProcessor.facetedFields"),
filterText = this.get("filterText"),
filterRegex = new RegExp(filterText, "i"),
elements = Ember.$(this.get("element")).find(".field-list>li");
elements.each(function (index, element) {
var foundMatch = !filterText || Ember.get(fields, `${index}.column.headerTitle`).match(filterRegex);
Ember.$(element)[foundMatch ? "show" : "hide"]();
});
}),
_facetConditionsObserver: Ember.observer("tableDefinition.facetConditions", "dataProcessor.processedRows.[]", function () {
var facetConditions = Ember.$.extend({}, this.get("tableDefinition.facetConditions"));
this.set("tmpFacetConditions", facetConditions);
}),
actions: {
applyFilters: function () {
var tmpFacetConditions = this.get("tmpFacetConditions"),
facetedFields = this.get("dataProcessor.facetedFields"),
normalizedTmpFacetConditions = {};
facetedFields.forEach(function (field) {
var column = field.column,
columnId = column.get("id"),
facetType = column.get("facetType"),
normalizedConditions;
if(facetType) {
normalizedConditions = facetType.normaliseConditions(tmpFacetConditions[columnId], field.facets);
if(normalizedConditions) {
normalizedTmpFacetConditions[columnId] = normalizedConditions;
}
}
});
this.set("tableDefinition.facetConditions", normalizedTmpFacetConditions);
},
clearFilters: function () {
this.set("tmpFacetConditions", {});
this.set("tableDefinition.facetConditions", {});
},
}
});