forked from geolba/tethys.frontend
Progress OpenSearch. Pending solving onFilter issue with active filters
This commit is contained in:
parent
da430d6142
commit
d135ab2d50
11 changed files with 109 additions and 82 deletions
|
@ -59,7 +59,7 @@ export default class DatasetDetailComponent extends Vue {
|
|||
}
|
||||
|
||||
onSearch(suggestion: Suggestion | string): void {
|
||||
console.log("onSearch");
|
||||
console.log("onSearch (dataset-detail.component)");
|
||||
|
||||
const host = window.location.host;
|
||||
const parts = host.split(".");
|
||||
|
|
|
@ -68,6 +68,8 @@ export default class SearchViewComponent extends Vue {
|
|||
|
||||
// Computed property to get search term as string
|
||||
get stringSearchTerm(): string {
|
||||
// console.log("stringSearchTerm:", this.searchTerm);
|
||||
|
||||
if (typeof this.searchTerm === "string") {
|
||||
return this.searchTerm;
|
||||
} else if (this.searchTerm instanceof Suggestion) {
|
||||
|
@ -147,13 +149,24 @@ export default class SearchViewComponent extends Vue {
|
|||
|
||||
// Handle the search results
|
||||
private dataHandlerOPEN(res: OpenSearchResponse, filterItem?: FacetItem): void {
|
||||
// console.log("dataHandlerOPEN (datasets, highlights):");
|
||||
// console.log(datasets);
|
||||
// console.log(highlights);
|
||||
|
||||
this.results = res.hits.hits.map(hit => hit._source);
|
||||
this.numFound = res.hits.total.value;
|
||||
|
||||
// console.log("dataHandlerOPEN (results, numFound):");
|
||||
// console.log(this.results);
|
||||
// console.log(this.numFound);
|
||||
// console.log(res.hits.hits);
|
||||
// console.log(res.hits.total.value);
|
||||
|
||||
// for (const key in this.results) {
|
||||
// if (Object.prototype.hasOwnProperty.call(this.results, key)) {
|
||||
// const element = this.results[key];
|
||||
// // console.log(element.abstract[0]);
|
||||
// // console.log(element.language);
|
||||
// console.log(element.server_date_published);
|
||||
// }
|
||||
// }
|
||||
|
||||
this.pagination.total = res.hits.total.value;
|
||||
this.pagination.perPage = 10;
|
||||
this.pagination.data = this.results;
|
||||
|
@ -178,9 +191,9 @@ export default class SearchViewComponent extends Vue {
|
|||
|
||||
// Method to handle search response
|
||||
private dataHandler(res: SolrResponse, filterItem?: FacetItem): void {
|
||||
console.log("dataHandlerSOLR (docs, numFound):");
|
||||
console.log(res.response.docs);
|
||||
console.log(res.response.numFound);
|
||||
// console.log("dataHandlerSOLR (docs, numFound):");
|
||||
// console.log(res.response.docs);
|
||||
// console.log(res.response.numFound);
|
||||
|
||||
// Update results
|
||||
this.results = res.response.docs;
|
||||
|
@ -242,6 +255,8 @@ export default class SearchViewComponent extends Vue {
|
|||
|
||||
// Method to handle pagination
|
||||
onMenuClick(page: number) {
|
||||
console.log("onMenuClick");
|
||||
|
||||
this.pagination.currentPage = page;
|
||||
const start = page * this.pagination.perPage - this.pagination.perPage;
|
||||
|
||||
|
@ -259,14 +274,19 @@ export default class SearchViewComponent extends Vue {
|
|||
|
||||
// Method to handle facet filtering
|
||||
onFilter(facetItem: FacetItem): void {
|
||||
console.log("onFilter");
|
||||
|
||||
// Reset current page
|
||||
this.pagination.currentPage = 1;
|
||||
// console.log(facetItem.val);
|
||||
console.log(facetItem.val);
|
||||
console.log(facetItem.category);
|
||||
|
||||
// if (!this.activeFilterCategories.hasOwnProperty(facetItem.category)) {
|
||||
|
||||
// Check if filter item already exists
|
||||
if (!Object.prototype.hasOwnProperty.call(this.activeFilterCategories, facetItem.category)) {
|
||||
this.activeFilterCategories[facetItem.category] = new Array<string>();
|
||||
console.log(this.activeFilterCategories);
|
||||
}
|
||||
// if (!this.activeFilterCategories[facetItem.category].some((e) => e === facetItem.val)) {
|
||||
|
||||
|
@ -279,6 +299,7 @@ export default class SearchViewComponent extends Vue {
|
|||
// (res: SolrResponse) => this.dataHandler(res, facetItem),
|
||||
// (error: string) => this.errorHandler(error),
|
||||
// );
|
||||
console.log(this.activeFilterCategories);
|
||||
DatasetService.facetedSearchOPEN(this.searchTerm, this.activeFilterCategories, this.open.core, this.open.host, undefined).subscribe({
|
||||
next: (res: OpenSearchResponse) => this.dataHandlerOPEN(res, facetItem),
|
||||
error: (error: string) => this.errorHandler(error),
|
||||
|
@ -286,60 +307,63 @@ export default class SearchViewComponent extends Vue {
|
|||
}
|
||||
}
|
||||
|
||||
// // Method to clear facet category filter
|
||||
onClearFacetCategory(categoryName: string): void {
|
||||
delete this.activeFilterCategories[categoryName];
|
||||
// // // Method to clear facet category filter
|
||||
// onClearFacetCategory(categoryName: string): void {
|
||||
// console.log("onClearFacetCategory");
|
||||
|
||||
// delete this.activeFilterCategories[categoryName];
|
||||
|
||||
// Trigger new search with updated filter
|
||||
DatasetService.facetedSearch(this.searchTerm, this.activeFilterCategories, this.solr.core, this.solr.host, undefined).subscribe({
|
||||
next: (res: SolrResponse) => {
|
||||
this.results = res.response.docs;
|
||||
this.numFound = res.response.numFound;
|
||||
// // Trigger new search with updated filter
|
||||
// DatasetService.facetedSearch(this.searchTerm, this.activeFilterCategories, this.solr.core, this.solr.host, undefined).subscribe({
|
||||
// next: (res: SolrResponse) => {
|
||||
// this.results = res.response.docs;
|
||||
// this.numFound = res.response.numFound;
|
||||
|
||||
// pagination
|
||||
this.pagination["total"] = res.response.numFound;
|
||||
this.pagination["perPage"] = res.responseHeader.params.rows as number;
|
||||
this.pagination["currentPage"] = 1;
|
||||
this.pagination["data"] = res.response.docs;
|
||||
// // pagination
|
||||
// this.pagination["total"] = res.response.numFound;
|
||||
// this.pagination["perPage"] = res.responseHeader.params.rows as number;
|
||||
// this.pagination["currentPage"] = 1;
|
||||
// this.pagination["data"] = res.response.docs;
|
||||
|
||||
const facet_fields: FacetFields = res.facets;
|
||||
let prop: keyof typeof facet_fields;
|
||||
for (prop in facet_fields) {
|
||||
const facetCategory: FacetInstance = facet_fields[prop];
|
||||
if (facetCategory.buckets) {
|
||||
const facetItems: Array<FacetItem> = facetCategory.buckets;
|
||||
// const facet_fields: FacetFields = res.facets;
|
||||
// let prop: keyof typeof facet_fields;
|
||||
// for (prop in facet_fields) {
|
||||
// const facetCategory: FacetInstance = facet_fields[prop];
|
||||
// if (facetCategory.buckets) {
|
||||
// const facetItems: Array<FacetItem> = facetCategory.buckets;
|
||||
|
||||
const facetValues = facetItems.map((facetItem) => {
|
||||
let rObj: FacetItem;
|
||||
if (this.facets[prop]?.some((e) => e.val === facetItem.val)) {
|
||||
// console.log(facetValue + " is included")
|
||||
// Update existing facet item with new count
|
||||
const indexOfFacetValue = this.facets[prop].findIndex((i) => i.val === facetItem.val);
|
||||
// console.log(indexOfFacetValue);
|
||||
rObj = this.facets[prop][indexOfFacetValue];
|
||||
rObj.count = facetItem.count;
|
||||
// rObj = new FacetItem(val, count);
|
||||
// if facet ccategory is reactivated category, deactivate all filter items
|
||||
if (prop == categoryName) {
|
||||
rObj.active = false;
|
||||
}
|
||||
} else {
|
||||
// Create new facet item
|
||||
rObj = new FacetItem(facetItem.val, facetItem.count);
|
||||
}
|
||||
return rObj;
|
||||
});
|
||||
this.facets[prop] = facetValues;
|
||||
}
|
||||
}
|
||||
},
|
||||
error: (error: string) => this.errorHandler(error),
|
||||
complete: () => console.log("clear facet category completed"),
|
||||
});
|
||||
}
|
||||
// const facetValues = facetItems.map((facetItem) => {
|
||||
// let rObj: FacetItem;
|
||||
// if (this.facets[prop]?.some((e) => e.val === facetItem.val)) {
|
||||
// // console.log(facetValue + " is included")
|
||||
// // Update existing facet item with new count
|
||||
// const indexOfFacetValue = this.facets[prop].findIndex((i) => i.val === facetItem.val);
|
||||
// // console.log(indexOfFacetValue);
|
||||
// rObj = this.facets[prop][indexOfFacetValue];
|
||||
// rObj.count = facetItem.count;
|
||||
// // rObj = new FacetItem(val, count);
|
||||
// // if facet ccategory is reactivated category, deactivate all filter items
|
||||
// if (prop == categoryName) {
|
||||
// rObj.active = false;
|
||||
// }
|
||||
// } else {
|
||||
// // Create new facet item
|
||||
// rObj = new FacetItem(facetItem.val, facetItem.count);
|
||||
// }
|
||||
// return rObj;
|
||||
// });
|
||||
// this.facets[prop] = facetValues;
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// error: (error: string) => this.errorHandler(error),
|
||||
// complete: () => console.log("clear facet category completed"),
|
||||
// });
|
||||
// }
|
||||
|
||||
// Method to clear facet category filter
|
||||
onClearFacetCategoryOPEN(categoryName: string): void {
|
||||
console.log("onClearFacetCategory");
|
||||
delete this.activeFilterCategories[categoryName];
|
||||
|
||||
// Trigger new search with updated filter
|
||||
|
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue