2021-05-19 13:40:29 +02:00
|
|
|
import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
|
|
|
|
import {ActivatedRoute, Router} from "@angular/router";
|
|
|
|
import {Subscriber} from 'rxjs';
|
|
|
|
|
|
|
|
import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes';
|
|
|
|
import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties';
|
|
|
|
import {ManageCommunityContentProvidersService} from '../../services/manageContentProviders.service';
|
2022-08-11 11:58:20 +02:00
|
|
|
import {SearchCommunityDataprovidersService} from '../../openaireLibrary/connect/contentProviders/searchDataproviders.service';
|
2021-05-19 13:40:29 +02:00
|
|
|
import {RouterHelper} from '../../openaireLibrary/utils/routerHelper.class';
|
2022-07-04 20:45:20 +02:00
|
|
|
import {ContentProvider, Criteria} from '../../openaireLibrary/utils/entities/contentProvider';
|
2021-05-19 13:40:29 +02:00
|
|
|
import {properties} from "../../../environments/environment";
|
|
|
|
import {SearchInputComponent} from "../../openaireLibrary/sharedComponents/search-input/search-input.component";
|
2022-09-23 16:14:20 +02:00
|
|
|
import {UntypedFormBuilder, UntypedFormGroup} from "@angular/forms";
|
2021-05-19 13:40:29 +02:00
|
|
|
import {CriteriaUtils} from "./criteria-utils";
|
2022-07-02 13:45:34 +02:00
|
|
|
import {CommunityInfo} from "../../openaireLibrary/connect/community/communityInfo";
|
|
|
|
import {NotificationHandler} from "../../openaireLibrary/utils/notification-handler";
|
|
|
|
import {AlertModal} from "../../openaireLibrary/utils/modal/alert";
|
2022-07-04 20:45:20 +02:00
|
|
|
import {OpenaireEntities} from "../../openaireLibrary/utils/properties/searchFields";
|
|
|
|
import {HelperFunctions} from "../../openaireLibrary/utils/HelperFunctions.class";
|
2022-08-11 11:58:20 +02:00
|
|
|
import {ClearCacheService} from "../../openaireLibrary/services/clear-cache.service";
|
2021-05-19 13:40:29 +02:00
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'remove-content-providers',
|
|
|
|
templateUrl: './remove-content-providers.component.html'
|
|
|
|
})
|
|
|
|
export class RemoveContentProvidersComponent implements OnInit {
|
|
|
|
public routerHelper: RouterHelper = new RouterHelper();
|
|
|
|
public contentProviderUrl = "https://" + ((properties.environment == "beta" || properties.environment == "development") ? "beta." : "") + "explore.openaire.eu" + properties.searchLinkToDataProvider;
|
2022-07-04 20:45:20 +02:00
|
|
|
public previewCommunityContentProviders: ContentProvider[] = [];
|
2021-05-19 13:40:29 +02:00
|
|
|
public errorCodes: ErrorCodes;
|
2022-07-04 20:45:20 +02:00
|
|
|
public openAIREEntities = OpenaireEntities;
|
2022-07-02 13:45:34 +02:00
|
|
|
@Input() public loading: boolean = true;
|
|
|
|
@Input() public community: CommunityInfo;
|
2022-07-04 20:45:20 +02:00
|
|
|
@Input() public communityContentProviders: ContentProvider[] = [];
|
2021-05-19 13:40:29 +02:00
|
|
|
@Output() communityContentProvidersChanged = new EventEmitter();
|
|
|
|
private properties: EnvProperties = properties;
|
|
|
|
private subscriptions: any[] = [];
|
|
|
|
private selectedCommunityContentProvider: any;
|
2022-07-02 13:45:34 +02:00
|
|
|
@ViewChild('deleteModal') deleteModal: AlertModal;
|
2021-05-19 13:40:29 +02:00
|
|
|
/** Criteria */
|
2023-03-10 16:15:26 +01:00
|
|
|
public criteriaUtils: CriteriaUtils = new CriteriaUtils();
|
2021-05-19 13:40:29 +02:00
|
|
|
/** Paging */
|
|
|
|
page: number = 1;
|
|
|
|
resultsPerPage: number = properties.resultsPerPage;
|
|
|
|
/** Search */
|
|
|
|
@ViewChild('searchInputComponent') searchInputComponent: SearchInputComponent;
|
2022-09-23 16:14:20 +02:00
|
|
|
filterForm: UntypedFormGroup;
|
2021-05-19 13:40:29 +02:00
|
|
|
private searchText: RegExp = new RegExp('');
|
|
|
|
public keyword: string = '';
|
2022-07-04 10:53:55 +02:00
|
|
|
@Output() addContentProviders: EventEmitter<void> = new EventEmitter();
|
2022-07-04 20:45:20 +02:00
|
|
|
@Output() editCriteria: EventEmitter<ContentProvider> = new EventEmitter<ContentProvider>();
|
2024-03-15 14:58:15 +01:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
constructor(private route: ActivatedRoute, private _router: Router,
|
2022-09-23 16:14:20 +02:00
|
|
|
private _fb: UntypedFormBuilder,
|
2021-05-19 13:40:29 +02:00
|
|
|
private _manageCommunityContentProvidersService: ManageCommunityContentProvidersService,
|
2022-08-11 11:58:20 +02:00
|
|
|
private _searchCommunityContentProvidersService: SearchCommunityDataprovidersService,
|
|
|
|
private _clearCacheService: ClearCacheService) {
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
ngOnInit() {
|
|
|
|
this.filterForm = this._fb.group({
|
|
|
|
keyword: [''],
|
|
|
|
});
|
|
|
|
this.subscriptions.push(this.filterForm.get('keyword').valueChanges.subscribe(value => {
|
|
|
|
this.searchText = new RegExp(value, 'i');
|
|
|
|
this.page = 1;
|
|
|
|
this.applyFilters();
|
|
|
|
}));
|
2022-07-02 13:45:34 +02:00
|
|
|
this.contentProviderUrl = "https://"
|
|
|
|
+ ((this.properties.environment == "beta" || this.properties.environment == "development") ? "beta." : "")
|
|
|
|
+ this.community.communityId + ".openaire.eu" + this.properties.searchLinkToDataProvider;
|
|
|
|
this.getCommunityContentProviders();
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
public ngOnDestroy() {
|
|
|
|
this.subscriptions.forEach(sub => {
|
|
|
|
if (sub instanceof Subscriber) {
|
|
|
|
sub.unsubscribe();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2022-07-02 13:45:34 +02:00
|
|
|
public confirmedDeleteContentProvider() {
|
2023-07-14 10:43:27 +02:00
|
|
|
console.log(this.selectedCommunityContentProvider)
|
|
|
|
this.subscriptions.push(this._manageCommunityContentProvidersService.removeContentProvider(this.properties, this.community.communityId, this.selectedCommunityContentProvider.openaireId).subscribe(
|
2022-07-02 13:45:34 +02:00
|
|
|
() => {
|
|
|
|
let index = this.communityContentProviders.indexOf(this.selectedCommunityContentProvider);
|
|
|
|
this.communityContentProviders.splice(index, 1);
|
|
|
|
this.applyFilters();
|
2022-08-11 11:58:20 +02:00
|
|
|
this._clearCacheService.purgeBrowserCache(this.openAIREEntities.DATASOURCE+" removed", this.community.communityId);
|
2022-07-04 20:45:20 +02:00
|
|
|
this.handleSuccess(this.openAIREEntities.DATASOURCE + ' successfully removed!')
|
2022-07-02 13:45:34 +02:00
|
|
|
this.communityContentProvidersChanged.emit({
|
|
|
|
value: this.communityContentProviders,
|
|
|
|
});
|
|
|
|
},
|
|
|
|
err => {
|
|
|
|
this.handleError('An error has been occurred. Try again later!');
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
));
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
public removeContentProvider(communityContentProvider: any) {
|
2022-07-02 13:45:34 +02:00
|
|
|
this.selectedCommunityContentProvider = communityContentProvider;
|
2022-07-04 20:45:20 +02:00
|
|
|
this.deleteModal.alertTitle = "Remove " + this.openAIREEntities.DATASOURCE;
|
2022-07-02 13:45:34 +02:00
|
|
|
let title = "";
|
|
|
|
if (communityContentProvider.name) {
|
|
|
|
title = communityContentProvider.name;
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
if (communityContentProvider.name && communityContentProvider.acronym) {
|
|
|
|
title += " (";
|
|
|
|
}
|
|
|
|
if (communityContentProvider.acronym) {
|
|
|
|
title += communityContentProvider.acronym;
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
if (communityContentProvider.name && communityContentProvider.acronym) {
|
|
|
|
title += ")";
|
|
|
|
}
|
2022-07-04 20:45:20 +02:00
|
|
|
this.deleteModal.message = this.openAIREEntities.DATASOURCE;
|
2022-07-02 13:45:34 +02:00
|
|
|
if (title) {
|
|
|
|
this.deleteModal.message += " '" + title + "' ";
|
|
|
|
}
|
|
|
|
this.deleteModal.message += "will be removed from your community. Are you sure?";
|
|
|
|
this.deleteModal.okButtonText = "Yes";
|
|
|
|
this.deleteModal.cancelButtonText = "No";
|
|
|
|
this.deleteModal.open();
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
|
|
|
public getCommunityContentProviders() {
|
|
|
|
this.communityContentProviders = [];
|
2022-07-04 20:45:20 +02:00
|
|
|
this.loading = true;
|
2022-07-02 13:45:34 +02:00
|
|
|
this.subscriptions.push(this._searchCommunityContentProvidersService.searchDataproviders(this.properties, this.community.communityId).subscribe(
|
|
|
|
data => {
|
|
|
|
this.communityContentProviders = data;
|
|
|
|
this.previewCommunityContentProviders = this.communityContentProviders;
|
|
|
|
this.communityContentProvidersChanged.emit({
|
|
|
|
value: this.communityContentProviders,
|
|
|
|
});
|
|
|
|
this.loading = false;
|
|
|
|
},
|
|
|
|
err => {
|
|
|
|
this.handleError('An error has been occurred. Try again later!', err)
|
|
|
|
this.loading = false;
|
|
|
|
}
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
public updatePage($event) {
|
2022-07-04 20:45:20 +02:00
|
|
|
HelperFunctions.scroll();
|
2021-05-19 13:40:29 +02:00
|
|
|
this.page = $event.value;
|
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2022-07-04 20:45:20 +02:00
|
|
|
get currentPage(): ContentProvider[] {
|
2022-07-02 13:45:34 +02:00
|
|
|
return this.previewCommunityContentProviders.slice((this.page - 1)*this.resultsPerPage, this.page*this.resultsPerPage);
|
|
|
|
}
|
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
addNew() {
|
2022-07-04 10:53:55 +02:00
|
|
|
this.addContentProviders.emit();
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
public applyFilters() {
|
|
|
|
this.previewCommunityContentProviders = this.communityContentProviders.filter(contentProvider => {
|
|
|
|
return this.filterCommunityContentProviderByKeyword(contentProvider);
|
|
|
|
});
|
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
public filterCommunityContentProviderByKeyword(contentProvider): boolean {
|
2022-07-02 13:45:34 +02:00
|
|
|
return this.searchText.toString() === ''
|
2021-05-19 13:40:29 +02:00
|
|
|
|| (contentProvider.name + " " + contentProvider.officialname).match(this.searchText) != null;
|
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
|
|
|
handleSuccess(message) {
|
|
|
|
NotificationHandler.rise(message);
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
|
|
|
handleError(message: string, error = null) {
|
|
|
|
if (error) {
|
|
|
|
console.error(error);
|
|
|
|
}
|
|
|
|
NotificationHandler.rise(message, 'danger');
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2022-07-02 13:45:34 +02:00
|
|
|
|
2022-07-04 20:45:20 +02:00
|
|
|
openCriteria(contentProvider: ContentProvider) {
|
|
|
|
this.editCriteria.emit(contentProvider);
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|
2024-03-15 14:58:15 +01:00
|
|
|
|
2021-05-19 13:40:29 +02:00
|
|
|
}
|