import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core'; import {UntypedFormBuilder, UntypedFormControl} from '@angular/forms'; import {ActivatedRoute, Router} from '@angular/router'; import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; import {properties} from "../../../environments/environment"; import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes'; import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; import {ManageZenodoCommunitiesService} from '../../services/manageZenodoCommunities.service'; import {SearchInputComponent} from '../../openaireLibrary/sharedComponents/search-input/search-input.component'; import {Subscription} from 'rxjs'; import {CommunityInfo} from "../../openaireLibrary/connect/community/communityInfo"; import {HelperFunctions} from "../../openaireLibrary/utils/HelperFunctions.class"; import {NotificationHandler} from "../../openaireLibrary/utils/notification-handler"; @Component({ selector: 'manage-zenodo-communities', templateUrl: './manage-zenodo-communities.component.html' }) export class ManageZenodoCommunitiesComponent implements OnInit, OnDestroy { properties: EnvProperties = properties; @Input() community: CommunityInfo = null; @Input() public loading: boolean = true; @Input() searchUtils: SearchUtilsClass = null; errorCodes: ErrorCodes; public rowsOnPage = 10; @Input() masterCommunity; @Input() selectedCommunities; previewCommunities = []; @ViewChild('AlertModalDeleteCommunity') alertModalDeleteCommunity; selectedToDelete = null; @Output() addZenodoCommunity: EventEmitter = new EventEmitter(); @Output() zenodoCommunitiesChanged = new EventEmitter(); page = 1; size = 10; @ViewChild('searchInputComponent') searchInputComponent: SearchInputComponent; public filterForm: UntypedFormControl; private subscriptions: any[] = []; constructor(private route: ActivatedRoute, private _router: Router, public _fb: UntypedFormBuilder, private cdr: ChangeDetectorRef, private _manageZenodoCommunitiesService: ManageZenodoCommunitiesService) { this.errorCodes = new ErrorCodes(); } ngOnInit() { this.init(); } ngOnDestroy() { this.subscriptions.forEach(subscription => { if (subscription instanceof Subscription) { subscription.unsubscribe(); } }); } private init() { console.log(this.selectedCommunities.length) this.filterForm = this._fb.control(''); this.filterPreviewCommunities(""); this.subscriptions.push(this.filterForm.valueChanges.subscribe(value => { this.page = 1; this.filterPreviewCommunities(value); })); this.searchUtils.keyword = ""; this.searchUtils.totalResults = this.selectedCommunities.length; console.log(this.selectedCommunities.length, this.previewCommunities.length) } public filterPreviewCommunities(value: string) { this.previewCommunities = this.selectedCommunities.filter(community => { return !value || community.title.toLowerCase().indexOf(value.toLowerCase()) != -1 }); console.log("filter", this.previewCommunities.length) if (this.previewCommunities.slice((this.page - 1) * this.rowsOnPage, this.page * this.rowsOnPage).length == 0) { this.page = 1; } console.log("filter - slice", this.previewCommunities.length) this.cdr.detectChanges(); } public confirmedDeleteCommunity(data: any) { this.subscriptions.push(this._manageZenodoCommunitiesService.removeZCommunity(this.properties, this.community.communityId, this.selectedToDelete.id).subscribe( data => { var pos = -1; for (var i = 0; i < this.selectedCommunities.length; i++) { if (this.selectedCommunities[i].id == this.selectedToDelete.id) { pos = i; break; } } if (pos != -1) { this.selectedCommunities.splice(pos, 1); this.searchUtils.totalResults = this.selectedCommunities.length; } this.searchUtils.totalResults = this.selectedCommunities.length; this.filterPreviewCommunities(this.filterForm.value); NotificationHandler.rise('Community has been successfully removed!') this.zenodoCommunitiesChanged.emit({ value: this.selectedCommunities, }); }, err => { this.handleError('An error has been occurred. Try again later!'); console.log(err.status); } )); } public removeCommunity(comm) { this.selectedToDelete = comm; this.alertModalDeleteCommunity.cancelButton = true; this.alertModalDeleteCommunity.okButton = true; this.alertModalDeleteCommunity.alertTitle = "Remove zenodo community"; let title = ""; if (comm.title) { title = comm.title; } this.alertModalDeleteCommunity.message = "Zenodo community"; if (title) { this.alertModalDeleteCommunity.message += " '" + title + "' "; } this.alertModalDeleteCommunity.message += "will be removed from your community. Are you sure?"; this.alertModalDeleteCommunity.okButtonText = "Yes"; this.alertModalDeleteCommunity.open(); } totalPages(): number { let totalPages: any = this.searchUtils.totalResults / (this.rowsOnPage); if (!(Number.isInteger(totalPages))) { totalPages = (parseInt(totalPages, 10) + 1); } return totalPages; } public updatePage($event) { HelperFunctions.scroll(); this.page = $event.value; } addNew() { this.addZenodoCommunity.emit(); } handleError(message: string) { NotificationHandler.rise(message, 'danger'); } }