blob: ec88181f4d2c7eac6cec878e42de666df52678e0 [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-values';
const LIST_LIMIT = 7;
export default Ember.Component.extend({
layout: layout,
data: null,
checkedCount: null,
tableDefinition: null,
dataProcessor: null,
tmpFacetConditions: null,
hideValues: true,
currentPage: 1,
classNames: ['em-table-facet-panel-values'],
classNameBindings: ['hideValues', 'hideFilter', 'hideSelectAll'],
filterText: null,
allButtonTitle: Ember.computed("filterText", function () {
let filterText = this.get("filterText");
return filterText ? `Select all with substring '${filterText}'` : "Select all";
}),
isVisible: Ember.computed("data.facets.length", "tableDefinition.minValuesToDisplay", function () {
return this.get("data.facets.length") >= this.get("tableDefinition.minValuesToDisplay");
}),
hideFilter: Ember.computed("allFacets.length", function () {
return this.get("allFacets.length") < LIST_LIMIT;
}),
hideSelectAll: Ember.computed("fieldFacetConditions", "checkedCount", "data.facets", function () {
return this.get("fieldFacetConditions.in.length") === this.get("data.facets.length");
}),
fieldFacetConditions: Ember.computed("tmpFacetConditions", "data.column.id", function () {
var columnID = this.get("data.column.id"),
conditions = this.get(`tmpFacetConditions.${columnID}`),
facets = this.get("data.facets") || [];
if(!conditions) {
conditions = {
in: facets.map(facet => facet.value)
};
this.set(`tmpFacetConditions.${columnID}`, conditions);
}
return conditions;
}),
allFacets: Ember.computed("data.facets", "fieldFacetConditions", function () {
var facets = this.get("data.facets") || [],
checkedValues = this.get("fieldFacetConditions.in"),
selectionHash = {};
if(checkedValues) {
checkedValues.forEach(function (valueText) {
selectionHash[valueText] = 1;
});
}
return Ember.A(facets.map(function (facet) {
facet = Ember.Object.create(facet);
facet.set("checked", selectionHash[facet.value]);
if(!facet.get("displayText")) {
facet.set("displayText", facet.get("value"));
}
return facet;
}));
}),
filteredFacets: Ember.computed("allFacets", "filterText", function () {
var allFacets = this.get("allFacets"),
filterText = this.get("filterText"),
filteredFacets;
if(filterText) {
filteredFacets = allFacets.filter(function (facet) {
return facet.get("value").match(filterText);
});
}
else {
filteredFacets = allFacets;
}
return filteredFacets;
}),
_filterObserver: Ember.observer("filterText", function () {
this.set("currentPage", 1);
}),
totalPages: Ember.computed("filteredFacets.length", "tableDefinition.facetValuesPageSize", function () {
return Math.ceil(this.get("filteredFacets.length") / this.get("tableDefinition.facetValuesPageSize"));
}),
showPagination: Ember.computed("totalPages", function () {
return this.get("totalPages") > 1;
}),
showPrevious: Ember.computed("currentPage", function () {
return this.get("currentPage") > 1;
}),
showNext: Ember.computed("currentPage", "totalPages", function () {
return this.get("currentPage") < this.get("totalPages");
}),
paginatedFacets: Ember.computed("filteredFacets", "currentPage", "tableDefinition.facetValuesPageSize", function () {
let currentPage = this.get("currentPage"),
pageSize = this.get("tableDefinition.facetValuesPageSize");
return this.get("filteredFacets").slice(
(currentPage - 1) * pageSize,
currentPage * pageSize);
}),
actions: {
changePage: function (factor) {
var newPage = this.get("currentPage") + factor;
if(newPage > 0 && newPage <= this.get("totalPages")) {
this.set("currentPage", newPage);
}
},
toggleValueDisplay: function () {
this.toggleProperty("hideValues");
this.get("parentView").sendAction("toggleValuesDisplayAction", !this.get("hideValues"), this.get("data"));
},
clickedCheckbox: function (facet) {
var checkedValues = this.get("fieldFacetConditions.in"),
value = facet.get("value"),
valueIndex = checkedValues.indexOf(value);
facet.toggleProperty("checked");
if(facet.get("checked")) {
if(valueIndex === -1) {
checkedValues.push(value);
}
}
else if(valueIndex !== -1) {
checkedValues.splice(valueIndex, 1);
}
this.set("checkedCount", checkedValues.length);
},
selectAll: function () {
var filteredFacets = this.get("filteredFacets"),
checkedValues = this.get("fieldFacetConditions.in");
filteredFacets.forEach(function (facet) {
if(!facet.get("checked")) {
checkedValues.push(facet.get("value"));
}
facet.set("checked", true);
});
this.set("fieldFacetConditions.in", checkedValues);
this.set("checkedCount", checkedValues.length);
},
clickedOnly: function (facet) {
var allFacets = this.get("allFacets"),
checkedValues = [];
allFacets.forEach(function (facet) {
facet.set("checked", false);
});
facet.set("checked", true);
checkedValues.push(facet.get("value"));
this.set("fieldFacetConditions.in", checkedValues);
this.set("checkedCount", checkedValues.length);
}
}
});