openaire-library/searchPages/searchUtils/entitiesSelection.component.ts

141 lines
5.9 KiB
TypeScript

import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';
import {FormBuilder} from "@angular/forms";
import {EnvProperties} from "../../utils/properties/env-properties";
import {SearchCustomFilter} from "./searchUtils.class";
import {ConfigurationService} from "../../utils/configuration/configuration.service";
import {RouterHelper} from "../../utils/routerHelper.class";
import {Router} from "@angular/router";
@Component({
selector: 'entities-selection',
template: `
<!-- <select *ngIf="show" [(ngModel)]="selectedEntity" class="uk-select uk-width-auto portal-box uk-text-small" (ngModelChange)="entityChanged()" >
<option *ngIf="simpleView && (showResearchOutcomes + showDataProviders + showOrganizations + showProjects )>1 " value="all">All content</option>
<option *ngIf="showResearchOutcomes" value="result">Research outcomes</option>
<option *ngIf="showProjects" value="project">Projects</option>
<option *ngIf="showDataProviders" value="dataprovider">Content providers</option>
<option *ngIf="showOrganizations" value="organization">Organizations</option>
</select>-->
<!--<button *ngIf="!show && currentEntity" class="uk-select uk-width-auto portal-box uk-text-small">
<span *ngIf="currentEntity=='all'">All content</span>
<span *ngIf="currentEntity=='result'">Research outcomes</span>
<span *ngIf="currentEntity=='project'">Projects</span>
<span *ngIf="currentEntity=='dataprovider'">Content providers</span>
<span *ngIf="currentEntity=='organization'">Organizations</span>
</button>-->
<!---->
<span class="entitiesSelection portal-box uk-text-small " style="" >
<mat-select *ngIf="show && selectedEntity" [(value)]="selectedEntity"
(valueChange)="entityChanged()" [disableOptionCentering]="true" panelClass="entitiesSelectionPanel">
<mat-option
*ngIf="simpleView && (showResearchOutcomes + showDataProviders + showOrganizations + showProjects )>1 "
value="all">All content
</mat-option>
<mat-option *ngIf="showResearchOutcomes" value="result">Research outcomes</mat-option>
<mat-option *ngIf="showProjects" value="project">Projects</mat-option>
<mat-option *ngIf="showDataProviders" value="dataprovider">Content providers</mat-option>
<mat-option *ngIf="showOrganizations" value="organization">Organizations</mat-option>
</mat-select>
<mat-select *ngIf="!show && currentEntity" [(value)]="selectedEntity">
<mat-option [value]="selectedEntity">
<span *ngIf="currentEntity=='all'">All content</span>
<span *ngIf="currentEntity=='result'">Research outcomes</span>
<span *ngIf="currentEntity=='project'">Projects</span>
<span *ngIf="currentEntity=='dataprovider'">Content providers</span>
<span *ngIf="currentEntity=='organization'">Organizations</span>
</mat-option>
</mat-select>
</span>
`
})
export class EntitiesSelectionComponent {
showResearchOutcomes: boolean = false;
showProjects: boolean = false;
showDataProviders: boolean = false;
showOrganizations: boolean = false;
@Input() properties: EnvProperties;
@Input() customFilter: SearchCustomFilter = null;
@Input() @Output() selectedEntity = "Research Outcomes";
@Input() currentEntity = "Research Outcomes";
@Input() simpleView: boolean = true;
@Input() onChangeNavigate: boolean = true;
@Output() selectionChange = new EventEmitter();
show = false;
constructor(private _fb: FormBuilder, private config: ConfigurationService, private router: Router) {
}
ngOnInit() {
if (this.properties) {
this.config.getCommunityInformation(this.properties, (this.customFilter && this.customFilter.queryFieldName == "communitId") ? this.customFilter.valueId : this.properties.adminToolsCommunity).subscribe(data => {
var showEntity = {};
for (var i = 0; i < data['entities'].length; i++) {
showEntity["" + data['entities'][i]["pid"] + ""] = data['entities'][i]["isEnabled"];
}
this.showResearchOutcomes = showEntity["publication"] || showEntity["dataset"] || showEntity["software"] || showEntity["orp"];
this.showProjects = showEntity["project"];
this.showOrganizations = showEntity["organization"];
this.showDataProviders = showEntity["datasource"];
if (this.customFilter && this.customFilter.queryFieldName == "communityId") {
this.showProjects = false;
this.showOrganizations = false;
this.showDataProviders = false;
}
this.show = true;
});
}
this.selectedEntity = this.currentEntity;
this.selectionChange.emit({
entity: this.selectedEntity,
simpleUrl: this.getUrl(true),
advancedUrl: this.getUrl(false)
});
}
entityChanged() {
if (!this.simpleView) {
this.router.navigate([this.getUrl(false)]);
} else {
this.selectionChange.emit({
entity: this.selectedEntity,
simpleUrl: this.getUrl(true),
advancedUrl: this.getUrl(false)
});
}
}
getUrl(simpleView: boolean) {
let url = "";
if (this.selectedEntity == "all") {
url = (simpleView ? "/search/find/" : null);
} else if (this.selectedEntity == "result") {
url = (simpleView ? this.properties.searchLinkToResults : this.properties.searchLinkToAdvancedResults);
} else if (this.selectedEntity == "project") {
url = (simpleView ? this.properties.searchLinkToProjects : this.properties.searchLinkToAdvancedProjects);
} else if (this.selectedEntity == "dataprovider") {
url = (simpleView ? this.properties.searchLinkToDataProviders : this.properties.searchLinkToAdvancedDataProviders);
} else if (this.selectedEntity == "organization") {
url = (simpleView ? this.properties.searchLinkToOrganizations : this.properties.searchLinkToAdvancedOrganizations);
}
return url;
}
}