[Connect Admin | Library | new-theme]: Redesign of remove/add projects and zenodo communities pages according to the new mocks.

1. searchProjects.service.ts: Added "params" parameter in "getFunders()" method.
2. resultsAndPagesNum.component.ts: Do not show number of results and pages when no results.
3. manage-communities.module.ts: Remove "group" and "lock" icons from registerIcons call.
4. add-projects.component & communityProjects.module.ts & manage-projects.component.ts & remove-projects.component: Redesign of remove/add projects pages according to the new mocks.
5. add-zenodo-communities.component & manage-zenodo-communities.component & preview-z-community.component.ts & zenodo-communities.component.ts & zenodo-communities.module.ts: Redesign of remove/add zenodo communities pages according to the new mocks.
This commit is contained in:
Konstantina Galouni 2022-07-05 01:31:56 +03:00
parent 7c9d0936b3
commit 4c08b4dad3
14 changed files with 867 additions and 893 deletions

View File

@ -24,6 +24,6 @@ import {SearchInputModule} from '../../openaireLibrary/sharedComponents/search-i
})
export class ManageCommunitiesModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([group, lock, earth]);
this.iconsService.registerIcons([earth]);
}
}

View File

@ -1,110 +1,152 @@
<div [class]="'uk-width-1-1 uk-flex uk-flex-middle uk-grid uk-margin-medium-bottom ' + (allOptions.length > 0 ? '' : 'uk-flex-right@m')" uk-grid>
<div *ngIf="allOptions?.length > 0"
class="uk-width-1-2@m uk-width-1-1">
<div class="uk-grid uk-flex uk-flex-middle uk-flex-wrap uk-flex-center uk-flex-right@m uk-width-1-1">
<span class="">Filter by: </span>
<div class="uk-width-expand uk-padding-remove uk-margin-small-left" dashboard-input
[formInput]="filterForm.get('funder')"
placeholder="Search by funder"
type="autocomplete" [options]="allOptions" [showOptionsOnEmpty]="false">
<ng-template #selected_filters_pills>
<h1>
<div class="uk-width-1-1" uk-slider="finite: true">
<div [class.uk-invisible]="list.children.length === 0" class="uk-position-relative">
<div class="uk-slider-container" style="height: 40px">
<ul #list class="uk-slider-items uk-grid uk-grid-small uk-margin-small-right uk-flex-nowrap">
<ng-container *ngIf="funders && funders.countSelectedValues > 0">
<ng-container *ngFor="let value of getSelectedValues(funders); let i = index; let end = last; ">
<li>
<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="funders.type && funders.type == 'boolean' else noboolean">{{funders.title}}:
{{value.name=='true'?'Yes':'No'}}
</span>
<ng-template #noboolean>
{{value.name}}
</ng-template></span>
<button class="uk-close uk-icon" [class.uk-disabled]="disabled" [disabled]="disabled" (click)="removeFilter(value, funders)">
<icon name="close" flex="true" ratio="0.7"></icon>
</button>
</span>
</li>
</ng-container>
</ng-container>
</ul>
</div>
<div class="">
<a class="uk-position-center-left blur-background" uk-slider-item="previous"><span uk-icon="chevron-left"></span></a>
<a class="uk-position-center-right blur-background" uk-slider-item="next"><span uk-icon="chevron-right"></span></a>
</div>
</div>
</div>
</h1>
</ng-template>
<ng-template #filters_column>
<!-- [class.filterLoading]="disabled"-->
<div >
<div class="uk-flex uk-flex-middle">
<h4 class="uk-margin-right uk-margin-remove-bottom">Filters</h4>
<a *ngIf="selectedFunderId" (click)="clearFilters()"
class="uk-text-small" [class.uk-disabled]="disabled" [class.uk-link-muted]="disabled">
Clear All
</a>
</div>
<!-- <div *ngIf="openaireSearchUtils.refineStatus == errorCodes.LOADING"-->
<!-- class="uk-margin-top" role="alert">-->
<!-- <loading></loading>-->
<!-- </div>-->
<div *ngIf="openaireSearchUtils.refineStatus != errorCodes.LOADING && openaireSearchUtils.refineStatus != errorCodes.DONE && openaireProjects.length > 0"
class="uk-margin-top uk-text-meta">
<span *ngIf="openaireSearchUtils.refineStatus == errorCodes.NONE">No filters available</span>
<span *ngIf="openaireSearchUtils.refineStatus != errorCodes.NONE" class="uk-text-warning">Filters temporarily unavailable. Please try again later.</span>
</div>
<ul class="uk-list uk-list-xlarge">
<li *ngIf="funders && funders.values && funders.values.length > 0">
<search-filter [showMoreInline]="true"
[filter]="funders" [showResultCount]="true"
[actionRoute]="false" (onFilterChange)="funderChanged(funders)"
[isDisabled]="disabled">
</search-filter>
</li>
</ul>
</div>
<div class="uk-flex uk-flex-wrap uk-flex-center uk-flex-right@m uk-width-1-1 uk-width-1-2@m">
<div class="uk-width-1-1 uk-width-expand@m">
<div #searchInputComponent search-input [control]="filterForm.controls.keyword" [showSearch]="false"
placeholder="Search Projects"
[selected]="openaireSearchUtils.keyword" (closeEmitter)="onSearchClose()" (resetEmitter)="resetInput()"
[bordered]="true" colorClass="uk-text-secondary"></div>
</ng-template>
<div class="uk-section uk-flex uk-flex-center uk-flex uk-flex-middle">
<div class="uk-width-auto uk-margin-right">
<a uk-icon="icon: info; ratio: 1.3"></a>
<div *ngIf="community" class="uk-dropdown uk-padding-small uk-width-medium" uk-dropdown="mode: hover">
If you cannot find a funder that is relevant for your community, please contact us
(<a
[href]="'mailto:' + properties.feedbackmailForMissingEntities +'?Subject=[OpenAIRE Connect - '+ community.shortTitle + '] report missing Funder' + '&body=' + body"
target="_top">{{properties.feedbackmailForMissingEntities}}</a>)
and we will try to get the funder on board!
</div>
</div>
<div search-input class="uk-width-xlarge@l uk-width-large" [searchControl]="filterForm.get('keyword')" searchInputClass="outer"
[placeholder]="'Search '+openaireEntities.PROJECTS" [disabled]="loading"></div>
</div>
<div id="manage-projects">
<div *ngIf="openaireSearchUtils.status == errorCodes.LOADING" class="uk-position-large-top">
<loading></loading>
</div>
<div *ngIf="openaireSearchUtils.totalResults == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div>
<div *ngIf="openaireSearchUtils.status == errorCodes.NONE">No OpenAIRE projects available</div>
<div *ngIf="openaireSearchUtils.status == errorCodes.NONE" class="uk-margin-top">
If you wish to suggest a new funder to include or report a missing project, please contact us via
<a target="_top"
[href]="'mailto:' + properties.feedbackmailForMissingEntities +'?Subject=[OpenAIRE Connect - '+ community + '] report missing project' + '&body=' + body">
feedback@openaire.eu</a>.
</div>
<div *ngIf="openaireSearchUtils.status == errorCodes.ERROR">An Error Occurred. No OpenAIRE projects found</div>
<div *ngIf="openaireSearchUtils.status == errorCodes.NOT_AVAILABLE">Service temporarily unavailable. Please try again later.</div>
<div *ngIf="openaireSearchUtils.status == errorCodes.NOT_FOUND">No OpenAIRE projects found</div>
<!-- <div *ngIf="openaireSearchUtils.status == errorCodes.OUT_OF_BOUND">Requested page out of bounds</div>-->
<div class="uk-section uk-section-small uk-position-relative">
<div class="uk-grid" uk-grid>
<div class="uk-width-1-4@m search-filters uk-visible@m">
<ng-container *ngTemplateOutlet="filters_column; context: {}"></ng-container>
</div>
</div>
<!-- <errorMessages [status]="[openaireSearchUtils.status]" [type]="'OpenAIRE projects'"></errorMessages>-->
<!-- <div *ngIf="openaireSearchUtils.status == errorCodes.NONE" class="uk-alert uk-alert-primary">-->
<!-- <span class="uk-margin-small-right uk-icon" uk-icon="warning"></span>-->
<!-- If you wish to suggest a new funder to include or report a missing project, please contact us via-->
<!-- <a-->
<!-- [href]="'mailto:' + properties.feedbackmailForMissingEntities +'?Subject=[OpenAIRE Connect - '+ community + '] report missing project' + '&body=' + body"-->
<!-- target="_top">feedback@openaire.eu</a>.-->
<!-- </div>-->
<ng-container *ngIf="openaireSearchUtils.totalResults > 0">
<no-load-paging [type]="'Projects'"
[page]="openaireSearchUtils.page" [pageSize]="resultsPerPage" (pageChange)="goTo($event.value)"
[totalResults]="openaireSearchUtils.totalResults">
</no-load-paging>
<ul class="uk-list search-results uk-margin-medium-top uk-margin-medium-bottom">
<li *ngFor="let result of openaireProjects" class="uk-animation-fade">
<div class="uk-card uk-card-default uk-card-hover uk-text-small uk-margin-bottom">
<div class="uk-grid uk-grid-divider uk-padding-small" uk-grid>
<div class="uk-width-expand@m uk-width-1-1">
<result-preview [properties]="properties" [showOrganizations]="true"
[showSubjects]="true" [result]="getResultPreview(result)"
[externalUrl]="projectUrl">
</result-preview>
</div>
<div class="uk-width-auto@m uk-width-1-1">
<div class="uk-flex uk-flex-middle uk-flex-center uk-flex-column uk-height-1-1">
<div class="uk-padding-small uk-padding-remove-horizontal">
<div [class.hide-element]="!getCommunityProject(result)">
<a (click)="removeProject(result)" class="uk-button action uk-flex uk-flex-middle">
<icon name="remove_circle_outline"></icon>
<span class="uk-margin-small-left">Remove project</span>
</a>
<div class="uk-width-expand@m uk-with-1-1@s">
<div *ngIf="(selectedFunderId && openaireSearchUtils.status !== errorCodes.LOADING)">
<ng-container *ngTemplateOutlet="selected_filters_pills;"></ng-container>
</div>
<div>
<div *ngIf="openaireSearchUtils.status == errorCodes.LOADING" class="uk-position-center">
<loading></loading>
</div>
<div *ngIf="openaireSearchUtils.status !== errorCodes.LOADING">
<div *ngIf="openaireSearchUtils.totalResults == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div>No {{openaireEntities.PROJECTS | lowercase}} found</div>
</div>
<ng-container *ngIf="openaireSearchUtils.totalResults > 0">
<no-load-paging [type]="openaireEntities.PROJECTS"
[page]="openaireSearchUtils.page" [pageSize]="resultsPerPage" (pageChange)="goTo($event.value, false)"
[totalResults]="openaireSearchUtils.totalResults">
</no-load-paging>
<div class="uk-grid uk-child-width-1-1 uk-margin-medium-top uk-margin-bottom" uk-grid>
<div *ngFor="let result of openaireProjects">
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<result-preview [properties]="properties" [showOrganizations]="true"
[showSubjects]="true" [result]="getResultPreview(result)"
[externalUrl]="projectUrl">
</result-preview>
</div>
<div [class.hide-element]="getCommunityProject(result)">
<a (click)="addProject(result)" class="uk-button action uk-flex uk-flex-middle"
uk-tooltip="title:<div class='uk-padding-small'><div class='uk-margin-bottom uk-text-bold'>Add new project </div><div>Newly added projects will be linked to your community on the next run of our algorithms.</div></div>">
<div class="uk-text-success">
<icon name="add"></icon>
<div class="uk-card-footer uk-padding-remove-vertical">
<div class="uk-grid uk-grid-small uk-flex-nowrap uk-grid-divider uk-flex-right" uk-grid>
<div *ngIf="!getCommunityProject(result)">
<div class="uk-padding-small uk-padding-remove-horizontal">
<a (click)="addProject(result)" class="uk-button uk-button-link uk-flex uk-flex-middle">
<icon name="add" [flex]="true"></icon>
<span class="uk-margin-small-left">
Add
</span>
</a>
</div>
</div>
<span class="uk-margin-small-left">Add project</span>
</a>
<div *ngIf="getCommunityProject(result)">
<div class="uk-padding-small uk-padding-remove-horizontal">
<a (click)="removeProject(result)"
class="uk-button uk-button-link uk-flex uk-flex-middle">
<icon name="remove" [flex]="true"></icon>
<span class="uk-margin-small-left">Remove</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-margin-small-top">
<no-load-paging [type]="openaireEntities.PROJECTS"
[page]="openaireSearchUtils.page" [pageSize]="resultsPerPage" (pageChange)="goTo($event.value, false)"
[totalResults]="openaireSearchUtils.totalResults">
</no-load-paging>
</div>
</ng-container>
</div>
</li>
</ul>
</div>
<!-- <div [class]="openaireSearchUtils.page > pagingLimit ? 'search-results' : ''"-->
<!-- *ngIf="(openaireSearchUtils.page >= pagingLimit) && (openaireSearchUtils.totalResults > resultsPerPage*pagingLimit)">-->
<!-- <div class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">-->
<!-- For more results please try a new, more specific query-->
<!-- </div>-->
<!-- </div>-->
<no-load-paging [type]="'Projects'"
[page]="openaireSearchUtils.page" [pageSize]="resultsPerPage" (pageChange)="goTo($event.value)"
[totalResults]="openaireSearchUtils.totalResults">
</no-load-paging>
</ng-container>
</div>
</div>
</div>
</div>

View File

@ -9,15 +9,16 @@ import {RouterHelper} from '../../openaireLibrary/utils/routerHelper.class';
import {StringUtils} from '../../openaireLibrary/utils/string-utils.class';
import {ManageCommunityProjectsService} from '../../services/manageProjects.service';
import {Session} from '../../openaireLibrary/login/utils/helper.class';
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.class';
import {properties} from "../../../environments/environment";
import {Subscriber} from "rxjs";
import {FormBuilder, FormGroup} from "@angular/forms";
import {Option} from "../../openaireLibrary/sharedComponents/input/input.component";
import {debounceTime, distinctUntilChanged} from "rxjs/operators";
import {ResultPreview} from "../../openaireLibrary/utils/result-preview/result-preview";
import {SearchInputComponent} from "../../openaireLibrary/sharedComponents/search-input/search-input.component";
import {CommunityInfo} from "../../openaireLibrary/connect/community/communityInfo";
import {OpenaireEntities} from "../../openaireLibrary/utils/properties/searchFields";
import {Filter, Value} from "../../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class";
import {HelperFunctions} from "../../openaireLibrary/utils/HelperFunctions.class";
declare var UIkit;
@ -30,7 +31,7 @@ export class AddProjectsComponent implements OnInit {
private subscriptions: any[] = [];
public subResults: any;
private community: string = '';
@Input() community: CommunityInfo = null;
public routerHelper: RouterHelper = new RouterHelper();
public properties: EnvProperties = properties;
@ -46,35 +47,30 @@ export class AddProjectsComponent implements OnInit {
public selectedFunderId: string = "";
filterForm: FormGroup;
allOptions: Option[] = [];
funders: Filter = null;
@ViewChild('searchInputComponent') searchInputComponent: SearchInputComponent;
private projectUrl: string = "https://" + ((properties.environment == "beta" || properties.environment == "development") ? "beta." : "") + "explore.openaire.eu" + properties.searchLinkToProject;
public body: string = "Send from page";
@Output() toggleView: EventEmitter<any> = new EventEmitter();
openaireEntities = OpenaireEntities;
constructor(private route: ActivatedRoute, private _router: Router, private _searchProjectsService: SearchProjectsService,
private _manageCommunityProjectsService: ManageCommunityProjectsService,
private _fb: FormBuilder) {
this.errorCodes = new ErrorCodes();
this.openaireSearchUtils.status = this.errorCodes.LOADING;
this.openaireSearchUtils.refineStatus = this.errorCodes.LOADING;
}
ngOnInit() {
this.subscriptions.push(this.route.params.subscribe(params => {
this.openaireSearchUtils.status = this.errorCodes.LOADING;
this.openaireSearchUtils.status = this.errorCodes.LOADING;
this.openaireSearchUtils.refineStatus = this.errorCodes.LOADING;
this.getFunders();
this._getOpenaireProjects("", 1, this.resultsPerPage);
this.community = params['community'];
// this.projectUrl = "https://" + ((this.properties.environment == "beta" || this.properties.environment == "development") ? "beta." : "")
// + this.community + ".openaire.eu" + this.properties.searchLinkToProject;
this.getFunders();
this._getOpenaireProjects("", 1, this.resultsPerPage);
this.body = "[Please write your message here]";
this.body = StringUtils.URIEncode(this.body);
}));
this.body = "[Please write your message here]";
this.body = StringUtils.URIEncode(this.body);
this.openaireSearchUtils.keyword = "";
@ -88,19 +84,6 @@ export class AddProjectsComponent implements OnInit {
.subscribe(value => {
this.keywordChanged(value);
}));
this.subscriptions.push(this.filterForm.get('funder').valueChanges
.pipe(debounceTime(1000), distinctUntilChanged())
.subscribe(value => {
// console.log("value: ",value);
if (value == null) {
// console.log("will be called funder changed: null");
this.funderChanged("", "");
} else if (value && value.id != undefined && value.id != this.selectedFunderId) {
// console.log("will be called funder changed: name="+value.label+", id="+value.id);
this.funderChanged(value.id, value.label);
}
}));
}
public ngOnDestroy() {
@ -115,65 +98,55 @@ export class AddProjectsComponent implements OnInit {
}
}
get loading() {
return this.openaireSearchUtils.status == this.errorCodes.LOADING
}
get disabled() {
return this.openaireSearchUtils.status == this.errorCodes.LOADING || this.openaireSearchUtils.refineStatus == this.errorCodes.LOADING;
}
public addProject(project: SearchResult) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
this.subscriptions.push(this._manageCommunityProjectsService.addProject(this.properties, this.community, project).subscribe(
data => {
this.communityProjects.push(data);
UIkit.notification('Project successfully added!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.communityProjectsChanged.emit({
value: this.communityProjects,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.error(err.status);
}
));
}
this.subscriptions.push(this._manageCommunityProjectsService.addProject(this.properties, this.community.communityId, project).subscribe(
data => {
this.communityProjects.push(data);
UIkit.notification('Project successfully added!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.communityProjectsChanged.emit({
value: this.communityProjects,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.error(err.status);
}
));
}
public removeProject(project: any) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
let communityProject = this.getCommunityProject(project);
let projectId: string = communityProject['id'];
this.subscriptions.push(this._manageCommunityProjectsService.removeProject(this.properties, this.community, projectId).subscribe(
data => {
let index = this.communityProjects.indexOf(communityProject);
this.communityProjects.splice(index, 1);
UIkit.notification('Project successfully removed!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.communityProjectsChanged.emit({
value: this.communityProjects,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.error(err);
}
));
}
let communityProject = this.getCommunityProject(project);
let projectId: string = communityProject['id'];
this.subscriptions.push(this._manageCommunityProjectsService.removeProject(this.properties, this.community.communityId, projectId).subscribe(
data => {
let index = this.communityProjects.indexOf(communityProject);
this.communityProjects.splice(index, 1);
UIkit.notification('Project successfully removed!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.communityProjectsChanged.emit({
value: this.communityProjects,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.error(err);
}
));
}
public getCommunityProject(project: any): string {
@ -189,29 +162,27 @@ export class AddProjectsComponent implements OnInit {
}
getFunders() {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
this.subscriptions.push(this._searchProjectsService.getFunders(this.properties).subscribe(
data => {
let funders = data[1];
this.allOptions = [];
let i;
for (i = 0; i < funders.length; i++) {
let funder = funders[i];
if (funder && funder['id']) {
this.allOptions.push({label: funder['name'], value: {id: funder['id'], label: funder['name']}});
}
this.openaireSearchUtils.refineStatus = this.errorCodes.LOADING;
this.subscriptions.push(this._searchProjectsService.getFunders(this.queryParameters, this.properties).subscribe(
data => {
this.funders = data[1][0];
this.funders.values.map((value) => {
if(value.id == this.selectedFunderId) {
value.selected = true;
this.funders.countSelectedValues++;
}
},
err => console.error("Server error fetching funders: ", err)
));
}
})
if(this.funders.values && this.funders.values.length == 0) {
this.openaireSearchUtils.refineStatus = this.errorCodes.NONE;
} else {
this.openaireSearchUtils.refineStatus = this.errorCodes.DONE;
}
},
err => {
this.openaireSearchUtils.refineStatus = this.errorCodes.ERROR;
console.error("Server error fetching funders: ", err)
}
));
}
public getResultPreview(result: SearchResult): ResultPreview {
@ -219,63 +190,37 @@ export class AddProjectsComponent implements OnInit {
}
private _getOpenaireProjects(parameters: string, page: number, size: number) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
// if (page > this.pagingLimit) {
// size = 0;
// }
if (this.openaireSearchUtils.status == this.errorCodes.LOADING) {
this.openaireSearchUtils.status = this.errorCodes.LOADING;
if (this.openaireSearchUtils.status == this.errorCodes.LOADING) {
this.openaireSearchUtils.status = this.errorCodes.LOADING;
this.openaireProjects = [];
this.openaireSearchUtils.totalResults = 0;
this.openaireProjects = [];
this.openaireSearchUtils.totalResults = 0;
if (this.subResults) {
this.subResults.unsubscribe();
}
this.subResults = this._searchProjectsService.searchProjects(parameters, null, page, size, [], this.properties).subscribe(
data => {
this.openaireSearchUtils.totalResults = data[0];
this.openaireProjects = data[1];
//this.searchPage.checkSelectedFilters(this.filters);
this.openaireSearchUtils.status = this.errorCodes.DONE;
if (this.openaireSearchUtils.totalResults == 0) {
this.openaireSearchUtils.status = this.errorCodes.NONE;
}
// if (this.openaireSearchUtils.status == this.errorCodes.DONE) {
// // Page out of limit!!!
// let totalPages: any = this.openaireSearchUtils.totalResults / (this.openaireSearchUtils.size);
// if (!(Number.isInteger(totalPages))) {
// totalPages = (parseInt(totalPages, 10) + 1);
// }
// if (totalPages < page) {
// this.openaireSearchUtils.totalResults = 0;
// this.openaireSearchUtils.status = this.errorCodes.OUT_OF_BOUND;
// }
// }
},
err => {
console.error(err);
//TODO check erros (service not available, bad request)
if (err.status == '404') {
this.openaireSearchUtils.status = this.errorCodes.NOT_FOUND;
} else if (err.status == '500') {
this.openaireSearchUtils.status = this.errorCodes.ERROR;
} else {
this.openaireSearchUtils.status = this.errorCodes.NOT_AVAILABLE;
}
}
);
if (this.subResults) {
this.subResults.unsubscribe();
}
this.subResults = this._searchProjectsService.searchProjects(parameters, null, page, size, [], this.properties).subscribe(
data => {
this.openaireSearchUtils.totalResults = data[0];
this.openaireProjects = data[1];
this.openaireSearchUtils.status = this.errorCodes.DONE;
if (this.openaireSearchUtils.totalResults == 0) {
this.openaireSearchUtils.status = this.errorCodes.NONE;
}
},
err => {
console.error(err);
//TODO check erros (service not available, bad request)
if (err.status == '404') {
this.openaireSearchUtils.status = this.errorCodes.NOT_FOUND;
} else if (err.status == '500') {
this.openaireSearchUtils.status = this.errorCodes.ERROR;
} else {
this.openaireSearchUtils.status = this.errorCodes.NOT_AVAILABLE;
}
}
);
}
}
@ -293,9 +238,8 @@ export class AddProjectsComponent implements OnInit {
this.goTo(1);
}
funderChanged(funderId: string, funderName: string) {
this.selectedFunderId = funderId;
funderChanged(filter: Filter) {
this.getSelectedValues(filter);
this.buildQueryParameters();
this.goTo(1);
}
@ -313,16 +257,17 @@ export class AddProjectsComponent implements OnInit {
}
}
goTo(page: number = 1) {
goTo(page: number = 1, refineQuery: boolean = true) {
HelperFunctions.scroll();
this.openaireSearchUtils.page = page;
this.openaireSearchUtils.status = this.errorCodes.LOADING;
if(refineQuery) {
this.openaireSearchUtils.refineStatus = this.errorCodes.LOADING;
this.getFunders();
}
this._getOpenaireProjects(this.queryParameters, page, this.resultsPerPage);
}
back() {
this.toggleView.emit(null);
}
public onSearchClose() {
this.openaireSearchUtils.keyword = this.filterForm.get('keyword').value;
}
@ -339,4 +284,40 @@ export class AddProjectsComponent implements OnInit {
pos: 'bottom-right'
});
}
getSelectedValues(filter): any {
var selected = [];
this.selectedFunderId = "";
if (filter.countSelectedValues > 0) {
for (var i = 0; i < filter.values.length; i++) {
if (filter.values[i].selected) {
selected.push(filter.values[i]);
this.selectedFunderId = filter.values[i].id;
}
}
}
return selected;
}
clearFilters() {
for (var j = 0; j < this.funders.countSelectedValues; j++) {
if (this.funders.values[j].selected) {
this.removeFilter(this.funders.values[j], this.funders);
break;
}
}
}
public removeFilter(value: Value, filter: Filter) {
this.selectedFunderId = "";
filter.countSelectedValues--;
if (value.selected == true) {
value.selected = false;
}
if (filter.filterType == "radio") {
filter.radioValue = "";
}
this.buildQueryParameters();
this.goTo(1);
}
}

View File

@ -20,11 +20,11 @@ import {SearchInputModule} from "../../openaireLibrary/sharedComponents/search-i
import {NoLoadPaging} from "../../openaireLibrary/searchPages/searchUtils/no-load-paging.module";
import {LoadingModule} from "../../openaireLibrary/utils/loading/loading.module";
import {IconsModule} from "../../openaireLibrary/utils/icons/icons.module";
import {IconsService} from "../../openaireLibrary/utils/icons/icons.service";
import {add, arrow_left, close, remove_circle_outline} from "../../openaireLibrary/utils/icons/icons";
import {FullScreenModalModule} from "../../openaireLibrary/utils/modal/full-screen-modal/full-screen-modal.module";
import {ResultPreviewModule} from "../../openaireLibrary/utils/result-preview/result-preview.module";
import {ErrorMessagesModule} from "../../openaireLibrary/utils/errorMessages.module";
import {DropdownFilterModule} from "../../openaireLibrary/utils/dropdown-filter/dropdown-filter.module";
import {SearchFilterModule} from "../../openaireLibrary/searchPages/searchUtils/searchFilter.module";
@NgModule({
imports: [
@ -46,7 +46,7 @@ import {ErrorMessagesModule} from "../../openaireLibrary/utils/errorMessages.mod
path: '', component: ManageProjectsComponent
}
]),
NoLoadPaging, LoadingModule, IconsModule, FullScreenModalModule, ResultPreviewModule
NoLoadPaging, LoadingModule, IconsModule, FullScreenModalModule, ResultPreviewModule, DropdownFilterModule, SearchFilterModule
],
declarations: [
ManageProjectsComponent,
@ -60,7 +60,5 @@ import {ErrorMessagesModule} from "../../openaireLibrary/utils/errorMessages.mod
exports: [ManageProjectsComponent]
})
export class CommunityProjectsModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([remove_circle_outline, add, close, arrow_left]);
}
constructor() {}
}

View File

@ -3,39 +3,26 @@ import {ActivatedRoute, Router} from "@angular/router";
import {RemoveProjectsComponent} from './remove-projects.component';
import {Session} from '../../openaireLibrary/login/utils/helper.class';
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.class';
import {HelperFunctions} from "../../openaireLibrary/utils/HelperFunctions.class";
import {Title} from '@angular/platform-browser';
import {FullScreenModalComponent} from "../../openaireLibrary/utils/modal/full-screen-modal/full-screen-modal.component";
import {StringUtils} from "../../openaireLibrary/utils/string-utils.class";
import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties";
import {properties} from "../../../environments/environment";
import {Subscriber} from "rxjs";
import {CommunityInfo} from "../../openaireLibrary/connect/community/communityInfo";
import {OpenaireEntities} from "../../openaireLibrary/utils/properties/searchFields";
import {CommunityService} from "../../openaireLibrary/connect/community/community.service";
@Component({
selector: 'manage-projects',
template: `
<remove-projects (toggleView)="toggleAction()" [communityProjects]="communityProjects"
[showLoading]="showLoadingInRemove"
(communityProjectsChanged)="communityProjectsChanged($event)" [toggle]="toggle">
<remove-projects #removeProjectsComponent (addProjects)="openAddProjects()" [communityProjects]="communityProjects"
[loading]="showLoadingInRemove" [community]="community" [disableAdd]="add.loading"
(communityProjectsChanged)="communityProjectsChanged($event)">
</remove-projects>
<fs-modal #fsModal (cancelEmitter)="toggleAction()">
<div actions class="uk-flex uk-flex-middle uk-height-1-1">
<span class="uk-button uk-text-secondary" uk-icon="icon: info; ratio: 1.3"></span>
<div *ngIf="communityId" uk-drop="mode: hover">
<div class="uk-card uk-card-body uk-card-default">
If you cannot find a funder that is relevant for your community, please contact us
(<a
[href]="'mailto:' + properties.feedbackmailForMissingEntities +'?Subject=[OpenAIRE Connect - '+ communityId + '] report missing Funder' + '&body=' + body"
target="_top">{{properties.feedbackmailForMissingEntities}}</a>)
and we will try to get the funder on board!
</div>
</div>
</div>
<add-projects [communityProjects]="communityProjects"
(communityProjectsChanged)="communityProjectsChanged($event)"></add-projects>
<fs-modal #fsModal>
<add-projects #add [communityProjects]="communityProjects" [community]="community"
(communityProjectsChanged)="communityProjectsChanged($event)"></add-projects>
</fs-modal>
`
})
@ -44,34 +31,27 @@ export class ManageProjectsComponent implements OnInit {
@Input() communityProjects = [];
@ViewChild(RemoveProjectsComponent) removeProjectsComponent: RemoveProjectsComponent;
@ViewChild('fsModal', { static: true }) fullscreen: FullScreenModalComponent;
public toggle: boolean = false;
private subscriptions: any[] = [];
public showLoadingInRemove: boolean = true;
public body: string = "Send from page";
public properties: EnvProperties = properties;
public communityId: string = "";
public community: CommunityInfo = null;
constructor(private element: ElementRef,
private title: Title,
private route: ActivatedRoute, private _router: Router) {
private route: ActivatedRoute, private _router: Router,
private communityService: CommunityService) {
}
ngOnInit() {
this.subscriptions.push(this.route.params.subscribe(params => {
this.communityId = params['community'];
if (this.communityId) {
this.title.setTitle(this.communityId.toUpperCase() + ' | Projects');
this.subscriptions.push(this.communityService.getCommunityAsObservable().subscribe(community => {
this.community = community;
if (this.community) {
this.title.setTitle(this.community.shortTitle.toUpperCase() + ' | ' + OpenaireEntities.PROJECTS);
this.body = "[Please write your message here]";
this.body = StringUtils.URIEncode(this.body);
}
this.fullscreen.title = "Search and Add Projects";
this.fullscreen.okButtonText = "Done";
this.fullscreen.okButton = true;
}));
}
@ -83,26 +63,19 @@ export class ManageProjectsComponent implements OnInit {
});
}
public toggleAction() {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {'errorCode': LoginErrorCodes.NOT_VALID, 'redirectUrl': this._router.url}
});
} else {
HelperFunctions.scroll();
this.toggle = !this.toggle;
if (this.toggle) {
this.fullscreen.open();
}
}
public openAddProjects() {
this.fullscreen.title = "Search and Add "+OpenaireEntities.PROJECTS;
this.fullscreen.okButtonText = "Done";
this.fullscreen.back = true;
this.fullscreen.okButton = true;
this.fullscreen.open();
}
public communityProjectsChanged($event) {
this.communityProjects = $event.value;
this.showLoadingInRemove = false;
if (this.toggle) {
if (this.fullscreen.isOpen) {
this.removeProjectsComponent.applyFilters();
this.removeProjectsComponent.createFunderFilter();
}

View File

@ -1,116 +1,138 @@
<div page-content>
<div page-content (stickyEmitter)="stickyPageHeader = $event">
<div header>
<community-info tab="projects"></community-info>
<div [class.uk-invisible]="showLoading"
class="uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center uk-flex-wrap uk-flex-middle uk-grid" uk-grid>
<div class="uk-flex-last@m">
<a class="uk-text-uppercase uk-flex uk-flex-middle" (click)="addNew()"
[attr.uk-tooltip]="(toggle? 'cls: uk-invisible; ' : 'cls: uk-active; ') +
'title: <div class=\'uk-padding-small\'><div class=\'uk-margin-bottom uk-text-bold\'> Search and add more Projects</div><div>The research results linked to the projects specified here will be automatically linked to your community dashboard.</div></div>'">
<button class="uk-icon-button large uk-button-secondary">
<icon name="add"></icon>
</button>
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary">Add new project</button>
</a>
<div class="uk-flex uk-flex-middle uk-margin-top info" [class.uk-active]="stickyPageHeader">
<div>
<div class="uk-margin-remove uk-text-background uk-text-bold uk-h6">Admin Dashboard - Manage {{openaireEntiites.PROJECTS}}
</div>
<h1 class="uk-h4 uk-margin-remove">{{community.shortTitle}}</h1>
</div>
<div #searchInputComponent search-input [control]="filterForm.controls.keyword" [showSearch]="false"
placeholder="Search Projects"
[selected]="communitySearchUtils.keyword" (closeEmitter)="onSearchClose()" (resetEmitter)="resetInput()"
[bordered]="true" colorClass="uk-text-secondary"
class="uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1"></div>
</div>
<community-info tab="projects"></community-info>
</div>
<div inner>
<div *ngIf="showLoading" class="uk-margin-large-top">
<loading></loading>
<div class="uk-flex uk-flex-middle uk-margin-top">
<div class="uk-width-expand@m uk-width-1-1 uk-grid uk-flex-middle uk-flex-right@m uk-flex-center uk-margin-remove-left" uk-grid>
<div search-input [expandable]="true" [searchControl]="filterForm.get('keyword')" searchInputClass="outer"
placeholder="Search project" [disabled]="loading"
class="uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1"></div>
<div>
<button class="uk-button uk-button-default uk-flex uk-flex-middle"
(click)="addNew()"
[attr.uk-tooltip]="('cls: uk-active; ') +
'title: <div class=\'uk-margin-bottom uk-text-bold\'> Search and add more '+openaireEntiites.PROJECTS+'</div>' +
'<div>The research results linked to the <span class=\'uk-text-lowercase\'>'+openaireEntiites.PROJECTS +
'</span> specified here will be automatically linked to your <span class=\'uk-text-lowercase\'>'+openaireEntiites.COMMUNITY+'</span> dashboard.</div>'"
[disabled]="loading || disableAdd" [class.uk-disabled]="loading || disableAdd">
<icon name="add" [flex]="true"></icon>
<span class="uk-margin-small-left">New {{openaireEntiites.PROJECT}}</span>
</button>
</div>
</div>
</div>
<div class="uk-margin-top">
<results-and-pages [type]="openaireEntiites.PROJECTS | lowercase" [page]="page" [pageSize]="resultsPerPage"
[totalResults]="previewCommunityProjects.length"></results-and-pages>
</div>
<div *ngIf="!showLoading">
<div>
<div class="uk-grid uk-flex uk-flex-middle uk-margin-medium-bottom" uk-grid>
<div *ngIf="allOptions.length > 0"
class="uk-grid uk-flex-middle uk-flex-left@m uk-flex-center uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1 uk-first-column">
<span class="">Filter by: </span>
<div class="uk-width-expand uk-padding-remove uk-margin-small-left" dashboard-input
[formInput]="filterForm.get('funder')"
placeholder="Search by funders"
type="chips" [options]="allOptions" chipLabel="label">
</div>
</div>
<div *ngIf="previewCommunityProjects.length > 0"
class="uk-width-expand@m uk-width-1-1">
<div class="uk-flex-middle uk-flex-right@m uk-flex-center uk-grid">
<span class="">Sort by: </span>
<div class="uk-width-medium uk-padding-remove uk-margin-small-left" dashboard-input
[formInput]="filterForm.get('sort')"
type="select"
[options]="sortOptions">
</div>
</div>
</div>
</div>
<no-load-paging *ngIf="previewCommunityProjects.length > 0" [type]="'projects'"
(pageChange)="updatePage($event)"
[page]="page" [pageSize]="resultsPerPage"
[totalResults]="previewCommunityProjects.length">
</no-load-paging>
<div class="uk-margin-medium-top uk-margin-medium-bottom">
<div *ngIf="previewCommunityProjects.length == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div>No projects for {{name}}</div>
</div>
<div class="uk-card uk-card-default uk-text-small uk-margin-bottom"
*ngFor="let item of previewCommunityProjects.slice((page - 1)*resultsPerPage, page*resultsPerPage)">
<div class="uk-grid uk-grid-divider uk-padding" uk-grid>
<div class="uk-width-expand@m uk-width-1-1">
<div class="uk-padding-small uk-padding-remove-horizontal">
<h6 class="uk-margin-small-bottom">
<a *ngIf="item.openaireId || (item.grantId && item.funder)"
target="_blank"
[href]="projectUrl+'?' + ((item.openaireId) ? 'projectId='+item.openaireId : 'grantId='+item.grantId+'&funder='+item.funder)">
<span *ngIf="item.name">{{item.name}}</span>
<span *ngIf="item.name && item.acronym"> (</span><span *ngIf="item.acronym">{{item.acronym}}</span><span *ngIf="item.name && item.acronym">)</span>
<span *ngIf="!item.name && !item.acronym">[no title available]</span>
<span class="custom-external custom-icon space"></span>
</a>
<span *ngIf="!item.openaireId && !(item.grantId && item.funder)">
<span *ngIf="item.name">{{item.name}}</span>
<span *ngIf="item.name && item.acronym"> (</span><span *ngIf="item.acronym">{{item.acronym}}</span><span *ngIf="item.name && item.acronym">)</span>
<span *ngIf="!item.name && !item.acronym">[no title available]</span>
</span>
</h6>
<div *ngIf="item.grantId" class="uk-margin-small-bottom">
<span class="title">Grant ID: </span>
<span>{{item.grantId}}</span>
</div>
<div *ngIf="item.funder" class="uk-margin-small-bottom">
<span class="title">Funder: </span>
<span>{{item.funder}}</span>
</div>
</div>
</div>
<div class="uk-width-auto@m uk-width-1-1">
<div class="uk-flex uk-flex-middle uk-flex-center uk-height-1-1">
<div class="uk-padding-small uk-padding-remove-horizontal">
<a (click)="removeProject(item)" class="uk-button action uk-flex uk-flex-middle">
<icon name="remove_circle_outline"></icon>
<span class="uk-margin-small-left">Remove project</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<no-load-paging *ngIf="previewCommunityProjects.length > 0" [type]="'projects'"
(pageChange)="updatePage($event)"
[page]="page" [pageSize]="resultsPerPage"
[totalResults]="previewCommunityProjects.length">
</no-load-paging>
<div class="uk-grid uk-flex-middle uk-margin-medium-top" uk-grid>
<div *ngIf="allOptions.length > 0">
<dropdown-filter #dropdownFilter dropdownClass="uk-width-medium uk-padding-small"
name="Filter by Funder" [count]="filterForm.get('funder').value.length">
<h6 class="uk-margin-remove-bottom" title="Filter by Funder">Funder</h6>
<ul class="uk-list uk-margin-remove-bottom">
<li *ngFor="let option of allOptions">
<a class="uk-link-text">
<label (click)="select(option.value, $event, dropdownFilter)" class="uk-flex uk-flex-middle">
<input class="uk-checkbox"
type="checkbox" [checked]="isSelected(option.value)">
<span class="uk-margin-small-left">{{option.label}}</span>
</label>
</a>
</li>
</ul>
</dropdown-filter>
</div>
<div input inputClass="flat x-small" placeholder="Sort by"
[disabled]="previewCommunityProjects.length == 0"
[formInput]="filterForm.get('sort')"
type="select" [options]="sortOptions">
</div>
<!-- </div>-->
<div class="uk-width-expand@m uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center">
<paging-no-load *ngIf="previewCommunityProjects.length > 0"
(pageChange)="updatePage($event)" [size]="resultsPerPage"
[totalResults]="previewCommunityProjects.length" customClasses="uk-flex-right">
</paging-no-load>
</div>
</div>
<modal-alert #AlertModalDeleteCommunity (alertOutput)="confirmedDeleteProject($event)"></modal-alert>
<div class="uk-section uk-section-small uk-position-relative" style="min-height: 60vh">
<div *ngIf="loading" class="uk-position-center">
<loading></loading>
</div>
<div *ngIf="!loading">
<div class="uk-margin-medium-bottom">
<div *ngIf="previewCommunityProjects.length == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div>No {{openaireEntiites.PROJECTS | lowercase}} for {{community.shortTitle}}</div>
</div>
<div *ngIf="previewCommunityProjects.length > 0"
class="uk-grid uk-grid-large uk-child-width-1-1 uk-child-width-1-2@m uk-margin-bottom" uk-grid uk-height-match="target: .uk-card-body">
<div *ngFor="let item of previewCommunityProjects.slice((page - 1)*resultsPerPage, page*resultsPerPage); let i=index">
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<h6 class="uk-margin-bottom">
<a *ngIf="item.openaireId || (item.grantId && item.funder)"
target="_blank" class="custom-external uk-link-text"
[href]="projectUrl+'?' + ((item.openaireId) ? 'projectId='+item.openaireId : 'grantId='+item.grantId+'&funder='+item.funder)">
<span *ngIf="item.name">{{item.name}}</span>
<span *ngIf="item.name && item.acronym"> (</span><span *ngIf="item.acronym">{{item.acronym}}</span><span *ngIf="item.name && item.acronym">)</span>
<span *ngIf="!item.name && !item.acronym">[no title available]</span>
</a>
<span *ngIf="!item.openaireId && !(item.grantId && item.funder)">
<span *ngIf="item.name">{{item.name}}</span>
<span *ngIf="item.name && item.acronym"> (</span><span *ngIf="item.acronym">{{item.acronym}}</span><span *ngIf="item.name && item.acronym">)</span>
<span *ngIf="!item.name && !item.acronym">[no title available]</span>
</span>
</h6>
<div class="uk-grid uk-child-width-1-2@l uk-text-small">
<div *ngIf="item.grantId">
<span class="uk-text-meta">Grant ID: </span>
<span>{{item.grantId}}</span>
</div>
<div *ngIf="item.funder">
<span class="uk-text-meta">Funder: </span>
<span>{{item.funder}}</span>
</div>
</div>
</div>
<div class="uk-card-footer uk-padding-remove-vertical">
<div class="uk-grid uk-grid-small uk-flex-nowrap uk-grid-divider uk-flex-right" uk-grid>
<div>
<div class="uk-padding-small uk-padding-remove-horizontal">
<button class="uk-button uk-button-link uk-flex uk-flex-middle"
(click)="removeProject(item)">
<icon name="remove" [flex]="true"></icon>
<span class="uk-margin-xsmall-left">Remove</span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-margin-small-top">
<paging-no-load [currentPage]="page"
[totalResults]="previewCommunityProjects.length" [size]="resultsPerPage"
(pageChange)="updatePage($event)" customClasses="uk-flex-right@m uk-flex-center">
</paging-no-load>
</div>
</div>
</div>
<modal-alert #AlertModalDeleteCommunity (alertOutput)="confirmedDeleteProject($event)" [overflowBody]="false"></modal-alert>
</div>
</div>
</div>

View File

@ -16,6 +16,10 @@ import {properties} from "../../../environments/environment";
import {CommunityService} from "../../openaireLibrary/connect/community/community.service";
import {Option} from "../../openaireLibrary/sharedComponents/input/input.component";
import {SearchInputComponent} from "../../openaireLibrary/sharedComponents/search-input/search-input.component";
import {DropdownFilterComponent} from "../../openaireLibrary/utils/dropdown-filter/dropdown-filter.component";
import {OpenaireEntities} from "../../openaireLibrary/utils/properties/searchFields";
import {CommunityInfo} from "../../openaireLibrary/connect/community/communityInfo";
import {HelperFunctions} from "../../openaireLibrary/utils/HelperFunctions.class";
declare var UIkit;
@ -25,16 +29,16 @@ declare var UIkit;
})
export class RemoveProjectsComponent implements OnInit {
public portal: string;
public name: string;
@Input() public community: CommunityInfo;
@Input() public loading: boolean = true;
@Input() public disableAdd: boolean = false;
@Output() addProjects: EventEmitter<void> = new EventEmitter();
private subscriptions: any[] = [];
public routerHelper: RouterHelper = new RouterHelper();
private projectUrl = "https://" + ((properties.environment == "beta" || properties.environment == "development") ? "beta." : "") + "explore.openaire.eu" + properties.searchLinkToProject.split("?")[0];
@Input() public showLoading: boolean = true;
@Output() communityProjectsChanged = new EventEmitter();
@Input() public communityProjects = [];
public previewCommunityProjects = [];
@ -55,6 +59,7 @@ export class RemoveProjectsComponent implements OnInit {
public fundersCtrl: FormArray;
private searchText: RegExp = new RegExp('');
public keyword: string = '';
selectedFunders: string[] = [];
allOptions: Option[] = [];
sortOptions: Option[] = [
//{label:"Title (desc) ", value:{ sort: "title",descending: true }},
@ -65,8 +70,9 @@ export class RemoveProjectsComponent implements OnInit {
{label: "Funder ", value: {sort: "funder", descending: false}}
];
@Output() toggleView: EventEmitter<any> = new EventEmitter();
@Input() public toggle: boolean = true;
public stickyPageHeader: boolean = false;
public openaireEntiites = OpenaireEntities;
constructor(private route: ActivatedRoute, private _router: Router,
private _fb: FormBuilder,
@ -105,11 +111,10 @@ export class RemoveProjectsComponent implements OnInit {
this.subscriptions.push(this.communityService.getCommunityAsObservable().subscribe(community => {
if (community) {
this.portal = community.communityId;
this.name = community.shortTitle;
this.community = community;
this.projectUrl = "https://"
+ ((this.properties.environment == "beta" || this.properties.environment == "development") ? "beta." : "")
+ this.portal + ".openaire.eu" + this.properties.searchLinkToProject.split("?")[0];
+ this.community.communityId + ".openaire.eu" + this.properties.searchLinkToProject.split("?")[0];
this.keyword = '';
this._getCommunityProjects();
@ -155,14 +160,14 @@ export class RemoveProjectsComponent implements OnInit {
}
});
} else {
this.subscriptions.push(this._manageCommunityProjectsService.removeProject(this.properties, this.portal, this.selectedCommunityProject.id).subscribe(
this.subscriptions.push(this._manageCommunityProjectsService.removeProject(this.properties, this.community.communityId, this.selectedCommunityProject.id).subscribe(
data => {
let index = this.communityProjects.indexOf(this.selectedCommunityProject);
this.communityProjects.splice(index, 1);
this.applyFilters();
UIkit.notification('Project successfully removed!', {
UIkit.notification(OpenaireEntities.PROJECT+' successfully removed!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
@ -195,7 +200,7 @@ export class RemoveProjectsComponent implements OnInit {
this.selectedCommunityProject = communityProject;
this.alertModalDeleteCommunity.cancelButton = true;
this.alertModalDeleteCommunity.okButton = true;
this.alertModalDeleteCommunity.alertTitle = "Remove project?";
this.alertModalDeleteCommunity.alertTitle = "Remove "+OpenaireEntities.PROJECT;
let title = "";
if (communityProject.name) {
title = communityProject.name;
@ -209,11 +214,11 @@ export class RemoveProjectsComponent implements OnInit {
if (communityProject.name && communityProject.acronym) {
title += ")";
}
this.alertModalDeleteCommunity.message = "Project";
this.alertModalDeleteCommunity.message = OpenaireEntities.PROJECT;
if (title) {
this.alertModalDeleteCommunity.message += " '" + title + "' ";
this.alertModalDeleteCommunity.message += " <b>" + title + "</b> ";
}
this.alertModalDeleteCommunity.message += "will be removed from your community. Are you sure?";
this.alertModalDeleteCommunity.message += "will be removed from your "+OpenaireEntities.COMMUNITY.toLowerCase()+". Are you sure?";
this.alertModalDeleteCommunity.okButtonText = "Yes";
this.alertModalDeleteCommunity.open();
}
@ -234,7 +239,7 @@ export class RemoveProjectsComponent implements OnInit {
this.communitySearchUtils.page = 1;
this.communitySearchUtils.keyword = "";
this.subscriptions.push(this._searchCommunityProjectsService.searchProjects(this.properties, this.portal).subscribe(
this.subscriptions.push(this._searchCommunityProjectsService.searchProjects(this.properties, this.community.communityId).subscribe(
data => {
this.communityProjects = data;
this.previewCommunityProjects = this.communityProjects;
@ -249,7 +254,7 @@ export class RemoveProjectsComponent implements OnInit {
this.createFunderFilter();
this.showLoading = false;
this.loading = false;
},
err => {
console.error(err);
@ -263,7 +268,7 @@ export class RemoveProjectsComponent implements OnInit {
this.communitySearchUtils.status = this.errorCodes.NOT_AVAILABLE;
}
this.showLoading = false;
this.loading = false;
}
));
}
@ -283,11 +288,12 @@ export class RemoveProjectsComponent implements OnInit {
}
public updatePage($event) {
HelperFunctions.scroll();
this.page = $event.value;
}
addNew() {
this.toggleView.emit(null);
this.addProjects.emit();
}
public applyFilters() {
@ -367,4 +373,24 @@ export class RemoveProjectsComponent implements OnInit {
pos: 'bottom-right'
});
}
select(value: string, event, dropdownFilter: DropdownFilterComponent) {
if(event.target instanceof HTMLInputElement) {
dropdownFilter.closeDropdown();
if(event.target.checked && !this.selectedFunders.find(entity => value === entity)) {
this.selectedFunders.push(value);
this.fundersCtrl.setControl(this.fundersCtrl.value.length, this._fb.control(value));
} else if(!event.target.checked) {
let index = this.selectedFunders.indexOf(value);
if(index !== -1) {
this.selectedFunders.splice(index, 1);
this.fundersCtrl.removeAt(index);
}
}
}
}
isSelected(value: string) {
return this.filterForm && this.filterForm.get('funder').value.find(funder => funder === value)
}
}

View File

@ -1,62 +1,59 @@
<div class="uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center uk-flex-wrap uk-flex-middle uk-grid uk-margin-bottom" uk-grid>
<div #searchInputComponent search-input [control]="filterForm" [showSearch]="false"
placeholder="Search Zenodo Communites"
[selected]="zenodoCommunitySearchUtils.keyword" (closeEmitter)="onSearchClose()" (resetEmitter)="resetInput()"
[bordered]="true" colorClass="uk-text-secondary"
class="uk-width-1-2@l uk-width-1-2@m uk-width-1-1"></div>
<div class="uk-section uk-flex uk-flex-center uk-flex uk-flex-middle">
<div search-input class="uk-width-xlarge@l uk-width-large" [searchControl]="filterForm" searchInputClass="outer"
placeholder="Search Zenodo Communities" [disabled]="zenodoCommunitySearchUtils.status == errorCodes.LOADING"></div>
</div>
<div *ngIf="zenodoCommunitySearchUtils.status == errorCodes.LOADING" class="uk-position-large-top">
<loading></loading>
</div>
<div *ngIf="zenodoCommunitySearchUtils.status == errorCodes.NONE "
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div> No zenodo communities found
<div class="uk-section uk-section-small uk-position-relative">
<div *ngIf="zenodoCommunitySearchUtils.status == errorCodes.LOADING" class="uk-position-center">
<loading></loading>
</div>
</div>
<div *ngIf="zenodoCommunitySearchUtils.totalResults > 0">
<no-load-paging [type]="'Zenodo Communities'"
[page]="zenodoCommunitySearchUtils.page" [pageSize]="rowsOnPage" (pageChange)="goTo($event.value)"
[totalResults]="zenodoCommunitySearchUtils.totalResults">
</no-load-paging>
<ul class="uk-list">
<li class="" *ngFor="let item of zenodoCommunities; let i = index;"
class="uk-card uk-card-default uk-margin-bottom uk-padding">
<div class="uk-grid uk-grid-divider " uk-grid>
<div class="uk-width-expand">
<preview-zenodo-community [item]="item"></preview-zenodo-community>
</div>
<div class="uk-width-auto@m uk-width-1-1">
<div class=" uk-flex uk-flex-middle uk-flex-center uk-flex-column uk-height-1-1">
<div class="uk-padding-small uk-padding-remove-horizontal">
<div [class.hide-element]="inThelist(item, selectedCommunities)">
<span *ngIf=" masterCommunity && item.id==masterCommunity.id" class="uk-label uk-label-warning">Master zenodo community</span>
<div (click)="addCommunity(item)" class="uk-button action uk-flex uk-flex-middle"
uk-tooltip="title:<div class='uk-padding-small'><div class='uk-margin-bottom uk-text-bold'>Add new community </div><div>Newly added Zenodo communities will be linked to your community on the next run of our algorithms.</div></div>">
<!-- <i class="clickable uk-text-success" uk-icon="plus"></i>-->
<div class="uk-text-success">
<icon name="add"></icon>
<div *ngIf="zenodoCommunitySearchUtils.status !== errorCodes.LOADING">
<div *ngIf="zenodoCommunitySearchUtils.totalResults == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div>No zenodo communities found</div>
</div>
<ng-container *ngIf="zenodoCommunitySearchUtils.totalResults > 0">
<no-load-paging [type]="'zenodo communities'"
[page]="zenodoCommunitySearchUtils.page" [pageSize]="rowsOnPage" (pageChange)="goTo($event.value)"
[totalResults]="zenodoCommunitySearchUtils.totalResults">
</no-load-paging>
<div class="uk-grid uk-grid-large uk-child-width-1-1 uk-margin-medium-top uk-margin-bottom" uk-grid>
<div *ngFor="let item of zenodoCommunities; let i=index">
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<preview-zenodo-community [item]="item" [master]="masterCommunity && item.id==masterCommunity.id"></preview-zenodo-community>
</div>
<div *ngIf="!masterCommunity || item.id!==masterCommunity.id" class="uk-card-footer uk-padding-remove-vertical">
<div class="uk-grid uk-grid-small uk-flex-nowrap uk-grid-divider uk-flex-right" uk-grid>
<div *ngIf="!inThelist(item, selectedCommunities) && !(masterCommunity && item.id==masterCommunity.id)">
<div class="uk-padding-small uk-padding-remove-horizontal">
<a (click)="addCommunity(item)" class="uk-button uk-button-link uk-flex uk-flex-middle">
<icon name="add" [flex]="true"></icon>
<span class="uk-margin-small-left">
Add
</span>
</a>
</div>
<span class="uk-margin-small-left"> Add community</span>
</div>
</div>
<div
[class.hide-element]="!inThelist(item, selectedCommunities) && !(masterCommunity && item.id==masterCommunity.id)">
<div (click)="removeCommunity(item)" class="uk-button action uk-flex uk-flex-middle">
<icon name="remove_circle_outline"></icon>
<span class="uk-margin-small-left"> Remove community </span>
<div *ngIf="inThelist(item, selectedCommunities)">
<div class="uk-padding-small uk-padding-remove-horizontal">
<a (click)="removeCommunity(item)"
class="uk-button uk-button-link uk-flex uk-flex-middle">
<icon name="remove" [flex]="true"></icon>
<span class="uk-margin-small-left">Remove</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
</ul>
<no-load-paging [type]="'Zenodo Communities'"
[page]="zenodoCommunitySearchUtils.page" [pageSize]="rowsOnPage" (pageChange)="goTo($event.value)"
[totalResults]="zenodoCommunitySearchUtils.totalResults">
</no-load-paging>
</div>
<div class="uk-margin-small-top">
<paging-no-load [currentPage]="zenodoCommunitySearchUtils.page"
[totalResults]="zenodoCommunitySearchUtils.totalResults" [size]="rowsOnPage"
(pageChange)="goTo($event.value)" customClasses="uk-flex-right@m uk-flex-center">
</paging-no-load>
</div>
</ng-container>
</div>
</div>

View File

@ -1,16 +1,16 @@
import {Component, Input, OnInit, ViewChild} from '@angular/core';
import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
import {FormBuilder, FormControl} 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 {ZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {Session} from '../../openaireLibrary/login/utils/helper.class';
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.class';
import {ManageZenodoCommunitiesService} from '../../services/manageZenodoCommunities.service';
import {SearchInputComponent} from '../../openaireLibrary/sharedComponents/search-input/search-input.component';
import {Subject, Subscription} from 'rxjs';
import {debounceTime, distinctUntilChanged} from 'rxjs/operators';
import {CommunityInfo} from "../../openaireLibrary/connect/community/communityInfo";
import {HelperFunctions} from "../../openaireLibrary/utils/HelperFunctions.class";
declare var UIkit;
@ -22,9 +22,8 @@ export class AddZenodoCommunitiesComponent implements OnInit {
public zenodoCommunities = null; // zenodo search API results
public totalZenodoCommunities = null;
@Input() properties: EnvProperties = null;
@Input() communityId = null;
@ViewChild('searchInputComponent') searchInputComponent: SearchInputComponent;
properties: EnvProperties = properties;
@Input() community: CommunityInfo = null;
public filterForm: FormControl;
private subscriptions: any[] = [];
public subResults: any;
@ -34,7 +33,8 @@ export class AddZenodoCommunitiesComponent implements OnInit {
public rowsOnPage = 10;
@Input() masterCommunity = null;
@Input() selectedCommunities = [];
@Output() zenodoCommunitiesChanged = new EventEmitter();
constructor(private route: ActivatedRoute,
private _router: Router,
public _fb: FormBuilder,
@ -58,37 +58,27 @@ export class AddZenodoCommunitiesComponent implements OnInit {
}));
this.zenodoCommunitySearchUtils.keyword = "";
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING;
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;
this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING;
if (this.community.communityId != null && this.community.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;
}
);
}
}
ngOnDestroy() {
@ -103,41 +93,33 @@ export class AddZenodoCommunitiesComponent implements OnInit {
}
public goTo(page: number = 1) {
if (!Session.isLoggedIn()) {
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;
if(this.subResults){
this.subResults.unsubscribe();
}
this.subResults = 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;
}
);
HelperFunctions.scroll();
this.zenodoCommunitySearchUtils.page = page;
this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING;
if(this.subResults){
this.subResults.unsubscribe();
}
this.subResults = 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 {
@ -150,73 +132,55 @@ export class AddZenodoCommunitiesComponent implements OnInit {
public addCommunity(community) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
this.subscriptions.push(this._manageZenodoCommunitiesService.addZCommunity(this.properties, this.communityId, community.id).subscribe(
data => {
community["openaireId"] = data.id;
this.selectedCommunities.push(community);
UIkit.notification('Community successfully added!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.log(err.status);
}/*,
() => {
console.info("completed ADD");
}*/
));
}
this.subscriptions.push(this._manageZenodoCommunitiesService.addZCommunity(this.properties, this.community.communityId, community.id).subscribe(
data => {
community["openaireId"] = data.id;
this.selectedCommunities.push(community);
UIkit.notification('Community successfully added!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.zenodoCommunitiesChanged.emit({
value: this.selectedCommunities,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.log(err.status);
}
));
}
public removeCommunity(comm) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
var openaireId = this.getOpenaireId(comm);
this.subscriptions.push(this._manageZenodoCommunitiesService.removeZCommunity(this.properties, this.community.communityId, openaireId,).subscribe(
data => {
var pos = -1;
for (var i = 0; i < this.selectedCommunities.length; i++) {
if (this.selectedCommunities[i].id == comm.id) {
pos = i;
break;
}
}
});
} else {
var openaireId = this.getOpenaireId(comm);
this.subscriptions.push(this._manageZenodoCommunitiesService.removeZCommunity(this.properties, this.communityId, openaireId,).subscribe(
data => {
var pos = -1;
for (var i = 0; i < this.selectedCommunities.length; i++) {
if (this.selectedCommunities[i].id == comm.id) {
pos = i;
break;
}
}
if (pos != -1) {
this.selectedCommunities.splice(pos, 1);
}
UIkit.notification('Community successfully removed!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.log(err.status);
}/*,
() => {
console.info("completed remove");
}*/
));
}
if (pos != -1) {
this.selectedCommunities.splice(pos, 1);
}
UIkit.notification('Community successfully removed!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.zenodoCommunitiesChanged.emit({
value: this.selectedCommunities,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.log(err.status);
}
));
}
public inThelist(community: any, list): any {
@ -236,14 +200,9 @@ export class AddZenodoCommunitiesComponent implements OnInit {
}
return null;
}
public onSearchClose() {
this.zenodoCommunitySearchUtils.keyword = this.filterForm.value;
}
public resetInput() {
this.zenodoCommunitySearchUtils.keyword = null;
this.searchInputComponent.reset()
get loading() {
return this.zenodoCommunitySearchUtils.status == this.errorCodes.LOADING
}
handleError(message: string) {

View File

@ -1,72 +1,78 @@
<div page-content>
<div page-content (stickyEmitter)="stickyPageHeader = $event">
<div header>
<community-info tab="zenodo-communities"></community-info>
<div class="uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center uk-flex-wrap uk-flex-middle uk-grid" uk-grid>
<div class="uk-flex-last@m">
<a (click)="addNew()"
uk-tooltip="title:<div class='uk-padding-small'><div class='uk-margin-bottom uk-text-bold'> Search and add more Zenodo Communities</div><div>The research results of a Zenodo community specified here will be automatically linked to your community dashboard.</div></div>"
class="uk-flex uk-flex-middle uk-text-uppercase">
<button class="large uk-icon-button uk-button-secondary">
<icon name="add"></icon>
</button>
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary">Add new zenodo
communities
</button>
</a>
<div class="uk-flex uk-flex-middle uk-margin-top info" [class.uk-active]="stickyPageHeader">
<div>
<div class="uk-margin-remove uk-text-background uk-text-bold uk-h6">Admin Dashboard - Manage Zenodo Communities
</div>
<h1 class="uk-h4 uk-margin-remove">{{community.shortTitle}}</h1>
</div>
<div #searchInputComponent search-input [control]="filterForm" [showSearch]="false"
placeholder="Search Zenodo Communities "
[selected]="searchUtils.keyword" (closeEmitter)="onSearchClose()" (resetEmitter)="resetInput()"
[bordered]="true" colorClass="uk-text-secondary"
class="uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1"></div>
</div>
<community-info tab="zenodo-communities"></community-info>
</div>
<div inner>
<div *ngIf="searchUtils.status === errorCodes.LOADING" class="uk-position-center">
<loading></loading>
<div class="uk-flex uk-flex-right@m uk-flex-center uk-flex-middle uk-grid uk-margin-top" uk-grid>
<div search-input [expandable]="true" [searchControl]="filterForm" searchInputClass="outer"
placeholder="Search Zenodo Community" [disabled]="searchUtils.status === errorCodes.LOADING"
class="uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1"></div>
<div>
<button class="uk-button uk-button-default uk-flex uk-flex-middle" (click)="addNew()"
uk-tooltip="title:<div class='uk-text-bold'> Search and add more Zenodo Communities</div><div>The research results of a Zenodo community specified here will be automatically linked to your community dashboard.</div>"
[disabled]="searchUtils.status === errorCodes.LOADING || disableAdd"
[class.uk-disabled]="searchUtils.status === errorCodes.LOADING || disableAdd">
<icon name="add" [flex]="true"></icon>
<span class="uk-margin-small-left uk-text-bold uk-text-uppercase">New Zenodo Community</span>
</button>
</div>
</div>
<div *ngIf="searchUtils.status != errorCodes.LOADING && previewCommunities">
<div *ngIf="masterCommunity"
class="uk-animation-fade uk-alert uk-alert-primary uk-padding-small uk-margin-large-bottom">
<div class="uk-text-large uk-margin-bottom">Main Zenodo community</div>
<preview-zenodo-community [item]="masterCommunity"></preview-zenodo-community>
</div>
<div *ngIf="previewCommunities.length == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div> No zenodo communities found
</div>
</div>
<div *ngIf="previewCommunities.length > 0">
<no-load-paging *ngIf=" previewCommunities && previewCommunities.length > 0" [type]="'Zenodo Communities'"
[page]="page" [pageSize]="size" (pageChange)="page = $event.value"
[totalResults]="previewCommunities.length">
</no-load-paging>
<ul class="uk-list">
<li class="" *ngFor="let item of previewCommunities; let i = index;"
class="uk-card uk-card-default uk-margin-bottom"
[class.uk-hidden]="i >= page * size ||
i < (page - 1) * size">
<div class="uk-grid uk-padding uk-grid-divider " uk-grid>
<div class="uk-width-expand@m uk-width-1-1">
<preview-zenodo-community [item]="item"></preview-zenodo-community>
</div>
<div class="uk-text-center uk-width-auto@m uk-width-1-1">
<div class=" uk-flex uk-flex-middle uk-flex-center uk-height-1-1">
<div class="uk-padding-small uk-padding-remove-horizontal">
<div (click)="removeCommunity(item)"
class="uk-button action uk-flex uk-flex-middle ">
<icon name="remove_circle_outline"></icon>
<span class="uk-margin-small-left">Remove community</span>
<div class="uk-section uk-section-small uk-position-relative" style="min-height: 60vh">
<div *ngIf="searchUtils.status == errorCodes.LOADING" class="uk-position-center">
<loading></loading>
</div>
<div *ngIf="searchUtils.status !== errorCodes.LOADING">
<div *ngIf="previewCommunities.length == 0"
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
<div>No zenodo communities found</div>
</div>
<div *ngIf="previewCommunities.length > 0">
<no-load-paging [type]="'content providers'"
(pageChange)="updatePage($event)"
[page]="page" [pageSize]="size"
[totalResults]="previewCommunities.length">
</no-load-paging>
<!-- <ul class="uk-margin-medium-top uk-margin-bottom uk-list uk-list-xlarge">-->
<div class="uk-grid uk-grid-large uk-child-width-1-1 uk-margin-medium-top uk-margin-bottom" uk-grid>
<div *ngFor="let item of previewCommunities.slice((this.page - 1)*this.size, this.page*this.size); let i=index">
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<preview-zenodo-community [item]="item" [master]="masterCommunity && item.id==masterCommunity.id"></preview-zenodo-community>
</div>
<div *ngIf="!masterCommunity || item.id!==masterCommunity.id" class="uk-card-footer uk-padding-remove-vertical">
<div class="uk-grid uk-grid-small uk-flex-nowrap uk-grid-divider uk-flex-right" uk-grid>
<div>
<div class="uk-padding-small uk-padding-remove-horizontal">
<button class="uk-button uk-button-link uk-flex uk-flex-middle"
(click)="removeCommunity(item)">
<icon name="remove" [flex]="true"></icon>
<span class="uk-margin-xsmall-left">Remove</span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
<!-- </ul>-->
<div class="uk-margin-small-top">
<paging-no-load [currentPage]="page"
[totalResults]="previewCommunities.length" [size]="size"
(pageChange)="updatePage($event)" customClasses="uk-flex-right@m uk-flex-center">
</paging-no-load>
</div>
</div>
</div>
</div>
</div>
</div>
<modal-alert #AlertModalDeleteCommunity (alertOutput)="confirmedDeleteCommunity($event)"></modal-alert>
<modal-alert #AlertModalDeleteCommunity (alertOutput)="confirmedDeleteCommunity($event)" [overflowBody]="false"></modal-alert>

View File

@ -2,23 +2,23 @@ import {
Component,
EventEmitter,
Input,
OnChanges,
OnDestroy,
OnInit,
Output, SimpleChanges,
Output,
ViewChild,
ViewEncapsulation
} from '@angular/core';
import {FormBuilder, FormControl} 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 {Session} from '../../openaireLibrary/login/utils/helper.class';
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.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";
declare var UIkit;
@ -29,9 +29,10 @@ declare var UIkit;
})
export class ManageZenodoCommunitiesComponent implements OnInit, OnDestroy {
@Input() properties: EnvProperties = null;
@Input() communityId = null;
properties: EnvProperties = properties;
@Input() community: CommunityInfo = null;
@Input() public loading: boolean = true;
@Input() public disableAdd: boolean = false;
@Input() searchUtils: SearchUtilsClass = null;
errorCodes: ErrorCodes;
@ -42,13 +43,17 @@ export class ManageZenodoCommunitiesComponent implements OnInit, OnDestroy {
@ViewChild('AlertModalDeleteCommunity') alertModalDeleteCommunity;
selectedToDelete = null;
@Output() toggleView: EventEmitter<any> = new EventEmitter();
@Output() addZenodoCommunity: EventEmitter<any> = new EventEmitter();
@Output() zenodoCommunitiesChanged = new EventEmitter();
page = 1;
size = 10;
@ViewChild('searchInputComponent') searchInputComponent: SearchInputComponent;
public filterForm: FormControl;
private subscriptions: any[] = [];
public stickyPageHeader: boolean = false;
constructor(private route: ActivatedRoute,
private _router: Router,
public _fb: FormBuilder,
@ -83,7 +88,7 @@ export class ManageZenodoCommunitiesComponent implements OnInit, OnDestroy {
public filterPreviewCommunities(value: string) {
this.previewCommunities = this.selectedCommunities.filter(community => {
return community.title.toLowerCase().indexOf(value.toLowerCase()) != -1
return !value || community.title.toLowerCase().indexOf(value.toLowerCase()) != -1
});
if (this.previewCommunities.slice((this.page - 1) * this.rowsOnPage, this.page * this.rowsOnPage).length == 0) {
this.page = 1;
@ -91,70 +96,54 @@ export class ManageZenodoCommunitiesComponent implements OnInit, OnDestroy {
}
public confirmedDeleteCommunity(data: any) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
this.subscriptions.push(this._manageZenodoCommunitiesService.removeZCommunity(this.properties, this.community.communityId, this.selectedToDelete.openaireId).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;
}
}
});
} else {
this.subscriptions.push(this._manageZenodoCommunitiesService.removeZCommunity(this.properties, this.communityId, this.selectedToDelete.openaireId).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;
}
if (pos != -1) {
this.selectedCommunities.splice(pos, 1);
this.searchUtils.totalResults = this.selectedCommunities.length;
this.filterPreviewCommunities(this.filterForm.value);
UIkit.notification('Community has been <b>successfully removed</b>!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.log(err.status);
}
));
}
this.searchUtils.totalResults = this.selectedCommunities.length;
this.filterPreviewCommunities(this.filterForm.value);
UIkit.notification('Community has been <b>successfully removed</b>!', {
status: 'success',
timeout: 6000,
pos: 'bottom-right'
});
this.zenodoCommunitiesChanged.emit({
value: this.selectedCommunities,
});
},
err => {
this.handleError('An error has been occurred. Try again later!');
console.log(err.status);
}
));
}
public removeCommunity(comm) {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {
"errorCode": LoginErrorCodes.NOT_VALID,
"redirectUrl": this._router.url
}
});
} else {
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();
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();
}
@ -165,18 +154,14 @@ export class ManageZenodoCommunitiesComponent implements OnInit, OnDestroy {
}
return totalPages;
}
public updatePage($event) {
HelperFunctions.scroll();
this.page = $event.value;
}
addNew() {
this.toggleView.emit(null);
}
public onSearchClose() {
this.searchUtils.keyword = this.filterForm.value;
}
public resetInput() {
this.searchUtils.keyword = null;
this.searchInputComponent.reset()
this.addZenodoCommunity.emit();
}
handleError(message: string) {

View File

@ -3,30 +3,36 @@ import {Component, Input} from '@angular/core';
@Component({
selector: 'preview-zenodo-community',
template: `
<div class="uk-grid uk-flex uk-flex-middle">
<a *ngIf="item.logoUrl" target="_blank" [href]="item.link" class="uk-width-auto">
<img class="uk-comment-avatar" src="{{item.logoUrl}}" width="80" height="80" alt="">
</a>
<div class="uk-width-expand">
<a class="" target="_blank" href="{{item.link}}">
<span *ngIf="item.title">{{item.title}}</span>
<span *ngIf="!item.title">[no name available]</span>
<span class="custom-external custom-icon space"></span>
</a>
<div class="uk-comment-meta uk-margin-small-top">
last update: {{item.date | date:'yyyy/MM/dd'}}
</div>
</div>
</div>
<div *ngIf="item.description"
class="uk-comment-body uk-text-meta uk-margin-top multi-line-ellipsis lines-3 ">
<p>{{item.description|htmlToString}}</p>
</div>
<div class="header uk-grid uk-grid-medium uk-flex-middle" uk-grid>
<div class="uk-width-auto" *ngIf="item.logoUrl">
<a target="_blank" [href]="item.link">
<img *ngIf="item.logoUrl"
src="{{item.logoUrl}}" width="80" height="80"
alt="{{item.title}}">
</a>
</div>
<div class="uk-width-expand">
<div *ngIf="master"><div class="uk-badge uk-margin-small-bottom">Main Zenodo Community</div></div>
<h2 class="uk-margin-remove uk-text-break uk-inline-block uk-h6">
<a class="custom-external uk-link uk-link-text uk-width-expand" target="_blank"
href="{{item.link}}">
<span *ngIf="item.title">{{item.title}}</span>
<span *ngIf="!item.title">[no name available]</span>
</a>
</h2>
<div *ngIf="item.date" class="uk-text-small uk-margin-small-top">
<span class="uk-text-meta">Last update: </span>{{item.date | date:'yyyy/MM/dd'}}
</div>
</div>
</div>
<div class="uk-margin-top uk-text-small multi-line-ellipsis lines-3">
<div *ngIf="item.description" class="uk-margin-remove"
[innerHtml]="item.description"></div>
</div>
`
})
export class PreviewZenodoCommunityComponent {
@Input() item;
@Input() master: boolean = false;
}

View File

@ -1,8 +1,6 @@
import {Component, ElementRef, OnDestroy, OnInit, ViewChild} from '@angular/core';
import {Component, ElementRef, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {Session} from '../../openaireLibrary/login/utils/helper.class';
import {LoginErrorCodes} from '../../openaireLibrary/login/utils/guardHelper.class';
import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties';
import {ZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {SearchZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service';
@ -12,7 +10,6 @@ import {CommunityInfo} from '../../openaireLibrary/connect/community/communityIn
import {ZenodoCommunityInfo} from '../../openaireLibrary/connect/zenodoCommunities/zenodoCommunityInfo';
import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class';
import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes';
import {HelperFunctions} from '../../openaireLibrary/utils/HelperFunctions.class';
import {Title} from '@angular/platform-browser';
import {properties} from '../../../environments/environment';
import {Subscription} from 'rxjs';
@ -22,32 +19,21 @@ import {ManageZenodoCommunitiesComponent} from './manage-zenodo-communities.comp
@Component({
selector: 'zenodo-communities',
template: `
<div *ngIf="zenodoSearchUtils.status == errorCodes.LOADING" page-content>
<div header>
<community-info tab="zenodo-communities"></community-info>
</div>
<div inner>
<div class="uk-position-center">
<loading></loading>
</div>
</div>
</div>
<ng-container *ngIf="zenodoSearchUtils.status != errorCodes.LOADING">
<manage-zenodo-communities #manage *ngIf="communityId && zenodoSearchUtils" [masterCommunity]=masterZenodoCommunity [selectedCommunities]=selectedCommunities
[properties]=properties [communityId]=communityId [searchUtils]=zenodoSearchUtils
(toggleView)="toggleAction()"></manage-zenodo-communities>
</ng-container>
<fs-modal #fsModal (cancelEmitter)="toggleAction()">
<add-zenodo-communities *ngIf="zenodoSearchUtils.status != errorCodes.LOADING" [masterCommunity]=masterZenodoCommunity [selectedCommunities]=selectedCommunities
[properties]=properties [communityId]=communityId></add-zenodo-communities>
<manage-zenodo-communities #manage *ngIf="community && zenodoSearchUtils && zenodoSearchUtils.status != errorCodes.LOADING"
[loading]="showLoadingInRemove" [disableAdd]="add && add.loading"
[masterCommunity]=masterZenodoCommunity [selectedCommunities]=selectedCommunities
[community]="community" [searchUtils]=zenodoSearchUtils (addZenodoCommunity)="openAddZenodoCommunites()"
(zenodoCommunitiesChanged)="zenodoCommunitiesChanged($event)"></manage-zenodo-communities>
<fs-modal #fsModal>
<add-zenodo-communities #add *ngIf="zenodoSearchUtils.status != errorCodes.LOADING" [masterCommunity]=masterZenodoCommunity
[selectedCommunities]=selectedCommunities
[community]="community" (zenodoCommunitiesChanged)="zenodoCommunitiesChanged($event)"></add-zenodo-communities>
</fs-modal>
`
})
export class ZenodoCommunitiesComponent implements OnInit, OnDestroy {
public communityId: string = null;
private community: CommunityInfo = null;
public community: CommunityInfo = null;
public toggle = false;
public updateCommunityProjectsOnToggle = false;
public pageTitle = 'Manage zenodo communities';
masterZenodoCommunityId = null;
masterZenodoCommunity = null;
@ -59,8 +45,9 @@ export class ZenodoCommunitiesComponent implements OnInit, OnDestroy {
public errorCodes: ErrorCodes = new ErrorCodes();
subscriptions = [];
@ViewChild('fsModal', { static: true }) fullscreen: FullScreenModalComponent;
@ViewChild('manage') manage: ManageZenodoCommunitiesComponent;
@ViewChild(ManageZenodoCommunitiesComponent) manage: ManageZenodoCommunitiesComponent;
public showLoadingInRemove: boolean = true;
constructor(private element: ElementRef, private route: ActivatedRoute, private _router: Router,
private _zenodoCommunitieService: ZenodoCommunitiesService, private title: Title,
private _communityService: CommunityService,
@ -70,55 +57,52 @@ export class ZenodoCommunitiesComponent implements OnInit, OnDestroy {
ngOnInit() {
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this.properties = properties;
this.route.params.subscribe(params => {
this.communityId = params['community'];
if (this.communityId) {
this.title.setTitle(this.communityId.toUpperCase() + ' | Zenodo Communities');
if (this.communityId != null && this.communityId !== '') {
this.subscriptions.push(this._communityService.getCommunityAsObservable().subscribe(
community => {
this.community = community;
this.masterZenodoCommunityId = this.community.zenodoCommunity;
if (this.masterZenodoCommunityId) {
this.subscriptions.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties,
this.properties.zenodoCommunities + this.masterZenodoCommunityId,
null).subscribe(
result => {
this.masterZenodoCommunity = result;
},
error => {
const emptyCommunity: ZenodoCommunityInfo = new ZenodoCommunityInfo();
emptyCommunity.id = this.masterZenodoCommunityId;
emptyCommunity.title = this.masterZenodoCommunityId;
this.masterZenodoCommunity = emptyCommunity;
// console.log("Master Zenodo community'"+this.masterZenodoCommunityId+"' couldn't be loaded");
}
));
}
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this._searchZenodoCommunitiesService.searchZCommunities(this.properties, this.communityId).subscribe(
result => {
this.selectedCommunityIds = result;
this.zenodoSearchUtils.totalResults = this.selectedCommunityIds.length;
if (this.selectedCommunityIds.length === 0) {
this.zenodoSearchUtils.status = this.errorCodes.NONE;
}
for (let i = 0; i < this.selectedCommunityIds.length; i++) {
this.getZenodoCommunityById(
this.selectedCommunityIds[i]['zenodoid'],
this.selectedCommunityIds[i]['id']);
}
},
error => {
console.log('list of zenodo communities couldn\'t be loaded');
this.zenodoSearchUtils.status = this.errorCodes.DONE;
} // this.handleError('System error retrieving community profile', error)
);
}));
this.subscriptions.push(this._communityService.getCommunityAsObservable().subscribe(
community => {
this.community = community;
this.title.setTitle(this.community.shortTitle.toUpperCase() + ' | Zenodo Communities');
this.masterZenodoCommunityId = this.community.zenodoCommunity;
if (this.masterZenodoCommunityId) {
this.subscriptions.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties,
this.properties.zenodoCommunities + this.masterZenodoCommunityId,
null).subscribe(
result => {
this.masterZenodoCommunity = result;
this.selectedCommunities.unshift(this.masterZenodoCommunity);
},
error => {
const emptyCommunity: ZenodoCommunityInfo = new ZenodoCommunityInfo();
emptyCommunity.id = this.masterZenodoCommunityId;
emptyCommunity.title = this.masterZenodoCommunityId;
this.masterZenodoCommunity = emptyCommunity;
}
));
}
}
});
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this._searchZenodoCommunitiesService.searchZCommunities(this.properties, this.community.communityId).subscribe(
result => {
this.selectedCommunityIds = result;
this.zenodoSearchUtils.totalResults = this.selectedCommunityIds.length;
if (this.selectedCommunityIds.length === 0) {
this.zenodoSearchUtils.status = this.errorCodes.NONE;
}
for (let i = 0; i < this.selectedCommunityIds.length; i++) {
this.getZenodoCommunityById(
this.selectedCommunityIds[i]['zenodoid'],
this.selectedCommunityIds[i]['id']);
}
},
error => {
console.log('list of zenodo communities couldn\'t be loaded');
this.zenodoSearchUtils.status = this.errorCodes.DONE;
}
);
})
);
this.fullscreen.title = "Search and Add Zenodo Communities";
this.fullscreen.okButtonText = "Done";
this.fullscreen.okButton = true;
@ -132,26 +116,6 @@ export class ZenodoCommunitiesComponent implements OnInit, OnDestroy {
});
}
public toggleAction() {
if (!Session.isLoggedIn()) {
this._router.navigate(['/user-info'], {
queryParams: {'errorCode': LoginErrorCodes.NOT_VALID, 'redirectUrl': this._router.url}
});
} else {
HelperFunctions.scroll();
this.toggle = !this.toggle;
if (this.toggle) {
this.fullscreen.open();
this.pageTitle = 'Manage zenodo communities';
} else {
this.manage.filterPreviewCommunities(this.manage.filterForm.value);
this.updateCommunityProjectsOnToggle = false;
this.pageTitle = 'Search zenodo communities';
}
}
}
getZenodoCommunityById(zenodoid, openaireId) {
this.subscriptions.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties,
this.properties.zenodoCommunities + zenodoid, openaireId).subscribe(
@ -178,4 +142,22 @@ export class ZenodoCommunitiesComponent implements OnInit, OnDestroy {
}
));
}
public openAddZenodoCommunites() {
this.fullscreen.title = "Search and Add Zenodo Communities";
this.fullscreen.okButtonText = "Done";
this.fullscreen.back = true;
this.fullscreen.okButton = true;
this.fullscreen.open();
}
public zenodoCommunitiesChanged($event) {
this.selectedCommunities = $event.value;
this.showLoadingInRemove = false;
if (this.fullscreen.isOpen) {
this.manage.filterPreviewCommunities(this.manage.filterForm.value);
}
}
}

View File

@ -13,19 +13,18 @@ import {ZenodoCommunitiesRoutingModule} from './zenodo-communities-routing.modul
import {CommunityInfoModule} from '../community-info/community-info.module';
import {SearchInputModule} from '../../openaireLibrary/sharedComponents/search-input/search-input.module';
import {IconsModule} from '../../openaireLibrary/utils/icons/icons.module';
import {IconsService} from '../../openaireLibrary/utils/icons/icons.service';
import {add, arrow_left, remove_circle_outline} from '../../openaireLibrary/utils/icons/icons';
import {NoLoadPaging} from '../../openaireLibrary/searchPages/searchUtils/no-load-paging.module';
import {LoadingModule} from '../../openaireLibrary/utils/loading/loading.module';
import {PreviewZenodoCommunityComponent} from './preview-z-community.component';
import {PageContentModule} from '../../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module';
import {FullScreenModalModule} from '../../openaireLibrary/utils/modal/full-screen-modal/full-screen-modal.module';
import {HTMLToStringPipeModule} from '../../openaireLibrary/utils/pipes/HTMLToStringPipe.module';
import {PagingModule} from "../../openaireLibrary/utils/paging.module";
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule, SearchZenodoCommunitiesServiceModule, ZenodoCommunitiesServiceModule,
AlertModalModule, ZenodoCommunitiesRoutingModule, CommunityInfoModule, PageContentModule, SearchInputModule, IconsModule, NoLoadPaging, LoadingModule, FullScreenModalModule, HTMLToStringPipeModule
AlertModalModule, ZenodoCommunitiesRoutingModule, CommunityInfoModule, PageContentModule, SearchInputModule, IconsModule, NoLoadPaging, LoadingModule, FullScreenModalModule, HTMLToStringPipeModule, PagingModule
],
declarations: [
ManageZenodoCommunitiesComponent, ZenodoCommunitiesComponent, AddZenodoCommunitiesComponent, PreviewZenodoCommunityComponent
@ -39,7 +38,5 @@ import {HTMLToStringPipeModule} from '../../openaireLibrary/utils/pipes/HTMLToSt
})
export class ZenodoCommunitiesModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([add, arrow_left, remove_circle_outline ])
}
constructor() {}
}