connect-admin/src/app/pages/zenodo-communities/add-zenodo-communities.comp...

202 lines
8.1 KiB
TypeScript

import {Component, OnInit, Input} from '@angular/core';
import {SimpleChanges, OnChanges} from '@angular/core';
import {FormGroup, FormArray, FormBuilder, Validators} from '@angular/forms';
import {ActivatedRoute, Router} from '@angular/router';
import {HelpContentService} from '../../services/help-content.service';
import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties';
import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes';
import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class';
import {ZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {ZenodoCommunityInfo} from '../../openaireLibrary/connect/zenodoCommunities/zenodoCommunityInfo';
import {Session} from '../../openaireLibrary/login/utils/helper.class';
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.class';
import{ManageZenodoCommunitiesService} from '../../services/manageZenodoCommunities.service';
@Component({
selector: 'add-zenodo-communities',
templateUrl: './add-zenodo-communities.component.html',
})
export class AddZenodoCommunitiesComponent implements OnInit {
public zenodoCommunities = null; // zenodo search API results
public totalZenodoCommunities = null;
@Input() properties:EnvProperties = null;
@Input() communityId = null;
public zenodoCommunitySearchUtils:SearchUtilsClass = new SearchUtilsClass();
private errorCodes: ErrorCodes;
public rowsOnPage = 10;
@Input() masterCommunity = null;
@Input() selectedCommunities = [];
newlySelectedCommunities = [];
constructor (private route: ActivatedRoute,
private _router: Router,
public _fb: FormBuilder,
private _helpContentService: HelpContentService,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _manageZenodoCommunitiesService: ManageZenodoCommunitiesService) {
this.errorCodes = new ErrorCodes();
this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING;
}
ngOnInit() {
this.zenodoCommunitySearchUtils.keyword = "";
if(!Session.isLoggedIn()){
console.info(this._router.url);
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
} else {
this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING;
this.newlySelectedCommunities = [];
if (this.communityId != null && this.communityId != '') {
this._zenodoCommunitieService.getZenodoCommunities(this.properties, this.properties.zenodoCommunities+"?page="+this.zenodoCommunitySearchUtils.page+"&size="+this.rowsOnPage).subscribe(
result => {
this.zenodoCommunities = result[0];
this.totalZenodoCommunities = result[1];
this.zenodoCommunitySearchUtils.totalResults = result[1];
this.zenodoCommunitySearchUtils.page = 1;
this.zenodoCommunitySearchUtils.size =this.rowsOnPage;
if(this.totalZenodoCommunities == 0){
this.zenodoCommunitySearchUtils.status = this.errorCodes.NONE;
}else{
this.zenodoCommunitySearchUtils.status = this.errorCodes.DONE;
}
},
error => {
this.zenodoCommunitySearchUtils.status = this.errorCodes.ERROR;
}
);
}
}
}
public goTo(page:number = 1) {
if(!Session.isLoggedIn()){
console.info(this._router.url);
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
} else {
this.zenodoCommunitySearchUtils.page=page;
this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING;
this._zenodoCommunitieService.getZenodoCommunities(this.properties,
this.properties.zenodoCommunities+"?page="+this.zenodoCommunitySearchUtils.page
+"&size="+this.rowsOnPage
+((this.zenodoCommunitySearchUtils.keyword)?("&q="+this.zenodoCommunitySearchUtils.keyword):"")
).subscribe(
result => {
this.zenodoCommunities = result[0];
this.totalZenodoCommunities = result[1];
this.zenodoCommunitySearchUtils.totalResults = result[1];
this.zenodoCommunitySearchUtils.size =this.rowsOnPage;
if(this.totalZenodoCommunities == 0){
this.zenodoCommunitySearchUtils.status = this.errorCodes.NONE;
}else{
this.zenodoCommunitySearchUtils.status = this.errorCodes.DONE;
}
},
error => {
this.zenodoCommunitySearchUtils.status = this.errorCodes.ERROR;
}
);
}
}
totalPages(): number {
let totalPages:any = this.zenodoCommunitySearchUtils.totalResults/(this.rowsOnPage);
if(!(Number.isInteger(totalPages))) {
totalPages = (parseInt(totalPages, 10) + 1);
}
return totalPages;
}
public addCommunity(community) {
if(!Session.isLoggedIn()){
console.info(this._router.url);
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
} else {
this._manageZenodoCommunitiesService.addZCommunity(this.properties, this.communityId, community.id ).subscribe(
data => {
console.info("data ADD");
console.info(data);
// this.undo[project.id] = data.id;
community["openaireId"]=data.id;
this.selectedCommunities.push(community);
this.newlySelectedCommunities.push(community)
},
err => {
console.info("error ADD");
console.log(err.status);
},
() => {
console.info("completed ADD");
}
)
}
}
public removeCommunity( comm) {
if(!Session.isLoggedIn()){
console.info(this._router.url);
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
} else {
var openaireId = this.getOpenaireId(comm);
this._manageZenodoCommunitiesService.removeZCommunity(this.properties, this.communityId,openaireId, ).subscribe(
data => {
var pos = -1;
for(var i=0; i< this.selectedCommunities.length;i++) {
console.info(this.selectedCommunities[i].id+ " "+ this.selectedCommunities[i].openaireId+" "+ comm.id);
if( this.selectedCommunities[i].id == comm.id) {
pos= i;
break;
}
}
if(pos != -1){
this.selectedCommunities.splice(pos, 1);
}
for(var i=0; i< this.newlySelectedCommunities.length;i++) {
if( this.newlySelectedCommunities[i].id == comm.id) {
pos= i;
break;
}
}
if(pos != -1){
this.newlySelectedCommunities.splice(pos, 1);
}
},
err => {
console.info("error remove");
console.log(err.status);
},
() => {
console.info("completed remove");
}
)
}
}
public inThelist(community: any, list): any {
for(let com of list) {
if(com.id == community.id) {
return true;
}
}
return false;
}
public getOpenaireId(community: any): string {
for(let com of this.selectedCommunities) {
if(com.id == community.id) {
return com.openaireId;
}
}
return null;
}
}