Production release December 2023 #27
|
@ -11,12 +11,13 @@ import {EnvProperties} from '../utils/properties/env-properties';
|
||||||
import {NewSearchPageComponent, SearchForm} from "./searchUtils/newSearchPage.component";
|
import {NewSearchPageComponent, SearchForm} from "./searchUtils/newSearchPage.component";
|
||||||
import {DatasourcesHelperClass} from "./searchUtils/datasourcesHelper.class";
|
import {DatasourcesHelperClass} from "./searchUtils/datasourcesHelper.class";
|
||||||
import {properties} from "../../../environments/environment";
|
import {properties} from "../../../environments/environment";
|
||||||
|
import {RefineResultsUtils} from "../services/servicesUtils/refineResults.class";
|
||||||
|
import {RefineFieldResultsService} from "../services/refineFieldResults.service";
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'search-dataproviders',
|
selector: 'search-dataproviders',
|
||||||
template: `
|
template: `
|
||||||
|
|
||||||
<new-search-page
|
<new-search-page
|
||||||
pageTitle="{{(simpleView?'':'Advanced ')}} Find research {{ pageTitle }}"
|
pageTitle="{{(simpleView?'':'Advanced ')}} Find research {{ pageTitle }}"
|
||||||
[entityType]=entityType
|
[entityType]=entityType
|
||||||
|
@ -25,6 +26,8 @@ import {properties} from "../../../environments/environment";
|
||||||
[searchUtils]="searchUtils"
|
[searchUtils]="searchUtils"
|
||||||
[sortedByChanged]="searchUtils.sortBy"
|
[sortedByChanged]="searchUtils.sortBy"
|
||||||
[fieldIds]="fieldIds" [fieldIdsMap]="fieldIdsMap" [selectedFields]="selectedFields"
|
[fieldIds]="fieldIds" [fieldIdsMap]="fieldIdsMap" [selectedFields]="selectedFields"
|
||||||
|
[staticFields]="staticFields" [staticFilters]="staticFilters"
|
||||||
|
[staticFieldValues]="staticFieldValues"
|
||||||
[csvParams]="csvParams" [csvPath]="csvPath"
|
[csvParams]="csvParams" [csvPath]="csvPath"
|
||||||
[simpleSearchLink]="simpleSearchLink" [advancedSearchLink]="advancedSearchLink"
|
[simpleSearchLink]="simpleSearchLink" [advancedSearchLink]="advancedSearchLink"
|
||||||
[disableForms]="disableForms"
|
[disableForms]="disableForms"
|
||||||
|
@ -91,7 +94,16 @@ export class SearchDataProvidersComponent {
|
||||||
searchFiltersSub: any;
|
searchFiltersSub: any;
|
||||||
metaDescription = [];
|
metaDescription = [];
|
||||||
|
|
||||||
constructor (private route: ActivatedRoute, private _searchDataProvidersService: SearchDataprovidersService ) {
|
public staticFields: string[] = [];
|
||||||
|
public staticFieldValues = this.searchFields.DATASOURCE_STATIC_FIELD_VALUES;
|
||||||
|
public staticFilters = [];
|
||||||
|
|
||||||
|
|
||||||
|
private refineQuery: string = "";
|
||||||
|
|
||||||
|
constructor (private route: ActivatedRoute, private _searchDataProvidersService: SearchDataprovidersService,
|
||||||
|
private _refineFieldsResultsService: RefineFieldResultsService,
|
||||||
|
private cdr: ChangeDetectorRef) {
|
||||||
this.results =[];
|
this.results =[];
|
||||||
this.errorCodes = new ErrorCodes();
|
this.errorCodes = new ErrorCodes();
|
||||||
this.errorMessages = new ErrorMessagesComponent();
|
this.errorMessages = new ErrorMessagesComponent();
|
||||||
|
@ -101,6 +113,9 @@ export class SearchDataProvidersComponent {
|
||||||
}
|
}
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.refineFields = DatasourcesHelperClass.getrefineFields(this.type);
|
this.refineFields = DatasourcesHelperClass.getrefineFields(this.type);
|
||||||
|
this.staticFields = this.entityType == "service" ? this.searchFields.DATASOURCE_STATIC_FIELDS : [];
|
||||||
|
this.staticFilters = RefineResultsUtils.parse(this.staticFieldValues, this.staticFields, this.entityType, "search", true);
|
||||||
|
|
||||||
this.pageTitle = DatasourcesHelperClass.getTitle(this.type);
|
this.pageTitle = DatasourcesHelperClass.getTitle(this.type);
|
||||||
this.metaDescription = DatasourcesHelperClass.getDescription(this.type)
|
this.metaDescription = DatasourcesHelperClass.getDescription(this.type)
|
||||||
if(this.showSwitchSearchLink == null){
|
if(this.showSwitchSearchLink == null){
|
||||||
|
@ -143,7 +158,7 @@ export class SearchDataProvidersComponent {
|
||||||
this.searchPage.keywordFields = this.searchFields.DEPOSIT_DATASOURCE_KEYWORD_FIELDS;
|
this.searchPage.keywordFields = this.searchFields.DEPOSIT_DATASOURCE_KEYWORD_FIELDS;
|
||||||
this.searchPage.usedBy = "deposit";
|
this.searchPage.usedBy = "deposit";
|
||||||
}
|
}
|
||||||
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap,this.customFilter,params, this.entityType);
|
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.staticFields, this.fieldIdsMap,this.customFilter,params, this.entityType);
|
||||||
if(refine) {
|
if(refine) {
|
||||||
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(params), this.searchUtils.page, 0, true, this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(params), this.searchUtils.page, 0, true, this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
||||||
} else {
|
} else {
|
||||||
|
@ -182,6 +197,7 @@ export class SearchDataProvidersComponent {
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
this.filters = this.searchPage.prepareFiltersToShow([], 0);
|
this.filters = this.searchPage.prepareFiltersToShow([], 0);
|
||||||
|
this.staticFilters = this.searchPage.prepareStaticFiltersToShow();
|
||||||
|
|
||||||
this.handleError("Error getting refine filters for "+OpenaireEntities.DATASOURCES+": ", err);
|
this.handleError("Error getting refine filters for "+OpenaireEntities.DATASOURCES+": ", err);
|
||||||
this.searchUtils.refineStatus = this.errorMessages.getErrorCode(err.status);
|
this.searchUtils.refineStatus = this.errorMessages.getErrorCode(err.status);
|
||||||
|
@ -196,6 +212,7 @@ export class SearchDataProvidersComponent {
|
||||||
public filtersReturned(refine: boolean, filters: Filter[], totalResults, page: number) {
|
public filtersReturned(refine: boolean, filters: Filter[], totalResults, page: number) {
|
||||||
if (refine) {
|
if (refine) {
|
||||||
this.filters = this.searchPage.prepareFiltersToShow(filters, totalResults);
|
this.filters = this.searchPage.prepareFiltersToShow(filters, totalResults);
|
||||||
|
this.staticFilters = this.searchPage.prepareStaticFiltersToShow();
|
||||||
}
|
}
|
||||||
this.searchUtils.refineStatus = this.errorCodes.DONE;
|
this.searchUtils.refineStatus = this.errorCodes.DONE;
|
||||||
if(totalResults == 0) {
|
if(totalResults == 0) {
|
||||||
|
@ -279,7 +296,7 @@ export class SearchDataProvidersComponent {
|
||||||
this.searchUtils.totalResults = totalResults;
|
this.searchUtils.totalResults = totalResults;
|
||||||
this.results = results;
|
this.results = results;
|
||||||
if(!refine) {
|
if(!refine) {
|
||||||
this.searchPage.buildPageURLParameters(this.filters, [], false);
|
this.searchPage.buildPageURLParameters(this.filters, [], this.staticFilters, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.searchPage.hideFilters = false;
|
this.searchPage.hideFilters = false;
|
||||||
|
|
|
@ -127,7 +127,7 @@ export class SearchOrganizationsComponent {
|
||||||
// this.searchPage.fieldIdsMap = this.fieldIdsMap;
|
// this.searchPage.fieldIdsMap = this.fieldIdsMap;
|
||||||
// this.searchPage.customFilter = this.customFilter;
|
// this.searchPage.customFilter = this.customFilter;
|
||||||
// this.searchPage.getSelectedFiltersFromUrl(params);
|
// this.searchPage.getSelectedFiltersFromUrl(params);
|
||||||
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap,this.customFilter,params, "organization");
|
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], [], this.fieldIdsMap,this.customFilter,params, "organization");
|
||||||
if(refine) {
|
if(refine) {
|
||||||
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, 0, true, this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, 0, true, this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
||||||
} else {
|
} else {
|
||||||
|
@ -271,7 +271,7 @@ export class SearchOrganizationsComponent {
|
||||||
this.searchUtils.totalResults = totalResults;
|
this.searchUtils.totalResults = totalResults;
|
||||||
this.results = results;
|
this.results = results;
|
||||||
if(!refine) {
|
if(!refine) {
|
||||||
this.searchPage.buildPageURLParameters(this.filters, [], false);
|
this.searchPage.buildPageURLParameters(this.filters, [], [], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.searchPage.hideFilters = false;
|
this.searchPage.hideFilters = false;
|
||||||
|
|
|
@ -128,7 +128,7 @@ export class SearchProjectsComponent {
|
||||||
|
|
||||||
this.searchPage.fieldIds = this.fieldIds;
|
this.searchPage.fieldIds = this.fieldIds;
|
||||||
this.selectedFields = [];
|
this.selectedFields = [];
|
||||||
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, this.rangeFields, this.fieldIdsMap, this.customFilter, params, "project");
|
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, this.rangeFields, [], this.fieldIdsMap, this.customFilter, params, "project");
|
||||||
if (refine) {
|
if (refine) {
|
||||||
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, 0, "", true, this.searchPage.getSearchAPIQueryForRangeFields(params) + this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, 0, "", true, this.searchPage.getSearchAPIQueryForRangeFields(params) + this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
||||||
} else {
|
} else {
|
||||||
|
@ -297,7 +297,7 @@ export class SearchProjectsComponent {
|
||||||
this.searchUtils.totalResults = totalResults;
|
this.searchUtils.totalResults = totalResults;
|
||||||
this.results = results;
|
this.results = results;
|
||||||
if (!refine) {
|
if (!refine) {
|
||||||
this.searchPage.buildPageURLParameters(this.filters, this.rangeFilters, false);
|
this.searchPage.buildPageURLParameters(this.filters, this.rangeFilters, [], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.searchPage.hideFilters = false;
|
this.searchPage.hideFilters = false;
|
||||||
|
|
|
@ -12,6 +12,8 @@ import {RangeFilter} from "../utils/rangeFilter/rangeFilterHelperClasses.class";
|
||||||
import {properties} from "../../../environments/environment";
|
import {properties} from "../../../environments/environment";
|
||||||
import {ContextsService} from "../claims/claim-utils/service/contexts.service";
|
import {ContextsService} from "../claims/claim-utils/service/contexts.service";
|
||||||
import {StringUtils} from "../utils/string-utils.class";
|
import {StringUtils} from "../utils/string-utils.class";
|
||||||
|
import {RefineResultsUtils} from "../services/servicesUtils/refineResults.class";
|
||||||
|
import {RefineFieldResultsService} from "../services/refineFieldResults.service";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'search-research-results',
|
selector: 'search-research-results',
|
||||||
|
@ -24,6 +26,8 @@ import {StringUtils} from "../utils/string-utils.class";
|
||||||
[searchUtils]="searchUtils"
|
[searchUtils]="searchUtils"
|
||||||
[sortedByChanged]="searchUtils.sortBy"
|
[sortedByChanged]="searchUtils.sortBy"
|
||||||
[fieldIds]="fieldIds" [fieldIdsMap]="fieldIdsMap" [selectedFields]="selectedFields"
|
[fieldIds]="fieldIds" [fieldIdsMap]="fieldIdsMap" [selectedFields]="selectedFields"
|
||||||
|
[staticFields]="staticFields" [staticFilters]="staticFilters"
|
||||||
|
[staticFieldValues]="staticFieldValues"
|
||||||
[csvParams]="csvParams" [csvPath]="getEntityFileName(resultType)"
|
[csvParams]="csvParams" [csvPath]="getEntityFileName(resultType)"
|
||||||
[simpleSearchLink]="simpleSearchLink" [advancedSearchLink]="advancedSearchLink"
|
[simpleSearchLink]="simpleSearchLink" [advancedSearchLink]="advancedSearchLink"
|
||||||
[disableForms]="disableForms"
|
[disableForms]="disableForms"
|
||||||
|
@ -64,6 +68,12 @@ export class SearchResearchResultsComponent {
|
||||||
public fieldIdsMap = this.searchFields.RESULT_FIELDS;
|
public fieldIdsMap = this.searchFields.RESULT_FIELDS;
|
||||||
public rangeFields: string[][] = this.searchFields.RESULT_RANGE_FIELDS;
|
public rangeFields: string[][] = this.searchFields.RESULT_RANGE_FIELDS;
|
||||||
public selectedFields: AdvancedField[] = [];
|
public selectedFields: AdvancedField[] = [];
|
||||||
|
|
||||||
|
public staticFields: string[] = this.searchFields.RESULT_STATIC_FIELDS;
|
||||||
|
public staticFieldValues = this.searchFields.RESULT_STATIC_FIELD_VALUES;
|
||||||
|
public staticFilters = RefineResultsUtils.parse(this.staticFieldValues, this.staticFields, this.resultType, "search", true);
|
||||||
|
// public orderedFilters;
|
||||||
|
|
||||||
public resourcesQuery = "((oaftype exact result) and (resulttypeid exact " + this.resultType + "))";
|
public resourcesQuery = "((oaftype exact result) and (resulttypeid exact " + this.resultType + "))";
|
||||||
public csvParams: string;
|
public csvParams: string;
|
||||||
public disableForms: boolean = false;
|
public disableForms: boolean = false;
|
||||||
|
@ -101,9 +111,13 @@ export class SearchResearchResultsComponent {
|
||||||
@Input() orcidQuery: string = "";
|
@Input() orcidQuery: string = "";
|
||||||
@Input() identifiers: string[] = [];
|
@Input() identifiers: string[] = [];
|
||||||
|
|
||||||
|
private refineQuery: string = "";
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute, private _router: Router,
|
constructor(private route: ActivatedRoute, private _router: Router,
|
||||||
private _searchResearchResultsService: SearchResearchResultsService,
|
private _searchResearchResultsService: SearchResearchResultsService,
|
||||||
private _contextService: ContextsService) {
|
private _refineFieldsResultsService: RefineFieldResultsService,
|
||||||
|
private _contextService: ContextsService,
|
||||||
|
private cdr: ChangeDetectorRef) {
|
||||||
this.results = [];
|
this.results = [];
|
||||||
this.errorCodes = new ErrorCodes();
|
this.errorCodes = new ErrorCodes();
|
||||||
this.errorMessages = new ErrorMessagesComponent();
|
this.errorMessages = new ErrorMessagesComponent();
|
||||||
|
@ -166,8 +180,7 @@ export class SearchResearchResultsComponent {
|
||||||
this.searchUtils.sortBy = "";
|
this.searchUtils.sortBy = "";
|
||||||
}
|
}
|
||||||
this.selectedFields = [];
|
this.selectedFields = [];
|
||||||
|
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, this.rangeFields, this.staticFields, this.fieldIdsMap,this.customFilter,params, this.resultType, this.quickFilter);
|
||||||
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, this.rangeFields, this.fieldIdsMap,this.customFilter,params, this.resultType, this.quickFilter);
|
|
||||||
if(refine) {
|
if(refine) {
|
||||||
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, 0, "", true, this.searchPage.getSearchAPIQueryForRangeFields(params)+this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
this._getFilters(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(), this.searchUtils.page, 0, "", true, this.searchPage.getSearchAPIQueryForRangeFields(params)+this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
|
||||||
} else {
|
} else {
|
||||||
|
@ -226,7 +239,7 @@ export class SearchResearchResultsComponent {
|
||||||
this.searchUtils.refineStatus = this.errorCodes.LOADING;
|
this.searchUtils.refineStatus = this.errorCodes.LOADING;
|
||||||
this.disableRefineForms = true;
|
this.disableRefineForms = true;
|
||||||
this.searchPageUpdates.emit({disableForms: this.disableForms, disableRefineForms: this.disableRefineForms, searchUtils: this.searchUtils});
|
this.searchPageUpdates.emit({disableForms: this.disableForms, disableRefineForms: this.disableRefineForms, searchUtils: this.searchUtils});
|
||||||
this.searchFiltersSub = this._searchResearchResultsService.advancedSearchResults(this.resultType, parameters, page, size, sortBy, this.properties, (refine) ? this.searchPage.getRefineFieldsQuery() : null, this.searchPage.getFields(), refineFieldsFilterQuery)
|
this.searchFiltersSub = this._searchResearchResultsService.advancedSearchResults(this.resultType, parameters, page, size, sortBy, this.properties, (refine) ? this.searchPage.getRefineFieldsQuery() : null, this.searchPage.getFields(), refineFieldsFilterQuery, true)
|
||||||
// this.subs.push(this._searchResearchResultsService.advancedSearchResults(this.resultType, parameters, page, size, sortBy, this.properties, (refine) ? this.searchPage.getRefineFieldsQuery() : null, this.searchPage.getFields(), refineFieldsFilterQuery)
|
// this.subs.push(this._searchResearchResultsService.advancedSearchResults(this.resultType, parameters, page, size, sortBy, this.properties, (refine) ? this.searchPage.getRefineFieldsQuery() : null, this.searchPage.getFields(), refineFieldsFilterQuery)
|
||||||
//.switchMap(
|
//.switchMap(
|
||||||
.subscribe(
|
.subscribe(
|
||||||
|
@ -248,6 +261,7 @@ export class SearchResearchResultsComponent {
|
||||||
err => {
|
err => {
|
||||||
this.filters = this.searchPage.prepareFiltersToShow([], 0);
|
this.filters = this.searchPage.prepareFiltersToShow([], 0);
|
||||||
this.rangeFilters = this.searchPage.prepareRangeFiltersToShow();
|
this.rangeFilters = this.searchPage.prepareRangeFiltersToShow();
|
||||||
|
this.staticFilters = this.searchPage.prepareStaticFiltersToShow();
|
||||||
|
|
||||||
this.handleError("Error getting refine filters for " + this.getEntityName(this.resultType, true, true), err);
|
this.handleError("Error getting refine filters for " + this.getEntityName(this.resultType, true, true), err);
|
||||||
this.searchUtils.refineStatus = this.errorMessages.getErrorCode(err.status);
|
this.searchUtils.refineStatus = this.errorMessages.getErrorCode(err.status);
|
||||||
|
@ -292,6 +306,45 @@ export class SearchResearchResultsComponent {
|
||||||
if (refine) {
|
if (refine) {
|
||||||
this.filters = this.searchPage.prepareFiltersToShow(filters, totalResults);
|
this.filters = this.searchPage.prepareFiltersToShow(filters, totalResults);
|
||||||
this.rangeFilters = this.searchPage.prepareRangeFiltersToShow();
|
this.rangeFilters = this.searchPage.prepareRangeFiltersToShow();
|
||||||
|
this.staticFilters = this.searchPage.prepareStaticFiltersToShow();
|
||||||
|
|
||||||
|
// if(this.orderedFields) {
|
||||||
|
// this.orderedFilters = [];
|
||||||
|
// for(let group of this.orderedFields) {
|
||||||
|
// if (group.type == "refine") {
|
||||||
|
// let groupedFilters = {title: group.title, values: []};
|
||||||
|
// for (let field of group.values) {
|
||||||
|
// let index = this.filters.findIndex(filter => filter.filterId == field);
|
||||||
|
// if (index > -1) {
|
||||||
|
// groupedFilters.values.push(this.filters[index]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (groupedFilters.values.length > 0) {
|
||||||
|
// this.orderedFilters.push(groupedFilters);
|
||||||
|
// }
|
||||||
|
// } else if (group.type == "range") {
|
||||||
|
// let groupedFilters = {title: group.title, values: []};
|
||||||
|
// let from = group.values[0];
|
||||||
|
// let to = group.values[1];
|
||||||
|
// let index = this.rangeFilters.findIndex(filter => filter.originalFilterIdFrom == from && filter.originalFilterIdTo == to);
|
||||||
|
// if (index > -1) {
|
||||||
|
// groupedFilters.values.push(this.rangeFilters[index]);
|
||||||
|
// this.orderedFilters.push(groupedFilters);
|
||||||
|
// }
|
||||||
|
// } else if (group.type == "static") {
|
||||||
|
// let groupedFilters = {title: group.title, values: []};
|
||||||
|
// for (let field of group.values) {
|
||||||
|
// let index = this.staticFilters.findIndex(filter => filter.filterId == field);
|
||||||
|
// if (index > -1) {
|
||||||
|
// groupedFilters.values.push(this.staticFilters[index]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (groupedFilters.values.length > 0) {
|
||||||
|
// this.orderedFilters.push(groupedFilters);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
this.searchUtils.refineStatus = this.errorCodes.DONE;
|
this.searchUtils.refineStatus = this.errorCodes.DONE;
|
||||||
|
@ -399,7 +452,7 @@ export class SearchResearchResultsComponent {
|
||||||
this.searchUtils.totalResults = totalResults;
|
this.searchUtils.totalResults = totalResults;
|
||||||
this.results = results;
|
this.results = results;
|
||||||
if(!refine) {
|
if(!refine) {
|
||||||
this.searchPage.buildPageURLParameters(this.filters, this.rangeFilters, false);
|
this.searchPage.buildPageURLParameters(this.filters, this.rangeFilters, this.staticFilters, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.searchPage.hideFilters = false;
|
this.searchPage.hideFilters = false;
|
||||||
|
|
|
@ -59,8 +59,9 @@
|
||||||
(listUpdated)="listUpdated($event,selectedField.id)"
|
(listUpdated)="listUpdated($event,selectedField.id)"
|
||||||
[id]="'autocomplete-'+i"></static-autocomplete>
|
[id]="'autocomplete-'+i"></static-autocomplete>
|
||||||
</td>
|
</td>
|
||||||
<td *ngIf=" selectedField.id && selectedField.type == 'refine'" class="uk-width-1-3">
|
<td *ngIf=" selectedField.id && (selectedField.type == 'refine' || selectedField.type == 'static')" class="uk-width-1-3">
|
||||||
<static-autocomplete [properties]=properties [list]=this.fieldList[selectedField.id]
|
<static-autocomplete [properties]=properties [list]=this.fieldList[selectedField.id]
|
||||||
|
[fieldValues]="getFieldValuesForId(selectedField.id)"
|
||||||
[fieldId]=selectedField.id [entityName]="entityType" [fieldName]=[selectedField.id]
|
[fieldId]=selectedField.id [entityName]="entityType" [fieldName]=[selectedField.id]
|
||||||
[selectedValue]=selectedField.value [showSelected]=true
|
[selectedValue]=selectedField.value [showSelected]=true
|
||||||
[placeHolderMessage]="'Search for '+selectedField.name" [title]="selectedField.name"
|
[placeHolderMessage]="'Search for '+selectedField.name" [title]="selectedField.name"
|
||||||
|
|
|
@ -27,6 +27,7 @@ import {Option} from "../../sharedComponents/input/input.component";
|
||||||
export class AdvancedSearchFormComponent implements OnInit, OnDestroy, OnChanges {
|
export class AdvancedSearchFormComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
@ViewChild("container") container;
|
@ViewChild("container") container;
|
||||||
@Input() entityType;
|
@Input() entityType;
|
||||||
|
@Input() fieldValues;
|
||||||
@Input() fieldIds: string[];
|
@Input() fieldIds: string[];
|
||||||
@Input() fieldIdsMap;
|
@Input() fieldIdsMap;
|
||||||
public fieldIdsOptions: Option[] = [];
|
public fieldIdsOptions: Option[] = [];
|
||||||
|
@ -217,4 +218,13 @@ export class AdvancedSearchFormComponent implements OnInit, OnDestroy, OnChanges
|
||||||
onlyIncludesSupported(index: number) {
|
onlyIncludesSupported(index: number) {
|
||||||
return (this.selectedFields[index] && this.selectedFields[index].operatorId === 'or') || (this.selectedFields[index+1] && this.selectedFields[index+1].operatorId === 'or')
|
return (this.selectedFields[index] && this.selectedFields[index].operatorId === 'or') || (this.selectedFields[index+1] && this.selectedFields[index+1].operatorId === 'or')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getFieldValuesForId(id: string) {
|
||||||
|
if(this.fieldValues[id]) {
|
||||||
|
let obj = {};
|
||||||
|
obj[id] = this.fieldValues[id];
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,28 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<ng-container *ngFor="let filter of staticFilters">
|
||||||
|
<ng-container *ngIf="filter.countSelectedValues > 0">
|
||||||
|
<ng-container *ngFor="let value of getSelectedValues(filter); let i = index; let end = last; ">
|
||||||
|
<li *ngIf="!customFilter || (customFilter.isHiddenFilter && customFilter.valueId != value.id)"
|
||||||
|
class="">
|
||||||
|
<span class="uk-label uk-label-primary uk-flex uk-flex-middle">
|
||||||
|
<span
|
||||||
|
class="uk-margin-small-right uk-width-expand uk-text-truncate">
|
||||||
|
<span *ngIf="filter.type && filter.type == 'boolean' else noboolean">{{filter.title}}:
|
||||||
|
{{value.name=='true'?'Yes':'No'}}
|
||||||
|
</span>
|
||||||
|
<ng-template #noboolean>
|
||||||
|
{{value.name}}
|
||||||
|
</ng-template></span>
|
||||||
|
<button [class.uk-disabled]="disabled" (click)="removeFilter(value, filter)" class="uk-close uk-icon" [disabled]="disabled">
|
||||||
|
<icon name="close" flex="true" ratio="0.7"></icon>
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngFor="let filter of filters ">
|
<ng-container *ngFor="let filter of filters ">
|
||||||
<ng-container *ngIf="filter.countSelectedValues > 0">
|
<ng-container *ngIf="filter.countSelectedValues > 0">
|
||||||
<ng-container *ngFor="let value of getSelectedValues(filter); let i = index; let end = last; ">
|
<ng-container *ngFor="let value of getSelectedValues(filter); let i = index; let end = last; ">
|
||||||
|
@ -72,7 +94,7 @@
|
||||||
</h1>
|
</h1>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template #search_filter let-filter="filter">
|
<ng-template #search_filter let-filter="filter" let-showResultCount="showResultCount">
|
||||||
<search-filter [filterValuesNum]="filterValuesNum" [showMoreInline]="showMoreFilterValuesInline"
|
<search-filter [filterValuesNum]="filterValuesNum" [showMoreInline]="showMoreFilterValuesInline"
|
||||||
[isDisabled]="disabled"
|
[isDisabled]="disabled"
|
||||||
[filter]="filter" [showResultCount]=showResultCount
|
[filter]="filter" [showResultCount]=showResultCount
|
||||||
|
@ -84,7 +106,7 @@
|
||||||
<div [class.filterLoading]="disabled">
|
<div [class.filterLoading]="disabled">
|
||||||
<div class="uk-flex uk-flex-middle">
|
<div class="uk-flex uk-flex-middle">
|
||||||
<h4 class="uk-margin-right uk-margin-remove-bottom">Filters</h4>
|
<h4 class="uk-margin-right uk-margin-remove-bottom">Filters</h4>
|
||||||
<a *ngIf="(selectedRangeFilters + selectedFilters + selectedTypesNum)>0"
|
<a *ngIf="(selectedRangeFilters + selectedFilters + selectedStaticFilters + selectedTypesNum)>0"
|
||||||
(click)="clearFilters()" class="uk-text-small"
|
(click)="clearFilters()" class="uk-text-small"
|
||||||
[class.uk-disabled]="disabled" [class.uk-link-muted]="disabled">
|
[class.uk-disabled]="disabled" [class.uk-link-muted]="disabled">
|
||||||
Clear All
|
Clear All
|
||||||
|
@ -198,6 +220,7 @@
|
||||||
<div [class]="'uk-width-1-1'+(simpleView?' uk-width-auto@m' : '')"><div id="searchImage"></div></div>
|
<div [class]="'uk-width-1-1'+(simpleView?' uk-width-auto@m' : '')"><div id="searchImage"></div></div>
|
||||||
<advanced-search-form class="uk-width-expand uk-padding-remove-vertical"
|
<advanced-search-form class="uk-width-expand uk-padding-remove-vertical"
|
||||||
[entityType]="entityType"
|
[entityType]="entityType"
|
||||||
|
[fieldValues]="staticFieldValues"
|
||||||
[fieldIds]="fieldIds"
|
[fieldIds]="fieldIds"
|
||||||
[fieldIdsMap]="fieldIdsMap"
|
[fieldIdsMap]="fieldIdsMap"
|
||||||
[selectedFields]="selectedFields"
|
[selectedFields]="selectedFields"
|
||||||
|
|
|
@ -74,17 +74,23 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
@Input() sortedByChanged: string = "";
|
@Input() sortedByChanged: string = "";
|
||||||
@Input() searchForm: SearchForm = {class: 'search-form', dark: true};
|
@Input() searchForm: SearchForm = {class: 'search-form', dark: true};
|
||||||
//From simple:
|
//From simple:
|
||||||
|
@Input() orderedFilters = [];
|
||||||
@Input() rangeFilters: RangeFilter[] = [];
|
@Input() rangeFilters: RangeFilter[] = [];
|
||||||
@Input() rangeFields: string[][] = [];
|
@Input() rangeFields: string[][] = [];
|
||||||
@Input() refineFields = [];
|
@Input() refineFields = [];
|
||||||
@Input() filters: Filter[] = [];
|
@Input() filters: Filter[] = [];
|
||||||
|
@Input() staticFields = [];
|
||||||
|
@Input() staticFilters: Filter[] = [];
|
||||||
|
@Input() staticFieldValues: { [key: string]: {"name": string, "id": string, "count": string}[] } = {};
|
||||||
selectedFilters: number = 0;
|
selectedFilters: number = 0;
|
||||||
selectedRangeFilters: number = 0;
|
selectedRangeFilters: number = 0;
|
||||||
|
selectedStaticFilters: number = 0;
|
||||||
private searchFieldsHelper: SearchFields = new SearchFields();
|
private searchFieldsHelper: SearchFields = new SearchFields();
|
||||||
@Input() newQueryButton: boolean = true;
|
@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
|
public showUnknownFilters: boolean = false; // when a filter exists in query but has no results, so no filters returned from the query
|
||||||
URLCreatedFilters: Filter[] = [];
|
URLCreatedFilters: Filter[] = [];
|
||||||
URLCreatedRangeFilters: RangeFilter[] = [];
|
URLCreatedRangeFilters: RangeFilter[] = [];
|
||||||
|
URLCreatedStaticFilters: Filter[] = [];
|
||||||
@Input() showRefine: boolean = true;
|
@Input() showRefine: boolean = true;
|
||||||
@Input() tableViewLink: string;
|
@Input() tableViewLink: string;
|
||||||
@Input() usedBy: string = "search";
|
@Input() usedBy: string = "search";
|
||||||
|
@ -98,14 +104,14 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
@Input() formPlaceholderText = "Type Keywords...";
|
@Input() formPlaceholderText = "Type Keywords...";
|
||||||
@Input() resultTypes: Filter = null;
|
@Input() resultTypes: Filter = null;
|
||||||
resultTypeOptions = {
|
resultTypeOptions = {
|
||||||
"publications": {"id": "publication", "name": OpenaireEntities.PUBLICATIONS},
|
// "publications": {"id": "publication", "name": OpenaireEntities.PUBLICATIONS},
|
||||||
"datasets": {"id": "dataset", "name": OpenaireEntities.DATASETS},
|
// "datasets": {"id": "dataset", "name": OpenaireEntities.DATASETS},
|
||||||
"software": {"id": "software", "name": OpenaireEntities.SOFTWARE},
|
// "software": {"id": "software", "name": OpenaireEntities.SOFTWARE},
|
||||||
"other": {"id": "other", "name": OpenaireEntities.OTHER}
|
// "other": {"id": "other", "name": OpenaireEntities.OTHER}
|
||||||
};
|
};
|
||||||
serviceTypeOptions = {
|
serviceTypeOptions = {
|
||||||
"datasources": {"id": "datasource", "name": OpenaireEntities.DATASOURCES},
|
// "datasources": {"id": "datasource", "name": OpenaireEntities.DATASOURCES},
|
||||||
"services": {"id": "service", "name": "Other "+OpenaireEntities.SERVICES}
|
// "services": {"id": "service", "name": "Other "+OpenaireEntities.SERVICES}
|
||||||
}
|
}
|
||||||
selectedTypesNum = 0;
|
selectedTypesNum = 0;
|
||||||
@Input() quickFilter: { filter: Filter, selected: boolean, filterId: string, value: string };
|
@Input() quickFilter: { filter: Filter, selected: boolean, filterId: string, value: string };
|
||||||
|
@ -252,15 +258,30 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
let filterArray = [];
|
let filterArray = [];
|
||||||
let filtervalues = [];
|
let filtervalues = [];
|
||||||
let filterURL = "";
|
let filterURL = "";
|
||||||
if (this.resultTypes && this.resultTypes.countSelectedValues > 0) {
|
// if (this.resultTypes && this.resultTypes.countSelectedValues > 0) {
|
||||||
filterURL += ((filterURL.length == 0) ? '?' : '&') + this.resultTypes.filterId + "=";
|
// filterURL += ((filterURL.length == 0) ? '?' : '&') + this.resultTypes.filterId + "=";
|
||||||
let filterName = this.resultTypes.title + " ";
|
// let filterName = this.resultTypes.title + " ";
|
||||||
for (let value of this.resultTypes.values) {
|
// for (let value of this.resultTypes.values) {
|
||||||
|
// if (value.selected) {
|
||||||
|
// filterArray.push(filterName + '"' + value.name + '"');
|
||||||
|
// filtervalues.push(value.name);
|
||||||
|
// filterURL += ((filterName.length == 0) ? ',' : '') + StringUtils.URIEncode('"' + value.id + '"');
|
||||||
|
// filterName = "";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
for (let filter of this.staticFilters) {
|
||||||
|
if (filter.countSelectedValues > 0) {
|
||||||
|
filterURL += ((filterURL.length == 0) ? '?' : '&') + filter.filterId + "=";
|
||||||
|
let filterName = filter.title + " ";
|
||||||
|
for (let value of filter.values) {
|
||||||
if (value.selected) {
|
if (value.selected) {
|
||||||
filterArray.push(filterName + '"' + value.name + '"');
|
filterArray.push(filterName + '"' + value.name + '"');
|
||||||
filtervalues.push(value.name);
|
filtervalues.push(value.name);
|
||||||
filterURL += ((filterName.length == 0) ? ',' : '') + StringUtils.URIEncode('"' + value.id + '"');
|
filterURL += ((filterName.length == 0) ? ',' : '') + StringUtils.URIEncode('"' + StringUtils.URIEncode(value.id) + '"');
|
||||||
filterName = "";
|
filterName = "";
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -328,9 +349,19 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
// if (this.quickFilter) {
|
// if (this.quickFilter) {
|
||||||
// this.removeValueFromQuickFilter();
|
// this.removeValueFromQuickFilter();
|
||||||
// }
|
// }
|
||||||
if (this.resultTypes) {
|
for (var i = 0; i < this.staticFilters.length; i++) {
|
||||||
this.resultTypes.values = [];
|
for (var j = 0; j < this.staticFilters[i].countSelectedValues; j++) {
|
||||||
|
if (this.staticFilters[i].values[j].selected) {
|
||||||
|
this.staticFilters[i].values[j].selected = false;
|
||||||
}
|
}
|
||||||
|
this.staticFilters[i].countSelectedValues = 0;
|
||||||
|
this.staticFilters[i].radioValue = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.selectedStaticFilters = 0;
|
||||||
|
// if (this.resultTypes) {
|
||||||
|
// this.resultTypes.values = [];
|
||||||
|
// }
|
||||||
this.goTo(1);
|
this.goTo(1);
|
||||||
// this.clearKeywords();
|
// this.clearKeywords();
|
||||||
}
|
}
|
||||||
|
@ -341,7 +372,7 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.searchUtils.page = page;
|
this.searchUtils.page = page;
|
||||||
this.buildPageURLParameters(this.filters, this.rangeFilters, true);
|
this.buildPageURLParameters(this.filters, this.rangeFilters, this.staticFilters, true);
|
||||||
this.router.navigate([this.searchUtils.baseUrl], {queryParams: this.routerHelper.createQueryParams(this.parameterNames, this.parameterValues)});
|
this.router.navigate([this.searchUtils.baseUrl], {queryParams: this.routerHelper.createQueryParams(this.parameterNames, this.parameterValues)});
|
||||||
if (scroll) {
|
if (scroll) {
|
||||||
HelperFunctions.scrollToId("searchForm");
|
HelperFunctions.scrollToId("searchForm");
|
||||||
|
@ -427,7 +458,9 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
//if filter is not marked as hidden OR it is hidden but it is dependent to a field that it IS selected
|
//if filter is not marked as hidden OR it is hidden but it is dependent to a field that it IS selected
|
||||||
if (this.searchFieldsHelper.HIDDEN_FIELDS.indexOf(this.refineFields[i]) == -1
|
if (this.searchFieldsHelper.HIDDEN_FIELDS.indexOf(this.refineFields[i]) == -1
|
||||||
|| (selected_filters.indexOf(dependentTo) != -1) || (selected_filters.indexOf(this.refineFields[i]) != -1)
|
|| (selected_filters.indexOf(dependentTo) != -1) || (selected_filters.indexOf(this.refineFields[i]) != -1)
|
||||||
|| (this.resultTypes && this.resultTypes.filterId == dependentTo && this.resultTypes.countSelectedValues > 0)) {
|
|| (this.resultTypes && this.resultTypes.filterId == dependentTo && this.resultTypes.countSelectedValues > 0)
|
||||||
|
// || (this.resultAccesses && this.resultAccesses.filterId == dependentTo && this.resultAccesses.countSelectedValues > 0)
|
||||||
|
) {
|
||||||
fields.push(this.refineFields[i]);
|
fields.push(this.refineFields[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -569,6 +602,35 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
return this.rangeFilters;
|
return this.rangeFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public checkSelectedStaticFilters(filters: Filter[]) {
|
||||||
|
for (var i = 0; i < filters.length; i++) {
|
||||||
|
var filter: Filter = filters[i];
|
||||||
|
filter.countSelectedValues = 0;
|
||||||
|
if (this.parameterNames.indexOf(filter.filterId) != -1) {
|
||||||
|
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;
|
||||||
|
filter.countSelectedValues++;
|
||||||
|
} else {
|
||||||
|
filterValue.selected = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (let filterValue of filter.values) {
|
||||||
|
filterValue.selected = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.filterFilterValues(this.filters);
|
||||||
|
if (!this.includeOnlyResultsAndFilter) {
|
||||||
|
this.updateMeta(this.pageTitle);
|
||||||
|
}
|
||||||
|
this.staticFilters = filters;
|
||||||
|
return filters;
|
||||||
|
}
|
||||||
|
|
||||||
get existingFiltersWithValues() {
|
get existingFiltersWithValues() {
|
||||||
if (this.filters.length == 0) {
|
if (this.filters.length == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -634,6 +696,16 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
return this.selectedRangeFilters;
|
return this.selectedRangeFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public countSelectedStaticFilters(filters: Filter[]): number {
|
||||||
|
this.selectedStaticFilters = 0;
|
||||||
|
for (let filter of filters) {
|
||||||
|
if (filter.countSelectedValues > 0) {
|
||||||
|
this.selectedStaticFilters += filter.countSelectedValues;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.selectedStaticFilters;
|
||||||
|
}
|
||||||
|
|
||||||
private clearKeywords() {
|
private clearKeywords() {
|
||||||
if (this.searchUtils.keyword.length > 0) {
|
if (this.searchUtils.keyword.length > 0) {
|
||||||
this.searchUtils.keyword = '';
|
this.searchUtils.keyword = '';
|
||||||
|
@ -949,6 +1021,12 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
|
|
||||||
if (this.entityType == "service" && URLparams) {
|
if (this.entityType == "service" && URLparams) {
|
||||||
if (URLparams["type"]) {
|
if (URLparams["type"]) {
|
||||||
|
let types1 = URLparams["type"];
|
||||||
|
types1 = Array.isArray(types1) ? types1.join(',').split(",") : types1.split(",");
|
||||||
|
types1.map(function (t) {
|
||||||
|
return StringUtils.unquote(StringUtils.URIDecode(t));
|
||||||
|
});
|
||||||
|
|
||||||
let types = URLparams["type"];
|
let types = URLparams["type"];
|
||||||
types = Array.isArray(types) ? types.join(',').split(",") : types.split(",");
|
types = Array.isArray(types) ? types.join(',').split(",") : types.split(",");
|
||||||
types.map(function (t) {
|
types.map(function (t) {
|
||||||
|
@ -1112,6 +1190,27 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
allFqs += fq;
|
allFqs += fq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < this.staticFields.length; i++) {
|
||||||
|
var filterId = this.staticFields[i];
|
||||||
|
if (URLparams[filterId] != undefined && filterId != "type") {
|
||||||
|
let values = (StringUtils.URIDecode(StringUtils.URIDecode(URLparams[filterId]))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||||
|
var countvalues = 0;
|
||||||
|
var fq = "";
|
||||||
|
let filterOp: string = this.searchFieldsHelper.getFieldOperator(filterId);
|
||||||
|
for (let value of values) {
|
||||||
|
if (value && value.length > 0) {
|
||||||
|
countvalues++;
|
||||||
|
fq += (fq.length > 0 ? " " + filterOp + " " : "") + filterId + " exact " + (value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (countvalues > 0) {
|
||||||
|
fq = "&fq=" + StringUtils.URIEncode(fq);
|
||||||
|
}
|
||||||
|
allFqs += fq;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.customFilterEnabled = URLparams["cf"] == "true";
|
this.customFilterEnabled = URLparams["cf"] == "true";
|
||||||
if (this.customFilter && (this.customFilter.isHiddenFilter || this.customFilterEnabled)) {
|
if (this.customFilter && (this.customFilter.isHiddenFilter || this.customFilterEnabled)) {
|
||||||
allFqs += "&fq=" + StringUtils.URIEncode(this.customFilter.queryFieldName + " exact " + StringUtils.quote((this.customFilter.valueId)));
|
allFqs += "&fq=" + StringUtils.URIEncode(this.customFilter.queryFieldName + " exact " + StringUtils.quote((this.customFilter.valueId)));
|
||||||
|
@ -1347,9 +1446,10 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
* used in paging, advanced search link, Goto()
|
* used in paging, advanced search link, Goto()
|
||||||
* @param filters either query filters or filters defined by the URL parameters
|
* @param filters either query filters or filters defined by the URL parameters
|
||||||
* @param rangeFilters defined by the URL parameters
|
* @param rangeFilters defined by the URL parameters
|
||||||
|
* @param staticFilters
|
||||||
* @param includePage
|
* @param includePage
|
||||||
*/
|
*/
|
||||||
buildPageURLParameters(filters: Filter[], rangeFilters: RangeFilter[], includePage: boolean) {
|
buildPageURLParameters(filters: Filter[], rangeFilters: RangeFilter[], staticFilters: Filter[], includePage: boolean) {
|
||||||
this.parameterNames.splice(0, this.parameterNames.length);
|
this.parameterNames.splice(0, this.parameterNames.length);
|
||||||
this.parameterValues.splice(0, this.parameterValues.length);
|
this.parameterValues.splice(0, this.parameterValues.length);
|
||||||
for (var i = 0; i < this.selectedFields.length; i++) {
|
for (var i = 0; i < this.selectedFields.length; i++) {
|
||||||
|
@ -1392,31 +1492,47 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
//this.parameterValues.push(this.searchUtils.sortBy);
|
//this.parameterValues.push(this.searchUtils.sortBy);
|
||||||
this.parameterValues.push(this.sortedByChanged);
|
this.parameterValues.push(this.sortedByChanged);
|
||||||
}
|
}
|
||||||
if (this.resultTypes &&
|
|
||||||
(
|
for (let filter of staticFilters) {
|
||||||
(this.entityType == 'publication' || this.entityType == 'dataset' || this.entityType == 'software' || this.entityType == 'other' || this.entityType == "result")
|
var filterLimits = "";
|
||||||
||
|
if (filter.countSelectedValues > 0) {
|
||||||
(this.entityType == "service")
|
for (let value of filter.values) {
|
||||||
)
|
if (value.selected == true) {
|
||||||
) {
|
filterLimits += ((filterLimits.length == 0) ? '' : ',') + '"' + StringUtils.URIEncode(value.id) + '"';
|
||||||
let values = [];
|
|
||||||
for (let value of this.resultTypes.values) {
|
|
||||||
if (value.selected) {
|
|
||||||
values.push(value.id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.selectedTypesNum = 0;
|
if (filterLimits.length > 0) {
|
||||||
if (values.length > 0 && values.length != 4) {
|
this.parameterNames.push(filter.filterId);
|
||||||
this.parameterNames.push("type");
|
this.parameterValues.push(filterLimits);
|
||||||
this.parameterValues.push(values.join(","));
|
|
||||||
this.selectedTypesNum = values.length;
|
|
||||||
}
|
}
|
||||||
//
|
|
||||||
/* if(this.quickFilter) {
|
|
||||||
this.parameterNames.push("qf");
|
|
||||||
this.parameterValues.push("" + this.quickFilter.selected);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (this.resultTypes &&
|
||||||
|
// (
|
||||||
|
// (this.entityType == 'publication' || this.entityType == 'dataset' || this.entityType == 'software' || this.entityType == 'other' || this.entityType == "result")
|
||||||
|
// ||
|
||||||
|
// (this.entityType == "service")
|
||||||
|
// )
|
||||||
|
// ) {
|
||||||
|
// let values = [];
|
||||||
|
// for (let value of this.resultTypes.values) {
|
||||||
|
// if (value.selected) {
|
||||||
|
// values.push(value.id);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// this.selectedTypesNum = 0;
|
||||||
|
// if (values.length > 0 && values.length != 4) {
|
||||||
|
// this.parameterNames.push("type");
|
||||||
|
// this.parameterValues.push(values.join(","));
|
||||||
|
// this.selectedTypesNum = values.length;
|
||||||
|
// }
|
||||||
|
// //
|
||||||
|
// /* if(this.quickFilter) {
|
||||||
|
// this.parameterNames.push("qf");
|
||||||
|
// this.parameterValues.push("" + this.quickFilter.selected);
|
||||||
|
// }*/
|
||||||
|
// }
|
||||||
for (let filter of filters) {
|
for (let filter of filters) {
|
||||||
var filterLimits = "";
|
var filterLimits = "";
|
||||||
if (filter.countSelectedValues > 0) {
|
if (filter.countSelectedValues > 0) {
|
||||||
|
@ -1482,6 +1598,7 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
getRefineFiltersFromURL(URLparams) {
|
getRefineFiltersFromURL(URLparams) {
|
||||||
let fields = new SearchFields();
|
let fields = new SearchFields();
|
||||||
let filters: Filter[] = [];
|
let filters: Filter[] = [];
|
||||||
|
let staticFilters: Filter[] = [];
|
||||||
for (let i = 0; i < this.refineFields.length; i++) {
|
for (let i = 0; i < this.refineFields.length; i++) {
|
||||||
let filterId = this.refineFields[i];
|
let filterId = this.refineFields[i];
|
||||||
if (URLparams[filterId] != undefined) {
|
if (URLparams[filterId] != undefined) {
|
||||||
|
@ -1523,36 +1640,59 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
let options = null;
|
for (let i = 0; i < this.staticFields.length; i++) {
|
||||||
if ((this.entityType == 'publication' || this.entityType == 'dataset' || this.entityType == 'software' || this.entityType == 'other' || this.entityType == "result")) {
|
let filterId = this.staticFields[i];
|
||||||
options = this.resultTypeOptions;
|
if (URLparams[filterId] != undefined) {
|
||||||
} else if (this.entityType == "service") {
|
let filter = new Filter();
|
||||||
options = this.serviceTypeOptions;
|
filter.title = fields.getFieldName(filterId, this.entityType);
|
||||||
}
|
filter.filterId = filterId;
|
||||||
if (options) {
|
filter.originalFilterId = filterId;
|
||||||
this.resultTypes = {values:[],filterId:"type", countSelectedValues: 0, filterType: 'checkbox', type:'checkBox', originalFilterId: "", valueIsExact: true, title: "Type",filterOperator:"or"};
|
filter.values = [];
|
||||||
for (let typeOption of Object.keys(options)) {
|
let values = StringUtils.URIDecode(URLparams[filterId]).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||||
let type = typeOption;
|
for (let value of values) {
|
||||||
if ( URLparams["type"] && URLparams["type"].indexOf(type)==-1 || !URLparams["type"]) {
|
let v: Value = new Value();
|
||||||
this.resultTypes.values.push({
|
v.name = RefineResultsUtils.keepPartAfterCharacters(StringUtils.unquote(value), "||");
|
||||||
name: options[StringUtils.unquote(type)].name,
|
v.name = (v.name.indexOf("::") != -1) ? v.name.substring(v.name.indexOf("::") + 2).split("::").join("|") : v.name; // for funding streams
|
||||||
id: StringUtils.unquote(type),
|
v.id = StringUtils.unquote(value);
|
||||||
selected: false,
|
v.selected = true;
|
||||||
number: 0
|
filter.values.push(v);
|
||||||
});
|
filter.countSelectedValues++;
|
||||||
}else{
|
|
||||||
this.resultTypes.values.push({
|
|
||||||
name: options[StringUtils.unquote(type)].name,
|
|
||||||
id: StringUtils.unquote(type),
|
|
||||||
selected: true,
|
|
||||||
number: 0
|
|
||||||
});
|
|
||||||
this.resultTypes.countSelectedValues++;
|
|
||||||
}
|
}
|
||||||
|
staticFilters.push(filter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// let options = null;
|
||||||
|
// if ((this.entityType == 'publication' || this.entityType == 'dataset' || this.entityType == 'software' || this.entityType == 'other' || this.entityType == "result")) {
|
||||||
|
// options = this.resultTypeOptions;
|
||||||
|
// } else if (this.entityType == "service") {
|
||||||
|
// options = this.serviceTypeOptions;
|
||||||
|
// }
|
||||||
|
// if (options) {
|
||||||
|
// this.resultTypes = {values:[],filterId:"type", countSelectedValues: 0, filterType: 'checkbox', type:'checkBox', originalFilterId: "", valueIsExact: true, title: "Type",filterOperator:"or"};
|
||||||
|
// for (let typeOption of Object.keys(options)) {
|
||||||
|
// let type = typeOption;
|
||||||
|
// if ( URLparams["type"] && URLparams["type"].indexOf(type)==-1 || !URLparams["type"]) {
|
||||||
|
// this.resultTypes.values.push({
|
||||||
|
// name: options[StringUtils.unquote(type)].name,
|
||||||
|
// id: StringUtils.unquote(type),
|
||||||
|
// selected: false,
|
||||||
|
// number: 0
|
||||||
|
// });
|
||||||
|
// }else{
|
||||||
|
// this.resultTypes.values.push({
|
||||||
|
// name: options[StringUtils.unquote(type)].name,
|
||||||
|
// id: StringUtils.unquote(type),
|
||||||
|
// selected: true,
|
||||||
|
// number: 0
|
||||||
|
// });
|
||||||
|
// this.resultTypes.countSelectedValues++;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
this.URLCreatedFilters = filters;
|
this.URLCreatedFilters = filters;
|
||||||
|
this.URLCreatedStaticFilters = staticFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1641,7 +1781,7 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
this.filters = filters;
|
this.filters = filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.buildPageURLParameters(this.URLCreatedFilters, this.URLCreatedRangeFilters, true);
|
this.buildPageURLParameters(this.URLCreatedFilters, this.URLCreatedRangeFilters, this.URLCreatedStaticFilters, true);
|
||||||
//this.checkSelectedRangeFilters(this.rangeFilters);
|
//this.checkSelectedRangeFilters(this.rangeFilters);
|
||||||
|
|
||||||
this.checkSelectedFilters(this.filters);
|
this.checkSelectedFilters(this.filters);
|
||||||
|
@ -1663,6 +1803,15 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
return this.rangeFilters;
|
return this.rangeFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public prepareStaticFiltersToShow() {
|
||||||
|
this.staticFilters = RefineResultsUtils.parse(this.staticFieldValues, this.staticFields, this.entityType, "search", true);
|
||||||
|
this.checkSelectedStaticFilters(this.staticFilters);
|
||||||
|
this.countSelectedStaticFilters(this.staticFilters);
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
|
||||||
|
return this.staticFilters;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to set the variables and search page, and prepare it before the getResults query
|
* Used to set the variables and search page, and prepare it before the getResults query
|
||||||
* @param fieldIds
|
* @param fieldIds
|
||||||
|
@ -1675,18 +1824,20 @@ export class NewSearchPageComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
* @param entityType
|
* @param entityType
|
||||||
* @param quickFilter
|
* @param quickFilter
|
||||||
*/
|
*/
|
||||||
prepareSearchPage(fieldIds, selectedFields, refineFields, rangeFields, fieldIdsMap, customFilter, params, entityType, quickFilter = null) {
|
prepareSearchPage(fieldIds, selectedFields, refineFields, rangeFields, staticFields, fieldIdsMap, customFilter, params, entityType, quickFilter = null) {
|
||||||
// console.log(this.refineFields);
|
// console.log(this.refineFields);
|
||||||
this.entityType = entityType;
|
this.entityType = entityType;
|
||||||
this.fieldIds = fieldIds;
|
this.fieldIds = fieldIds;
|
||||||
this.selectedFields = selectedFields;
|
this.selectedFields = selectedFields;
|
||||||
this.refineFields = refineFields;
|
this.refineFields = refineFields;
|
||||||
this.rangeFields = rangeFields;
|
this.rangeFields = rangeFields;
|
||||||
|
this.staticFields = staticFields;
|
||||||
this.fieldIdsMap = fieldIdsMap;
|
this.fieldIdsMap = fieldIdsMap;
|
||||||
this.customFilter = customFilter;
|
this.customFilter = customFilter;
|
||||||
this.quickFilter = quickFilter;
|
this.quickFilter = quickFilter;
|
||||||
this.getRangeFiltersFromURL(params);
|
this.getRangeFiltersFromURL(params);
|
||||||
this.getRefineFiltersFromURL(params);
|
this.getRefineFiltersFromURL(params);
|
||||||
|
// this.cdr.detectChanges();
|
||||||
this.createAdvancedSearchSelectedFiltersFromURLParameters(params);
|
this.createAdvancedSearchSelectedFiltersFromURLParameters(params);
|
||||||
this.searchTerm = '';
|
this.searchTerm = '';
|
||||||
if(params && params['fv0'] && params['f0'] && params['f0'] == 'q'){
|
if(params && params['fv0'] && params['f0'] && params['f0'] == 'q'){
|
||||||
|
|
|
@ -7,6 +7,8 @@ export class SearchFieldsBase {
|
||||||
//RESULTS
|
//RESULTS
|
||||||
//Used for datasets and publications and software and orp
|
//Used for datasets and publications and software and orp
|
||||||
//In case Datasets or Software should display different fields, use seperate tables for fields
|
//In case Datasets or Software should display different fields, use seperate tables for fields
|
||||||
|
public RESULT_STATIC_FIELDS = ["resultbestaccessright", "type"];
|
||||||
|
|
||||||
// "resultacceptanceyear",
|
// "resultacceptanceyear",
|
||||||
public RESULT_RANGE_FIELDS = [
|
public RESULT_RANGE_FIELDS = [
|
||||||
["resultacceptanceyear", "resultacceptanceyear"]
|
["resultacceptanceyear", "resultacceptanceyear"]
|
||||||
|
@ -14,7 +16,7 @@ export class SearchFieldsBase {
|
||||||
|
|
||||||
// Remove Collected From Filter "collectedfrom","collectedfrom"
|
// Remove Collected From Filter "collectedfrom","collectedfrom"
|
||||||
public RESULT_REFINE_FIELDS = [
|
public RESULT_REFINE_FIELDS = [
|
||||||
"resultbestaccessright", "instancetypename", properties.environment!='production'?"foslabel":'fos', "relfunder",
|
"instancetypename", properties.environment!='production'?"foslabel":'fos', "relfunder",
|
||||||
"relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id",
|
"relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id",
|
||||||
"relproject", "sdg", "country", "resultlanguagename", "resulthostingdatasource", "community"];
|
"relproject", "sdg", "country", "resultlanguagename", "resulthostingdatasource", "community"];
|
||||||
|
|
||||||
|
@ -203,11 +205,11 @@ export class SearchFieldsBase {
|
||||||
},
|
},
|
||||||
["resultbestaccessright"]: {
|
["resultbestaccessright"]: {
|
||||||
name: "Access",
|
name: "Access",
|
||||||
type: "vocabulary",
|
type: "static",
|
||||||
param: "access",
|
param: "access",
|
||||||
operator: "ac",
|
operator: "ac",
|
||||||
equalityOperator: " exact ",
|
equalityOperator: " exact ",
|
||||||
filterType: "radio"
|
filterType: "checkbox"
|
||||||
},
|
},
|
||||||
["collectedfrom"]: {
|
["collectedfrom"]: {
|
||||||
name: "Collected From",
|
name: "Collected From",
|
||||||
|
@ -272,9 +274,33 @@ export class SearchFieldsBase {
|
||||||
operator: "fl",
|
operator: "fl",
|
||||||
equalityOperator: " exact ",
|
equalityOperator: " exact ",
|
||||||
filterType: "checkbox"
|
filterType: "checkbox"
|
||||||
|
},
|
||||||
|
["type"]: {
|
||||||
|
name: "Type",
|
||||||
|
type: "static",
|
||||||
|
param: "type",
|
||||||
|
operator: "tp",
|
||||||
|
equalityOperator: " = ",
|
||||||
|
filterType: "checkbox"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public RESULT_STATIC_FIELD_VALUES: { [key: string]: {"name": string, "id": string, "count": string}[] } = {
|
||||||
|
["resultbestaccessright"]: [
|
||||||
|
{ name: "Open Access", id: "Open Access", count: "0" },
|
||||||
|
{ name: "Closed Access", id: "Closed Access", count: "0" },
|
||||||
|
{ name: "Restricted", id: "Restricted", count: "0" },
|
||||||
|
{ name: "Open Source", id: "Open Source", count: "0" },
|
||||||
|
{ name: "Embargo", id: "Embargo", count: "0" }
|
||||||
|
],
|
||||||
|
["type"]: [
|
||||||
|
{ name: OpenaireEntities.PUBLICATIONS, id: "publications", count: "0" },
|
||||||
|
{ name: OpenaireEntities.DATASETS, id: "datasets", count: "0" },
|
||||||
|
{ name: OpenaireEntities.SOFTWARE, id: "software", count: "0" },
|
||||||
|
{ name: OpenaireEntities.OTHER, id: "other", count: "0" }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
//PROJECT
|
//PROJECT
|
||||||
public PROJECT_RANGE_FIELDS = [
|
public PROJECT_RANGE_FIELDS = [
|
||||||
["projectendyear", "projectstartyear"]
|
["projectendyear", "projectstartyear"]
|
||||||
|
@ -436,6 +462,8 @@ export class SearchFieldsBase {
|
||||||
};
|
};
|
||||||
|
|
||||||
//DATAPROVIDERS
|
//DATAPROVIDERS
|
||||||
|
public DATASOURCE_STATIC_FIELDS = ["eosctype"];
|
||||||
|
|
||||||
// add Collected From Filter "collectedfromname"
|
// add Collected From Filter "collectedfromname"
|
||||||
public DATASOURCE_REFINE_FIELDS: string[] = ["eoscdatasourcetype", "datasourceodlanguages", "datasourceodcontenttypes",
|
public DATASOURCE_REFINE_FIELDS: string[] = ["eoscdatasourcetype", "datasourceodlanguages", "datasourceodcontenttypes",
|
||||||
"datasourcecompatibilityname", "country", "collectedfromname", "datasourcethematic",
|
"datasourcecompatibilityname", "country", "collectedfromname", "datasourcethematic",
|
||||||
|
@ -582,9 +610,24 @@ export class SearchFieldsBase {
|
||||||
equalityOperator: " exact ",
|
equalityOperator: " exact ",
|
||||||
filterType: "checkbox"
|
filterType: "checkbox"
|
||||||
},
|
},
|
||||||
["pid"]: {name: "PID", type: "keyword", param: "pid", operator: "pd", equalityOperator: " exact ", filterType: null}
|
["pid"]: {name: "PID", type: "keyword", param: "pid", operator: "pd", equalityOperator: " exact ", filterType: null},
|
||||||
|
["eosctype"]: {
|
||||||
|
name: "EOSC Type",
|
||||||
|
type: "static",
|
||||||
|
param: "type",
|
||||||
|
operator: "tp",
|
||||||
|
equalityOperator: " = ",
|
||||||
|
filterType: "checkbox"
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public DATASOURCE_STATIC_FIELD_VALUES: { [key: string]: {"name": string, "id": string, "count": string}[] } = {
|
||||||
|
["eosctype"]: [
|
||||||
|
{ name: OpenaireEntities.DATASOURCES, id: "Data Source", count: "0" },
|
||||||
|
{ name: "Other "+OpenaireEntities.SERVICES, id: "Service", count: "0" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
public DEPOSIT_DATASOURCE_KEYWORD_FIELDS: { "name": string, "equalityOperator": string } [] = [
|
public DEPOSIT_DATASOURCE_KEYWORD_FIELDS: { "name": string, "equalityOperator": string } [] = [
|
||||||
{"name": "relorganizationname", "equalityOperator": "="},
|
{"name": "relorganizationname", "equalityOperator": "="},
|
||||||
{"name": "relorganizationshortname", "equalityOperator": "="},
|
{"name": "relorganizationshortname", "equalityOperator": "="},
|
||||||
|
|
|
@ -59,6 +59,7 @@ export class StaticAutoCompleteComponent implements OnChanges{
|
||||||
@Input() public selectedValue:string = '';
|
@Input() public selectedValue:string = '';
|
||||||
@Input() public vocabularyId:string ;
|
@Input() public vocabularyId:string ;
|
||||||
@Input() public fieldName:string ;
|
@Input() public fieldName:string ;
|
||||||
|
@Input() public fieldValues;
|
||||||
@Input() public entityName:string ;
|
@Input() public entityName:string ;
|
||||||
@Input() public fieldId:string ;
|
@Input() public fieldId:string ;
|
||||||
@Input() properties:EnvProperties;
|
@Input() properties:EnvProperties;
|
||||||
|
@ -115,7 +116,11 @@ export class StaticAutoCompleteComponent implements OnChanges{
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}else if(this.fieldName && this.entityName){
|
}else if(this.fieldName && this.entityName){
|
||||||
this.sub = this._refineService.getRefineFieldResultsByFieldName(this.fieldName,this.entityName, this.properties).subscribe(
|
if(this.fieldValues) {
|
||||||
|
this.list = this._refineService.parse(this.fieldValues, this.fieldName);
|
||||||
|
this.afterListFetchedActions();
|
||||||
|
} else {
|
||||||
|
this.sub = this._refineService.getRefineFieldResultsByFieldName(this.fieldName, this.entityName, this.properties).subscribe(
|
||||||
data => {
|
data => {
|
||||||
this.list = data;
|
this.list = data;
|
||||||
this.afterListFetchedActions();
|
this.afterListFetchedActions();
|
||||||
|
@ -123,12 +128,13 @@ export class StaticAutoCompleteComponent implements OnChanges{
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
//console.log(err);
|
//console.log(err);
|
||||||
this.handleError("Error getting results for refine field: "+this.fieldName+" for "+this.entityName, err);
|
this.handleError("Error getting results for refine field: " + this.fieldName + " for " + this.entityName, err);
|
||||||
this.warningMessage = "Error, couldn't fetch results...";
|
this.warningMessage = "Error, couldn't fetch results...";
|
||||||
this.showLoading = false;
|
this.showLoading = false;
|
||||||
this.afterListFetchedActions();
|
this.afterListFetchedActions();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
this.showLoading = false;
|
this.showLoading = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue