1. Add 'sorting' option by 'relevance' or 'date' in advanced search pages for results (publications, datasets, software, orps).

git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@53937 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
konstantina.galouni 2018-11-23 12:32:28 +00:00
parent bd976ae465
commit eb6b2ee67c
11 changed files with 87 additions and 29 deletions

View File

@ -24,7 +24,8 @@ import{EnvProperties} from '../../utils/properties/env-properties';
[disableForms]="disableForms"
[loadPaging]="loadPaging"
[oldTotalResults]="oldTotalResults" [(connectCommunityId)]=connectCommunityId [piwikSiteId]=piwikSiteId
searchFormClass="datasetsSearchForm">
searchFormClass="datasetsSearchForm"
[(sort)]=sort >
</advanced-search-page>
`
@ -52,6 +53,7 @@ export class AdvancedSearchDatasetsComponent {
public loadPaging: boolean = true;
public oldTotalResults: number = 0;
public pagingLimit: number = 0;
public sort: boolean = true;
public isPiwikEnabled;
constructor (private route: ActivatedRoute, private _searchDatasetsService: SearchDatasetsService ) {
this.results =[];
@ -85,6 +87,10 @@ export class AdvancedSearchDatasetsComponent {
if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
this.searchUtils.size = 10;
}
this.searchUtils.sortBy = (params['sortBy'])?params['sortBy']:'';
if(this.searchUtils.sortBy && this.searchUtils.sortBy != "resultdateofacceptance,descending") {
this.searchUtils.sortBy = "";
}
this.searchPage.fieldIds = this.fieldIds;
this.selectedFields =[];
@ -92,7 +98,7 @@ export class AdvancedSearchDatasetsComponent {
this.searchPage.fieldIdsMap = this.fieldIdsMap;
this.searchPage.connectCommunityId = this.connectCommunityId;
this.searchPage.getSelectedFiltersFromUrl(params);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy);
});
}
@ -100,7 +106,7 @@ export class AdvancedSearchDatasetsComponent {
this.sub.unsubscribe();
}
sub: any;
public getResults(parameters:string, page: number, size: number){
public getResults(parameters:string, page: number, size: number, sortBy: string){
if(page > this.pagingLimit) {
size=0;
}
@ -119,7 +125,7 @@ export class AdvancedSearchDatasetsComponent {
this.searchUtils.totalResults = 0;
console.info("Advanced Search for Research Data: Execute search query "+parameters);
this._searchDatasetsService.advancedSearchDatasets(parameters, page, size, this.properties).subscribe(
this._searchDatasetsService.advancedSearchDatasets(parameters, page, size, sortBy, this.properties).subscribe(
data => {
this.searchUtils.totalResults = data[0];
console.info("search Research Data total="+this.searchUtils.totalResults);
@ -176,7 +182,7 @@ export class AdvancedSearchDatasetsComponent {
this.loadPaging = true;
var parameters = $event.value;
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size);
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size, this.searchUtils.sortBy);
console.info("queryChanged: Execute search query "+parameters);
}

View File

@ -24,7 +24,8 @@ import{EnvProperties} from '../../utils/properties/env-properties';
[disableForms]="disableForms"
[loadPaging]="loadPaging"
[oldTotalResults]="oldTotalResults" [(connectCommunityId)]=connectCommunityId [piwikSiteId]=piwikSiteId
searchFormClass="orpsSearchForm">
searchFormClass="orpsSearchForm"
[(sort)]=sort >
</advanced-search-page>
`
@ -52,6 +53,7 @@ export class AdvancedSearchOrpsComponent {
public loadPaging: boolean = true;
public oldTotalResults: number = 0;
public pagingLimit: number = 0;
public sort: boolean = true;
public isPiwikEnabled;
constructor (private route: ActivatedRoute, private _searchOrpsService: SearchOrpsService ) {
this.results =[];
@ -85,14 +87,18 @@ export class AdvancedSearchOrpsComponent {
if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
this.searchUtils.size = 10;
}
this.searchUtils.sortBy = (params['sortBy'])?params['sortBy']:'';
if(this.searchUtils.sortBy && this.searchUtils.sortBy != "resultdateofacceptance,descending") {
this.searchUtils.sortBy = "";
}
this.searchPage.fieldIds = this.fieldIds;
this.selectedFields =[];
this.searchPage.selectedFields = this.selectedFields;
this.searchPage.fieldIdsMap = this.fieldIdsMap;
this.searchPage.connectCommunityId = this.connectCommunityId;
this.searchPage.getSelectedFiltersFromUrl(params);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy);
});
}
@ -100,7 +106,7 @@ export class AdvancedSearchOrpsComponent {
this.sub.unsubscribe();
}
sub: any;
public getResults(parameters:string, page: number, size: number){
public getResults(parameters:string, page: number, size: number, sortBy: string){
if(page > this.pagingLimit) {
size=0;
}
@ -117,7 +123,7 @@ export class AdvancedSearchOrpsComponent {
this.searchUtils.totalResults = 0;
console.info("Advanced Search for Other Research Products: Execute search query "+parameters);
this._searchOrpsService.advancedSearchOrps(parameters, page, size, this.properties).subscribe(
this._searchOrpsService.advancedSearchOrps(parameters, page, size, sortBy, this.properties).subscribe(
data => {
this.searchUtils.totalResults = data[0];
console.info("search Other Research Products total="+this.searchUtils.totalResults);
@ -167,7 +173,7 @@ export class AdvancedSearchOrpsComponent {
this.loadPaging = true;
var parameters = $event.value;
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size);
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size, this.searchUtils.sortBy);
console.info("queryChanged: Execute search query "+parameters);
}

View File

@ -26,7 +26,8 @@ import{EnvProperties} from '../../utils/properties/env-properties';
[oldTotalResults]="oldTotalResults"
[(openaireLink)]=openaireLink
[(connectCommunityId)]=connectCommunityId [piwikSiteId]=piwikSiteId
searchFormClass="publicationsSearchForm">
searchFormClass="publicationsSearchForm"
[(sort)]=sort >
</advanced-search-page>
`
})
@ -52,6 +53,7 @@ export class AdvancedSearchPublicationsComponent {
@Input() connectCommunityId: string;
public pagingLimit: number = 0;
public isPiwikEnabled;
public sort: boolean = true;
properties:EnvProperties;
@ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ;
@ -90,21 +92,25 @@ export class AdvancedSearchPublicationsComponent {
if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
this.searchUtils.size = 10;
}
this.searchUtils.sortBy = (params['sortBy'])?params['sortBy']:'';
if(this.searchUtils.sortBy && this.searchUtils.sortBy != "resultdateofacceptance,descending") {
this.searchUtils.sortBy = "";
}
this.searchPage.fieldIds = this.fieldIds;
this.selectedFields =[];
this.searchPage.selectedFields = this.selectedFields;
this.searchPage.fieldIdsMap = this.fieldIdsMap;
this.searchPage.connectCommunityId = this.connectCommunityId;
this.searchPage.getSelectedFiltersFromUrl(params);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
sub: any;
public getResults(parameters:string, page: number, size: number){
public getResults(parameters:string, page: number, size: number, sortBy: string){
if(page > this.pagingLimit) {
size=0;
}
@ -123,7 +129,7 @@ export class AdvancedSearchPublicationsComponent {
this.searchUtils.totalResults = 0;
console.info("Advanced Search for Publications: Execute search query "+parameters);
this._searchPublicationsService.advancedSearchPublications(parameters, page, size, this.properties).subscribe(
this._searchPublicationsService.advancedSearchPublications(parameters, page, size, sortBy, this.properties).subscribe(
data => {
this.searchUtils.totalResults = data[0];
console.info("searchPubl total="+this.searchUtils.totalResults);
@ -178,7 +184,7 @@ export class AdvancedSearchPublicationsComponent {
this.loadPaging = true;
var parameters = $event.value;
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size);
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size, this.searchUtils.sortBy);
console.info("queryChanged: Execute search query "+parameters);
}

View File

@ -24,7 +24,8 @@ import{EnvProperties} from '../../utils/properties/env-properties';
[disableForms]="disableForms"
[loadPaging]="loadPaging"
[oldTotalResults]="oldTotalResults" [(connectCommunityId)]=connectCommunityId [piwikSiteId]=piwikSiteId
searchFormClass="softwareSearchForm">
searchFormClass="softwareSearchForm"
[(sort)]=sort >
</advanced-search-page>
`
@ -52,6 +53,7 @@ export class AdvancedSearchSoftwareComponent {
public oldTotalResults: number = 0;
public pagingLimit: number = 0;
public isPiwikEnabled;
public sort: boolean = true;
properties:EnvProperties;
constructor (private route: ActivatedRoute, private _searchSoftwareService: SearchSoftwareService ) {
@ -86,14 +88,18 @@ export class AdvancedSearchSoftwareComponent {
if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
this.searchUtils.size = 10;
}
this.searchUtils.sortBy = (params['sortBy'])?params['sortBy']:'';
if(this.searchUtils.sortBy && this.searchUtils.sortBy != "resultdateofacceptance,descending") {
this.searchUtils.sortBy = "";
}
this.searchPage.fieldIds = this.fieldIds;
this.selectedFields =[];
this.searchPage.selectedFields = this.selectedFields;
this.searchPage.fieldIdsMap = this.fieldIdsMap;
this.searchPage.connectCommunityId = this.connectCommunityId;
this.searchPage.getSelectedFiltersFromUrl(params);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size);
this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy);
});
}
@ -101,7 +107,7 @@ export class AdvancedSearchSoftwareComponent {
this.sub.unsubscribe();
}
sub: any;
public getResults(parameters:string, page: number, size: number){
public getResults(parameters:string, page: number, size: number, sortBy: string){
if(page >this.pagingLimit) {
size=0;
}
@ -120,7 +126,7 @@ export class AdvancedSearchSoftwareComponent {
this.searchUtils.totalResults = 0;
console.info("Advanced Search for Software: Execute search query "+parameters);
this._searchSoftwareService.advancedSearchSoftware(parameters, page, size, this.properties).subscribe(
this._searchSoftwareService.advancedSearchSoftware(parameters, page, size, sortBy, this.properties).subscribe(
data => {
this.searchUtils.totalResults = data[0];
console.info("search Software total="+this.searchUtils.totalResults);
@ -177,7 +183,7 @@ export class AdvancedSearchSoftwareComponent {
this.loadPaging = true;
var parameters = $event.value;
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size);
this.getResults(parameters, this.searchUtils.page,this.searchUtils.size, this.searchUtils.sortBy);
console.info("queryChanged: Execute search query "+parameters);
}

View File

@ -44,6 +44,7 @@
<search-paging [type]="type" [loadPaging]="loadPaging" [oldTotalResults]="oldTotalResults" [(searchUtils)] = "searchUtils" [(results)] = "results" [(baseUrl)] = "searchUtils.baseUrl" [(parameterNames)] = "parameterNames" [(parameterValues)] = "parameterValues" ></search-paging>
<div class="uk-grid uk-margin-bottom">
<search-results-per-page class="uk-width-1-2@m uk-width-1-1" [(size)]="searchUtils.size" (sizeChange)="sizeChanged($event)"></search-results-per-page>
<search-sorting class="uk-width-1-2@m uk-width-1-1" *ngIf="sort" [(sortBy)]="searchUtils.sortBy" (sortByChange)="sortByChanged($event)"></search-sorting>
</div>
</div>
@ -65,6 +66,7 @@
<search-paging [type]="type" [loadPaging]="loadPaging" [oldTotalResults]="oldTotalResults" [(searchUtils)] = "searchUtils" [(results)] = "results" [(baseUrl)] = "searchUtils.baseUrl" [(parameterNames)] = "parameterNames" [(parameterValues)] = "parameterValues" ></search-paging>
<div class="uk-grid uk-margin-bottom">
<search-results-per-page class="uk-width-1-2@m uk-width-1-1" [(size)]="searchUtils.size" (sizeChange)="sizeChanged($event)"></search-results-per-page>
<search-sorting class="uk-width-1-2@m uk-width-1-1" *ngIf="sort" [(sortBy)]="searchUtils.sortBy" (sortByChange)="sortByChanged($event)"></search-sorting>
</div>
</div>

View File

@ -41,6 +41,7 @@ export class AdvancedSearchPageComponent {
@Input() oldTotalResults: number = 0;
@Input() openaireLink: string;
@Input() connectCommunityId: string;
@Input() sort: boolean = false;
@Input() searchFormClass: string = "searchForm";
piwiksub: any;
public parameterNames:string[] =[];
@ -212,6 +213,12 @@ export class AdvancedSearchPageComponent {
this.parameterValues.push(""+this.searchUtils.size);
}
if(this.sort && this.searchUtils.sortBy) {
params+=((params.length == 0)?'':'&') + 'sortBy=' + this.searchUtils.sortBy;
this.parameterNames.push("sortBy");
this.parameterValues.push(this.searchUtils.sortBy);
}
return '?'+params;
}
public createQueryParameters(){
@ -282,7 +289,11 @@ export class AdvancedSearchPageComponent {
this.searchUtils.size = $event.value;
this.goTo(1);
}
sortByChanged($event) {
this.searchUtils.sortBy = $event.value;
this.goTo(1);
}
/*
* Update the url with proper parameters. This is used as base url in Paging Component
*/

View File

@ -10,6 +10,7 @@ import {ReportsServiceModule} from '../../services/reportsService.module';
import {SearchDownloadModule} from './searchDownload.module';
import{SearchPagingModule} from './searchPaging.module';
import {SearchResultsPerPageModule} from './searchResultsPerPage.module';
import {SearchSortingModule} from './searchSorting.module';
import {AdvancedSearchFormModule} from '../searchUtils/advancedSearchForm.module';
import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
@ -21,7 +22,7 @@ import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule, SearchResultsModule, LoadingModalModule, ReportsServiceModule, SearchPagingModule, AdvancedSearchFormModule, SearchDownloadModule, PiwikServiceModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, SearchResultsPerPageModule
Schema2jsonldModule, SEOServiceModule, SearchResultsPerPageModule, SearchSortingModule
],
declarations: [
AdvancedSearchPageComponent,

View File

@ -91,7 +91,7 @@ export class SearchDatasetsService {
.map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "dataset")]);
}
advancedSearchDatasets (params: string, page: number, size: number, properties:EnvProperties ):any {
advancedSearchDatasets (params: string, page: number, size: number, sortBy: string, properties:EnvProperties ):any {
let url = properties.searchResourcesAPIURL;
var basicQuery = "(oaftype exact result) and (resulttypeid exact dataset) "
url += "?query=";
@ -101,6 +101,11 @@ export class SearchDatasetsService {
url +=" ( "+basicQuery+ " ) ";
}
if(sortBy) {
let sortOptions = sortBy.split(",");
url += "sortBy "+sortOptions[0]+"/sort."+sortOptions[1]+" ";
}
url += "&page="+(page-1)+"&size="+size;
url += "&format=json";

View File

@ -93,7 +93,7 @@ export class SearchOrpsService {
.map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "other")]);
}
advancedSearchOrps (params: string, page: number, size: number, properties:EnvProperties ):any {
advancedSearchOrps (params: string, page: number, size: number, sortBy: string, properties:EnvProperties ):any {
let url = properties.searchResourcesAPIURL;
var basicQuery = "(oaftype exact result) and (resulttypeid exact other) "
@ -104,6 +104,11 @@ export class SearchOrpsService {
url +=" ( "+basicQuery+ " ) ";
}
if(sortBy) {
let sortOptions = sortBy.split(",");
url += "sortBy "+sortOptions[0]+"/sort."+sortOptions[1]+" ";
}
url += "&page="+(page-1)+"&size="+size;
url += "&format=json";

View File

@ -94,7 +94,7 @@ export class SearchPublicationsService {
.map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]);
}
advancedSearchPublications (params: string, page: number, size: number, properties:EnvProperties ):any {
advancedSearchPublications (params: string, page: number, size: number, sortBy: string, properties:EnvProperties ):any {
let url = properties.searchResourcesAPIURL;
var basicQuery = "(oaftype exact result) and (resulttypeid exact publication) ";
url += "?query=";
@ -104,6 +104,11 @@ export class SearchPublicationsService {
url +=" ( "+basicQuery+ " ) ";
}
if(sortBy) {
let sortOptions = sortBy.split(",");
url += "sortBy "+sortOptions[0]+"/sort."+sortOptions[1]+" ";
}
url += "&page="+(page-1)+"&size="+size;
url += "&format=json";

View File

@ -90,7 +90,7 @@ export class SearchSoftwareService {
//.do(res => console.info(res))
.map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "software")]);
}
advancedSearchSoftware (params: string, page: number, size: number, properties:EnvProperties ):any {
advancedSearchSoftware (params: string, page: number, size: number, sortBy: string, properties:EnvProperties ):any {
let url = properties.searchResourcesAPIURL;
var basicQuery = "(oaftype exact result) and (resulttypeid exact software) "
url += "?query=";
@ -100,6 +100,11 @@ export class SearchSoftwareService {
url +=" ( "+basicQuery+ " ) ";
}
if(sortBy) {
let sortOptions = sortBy.split(",");
url += "sortBy "+sortOptions[0]+"/sort."+sortOptions[1]+" ";
}
url += "&page="+(page-1)+"&size="+size;
url += "&format=json";