- delete activated facets again
This commit is contained in:
parent
795313d3dd
commit
bfd914a36d
15 changed files with 223 additions and 24 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue