[Library|Trunk]
Search Pages: when refine filters have no result, Show them on the left create filters using the URL params git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@58052 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
parent
07bdf020ba
commit
908712ed50
|
@ -8,7 +8,6 @@ import {SearchFields} from '../utils/properties/searchFields';
|
|||
import {SearchCustomFilter, SearchUtilsClass} from './searchUtils/searchUtils.class';
|
||||
import {EnvProperties} from '../utils/properties/env-properties';
|
||||
import {NewSearchPageComponent} from "./searchUtils/newSearchPage.component";
|
||||
import {DOI} from "../utils/string-utils.class";
|
||||
|
||||
|
||||
@Component({
|
||||
|
@ -34,15 +33,7 @@ import {DOI} from "../utils/string-utils.class";
|
|||
[simpleView]="simpleView" formPlaceholderText="Search by title, author, doi, abstract content..."
|
||||
>
|
||||
</new-search-page>
|
||||
|
||||
<!--
|
||||
Field missing from simple search!
|
||||
formPlaceholderText = "Search for {{ getEntityName(resultType, true, true) | titlecase }}"
|
||||
|
||||
[(filters)] = "filters"
|
||||
[(baseUrl)] = baseUrl
|
||||
[advancedSearchLink]="advancedSearchLink"
|
||||
[(advancedSearchParameters)]=advancedSearchParameters-->
|
||||
|
||||
`
|
||||
})
|
||||
|
||||
|
@ -141,6 +132,8 @@ export class SearchResearchResultsComponent {
|
|||
this.searchPage.refineFields = this.refineFields;
|
||||
this.searchPage.fieldIdsMap = this.fieldIdsMap;
|
||||
this.searchPage.customFilter = this.customFilter;
|
||||
this.searchPage.unknownFilters = this.searchPage.getEmptyRefineFilters(params);
|
||||
|
||||
this.searchPage.createAdvancedSearchSelectedFiltersFromURLParameters(params);
|
||||
this._getResults(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy, refine, this.searchPage.getSearchAPIQueryForRefineFields(params));
|
||||
});
|
||||
|
@ -152,26 +145,6 @@ export class SearchResearchResultsComponent {
|
|||
|
||||
sub: any;
|
||||
|
||||
/*public getResults(parameters:string, page: number, size: number, sortBy: string, refine:boolean ) {
|
||||
if (page > this.pagingLimit) {
|
||||
size = 0;
|
||||
}
|
||||
if (page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) {
|
||||
if (parameters != null && parameters != '') {
|
||||
this.csvParams = "&fq=(" + this.resourcesQuery + " and (" + parameters + "))";
|
||||
} else {
|
||||
this.csvParams = "&fq=" + this.resourcesQuery;
|
||||
}
|
||||
|
||||
this.searchUtils.status = this.errorCodes.LOADING;
|
||||
this.disableForms = true;
|
||||
this.results = [];
|
||||
this.searchUtils.totalResults = 0;
|
||||
|
||||
this._getResults(parameters, page, size, sortBy, refine);
|
||||
}
|
||||
}*/
|
||||
|
||||
public _getResults(parameters: string, page: number, size: number, sortBy: string, refine: boolean, refineFieldsFilterQuery = null) {
|
||||
if (page > this.pagingLimit) {
|
||||
size = 0;
|
||||
|
@ -195,11 +168,8 @@ export class SearchResearchResultsComponent {
|
|||
this.searchUtils.totalResults = data[0];
|
||||
this.results = data[1];
|
||||
if (refine) {
|
||||
this.filters = data[2];
|
||||
console.info(this.filters);
|
||||
this.filters = this.searchPage.prepareFiltersToShow(data[2]);
|
||||
}
|
||||
this.searchPage.checkSelectedFilters(this.filters);
|
||||
// this.searchPage.updateBaseUrlWithParameters(this.filters);
|
||||
|
||||
this.searchPage.updateBaseUrlWithParameters();
|
||||
this.searchUtils.status = this.errorCodes.DONE;
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
[routerLink]="advancedSearchLink" style="z-index:1;" [queryParams]="advancedSearchLinkParameters"
|
||||
[class]="(isDisabled)?'uk-float-right uk-disabled uk-link-muted portal-link uk-margin-right ':'uk-float-right portal-link uk-margin-right '">Advanced search
|
||||
</a>
|
||||
<search-form [isDisabled]="isDisabled" [(keyword)]="selectedFields[0].value"
|
||||
<search-form *ngIf="selectedFields.length > 0" [isDisabled]="isDisabled" [(keyword)]="selectedFields[0].value"
|
||||
(keywordChange)="simpleKeywordChanged($event)"
|
||||
[placeholderText]="formPlaceholderText"></search-form>
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
|
||||
<div id="tm-main" class=" tm-middle">
|
||||
<div uk-grid uk-grid>
|
||||
<div uk-grid>
|
||||
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
|
||||
<div class="uk-container">
|
||||
<div>
|
||||
|
@ -59,10 +59,10 @@
|
|||
class="uk-width-1-2" [loadPaging]="loadPaging" [oldTotalResults]="oldTotalResults" [(searchUtils)] = "searchUtils" [type]="csvPath" [csvParams]="csvParams" [totalResults]="searchUtils.totalResults">
|
||||
</search-download>
|
||||
|
||||
<div *ngIf="countFilters()>0" class="uk-margin-small-bottom">
|
||||
<div *ngIf="selectedFilters>0" class="uk-margin-small-bottom">
|
||||
<div class="uk-grid uk-margin-bottom uk-margin-top">
|
||||
<span class="uk-text-bold uk-text-large">Filters</span>
|
||||
<a *ngIf="countFilters()>1" (click)="clearFilters()" [class]="((disableForms)?'uk-disabled uk-link-muted':'')+' portal-link ' + 'uk-width-1-2'">
|
||||
<a *ngIf="selectedFilters>1" (click)="clearFilters()" [class]="((disableForms)?'uk-disabled uk-link-muted':'')+' portal-link ' + 'uk-width-1-2'">
|
||||
Clear All
|
||||
</a>
|
||||
</div>
|
||||
|
@ -88,16 +88,18 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div class="uk-margin-small-bottom uk-margin-small-top uk-grid">
|
||||
<a *ngIf= "showUnknownFilters" class = " portal-link" (click) = "clearFilters() " >Try new Query</a>
|
||||
</div>
|
||||
<!-- <div class="uk-margin-small-bottom uk-margin-small-top uk-grid">-->
|
||||
<!-- <a *ngIf= "showUnknownFilters" class = " portal-link" (click) = "clearFilters() " >Try new Query</a>-->
|
||||
<!-- </div>-->
|
||||
|
||||
</div>
|
||||
<div *ngIf="filters.length === 0 && searchUtils.keyword.length === 0 && results.length > 0" class="uk-margin-top">
|
||||
<span class="uk-text-meta">No filters available</span>
|
||||
</div>
|
||||
<div class="uk-text-large">Filter By:</div>
|
||||
<search-filter *ngFor="let filter of filters " [addShowMore]=false [isDisabled]="disableForms" [filter]="filter" [showResultCount]=showResultCount (onFilterChange)="filterChanged($event)" ></search-filter>
|
||||
<div *ngIf="!showUnknownFilters">
|
||||
<div class="uk-text-large">Filter By:</div>
|
||||
<search-filter *ngFor="let filter of filters " [addShowMore]=false [isDisabled]="disableForms" [filter]="filter" [showResultCount]=showResultCount (onFilterChange)="filterChanged($event)" ></search-filter>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -120,26 +122,25 @@
|
|||
'community' && entityType != 'funder') && usedBy == 'search'"
|
||||
class="uk-width-1-2" [loadPaging]="loadPaging" [oldTotalResults]="oldTotalResults" [(searchUtils)] = "searchUtils" [type]="csvPath" [csvParams]="csvParams" [totalResults]="searchUtils.totalResults">
|
||||
</search-download>
|
||||
|
||||
<div class="uk-width-1-1 uk-margin-small-bottom ">
|
||||
<div class="uk-grid uk-margin-bottom uk-margin-top">
|
||||
<div *ngIf="selectedFilters>0" class="uk-grid uk-margin-bottom uk-margin-top">
|
||||
<span class="uk-text-bold uk-text-large">Filters</span>
|
||||
<a *ngIf="countFilters()>1" (click)="clearFilters()" [class]="((disableForms)?'uk-disabled uk-link-muted':'')+' portal-link ' + 'uk-width-1-2'">
|
||||
<a *ngIf="selectedFilters>1" (click)="clearFilters()" [class]="((disableForms)?'uk-disabled uk-link-muted':'')+' portal-link ' + 'uk-width-1-2'">
|
||||
Clear All
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div *ngIf="countFilters()>0" class="uk-margin-small-bottom">
|
||||
<div *ngIf=" selectedFilters>0" class="uk-margin-small-bottom">
|
||||
|
||||
<span *ngIf = "searchUtils.keyword.length > 0"><span class="uk-text-bold">Keywords:</span>
|
||||
<!-- <span *ngIf = "searchUtils.keyword.length > 0"><span class="uk-text-bold">Keywords:</span>
|
||||
<a (click) = "clearKeywords() " title="Remove keywords" [class]="((disableForms)?' uk-disabled':' ')+' portal-color '"><span class=" clickable " aria-hidden="true"><span class="uk-icon ">
|
||||
<svg width="16" height="16" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="close" ratio="0.8"><path fill="none" stroke="#000" stroke-width="1.6" d="M16,16 L4,4"></path><path fill="none" stroke="#000" stroke-width="1.6" d="M16,4 L4,16"></path></svg>
|
||||
</span></span></a>
|
||||
<span [innerHtml]="searchUtils.keyword"></span>
|
||||
|
||||
</span>
|
||||
</span>-->
|
||||
<div *ngFor="let filter of filters " >
|
||||
<span *ngIf = "filter.countSelectedValues > 0"> <span class="uk-text-bold">{{filter.title}}:</span>
|
||||
<span *ngIf = "filter.countSelectedValues > 0" > <span class="uk-text-bold">{{filter.title}}:</span>
|
||||
<label *ngFor="let value of getSelectedValues(filter); let i = index; let end = last; "
|
||||
[title]="'Remove '+value.name" (click) = "removeFilter(value, filter) ">
|
||||
<a [class]="((disableForms)?' uk-disabled':' ')+' portal-color '"><span class=" clickable" aria-hidden="true"><span class="uk-icon">
|
||||
|
@ -152,14 +153,16 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="uk-margin-small-bottom uk-margin-small-top uk-grid">
|
||||
<a *ngIf= "showUnknownFilters" class = " portal-link" (click) = "clearFilters() " >Try new Query</a>
|
||||
</div>
|
||||
<!-- <div class="uk-margin-small-bottom uk-margin-small-top uk-grid">-->
|
||||
<!-- <a *ngIf= "showUnknownFilters" class = " portal-link" (click) = "clearFilters() " >Try new Query</a>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
<div *ngIf="filters.length === 0 && searchUtils.keyword.length === 0 && results.length > 0" class="uk-margin-top">
|
||||
<div *ngIf="filters.length === 0 && results.length > 0" class="uk-margin-top">
|
||||
<span class="uk-text-meta">No filters available</span>
|
||||
</div>
|
||||
<search-filter *ngFor="let filter of filters " [filterValuesNum]="filterValuesNum" [showMoreInline]="showMoreFilterValuesInline" [isDisabled]="disableForms" [filter]="filter" [showResultCount]=showResultCount (onFilterChange)="filterChanged($event)" ></search-filter>
|
||||
<div *ngIf="!showUnknownFilters">
|
||||
<search-filter *ngFor="let filter of filters " [filterValuesNum]="filterValuesNum" [showMoreInline]="showMoreFilterValuesInline" [isDisabled]="disableForms" [filter]="filter" [showResultCount]=showResultCount (onFilterChange)="filterChanged($event)" ></search-filter>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-expand@m uk-with-1-1@s">
|
||||
<div *ngIf="openaireLink"> <a class="uk-margin-top uk-button uk-button-text" [href]=openaireLink target="_blank" >Results in OpenAIRE</a></div>
|
||||
|
|
|
@ -15,6 +15,7 @@ import {EnvProperties} from '../../utils/properties/env-properties';
|
|||
import {SEOService} from '../../sharedComponents/SEO/SEO.service';
|
||||
import {HelperService} from "../../utils/helper/helper.service";
|
||||
import {SearchFields} from "../../utils/properties/searchFields";
|
||||
import {RefineResultsUtils} from "../../services/servicesUtils/refineResults.class";
|
||||
|
||||
@Component({
|
||||
selector: 'new-search-page',
|
||||
|
@ -46,10 +47,12 @@ export class NewSearchPageComponent {
|
|||
//From simple:
|
||||
@Input() refineFields = [];
|
||||
@Input() filters = [];
|
||||
selectedFilters:number = 0;
|
||||
private queryParameters: Map<string, string> = new Map<string, string>();
|
||||
private searchFieldsHelper: SearchFields = new SearchFields();
|
||||
@Input() newQueryButton: boolean = true;
|
||||
public showUnknownFilters: boolean = false; // when a filter exists in query but has no results, so no filters returned from the query
|
||||
unknownFilters: Filter[] = [];
|
||||
@Input() showRefine: boolean = true;
|
||||
@Input() tableViewLink: string;
|
||||
@Input() mapUrl: string = "";
|
||||
|
@ -169,6 +172,7 @@ export class NewSearchPageComponent {
|
|||
this.filters[i].countSelectedValues = 0;
|
||||
}
|
||||
}
|
||||
this.selectedFilters = 0;
|
||||
this.goTo(1);
|
||||
// this.clearKeywords();
|
||||
}
|
||||
|
@ -353,24 +357,14 @@ export class NewSearchPageComponent {
|
|||
return filters;
|
||||
}
|
||||
|
||||
public countFilters(): number {
|
||||
var filters = 0;
|
||||
this.showUnknownFilters = false;
|
||||
for (let filter of this.filters) {
|
||||
public countSelectedFilters(filters:Filter[]): number {
|
||||
this.selectedFilters = 0;
|
||||
for (let filter of filters) {
|
||||
if (filter.countSelectedValues > 0) {
|
||||
filters += filter.countSelectedValues;
|
||||
this.selectedFilters += filter.countSelectedValues;
|
||||
}
|
||||
}
|
||||
if (this.searchUtils.keyword.length > 0) {
|
||||
filters++;
|
||||
}
|
||||
var errorCodes: ErrorCodes = new ErrorCodes();
|
||||
if (this.queryParameters.keys() && this.searchUtils.totalResults == 0 && this.searchUtils.status != errorCodes.LOADING) {
|
||||
if (this.newQueryButton) {
|
||||
this.showUnknownFilters = true;
|
||||
}
|
||||
}
|
||||
return filters;
|
||||
return this.selectedFilters;
|
||||
}
|
||||
|
||||
private clearKeywords() {
|
||||
|
@ -382,6 +376,7 @@ export class NewSearchPageComponent {
|
|||
|
||||
private removeFilter(value: Value, filter: Filter) {
|
||||
filter.countSelectedValues--;
|
||||
this.selectedFilters--;
|
||||
if (value.selected == true) {
|
||||
value.selected = false;
|
||||
}
|
||||
|
@ -543,7 +538,7 @@ console.log(params);
|
|||
var countvalues = 0;
|
||||
var fq = "";
|
||||
let filterOp: string = this.searchFieldsHelper.getFieldOperator(filterId);
|
||||
console.info(filterId, filterOp);
|
||||
// console.info(filterId, filterOp);
|
||||
for (let value of values) {
|
||||
countvalues++;
|
||||
var paramId = this.fieldIdsMap[filterId].param;
|
||||
|
@ -695,5 +690,56 @@ console.log(params);
|
|||
|
||||
return params + allLimits;
|
||||
}
|
||||
getEmptyRefineFilters(URLparams) {
|
||||
let fields = new SearchFields();
|
||||
let filters: Filter[] = [];
|
||||
for (let i = 0; i < this.refineFields.length; i++) {
|
||||
let filterId = this.refineFields[i];
|
||||
if (URLparams[filterId] != undefined) {
|
||||
let filter = new Filter();
|
||||
filter.title = fields.getFieldName(filterId, "publication");
|
||||
filter.filterId = filterId;
|
||||
filter.originalFilterId = filterId;
|
||||
filter.values = [];
|
||||
let values = StringUtils.URIDecode(URLparams[filterId]).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||
for (let value of values) {
|
||||
|
||||
let v: Value = new Value();
|
||||
v.name = RefineResultsUtils.keepPartAfterCharacters(StringUtils.unquote(value), "||");
|
||||
v.id = StringUtils.unquote(value);
|
||||
v.selected = true;
|
||||
filter.values.push(v);
|
||||
// console.log(v)
|
||||
filter.countSelectedValues++;
|
||||
}
|
||||
filters.push(filter)
|
||||
}
|
||||
}
|
||||
// console.log("Empty Filters");
|
||||
// console.log(filters);
|
||||
return filters;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if query has no results, display Filters from URL parameters
|
||||
* Mark checked the selected filters
|
||||
* Count the checked
|
||||
* @param filters
|
||||
*/
|
||||
public prepareFiltersToShow(filters:Filter[]):Filter[]{
|
||||
if (this.unknownFilters.length > 0 && this.searchUtils.totalResults == 0) {
|
||||
this.showUnknownFilters = true;
|
||||
this.filters = this.unknownFilters;
|
||||
} else if (this.searchUtils.totalResults != 0 ) {
|
||||
this.showUnknownFilters = false;
|
||||
this.filters = filters;
|
||||
}
|
||||
this.checkSelectedFilters(this.filters);
|
||||
this.countSelectedFilters(this.filters);
|
||||
return this.filters;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -63,4 +63,10 @@ export class RefineResultsUtils {
|
|||
}
|
||||
return field.name;
|
||||
}
|
||||
public static keepPartAfterCharacters(name, characters):string {
|
||||
if( name.indexOf(characters) !=-1){
|
||||
return name.split(characters)[1];
|
||||
}
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue