[Library|Trunk]

New search page:
	Clean up the code
	remove queryParams - use parameterNames/Values instead
	buildPageURLPArams: don't return URL path
	remove method updateBaseURLParam
	create method prepareSearchPage: gather in one method all  initializations required for search page
	


git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@58055 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
argiro.kokogiannaki 2020-02-04 16:33:46 +00:00
parent 908712ed50
commit 7bcb79955d
2 changed files with 62 additions and 70 deletions

View File

@ -126,15 +126,8 @@ export class SearchResearchResultsComponent {
this.searchUtils.sortBy = "";
}
this.searchPage.fieldIds = this.fieldIds;
this.selectedFields = [];
this.searchPage.selectedFields = this.selectedFields;
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.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, this.fieldIdsMap,this.customFilter,params);
this._getResults(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, this.searchUtils.size, this.searchUtils.sortBy, refine, this.searchPage.getSearchAPIQueryForRefineFields(params));
});
}
@ -169,9 +162,10 @@ export class SearchResearchResultsComponent {
this.results = data[1];
if (refine) {
this.filters = this.searchPage.prepareFiltersToShow(data[2]);
}else{
this.searchPage.buildPageURLParameters(this.filters, false);
}
this.searchPage.updateBaseUrlWithParameters();
this.searchUtils.status = this.errorCodes.DONE;
if (this.searchUtils.totalResults == 0) {
this.searchUtils.status = this.errorCodes.NONE;

View File

@ -48,11 +48,10 @@ export class NewSearchPageComponent {
@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[] = [];
URLCreatedFilters: Filter[] = [];
@Input() showRefine: boolean = true;
@Input() tableViewLink: string;
@Input() mapUrl: string = "";
@ -68,8 +67,6 @@ export class NewSearchPageComponent {
public parameterNames: string[] = [];
public parameterValues: string[] = [];
public baseURLWithParameters: string = '';
public csvLimit: number = 0;
public pagingLimit: number = 0;
public resultsPerPage: number = 0;
@ -117,8 +114,6 @@ export class NewSearchPageComponent {
this.updateDescription(description);
this.searchUtils.baseUrl = "/" + this.searchUtils.baseUrl;
this.updateBaseUrlWithParameters();
this.seoService.createLinkForCanonicalURL(this.properties.baseLink + this.router.url, false);
@ -179,7 +174,7 @@ export class NewSearchPageComponent {
goTo(page: number = 1) {
this.searchUtils.page = page;
this.buildPageURLParameters(true);
this.buildPageURLParameters(this.filters, true);
this.router.navigate([this.searchUtils.baseUrl], {queryParams: this.routerHelper.createQueryParams(this.parameterNames, this.parameterValues)});
/* Code For Piwik*/
if (typeof localStorage !== 'undefined') {
@ -212,12 +207,6 @@ export class NewSearchPageComponent {
this.goTo(1);
}
/**
* Update the url with proper parameters. This is used as base url in Paging Component
*/
public updateBaseUrlWithParameters() {
this.baseURLWithParameters = this.searchUtils.baseUrl + this.buildPageURLParameters(false);
}
getOperatorParameter(parameter: string): string {
for (let id of this.fieldIds) {
@ -246,10 +235,8 @@ export class NewSearchPageComponent {
*/
private getSelectedParameters(): string[] {
var selected: string[] = [];
var params: string[] = Object.keys(this.queryParameters);
for (var i = 0; i < this.refineFields.length; i++) {
if (this.queryParameters.get(this.refineFields[i]) != undefined) {
if (this.parameterNames.indexOf(this.refineFields[i]) != -1) {
selected.push(this.refineFields[i]);
}
}
@ -298,8 +285,9 @@ export class NewSearchPageComponent {
for (var i = 0; i < filters.length; i++) {
var filter: Filter = filters[i];
filter.countSelectedValues = 0;
if (this.queryParameters.get(filter.filterId) != undefined) {
let values = (decodeURIComponent(this.queryParameters.get(filter.filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
if (this.parameterNames.indexOf(filter.filterId) != -1) {
console.log(filter.filterId + " "+this.parameterNames.indexOf(filter.filterId) )
let values = (decodeURIComponent(this.parameterValues[this.parameterNames.indexOf(filter.filterId)])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
for (let filterValue of filter.values) {
if (values.indexOf(StringUtils.quote(filterValue.id)) > -1) {
filterValue.selected = true;
@ -329,8 +317,8 @@ export class NewSearchPageComponent {
var filter: Filter = filters[i];
// console.log(filter.filterId);
if (filter.filterId.indexOf("funder") != -1 && this.queryParameters.get(filter.filterId) != undefined) {
let funders = (decodeURIComponent(this.queryParameters.get(filter.filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
if (filter.filterId.indexOf("funder") != -1 && this.parameterNames.indexOf(filter.filterId) != -1) {
let funders = (decodeURIComponent(this.parameterValues[this.parameterNames.indexOf(filter.filterId)])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
for (let funder of funders) {
funder_prefix.push(StringUtils.unquote(funder).split("____")[0]);
}
@ -516,7 +504,6 @@ export class NewSearchPageComponent {
if (this.customFilter) {
params += (countParams == 0 ? "" : " and ") + this.customFilter.queryFieldName + " exact " + StringUtils.quote((this.customFilter.valueId));
}
console.log(params);
return params;
}
@ -527,14 +514,11 @@ console.log(params);
getSearchAPIQueryForRefineFields(URLparams) {
var allFqs = "";
this.queryParameters = new Map<string, string>();
for (var i = 0; i < this.refineFields.length; i++) {
var filterId = this.refineFields[i];
if (URLparams[filterId] != undefined) {
this.queryParameters.set(filterId, StringUtils.URIDecode(URLparams[filterId]));
let values = (StringUtils.URIDecode(this.queryParameters.get(filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
let values = (StringUtils.URIDecode(StringUtils.URIDecode(URLparams[filterId]))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
var countvalues = 0;
var fq = "";
let filterOp: string = this.searchFieldsHelper.getFieldOperator(filterId);
@ -592,15 +576,19 @@ console.log(params);
// }
// }
//TODO add DOI?
// console.log(this.parameterNames)
// console.log(this.parameterValues)
return allFqs;
}
/**
*
* Sets parameterNames and parameterValues arrays
* used in paging, advanced search link, Goto()
* @param filters either query filters or filters defined by the URL parameters
* @param includePage
*/
buildPageURLParameters(includePage: boolean) {
var params = "";
buildPageURLParameters(filters:Filter[],includePage: boolean) {
this.parameterNames.splice(0, this.parameterNames.length);
this.parameterValues.splice(0, this.parameterValues.length);
var fields: { [key: string]: { values: string[], operators: string[] } } = {};
@ -626,9 +614,6 @@ console.log(params);
}
for (var i = 0; i < this.fieldIds.length; i++) {
if (fields[this.fieldIds[i]]) {
params += "&" + this.fieldIdsMap[this.fieldIds[i]].param + "=" + fields[this.fieldIds[i]].values.join() +
"&" + this.fieldIdsMap[this.fieldIds[i]].operator + "=" + fields[this.fieldIds[i]].operators.join()
this.parameterNames.push(this.fieldIdsMap[this.fieldIds[i]].param);
this.parameterValues.push(fields[this.fieldIds[i]].values.join());
this.parameterNames.push(this.fieldIdsMap[this.fieldIds[i]].operator);
@ -636,22 +621,20 @@ console.log(params);
}
}
if (includePage && this.searchUtils.page != 1) {
params += "&page=" + this.searchUtils.page;
this.parameterNames.push("page");
this.parameterValues.push("" + this.searchUtils.page);
}
if (this.searchUtils.size != 10) {
params += ((params.length == 0) ? '' : '&') + 'size=' + this.searchUtils.size;
if (this.searchUtils.size != this.resultsPerPage) {
this.parameterNames.push("size");
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);
}
var allLimits = "";//location.search.slice(1);
for (let filter of this.filters) {
for (let filter of filters) {
var filterLimits = "";
if (filter.countSelectedValues > 0) {
for (let value of filter.values) {
@ -659,38 +642,35 @@ console.log(params);
filterLimits += ((filterLimits.length == 0) ? '' : ',') + '"' + (value.id) + '"';
}
}
this.queryParameters.set(filter.filterId, filterLimits);
if (filterLimits.length > 0) {
this.parameterNames.push(filter.filterId);
this.parameterValues.push(filterLimits);
}
allLimits += (allLimits.length == 0 ? "?" : "&") + ((filterLimits.length == 0) ? '' : filter.filterId + '=' + filterLimits);
}
}
if (this.searchUtils.keyword.length > 0) {
allLimits += (allLimits.length == 0 ? "?" : "&") + 'keyword=' + this.searchUtils.keyword;
this.parameterNames.push("keyword");
this.parameterValues.push(this.searchUtils.keyword);
//this.parameterValues.push(StringUtils.quote(this.searchUtils.keyword));
}
if (this.searchUtils.page != 1 && includePage) {
allLimits += ((allLimits.length == 0) ? '?' : '&') + 'page=' + this.searchUtils.page;
}
if (this.searchUtils.size != this.resultsPerPage) {
allLimits += ((allLimits.length == 0) ? '?' : '&') + 'size=' + this.searchUtils.size;
this.parameterNames.push("size");
this.parameterValues.push("" + this.searchUtils.size);
}
if (this.sort && this.searchUtils.sortBy) {
allLimits += ((allLimits.length == 0) ? '?' : '&') + 'sortBy=' + this.searchUtils.sortBy;
this.parameterNames.push("sortBy");
this.parameterValues.push(this.searchUtils.sortBy);
}
// if (this.searchUtils.size != this.resultsPerPage) {
// // allLimits += ((allLimits.length == 0) ? '?' : '&') + 'size=' + this.searchUtils.size;
// this.parameterNames.push("size");
// this.parameterValues.push("" + this.searchUtils.size);
// }
// if (this.sort && this.searchUtils.sortBy) {
// // allLimits += ((allLimits.length == 0) ? '?' : '&') + 'sortBy=' + this.searchUtils.sortBy;
// this.parameterNames.push("sortBy");
// this.parameterValues.push(this.searchUtils.sortBy);
// }
return params + allLimits;
}
getEmptyRefineFilters(URLparams) {
/**
* create filters based on URL params
* @param URLparams
*/
getRefineFiltersFromURL(URLparams) {
let fields = new SearchFields();
let filters: Filter[] = [];
for (let i = 0; i < this.refineFields.length; i++) {
@ -717,7 +697,8 @@ console.log(params);
}
// console.log("Empty Filters");
// console.log(filters);
return filters;
this.URLCreatedFilters = filters;
// return filters;
}
@ -728,18 +709,35 @@ console.log(params);
* @param filters
*/
public prepareFiltersToShow(filters:Filter[]):Filter[]{
if (this.unknownFilters.length > 0 && this.searchUtils.totalResults == 0) {
if (this.URLCreatedFilters.length > 0 && this.searchUtils.totalResults == 0) {
this.showUnknownFilters = true;
this.filters = this.unknownFilters;
this.filters = this.URLCreatedFilters;
} else if (this.searchUtils.totalResults != 0 ) {
this.showUnknownFilters = false;
this.filters = filters;
}
this.buildPageURLParameters(this.URLCreatedFilters, true);
this.checkSelectedFilters(this.filters);
this.countSelectedFilters(this.filters);
return this.filters;
}
/**
* Used to set the variables and search page, and prepare it before the getResults query
* @param fieldIds
* @param selectedFields
* @param refineFields
* @param fieldIdsMap
* @param customFilter
* @param params
*/
prepareSearchPage(fieldIds, selectedFields, refineFields,fieldIdsMap, customFilter, params){
this.fieldIds = fieldIds;
this.selectedFields = selectedFields;
this.refineFields = refineFields;
this.fieldIdsMap = fieldIdsMap;
this.customFilter = customFilter;
this.getRefineFiltersFromURL(params);
this.createAdvancedSearchSelectedFiltersFromURLParameters(params);
}
}