- delete activated facets again

This commit is contained in:
Arno Kaimbacher 2020-02-27 17:25:03 +01:00
parent 795313d3dd
commit bfd914a36d
15 changed files with 223 additions and 24 deletions

View file

@ -2,6 +2,7 @@ import { Component, Vue } from 'vue-property-decorator';
import VsInput from './text-search/vs-input.vue';
import VsResults from './search-results/vs-results.vue';
import FacetList from './search-results/facet-list.vue';
import ActiveFacetCategory from './search-results/active-facet-category.vue';
import VsPagination from './search-results/vs-pagination.vue';
import rdrApi from './search-results/dataservice';
import FilterItem from './models/filter-item';
@ -11,6 +12,7 @@ import FilterItem from './models/filter-item';
VsInput,
VsResults,
FacetList,
ActiveFacetCategory,
VsPagination
}
})
@ -19,7 +21,7 @@ export default class App extends Vue {
results: Array<any> = [];
facets: Object = {};
searchTerm: string = '';
activeFilterItems: Object = {};
activeFilterCategories: Object = {};
pagination: Object = {
total: 0,
per_page: 2,
@ -32,21 +34,69 @@ export default class App extends Vue {
async onPaginate(start: number): Promise<void> {
// console.log(start);
var res = await rdrApi.search(this.searchTerm, this.activeFilterItems, start.toString());
var res = await rdrApi.search(this.searchTerm, this.activeFilterCategories, start.toString());
this.results = res.response.docs;
}
async onClearFacetCategory(categoryName, alias): Promise<void> {
// alert(categoryName);
delete this.activeFilterCategories[categoryName];
var res = await rdrApi.search(this.searchTerm, this.activeFilterCategories);
this.results = res.response.docs;
this.numFound = res.response.numFound;
// pagination
this.pagination['total'] = res.response.numFound;
this.pagination['per_page'] = res.responseHeader.params.rows;
this.pagination['current_page'] = 1;
this.pagination['data'] = res.response.docs;
var facet_fields = res.facet_counts.facet_fields;
for (var prop in facet_fields) {
var facetValues = facet_fields[prop].map((facetValue, i) => {
if (i % 2 === 0) {
// var rObj = { value: facetValue, count: facet_fields[prop][i + 1] };
var rObj:FilterItem;
if (this.facets[prop].some(e => e.value === facetValue)) {
// console.log(facetValue + " is included")
var indexOfFacetValue = this.facets[prop].findIndex(i => i.value === facetValue);
// console.log(indexOfFacetValue);
rObj = this.facets[prop][indexOfFacetValue];
rObj.count = facet_fields[prop][i + 1];
//if facet ccategory is reactivated category, deactivate all filter items
if (this.propName(this.facets, this.facets[prop]) == alias) {
rObj.Active = false;
}
} else {
rObj = new FilterItem(facetValue, facet_fields[prop][i + 1]);
}
return rObj;
}
}).filter(function (el) {
return el != null && el.count > 0;
});
// this.facets.push({ filterName: prop, values: facetValues });
this.facets[prop] = facetValues;
}
}
private propName (obj, type): string {
let stringPropValue = Object.keys(obj).find(key => obj[key] === type);
return stringPropValue;
}
async onFilter(filter): Promise<void> {
// console.log(filter.value);
// if (!this.activeFilterItems.some(e => e.value === filter.value)) {
// this.activeFilterItems.push(filter);
if (!this.activeFilterItems.hasOwnProperty(filter.Category)) {
this.activeFilterItems[filter.Category] = [];
if (!this.activeFilterCategories.hasOwnProperty(filter.Category)) {
this.activeFilterCategories[filter.Category] = Vue.observable([]);
}
if (!this.activeFilterItems[filter.Category].some(e => e === filter.value)) {
this.activeFilterItems[filter.Category].push(filter.value);
var res = await rdrApi.search(this.searchTerm, this.activeFilterItems);
if (!this.activeFilterCategories[filter.Category].some(e => e === filter.value)) {
this.activeFilterCategories[filter.Category].push(filter.value);
// alert(this.activeFilterCategories[filter.Category]);
var res = await rdrApi.search(this.searchTerm, this.activeFilterCategories);
this.results = res.response.docs;
this.numFound = res.response.numFound;
@ -92,13 +142,13 @@ export default class App extends Vue {
term = "*%3A*";
}
this.activeFilterItems = {};
this.activeFilterCategories = {};
// while (this.facets.length > 0) {
// this.facets.pop();
// }
this.facets = {};
this.searchTerm = term;
var res = await rdrApi.search(this.searchTerm, this.activeFilterItems);
var res = await rdrApi.search(this.searchTerm, this.activeFilterCategories);
this.results = res.response.docs;
this.numFound = res.response.numFound;