Merge Angular 16 Irish Monitor to develop #33
|
@ -6,6 +6,9 @@ import {CommunityInfo} from "./community/communityInfo";
|
||||||
export class ConnectHelper {
|
export class ConnectHelper {
|
||||||
|
|
||||||
public static getCommunityFromDomain(domain: string): string{
|
public static getCommunityFromDomain(domain: string): string{
|
||||||
|
if(properties.adminToolsPortalType === 'irish') {
|
||||||
|
return properties.adminToolsCommunity;
|
||||||
|
}
|
||||||
if(properties.environment == "development" &&
|
if(properties.environment == "development" &&
|
||||||
(properties.adminToolsPortalType == "connect" || properties.adminToolsPortalType == "community"
|
(properties.adminToolsPortalType == "connect" || properties.adminToolsPortalType == "community"
|
||||||
|| properties.adminToolsPortalType == "aggregator" || properties.adminToolsPortalType == "eosc")) {
|
|| properties.adminToolsPortalType == "aggregator" || properties.adminToolsPortalType == "eosc")) {
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
import {StakeholderEntities} from "../../monitor/entities/stakeholder";
|
import {StakeholderConfiguration} from "../../monitor-admin/utils/indicator-utils";
|
||||||
|
|
||||||
export class PortalUtils{
|
export class PortalUtils {
|
||||||
|
|
||||||
portalTypes: Option[] = [
|
portalTypes: Option[] = [
|
||||||
{value: 'explore', label: 'Explore Portal'},
|
{value: 'explore', label: 'Explore Portal'},
|
||||||
{value: 'connect', label: 'Connect portal'},
|
{value: 'connect', label: 'Connect portal'},
|
||||||
{value: 'monitor', label: 'Monitor portal'},
|
{value: 'monitor', label: 'Monitor portal'},
|
||||||
{value: 'community', label: 'Community Gateway'},
|
{value: 'community', label: 'Community Gateway'},
|
||||||
{value: 'funder', label: StakeholderEntities.FUNDER + ' Dashboard'},
|
{value: 'funder', label: StakeholderConfiguration.ENTITIES.funder + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
{value: 'ri', label: StakeholderEntities.RI + ' Dashboard'},
|
{value: 'ri', label: StakeholderConfiguration.ENTITIES.ri + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
{value: 'organization', label: StakeholderEntities.ORGANIZATION + ' Dashboard'},
|
{value: 'organization', label: StakeholderConfiguration.ENTITIES.organization + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
{value: 'project', label: StakeholderEntities.PROJECT + ' Dashboard'}
|
{value: 'project', label: StakeholderConfiguration.ENTITIES.project + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
import {ChangeDetectorRef, Directive, OnInit} from "@angular/core";
|
||||||
|
import {BaseComponent} from "../../../sharedComponents/base/base.component";
|
||||||
|
import {MenuItem} from "../../../sharedComponents/menu";
|
||||||
|
import {LayoutService} from "./layout.service";
|
||||||
|
|
||||||
|
@Directive()
|
||||||
|
export class SidebarBaseComponent extends BaseComponent implements OnInit {
|
||||||
|
hasSidebar: boolean = false;
|
||||||
|
hasInternalSidebar: boolean = false;
|
||||||
|
/**
|
||||||
|
* Menu Items
|
||||||
|
* */
|
||||||
|
sideBarItems: MenuItem[] = [];
|
||||||
|
backItem: MenuItem = null;
|
||||||
|
|
||||||
|
protected layoutService: LayoutService;
|
||||||
|
protected cdr: ChangeDetectorRef;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.subscriptions.push(this.layoutService.hasSidebar.subscribe(hasSidebar => {
|
||||||
|
this.hasSidebar = hasSidebar;
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
}));
|
||||||
|
this.subscriptions.push(this.layoutService.hasInternalSidebar.subscribe(hasInternalSidebar => {
|
||||||
|
this.hasInternalSidebar = hasInternalSidebar;
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
}));
|
||||||
|
this.layoutService.setOpen(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get open() {
|
||||||
|
return this.layoutService.open;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get hover() {
|
||||||
|
return this.layoutService.hover;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
import {stakeholderTypes} from "../../monitor/entities/stakeholder";
|
import {StakeholderConfiguration} from "../../monitor-admin/utils/indicator-utils";
|
||||||
|
|
||||||
|
|
||||||
export class User {
|
export class User {
|
||||||
email: string;
|
email: string;
|
||||||
|
@ -100,7 +101,7 @@ export class Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isMonitorCurator(user: User): boolean {
|
public static isMonitorCurator(user: User): boolean {
|
||||||
return stakeholderTypes.filter(stakeholderType => this.isTypeCurator(stakeholderType.value, user)).length > 0;
|
return StakeholderConfiguration.TYPES.filter(stakeholderType => this.isTypeCurator(stakeholderType.value, user)).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isCommunityCurator(user: User): boolean {
|
public static isCommunityCurator(user: User): boolean {
|
||||||
|
@ -112,7 +113,7 @@ export class Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isCurator(type: string, user: User): boolean {
|
public static isCurator(type: string, user: User): boolean {
|
||||||
return (type === 'community' || stakeholderTypes.find(stakeholderType => stakeholderType.value == type)) && this.isTypeCurator(type, user);
|
return (type === 'community' || StakeholderConfiguration.TYPES.find(stakeholderType => stakeholderType.value == type)) && this.isTypeCurator(type, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isPortalAdministrator(user: User): boolean {
|
public static isPortalAdministrator(user: User): boolean {
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
import {Component, Input, OnDestroy, ViewChild} from "@angular/core";
|
import {Component, Input, ViewChild} from "@angular/core";
|
||||||
import {Stakeholder} from "../../../monitor/entities/stakeholder";
|
import {Stakeholder} from "../../../monitor/entities/stakeholder";
|
||||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
||||||
import {StakeholderUtils} from "../../utils/indicator-utils";
|
|
||||||
import {Option} from "../../../sharedComponents/input/input.component";
|
import {Option} from "../../../sharedComponents/input/input.component";
|
||||||
import {Subscription} from "rxjs";
|
import {Subscription} from "rxjs";
|
||||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
|
||||||
import {properties} from "src/environments/environment";
|
|
||||||
import {StakeholderService} from "../../../monitor/services/stakeholder.service";
|
import {StakeholderService} from "../../../monitor/services/stakeholder.service";
|
||||||
import {UtilitiesService} from "../../../services/utilities.service";
|
import {UtilitiesService} from "../../../services/utilities.service";
|
||||||
import {Role, Session, User} from "../../../login/utils/helper.class";
|
import {Role, Session, User} from "../../../login/utils/helper.class";
|
||||||
|
@ -16,121 +13,132 @@ import {NotificationUtils} from "../../../notifications/notification-utils";
|
||||||
import {Notification} from "../../../notifications/notifications";
|
import {Notification} from "../../../notifications/notifications";
|
||||||
import {NotificationHandler} from "../../../utils/notification-handler";
|
import {NotificationHandler} from "../../../utils/notification-handler";
|
||||||
import {StatsProfilesService} from "../../utils/services/stats-profiles.service";
|
import {StatsProfilesService} from "../../utils/services/stats-profiles.service";
|
||||||
|
import {StakeholderBaseComponent} from "../../utils/stakeholder-base.component";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'edit-stakeholder',
|
selector: 'edit-stakeholder',
|
||||||
template: `
|
template: `
|
||||||
<form *ngIf="stakeholderFb" [formGroup]="stakeholderFb">
|
<div class="uk-margin-medium-bottom">
|
||||||
<div class="uk-grid uk-grid-large" uk-grid>
|
<form *ngIf="stakeholderFb" [formGroup]="stakeholderFb">
|
||||||
<div class="uk-width-1-2@m">
|
<div class="uk-grid uk-grid-large" uk-grid>
|
||||||
<div input id="name" [formInput]="stakeholderFb.get('name')"
|
<div class="uk-width-1-2@m">
|
||||||
placeholder="Name"></div>
|
<div input id="name" [formInput]="stakeholderFb.get('name')"
|
||||||
</div>
|
placeholder="Name"></div>
|
||||||
<div class="uk-width-1-2@m">
|
</div>
|
||||||
<div input [formInput]="stakeholderFb.get('alias')"
|
<div class="uk-width-1-2@m">
|
||||||
placeholder="URL Alias"></div>
|
<div input [formInput]="stakeholderFb.get('alias')"
|
||||||
</div>
|
placeholder="URL Alias"></div>
|
||||||
<div class="uk-width-1-3@m">
|
|
||||||
<div input [formInput]="stakeholderFb.get('index_id')"
|
|
||||||
placeholder="Index ID"></div>
|
|
||||||
</div>
|
|
||||||
<div class="uk-width-1-3@m">
|
|
||||||
<div input [formInput]="stakeholderFb.get('index_name')"
|
|
||||||
placeholder="Index Name"></div>
|
|
||||||
</div>
|
|
||||||
<div class="uk-width-1-3@m">
|
|
||||||
<div input [formInput]="stakeholderFb.get('index_shortName')"
|
|
||||||
placeholder="Index Short Name"></div>
|
|
||||||
</div>
|
|
||||||
<ng-container *ngIf="isCurator">
|
|
||||||
<div class="uk-width-1-3@m">
|
|
||||||
<div *ngIf="statsProfiles" input [formInput]="stakeholderFb.get('statsProfile')" [type]="'select'"
|
|
||||||
[options]="statsProfiles"
|
|
||||||
placeholder="Stats Profile"></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-width-1-3@m">
|
<div class="uk-width-1-3@m">
|
||||||
<div input [formInput]="stakeholderFb.get('projectUpdateDate')" [type]="'date'"
|
<div input [formInput]="stakeholderFb.get('index_id')"
|
||||||
placeholder="Last Project Update"></div>
|
placeholder="Index ID"></div>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
<div class="uk-width-1-3@m">
|
||||||
<div class="uk-width-1-3@m">
|
<div input [formInput]="stakeholderFb.get('index_name')"
|
||||||
<div input [formInput]="stakeholderFb.get('locale')" [type]="'select'"
|
placeholder="Index Name"></div>
|
||||||
[options]="stakeholderUtils.locales"
|
</div>
|
||||||
placeholder="Locale"></div>
|
<div class="uk-width-1-3@m">
|
||||||
</div>
|
<div input [formInput]="stakeholderFb.get('index_shortName')"
|
||||||
<div class="uk-width-1-1">
|
placeholder="Index Short Name"></div>
|
||||||
<div input [type]="'textarea'" placeholder="Description"
|
</div>
|
||||||
[rows]="4" [formInput]="stakeholderFb.get('description')"></div>
|
<ng-container *ngIf="isCurator">
|
||||||
</div>
|
<div class="uk-width-1-3@m">
|
||||||
<div class="uk-width-1-1">
|
<div *ngIf="statsProfiles" input [formInput]="stakeholderFb.get('statsProfile')"
|
||||||
<input #file id="photo" type="file" class="uk-hidden" (change)="fileChangeEvent($event)"/>
|
[type]="'select'"
|
||||||
<div *ngIf="!stakeholderFb.get('isUpload').value" class="uk-grid uk-grid-column-large" uk-grid>
|
[options]="statsProfiles"
|
||||||
<div class="uk-margin-top uk-width-auto@l uk-width-1-1">
|
placeholder="Stats Profile"></div>
|
||||||
<div class="uk-grid uk-grid-column-large uk-flex-middle" uk-grid>
|
</div>
|
||||||
<div class="uk-width-auto@l uk-width-1-1 uk-flex uk-flex-center">
|
<div class="uk-width-1-3@m">
|
||||||
<button class="uk-button uk-button-primary uk-flex uk-flex-middle uk-flex-wrap"
|
<div input [formInput]="stakeholderFb.get('projectUpdateDate')" [type]="'date'"
|
||||||
(click)="file.click()">
|
placeholder="Last Project Update"></div>
|
||||||
<icon name="cloud_upload" [flex]="true"></icon>
|
</div>
|
||||||
<span class="uk-margin-small-left">Upload a file</span>
|
</ng-container>
|
||||||
</button>
|
<div class="uk-width-1-3@m">
|
||||||
</div>
|
<div input [formInput]="stakeholderFb.get('locale')" [type]="'select'"
|
||||||
<div class="uk-text-center uk-text-bold uk-width-expand">
|
[options]="stakeholderUtils.locales"
|
||||||
OR
|
placeholder="Locale"></div>
|
||||||
|
</div>
|
||||||
|
<div class="uk-width-1-1">
|
||||||
|
<div input [type]="'textarea'" placeholder="Description"
|
||||||
|
[rows]="4" [formInput]="stakeholderFb.get('description')"></div>
|
||||||
|
</div>
|
||||||
|
<div class="uk-width-1-1">
|
||||||
|
<input #file id="photo" type="file" class="uk-hidden" (change)="fileChangeEvent($event)"/>
|
||||||
|
<div *ngIf="!stakeholderFb.get('isUpload').value" class="uk-grid uk-grid-column-large" uk-grid>
|
||||||
|
<div class="uk-margin-xsmall-top uk-width-auto@l uk-width-1-1">
|
||||||
|
<div class="uk-grid uk-grid-column-large uk-flex-middle" uk-grid>
|
||||||
|
<div class="uk-width-auto@l uk-width-1-1 uk-flex uk-flex-center">
|
||||||
|
<button class="uk-button uk-button-primary uk-flex uk-flex-middle uk-flex-wrap"
|
||||||
|
(click)="file.click()">
|
||||||
|
<icon name="cloud_upload" [flex]="true"></icon>
|
||||||
|
<span class="uk-margin-small-left">Upload a file</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="uk-text-center uk-text-bold uk-width-expand">
|
||||||
|
OR
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div input class="uk-width-expand" type="logoURL" [placeholder]="'Link to the logo'"
|
||||||
|
[formInput]="stakeholderFb.get('logoUrl')"></div>
|
||||||
</div>
|
</div>
|
||||||
<div input class="uk-width-expand" type="logoURL" [placeholder]="'Link to the logo'"
|
<div *ngIf="stakeholderFb.get('isUpload').value" class="uk-width-1-1 uk-flex uk-flex-middle">
|
||||||
[formInput]="stakeholderFb.get('logoUrl')"></div>
|
<div class="uk-card uk-card-default uk-text-center uk-border-circle">
|
||||||
|
<img class="uk-position-center uk-blend-multiply" [src]="photo">
|
||||||
|
</div>
|
||||||
|
<div class="uk-margin-left">
|
||||||
|
<button (click)="remove()" class="uk-button-danger uk-icon-button uk-icon-button-small">
|
||||||
|
<icon [flex]="true" ratio="0.8" name="delete"></icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="uk-margin-small-left">
|
||||||
|
<button class="uk-button-secondary uk-icon-button uk-icon-button-small"
|
||||||
|
(click)="file.click()">
|
||||||
|
<icon [flex]="true" ratio="0.8" name="edit"></icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Full width error message -->
|
||||||
|
<div *ngIf="uploadError"
|
||||||
|
class="uk-text-danger uk-margin-small-top uk-width-1-1">{{uploadError}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="stakeholderFb.get('isUpload').value" class="uk-width-1-1 uk-flex uk-flex-middle">
|
<div class="uk-width-1-1">
|
||||||
<div class="uk-card uk-card-default uk-text-center uk-border-circle">
|
<div class="uk-grid uk-child-width-expand@m uk-child-width-1-1" uk-grid>
|
||||||
<img class="uk-position-center uk-blend-multiply" [src]="photo">
|
<div *ngIf="showVisibility">
|
||||||
</div>
|
<div input [formInput]="stakeholderFb.get('visibility')"
|
||||||
<div class="uk-margin-left">
|
[placeholder]="'Select a status'"
|
||||||
<button (click)="remove()" class="uk-button-danger uk-icon-button uk-icon-button-small">
|
[options]="stakeholderUtils.visibilities" type="select"></div>
|
||||||
<icon [flex]="true" ratio="0.8" name="delete"></icon>
|
</div>
|
||||||
</button>
|
<div [class.uk-width-1-2@m]="!showVisibility && !showFunderType && !canChooseTemplate">
|
||||||
</div>
|
<div input [formInput]="stakeholderFb.get('type')"
|
||||||
<div class="uk-margin-small-left">
|
[placeholder]="'Select a type of ' + entities.stakeholder"
|
||||||
<button class="uk-button-secondary uk-icon-button uk-icon-button-small"
|
[options]="typesByRole" type="select"></div>
|
||||||
(click)="file.click()">
|
</div>
|
||||||
<icon [flex]="true" ratio="0.8" name="edit"></icon>
|
<div *ngIf="showFunderType">
|
||||||
</button>
|
<div input [formInput]="stakeholderFb.get('funderType')"
|
||||||
|
[placeholder]="'Select a type of ' + entities.funder"
|
||||||
|
[options]="stakeholderUtils.funderTypes" type="select"></div>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="canChooseTemplate">
|
||||||
|
<div [placeholder]="'Select a template'"
|
||||||
|
input [formInput]="stakeholderFb.get('defaultId')"
|
||||||
|
[options]="defaultStakeholdersOptions" type="select"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Full width error message -->
|
|
||||||
<div *ngIf="uploadError" class="uk-text-danger uk-margin-small-top uk-width-1-1">{{uploadError}}</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div [class]="canChooseTemplate ? 'uk-width-1-3@m' : 'uk-width-1-2@m'">
|
</form>
|
||||||
<div input [formInput]="stakeholderFb.get('visibility')"
|
<div #notify [class.uk-hidden]="!stakeholderFb" notify-form
|
||||||
[placeholder]="'Select a status'"
|
class="uk-width-1-1 uk-margin-large-top"></div>
|
||||||
[options]="stakeholderUtils.statuses" type="select"></div>
|
</div>
|
||||||
</div>
|
|
||||||
<div [class]="canChooseTemplate ? 'uk-width-1-3@m' : 'uk-width-1-2@m'">
|
|
||||||
<div input [formInput]="stakeholderFb.get('type')"
|
|
||||||
[placeholder]="'Select a type'"
|
|
||||||
[options]="types" type="select"></div>
|
|
||||||
</div>
|
|
||||||
<ng-container *ngIf="canChooseTemplate">
|
|
||||||
<div class="uk-width-1-3@m">
|
|
||||||
<div [placeholder]="'Select a template'"
|
|
||||||
input [formInput]="stakeholderFb.get('defaultId')"
|
|
||||||
[options]="defaultStakeholdersOptions" type="select"></div>
|
|
||||||
</div>
|
|
||||||
</ng-container>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div #notify [class.uk-hidden]="!stakeholderFb" notify-form
|
|
||||||
class="uk-width-1-1 uk-margin-large-top uk-margin-medium-bottom"></div>
|
|
||||||
`,
|
`,
|
||||||
styleUrls: ['edit-stakeholder.component.less']
|
styleUrls: ['edit-stakeholder.component.less']
|
||||||
})
|
})
|
||||||
export class EditStakeholderComponent implements OnDestroy {
|
export class EditStakeholderComponent extends StakeholderBaseComponent {
|
||||||
@Input()
|
@Input()
|
||||||
public disableAlias: boolean = false;
|
public disableAlias: boolean = false;
|
||||||
public stakeholderFb: UntypedFormGroup;
|
public stakeholderFb: UntypedFormGroup;
|
||||||
public secure: boolean = false;
|
public secure: boolean = false;
|
||||||
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
|
||||||
public defaultStakeholdersOptions: Option[];
|
public defaultStakeholdersOptions: Option[];
|
||||||
public defaultStakeholders: Stakeholder[];
|
public defaultStakeholders: Stakeholder[];
|
||||||
public alias: string[];
|
public alias: string[];
|
||||||
|
@ -138,10 +146,8 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
public isDefault: boolean;
|
public isDefault: boolean;
|
||||||
public isNew: boolean;
|
public isNew: boolean;
|
||||||
public loading: boolean = false;
|
public loading: boolean = false;
|
||||||
public types: Option[];
|
public typesByRole: Option[];
|
||||||
public statsProfiles: string[];
|
public statsProfiles: string[];
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
private subscriptions: any[] = [];
|
|
||||||
/**
|
/**
|
||||||
* Photo upload
|
* Photo upload
|
||||||
* */
|
* */
|
||||||
|
@ -158,16 +164,21 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
private stakeholderService: StakeholderService,
|
private stakeholderService: StakeholderService,
|
||||||
private statsProfileService: StatsProfilesService,
|
private statsProfileService: StatsProfilesService,
|
||||||
private utilsService: UtilitiesService, private userManagementService: UserManagementService,) {
|
private utilsService: UtilitiesService, private userManagementService: UserManagementService,) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
this.reset();
|
this.reset();
|
||||||
|
super.ngOnDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(stakeholder: Stakeholder, alias: string[], defaultStakeholders: Stakeholder[], isDefault: boolean, isNew: boolean) {
|
public init(stakeholder: Stakeholder, alias: string[], defaultStakeholders: Stakeholder[], isDefault: boolean, isNew: boolean) {
|
||||||
this.reset();
|
this.reset();
|
||||||
this.deleteCurrentPhoto = false;
|
this.deleteCurrentPhoto = false;
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
|
if (this.stakeholderUtils.defaultValue(this.stakeholderUtils.visibilities)) {
|
||||||
|
this.stakeholder.visibility = this.stakeholderUtils.defaultValue(this.stakeholderUtils.visibilities);
|
||||||
|
}
|
||||||
this.alias = alias;
|
this.alias = alias;
|
||||||
this.defaultStakeholders = defaultStakeholders;
|
this.defaultStakeholders = defaultStakeholders;
|
||||||
this.isDefault = isDefault;
|
this.isDefault = isDefault;
|
||||||
|
@ -183,7 +194,7 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
} else {
|
} else {
|
||||||
this.statsProfiles = [];
|
this.statsProfiles = [];
|
||||||
}
|
}
|
||||||
this.types = this.stakeholderUtils.getTypesByUserRoles(this.user, this.stakeholder.alias);
|
this.typesByRole = this.stakeholderUtils.getTypesByUserRoles(this.user, this.stakeholder.alias);
|
||||||
this.stakeholderFb = this.fb.group({
|
this.stakeholderFb = this.fb.group({
|
||||||
_id: this.fb.control(this.stakeholder._id),
|
_id: this.fb.control(this.stakeholder._id),
|
||||||
defaultId: this.fb.control(this.stakeholder.defaultId),
|
defaultId: this.fb.control(this.stakeholder.defaultId),
|
||||||
|
@ -197,15 +208,16 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
projectUpdateDate: this.fb.control(this.stakeholder.projectUpdateDate),
|
projectUpdateDate: this.fb.control(this.stakeholder.projectUpdateDate),
|
||||||
creationDate: this.fb.control(this.stakeholder.creationDate),
|
creationDate: this.fb.control(this.stakeholder.creationDate),
|
||||||
alias: this.fb.control(this.stakeholder.alias,
|
alias: this.fb.control(this.stakeholder.alias,
|
||||||
[
|
[
|
||||||
Validators.required,
|
Validators.required,
|
||||||
this.stakeholderUtils.aliasValidatorString(
|
this.stakeholderUtils.aliasValidatorString(
|
||||||
this.alias.filter(alias => alias !== this.stakeholder.alias)
|
this.alias.filter(alias => alias !== this.stakeholder.alias)
|
||||||
)]
|
)]
|
||||||
),
|
),
|
||||||
isDefault: this.fb.control((this.isDefault)),
|
isDefault: this.fb.control((this.isDefault)),
|
||||||
visibility: this.fb.control(this.stakeholder.visibility, Validators.required),
|
visibility: this.fb.control(this.stakeholder.visibility, Validators.required),
|
||||||
type: this.fb.control(this.stakeholder.type, Validators.required),
|
type: this.fb.control(this.stakeholder.type, Validators.required),
|
||||||
|
funderType: this.fb.control(this.stakeholder.funderType),
|
||||||
topics: this.fb.control(this.stakeholder.topics),
|
topics: this.fb.control(this.stakeholder.topics),
|
||||||
isUpload: this.fb.control(this.stakeholder.isUpload),
|
isUpload: this.fb.control(this.stakeholder.isUpload),
|
||||||
logoUrl: this.fb.control(this.stakeholder.logoUrl),
|
logoUrl: this.fb.control(this.stakeholder.logoUrl),
|
||||||
|
@ -234,7 +246,7 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
this.subscriptions.push(this.stakeholderFb.get('type').valueChanges.subscribe(value => {
|
this.subscriptions.push(this.stakeholderFb.get('type').valueChanges.subscribe(value => {
|
||||||
this.onTypeChange(value, defaultStakeholders);
|
this.onTypeChange(value, defaultStakeholders);
|
||||||
}));
|
}));
|
||||||
this.stakeholderFb.setControl('defaultId', this.fb.control(stakeholder.defaultId, (this.isDefault && !this.isNew)?[]:Validators.required));
|
this.stakeholderFb.setControl('defaultId', this.fb.control(stakeholder.defaultId, (this.isDefault && !this.isNew) ? [] : Validators.required));
|
||||||
if (!this.isNew) {
|
if (!this.isNew) {
|
||||||
this.notification = NotificationUtils.editStakeholder(this.user.firstname + ' ' + this.user.lastname, this.stakeholder.name);
|
this.notification = NotificationUtils.editStakeholder(this.user.firstname + ' ' + this.user.lastname, this.stakeholder.name);
|
||||||
this.notify.reset(this.notification.message);
|
this.notify.reset(this.notification.message);
|
||||||
|
@ -280,8 +292,8 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
|
|
||||||
public get disabled(): boolean {
|
public get disabled(): boolean {
|
||||||
return (this.stakeholderFb && this.stakeholderFb.invalid) ||
|
return (this.stakeholderFb && this.stakeholderFb.invalid) ||
|
||||||
(this.stakeholderFb && this.stakeholderFb.pristine && !this.isNew && !this.file) ||
|
(this.stakeholderFb && this.stakeholderFb.pristine && !this.isNew && !this.file) ||
|
||||||
(this.uploadError && this.uploadError.length > 0);
|
(this.uploadError && this.uploadError.length > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public get dirty(): boolean {
|
public get dirty(): boolean {
|
||||||
|
@ -303,7 +315,7 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
onTypeChange(value, defaultStakeholders: Stakeholder[]) {
|
onTypeChange(value, defaultStakeholders: Stakeholder[]) {
|
||||||
this.stakeholderFb.setControl('defaultId', this.fb.control(this.stakeholder.defaultId, (this.isDefault && !this.isNew)?[]:Validators.required));
|
this.stakeholderFb.setControl('defaultId', this.fb.control(this.stakeholder.defaultId, (this.isDefault && !this.isNew) ? [] : Validators.required));
|
||||||
this.defaultStakeholdersOptions = [{
|
this.defaultStakeholdersOptions = [{
|
||||||
label: 'New blank profile',
|
label: 'New blank profile',
|
||||||
value: '-1'
|
value: '-1'
|
||||||
|
@ -340,9 +352,9 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
if (this.isNew) {
|
if (this.isNew) {
|
||||||
let defaultStakeholder = this.defaultStakeholders.find(value => value._id === this.stakeholderFb.getRawValue().defaultId);
|
let defaultStakeholder = this.defaultStakeholders.find(value => value._id === this.stakeholderFb.getRawValue().defaultId);
|
||||||
this.stakeholderFb.setValue(this.stakeholderUtils.createFunderFromDefaultProfile(this.stakeholderFb.getRawValue(),
|
this.stakeholderFb.setValue(this.stakeholderUtils.createFunderFromDefaultProfile(this.stakeholderFb.getRawValue(),
|
||||||
(defaultStakeholder ? defaultStakeholder.topics : []), this.stakeholderFb.getRawValue().isDefault));
|
(defaultStakeholder ? defaultStakeholder.topics : []), this.stakeholderFb.getRawValue().isDefault));
|
||||||
this.removePhoto();
|
this.removePhoto();
|
||||||
if(this.stakeholderFb.getRawValue().isDefault) {
|
if (this.stakeholderFb.getRawValue().isDefault) {
|
||||||
this.stakeholderFb.get('defaultId').setValue(null);
|
this.stakeholderFb.get('defaultId').setValue(null);
|
||||||
}
|
}
|
||||||
this.subscriptions.push(this.stakeholderService.buildStakeholder(this.properties.monitorServiceAPIURL,
|
this.subscriptions.push(this.stakeholderService.buildStakeholder(this.properties.monitorServiceAPIURL,
|
||||||
|
@ -437,7 +449,11 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
public deletePhoto() {
|
public deletePhoto() {
|
||||||
if (this.stakeholder.logoUrl && this.stakeholder.isUpload) {
|
if (this.stakeholder.logoUrl && this.stakeholder.isUpload) {
|
||||||
this.subscriptions.push(this.utilsService.deletePhoto(this.properties.utilsService + '/delete/' +
|
this.subscriptions.push(this.utilsService.deletePhoto(this.properties.utilsService + '/delete/' +
|
||||||
encodeURIComponent(this.stakeholder.type) + "/" + encodeURIComponent(this.stakeholder.alias) + "/" + this.stakeholder.logoUrl).subscribe());
|
encodeURIComponent(this.stakeholder.type) + "/" + encodeURIComponent(this.stakeholder.alias) + "/" + this.stakeholder.logoUrl).subscribe());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get showFunderType() {
|
||||||
|
return super.showFunderType && this.stakeholderFb?.get('type').value === 'funder' && !this.isDefault;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,28 @@
|
||||||
import {ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
|
import {ChangeDetectorRef, Component, OnInit, ViewChild} from "@angular/core";
|
||||||
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
||||||
import {EnvProperties} from "../../utils/properties/env-properties";
|
|
||||||
import {Stakeholder} from "../../monitor/entities/stakeholder";
|
import {Stakeholder} from "../../monitor/entities/stakeholder";
|
||||||
import { Subscription, zip} from "rxjs";
|
import {zip} from "rxjs";
|
||||||
import {EditStakeholderComponent} from "./edit-stakeholder/edit-stakeholder.component";
|
import {EditStakeholderComponent} from "./edit-stakeholder/edit-stakeholder.component";
|
||||||
import {properties} from "src/environments/environment";
|
|
||||||
import {Title} from "@angular/platform-browser";
|
import {Title} from "@angular/platform-browser";
|
||||||
|
import {BaseComponent} from "../../sharedComponents/base/base.component";
|
||||||
|
import {ActivatedRoute} from "@angular/router";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'general',
|
selector: 'general',
|
||||||
templateUrl: "./general.component.html"
|
templateUrl: "./general.component.html"
|
||||||
})
|
})
|
||||||
export class GeneralComponent implements OnInit, OnDestroy {
|
export class GeneralComponent extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
public stakeholder: Stakeholder;
|
public stakeholder: Stakeholder;
|
||||||
public alias: string[];
|
public alias: string[];
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
public defaultStakeholders: Stakeholder[];
|
public defaultStakeholders: Stakeholder[];
|
||||||
public loading: boolean = false;
|
public loading: boolean = false;
|
||||||
private subscriptions: any[] = [];
|
|
||||||
@ViewChild('editStakeholderComponent') editStakeholderComponent: EditStakeholderComponent;
|
@ViewChild('editStakeholderComponent') editStakeholderComponent: EditStakeholderComponent;
|
||||||
|
|
||||||
constructor(private stakeholderService: StakeholderService,
|
constructor(private stakeholderService: StakeholderService,
|
||||||
private cdr: ChangeDetectorRef,
|
private cdr: ChangeDetectorRef,
|
||||||
private title: Title) {
|
protected _route: ActivatedRoute,
|
||||||
|
protected _title: Title) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
@ -32,7 +31,8 @@ export class GeneralComponent implements OnInit, OnDestroy {
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
if(this.stakeholder) {
|
if(this.stakeholder) {
|
||||||
this.title.setTitle(this.stakeholder.name + " | General");
|
this.title = this.stakeholder.name + " | General";
|
||||||
|
this.setMetadata();
|
||||||
let data = zip(
|
let data = zip(
|
||||||
this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
|
this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
|
||||||
this.stakeholderService.getAlias(this.properties.monitorServiceAPIURL)
|
this.stakeholderService.getAlias(this.properties.monitorServiceAPIURL)
|
||||||
|
@ -51,10 +51,9 @@ export class GeneralComponent implements OnInit, OnDestroy {
|
||||||
this.editStakeholderComponent.init(this.stakeholder, this.alias, this.defaultStakeholders, this.stakeholder.defaultId == null, false)
|
this.editStakeholderComponent.init(this.stakeholder, this.alias, this.defaultStakeholders, this.stakeholder.defaultId == null, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public save() {
|
public save() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.editStakeholderComponent.save((stakeholder) => {
|
this.editStakeholderComponent.save(stakeholder => {
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
this.stakeholderService.setStakeholder(this.stakeholder);
|
this.stakeholderService.setStakeholder(this.stakeholder);
|
||||||
this.reset();
|
this.reset();
|
||||||
|
@ -64,12 +63,4 @@ export class GeneralComponent implements OnInit, OnDestroy {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if(subscription instanceof Subscription) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative" [ngClass]="stakeholder.type">
|
<div class="uk-card uk-card-default uk-card-body uk-position-relative" [ngClass]="stakeholder.type">
|
||||||
<div class="uk-position-top-right uk-margin-small-right uk-margin-small-top">
|
<div class="uk-position-top-right uk-margin-small-right uk-margin-small-top">
|
||||||
<a class="uk-link-reset uk-flex uk-flex-middle">
|
<a class="uk-link-reset uk-flex uk-flex-middle">
|
||||||
<icon [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(stakeholder.visibility)" ratio="0.6"></icon>
|
<icon *ngIf="showVisibility" [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(stakeholder.visibility)" ratio="0.6"></icon>
|
||||||
<icon [flex]="true" name="more_vert"></icon>
|
<icon [flex]="true" name="more_vert"></icon>
|
||||||
</a>
|
</a>
|
||||||
<div #element class="uk-dropdown" uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0;">
|
<div #element class="uk-dropdown" uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0;">
|
||||||
|
@ -71,8 +71,8 @@
|
||||||
<li *ngIf="isCurator">
|
<li *ngIf="isCurator">
|
||||||
<a (click)="createReport(stakeholder);hide(element)">Cache Indicators</a>
|
<a (click)="createReport(stakeholder);hide(element)">Cache Indicators</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="uk-nav-divider"></li>
|
<li *ngIf="showVisibility" class="uk-nav-divider"></li>
|
||||||
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
|
<ng-template *ngIf="showVisibility" ngFor [ngForOf]="stakeholderUtils.visibilities" let-v>
|
||||||
<li [class.uk-active]="stakeholder.visibility === v.value">
|
<li [class.uk-active]="stakeholder.visibility === v.value">
|
||||||
<a (click)="changeStakeholderStatus(stakeholder, v.value);hide(element)">
|
<a (click)="changeStakeholderStatus(stakeholder, v.value);hide(element)">
|
||||||
<div class="uk-flex uk-flex-middle">
|
<div class="uk-flex uk-flex-middle">
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
import {Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
|
import {Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
|
||||||
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
||||||
import {EnvProperties} from "../../utils/properties/env-properties";
|
import {Stakeholder, Visibility} from "../../monitor/entities/stakeholder";
|
||||||
import {Stakeholder, StakeholderEntities, Visibility} from "../../monitor/entities/stakeholder";
|
import {zip} from "rxjs";
|
||||||
import {Subscriber, zip} from "rxjs";
|
|
||||||
import {StakeholderUtils} from "../utils/indicator-utils";
|
|
||||||
import {UntypedFormBuilder, UntypedFormGroup} from "@angular/forms";
|
import {UntypedFormBuilder, UntypedFormGroup} from "@angular/forms";
|
||||||
import {AlertModal} from "../../utils/modal/alert";
|
import {AlertModal} from "../../utils/modal/alert";
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
|
@ -11,11 +9,10 @@ import {Title} from "@angular/platform-browser";
|
||||||
import {UserManagementService} from "../../services/user-management.service";
|
import {UserManagementService} from "../../services/user-management.service";
|
||||||
import {Session} from "../../login/utils/helper.class";
|
import {Session} from "../../login/utils/helper.class";
|
||||||
import {EditStakeholderComponent} from "../general/edit-stakeholder/edit-stakeholder.component";
|
import {EditStakeholderComponent} from "../general/edit-stakeholder/edit-stakeholder.component";
|
||||||
import {properties} from "src/environments/environment";
|
|
||||||
import {ActivatedRoute} from "@angular/router";
|
import {ActivatedRoute} from "@angular/router";
|
||||||
import {CacheIndicatorsService} from "../utils/cache-indicators/cache-indicators.service";
|
import {CacheIndicatorsService} from "../utils/cache-indicators/cache-indicators.service";
|
||||||
import {NotificationHandler} from "../../utils/notification-handler";
|
import {NotificationHandler} from "../../utils/notification-handler";
|
||||||
import {BaseComponent} from "../../sharedComponents/base/base.component";
|
import {StakeholderBaseComponent} from "../utils/stakeholder-base.component";
|
||||||
|
|
||||||
type Tab = 'all' | 'templates'| 'profiles';
|
type Tab = 'all' | 'templates'| 'profiles';
|
||||||
|
|
||||||
|
@ -26,10 +23,9 @@ declare var UIkit;
|
||||||
templateUrl: "./manageStakeholders.component.html",
|
templateUrl: "./manageStakeholders.component.html",
|
||||||
styleUrls: ["./manageStakeholders.component.less"]
|
styleUrls: ["./manageStakeholders.component.less"]
|
||||||
})
|
})
|
||||||
export class ManageStakeholdersComponent extends BaseComponent implements OnInit, OnDestroy {
|
export class ManageStakeholdersComponent extends StakeholderBaseComponent implements OnInit, OnDestroy {
|
||||||
public loading: boolean = true;
|
public loading: boolean = true;
|
||||||
public deleteLoading: boolean = false;
|
public deleteLoading: boolean = false;
|
||||||
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
|
||||||
public defaultStakeholders: Stakeholder[];
|
public defaultStakeholders: Stakeholder[];
|
||||||
public stakeholders: Stakeholder[];
|
public stakeholders: Stakeholder[];
|
||||||
public alias: string[];
|
public alias: string[];
|
||||||
|
@ -283,17 +279,4 @@ export class ManageStakeholdersComponent extends BaseComponent implements OnInit
|
||||||
return this.stakeholderUtils.types.slice(0, this.stakeholderUtils.types.length - 1).map(type => type.label).join(', ') +
|
return this.stakeholderUtils.types.slice(0, this.stakeholderUtils.types.length - 1).map(type => type.label).join(', ') +
|
||||||
' or ' + this.stakeholderUtils.types[this.stakeholderUtils.types.length - 1].label
|
' or ' + this.stakeholderUtils.types[this.stakeholderUtils.types.length - 1].label
|
||||||
}
|
}
|
||||||
|
|
||||||
private isTab(tab: Tab): boolean {
|
|
||||||
switch (tab) {
|
|
||||||
case "all":
|
|
||||||
return true;
|
|
||||||
case "profiles":
|
|
||||||
return true;
|
|
||||||
case "templates":
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,26 +39,28 @@
|
||||||
<div *ngIf="!dragging"
|
<div *ngIf="!dragging"
|
||||||
class="uk-position-top-right uk-margin-small-right uk-margin-small-top">
|
class="uk-position-top-right uk-margin-small-right uk-margin-small-top">
|
||||||
<a class="uk-link-reset uk-flex uk-flex-middle" [class.uk-disabled]="editing">
|
<a class="uk-link-reset uk-flex uk-flex-middle" [class.uk-disabled]="editing">
|
||||||
<icon [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(indicator.visibility)" ratio="0.6"></icon>
|
<icon *ngIf="showVisibility" [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(indicator.visibility)" ratio="0.6"></icon>
|
||||||
<icon [flex]="true" name="more_vert"></icon>
|
<icon [flex]="true" name="more_vert"></icon>
|
||||||
</a>
|
</a>
|
||||||
<div #element class="uk-dropdown" uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0">
|
<div #element class="uk-dropdown" uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0">
|
||||||
<ul class="uk-nav uk-dropdown-nav">
|
<ul class="uk-nav uk-dropdown-nav">
|
||||||
<ng-container *ngIf="isCurator">
|
<ng-container *ngIf="isCurator">
|
||||||
<li><a (click)="editNumberIndicatorOpen(number, indicator._id); hide(element)">Edit</a></li>
|
<li><a (click)="editNumberIndicatorOpen(number, indicator._id); hide(element)">Edit</a></li>
|
||||||
<li class="uk-nav-divider"></li>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
|
<ng-container *ngIf="showVisibility">
|
||||||
<li>
|
<li *ngIf="isCurator" class="uk-nav-divider"></li>
|
||||||
<a (click)="changeIndicatorStatus(number._id, indicator, v.value);hide(element)">
|
<ng-template ngFor [ngForOf]="stakeholderUtils.visibilities" let-v>
|
||||||
<div class="uk-flex uk-flex-middle">
|
<li>
|
||||||
<icon [flex]="true" [name]="v.icon" ratio="0.6"></icon>
|
<a (click)="changeIndicatorStatus(number._id, indicator, v.value);hide(element)">
|
||||||
<span class="uk-margin-small-left uk-width-expand">{{v.label}}</span>
|
<div class="uk-flex uk-flex-middle">
|
||||||
<icon *ngIf="indicator.visibility === v.value" [flex]="true" name="done" class="uk-text-secondary" ratio="0.8"></icon>
|
<icon [flex]="true" [name]="v.icon" ratio="0.6"></icon>
|
||||||
</div>
|
<span class="uk-margin-small-left uk-width-expand">{{v.label}}</span>
|
||||||
</a>
|
<icon *ngIf="indicator.visibility === v.value" [flex]="true" name="done" class="uk-text-secondary" ratio="0.8"></icon>
|
||||||
</li>
|
</div>
|
||||||
</ng-template>
|
</a>
|
||||||
|
</li>
|
||||||
|
</ng-template>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngIf="!indicator.defaultId && !editing && isCurator">
|
<ng-container *ngIf="!indicator.defaultId && !editing && isCurator">
|
||||||
<li class="uk-nav-divider">
|
<li class="uk-nav-divider">
|
||||||
<li><a (click)="deleteIndicatorOpen(number, indicator._id, 'number', 'delete');hide(element)">Delete</a></li>
|
<li><a (click)="deleteIndicatorOpen(number, indicator._id, 'number', 'delete');hide(element)">Delete</a></li>
|
||||||
|
@ -136,26 +138,28 @@
|
||||||
<div *ngIf="!dragging"
|
<div *ngIf="!dragging"
|
||||||
class="uk-position-top-right uk-margin-small-right uk-margin-small-top">
|
class="uk-position-top-right uk-margin-small-right uk-margin-small-top">
|
||||||
<a class="uk-link-reset uk-flex uk-flex-middle" [class.uk-disabled]="editing">
|
<a class="uk-link-reset uk-flex uk-flex-middle" [class.uk-disabled]="editing">
|
||||||
<icon [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(indicator.visibility)" ratio="0.6"></icon>
|
<icon *ngIf="showVisibility" [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(indicator.visibility)" ratio="0.6"></icon>
|
||||||
<icon [flex]="true" name="more_vert"></icon>
|
<icon [flex]="true" name="more_vert"></icon>
|
||||||
</a>
|
</a>
|
||||||
<div #element class="uk-dropdown" uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0">
|
<div #element class="uk-dropdown" uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0">
|
||||||
<ul class="uk-nav uk-dropdown-nav">
|
<ul class="uk-nav uk-dropdown-nav">
|
||||||
<ng-container *ngIf="isCurator">
|
<ng-container *ngIf="isCurator">
|
||||||
<li><a (click)="editChartIndicatorOpen(chart, indicator._id); hide(element)">Edit</a></li>
|
<li><a (click)="editChartIndicatorOpen(chart, indicator._id); hide(element)">Edit</a></li>
|
||||||
<li class="uk-nav-divider"></li>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
|
<ng-container *ngIf="showVisibility">
|
||||||
<li>
|
<li *ngIf="isCurator" class="uk-nav-divider"></li>
|
||||||
<a (click)="changeIndicatorStatus(chart._id, indicator, v.value);">
|
<ng-template ngFor [ngForOf]="stakeholderUtils.visibilities" let-v>
|
||||||
<div class="uk-flex uk-flex-middle">
|
<li>
|
||||||
<icon [flex]="true" [name]="v.icon" ratio="0.6"></icon>
|
<a (click)="changeIndicatorStatus(chart._id, indicator, v.value);">
|
||||||
<span class="uk-margin-small-left uk-width-expand">{{v.label}}</span>
|
<div class="uk-flex uk-flex-middle">
|
||||||
<icon *ngIf="indicator.visibility === v.value" [flex]="true" name="done" class="uk-text-secondary" ratio="0.8"></icon>
|
<icon [flex]="true" [name]="v.icon" ratio="0.6"></icon>
|
||||||
</div>
|
<span class="uk-margin-small-left uk-width-expand">{{v.label}}</span>
|
||||||
</a>
|
<icon *ngIf="indicator.visibility === v.value" [flex]="true" name="done" class="uk-text-secondary" ratio="0.8"></icon>
|
||||||
</li>
|
</div>
|
||||||
</ng-template>
|
</a>
|
||||||
|
</li>
|
||||||
|
</ng-template>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngIf="!indicator.defaultId && !editing && isCurator">
|
<ng-container *ngIf="!indicator.defaultId && !editing && isCurator">
|
||||||
<li class="uk-nav-divider">
|
<li class="uk-nav-divider">
|
||||||
<li><a (click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'delete');hide(element)">Delete</a></li>
|
<li><a (click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'delete');hide(element)">Delete</a></li>
|
||||||
|
@ -231,8 +235,8 @@
|
||||||
<div input class="uk-width-1-1" *ngIf="stakeholder.defaultId" [formInput]="numberIndicatorFb.get('additionalDescription')"
|
<div input class="uk-width-1-1" *ngIf="stakeholder.defaultId" [formInput]="numberIndicatorFb.get('additionalDescription')"
|
||||||
placeholder="Description" type="textarea">
|
placeholder="Description" type="textarea">
|
||||||
</div>
|
</div>
|
||||||
<div input class="uk-width-1-2@m" [formInput]="numberIndicatorFb.get('visibility')"
|
<div *ngIf="showVisibility" input class="uk-width-1-2@m" [formInput]="numberIndicatorFb.get('visibility')"
|
||||||
placeholder="Visibility" [options]="stakeholderUtils.visibility" type="select">
|
placeholder="Visibility" [options]="stakeholderUtils.visibilities" type="select">
|
||||||
</div>
|
</div>
|
||||||
<div input class="uk-width-1-2@m" [formInput]="numberIndicatorFb.get('width')"
|
<div input class="uk-width-1-2@m" [formInput]="numberIndicatorFb.get('width')"
|
||||||
placeholder="Number Size" [options]="indicatorUtils.indicatorSizes" type="select">
|
placeholder="Number Size" [options]="indicatorUtils.indicatorSizes" type="select">
|
||||||
|
@ -346,8 +350,8 @@
|
||||||
<div *ngIf="stakeholder.defaultId" input class="uk-width-1-1" [formInput]="chartIndicatorFb.get('additionalDescription')"
|
<div *ngIf="stakeholder.defaultId" input class="uk-width-1-1" [formInput]="chartIndicatorFb.get('additionalDescription')"
|
||||||
placeholder="Description" type="textarea">
|
placeholder="Description" type="textarea">
|
||||||
</div>
|
</div>
|
||||||
<div input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('visibility')"
|
<div *ngIf="showVisibility" input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('visibility')"
|
||||||
placeholder="Status" [options]="stakeholderUtils.visibility" type="select">
|
placeholder="Status" [options]="stakeholderUtils.visibilities" type="select">
|
||||||
</div>
|
</div>
|
||||||
<div input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('width')" placeholder="Chart width"
|
<div input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('width')" placeholder="Chart width"
|
||||||
[options]="indicatorUtils.indicatorSizes" type="select">
|
[options]="indicatorUtils.indicatorSizes" type="select">
|
||||||
|
|
|
@ -5,7 +5,6 @@ import {
|
||||||
HostListener,
|
HostListener,
|
||||||
Input,
|
Input,
|
||||||
OnChanges,
|
OnChanges,
|
||||||
OnDestroy,
|
|
||||||
OnInit,
|
OnInit,
|
||||||
SimpleChanges,
|
SimpleChanges,
|
||||||
ViewChild
|
ViewChild
|
||||||
|
@ -20,7 +19,6 @@ import {
|
||||||
Stakeholder,
|
Stakeholder,
|
||||||
Visibility
|
Visibility
|
||||||
} from "../../monitor/entities/stakeholder";
|
} from "../../monitor/entities/stakeholder";
|
||||||
import {IndicatorUtils, StakeholderUtils} from "../utils/indicator-utils";
|
|
||||||
import {
|
import {
|
||||||
AbstractControl,
|
AbstractControl,
|
||||||
UntypedFormArray,
|
UntypedFormArray,
|
||||||
|
@ -34,7 +32,6 @@ import {StatisticsService} from "../utils/services/statistics.service";
|
||||||
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
||||||
import {DomSanitizer, SafeResourceUrl} from "@angular/platform-browser";
|
import {DomSanitizer, SafeResourceUrl} from "@angular/platform-browser";
|
||||||
import {Reorder, StakeholderService} from "../../monitor/services/stakeholder.service";
|
import {Reorder, StakeholderService} from "../../monitor/services/stakeholder.service";
|
||||||
import {EnvProperties} from "../../utils/properties/env-properties";
|
|
||||||
import {Observable, Subscriber} from "rxjs";
|
import {Observable, Subscriber} from "rxjs";
|
||||||
import {LayoutService} from "../../dashboard/sharedComponents/sidebar/layout.service";
|
import {LayoutService} from "../../dashboard/sharedComponents/sidebar/layout.service";
|
||||||
import {Router} from "@angular/router";
|
import {Router} from "@angular/router";
|
||||||
|
@ -44,8 +41,8 @@ import {Notification} from "../../notifications/notifications";
|
||||||
import {NotificationUtils} from "../../notifications/notification-utils";
|
import {NotificationUtils} from "../../notifications/notification-utils";
|
||||||
import {NotifyFormComponent} from "../../notifications/notify-form/notify-form.component";
|
import {NotifyFormComponent} from "../../notifications/notify-form/notify-form.component";
|
||||||
import {NotificationService} from "../../notifications/notification.service";
|
import {NotificationService} from "../../notifications/notification.service";
|
||||||
import {properties} from "src/environments/environment";
|
|
||||||
import {NotificationHandler} from "../../utils/notification-handler";
|
import {NotificationHandler} from "../../utils/notification-handler";
|
||||||
|
import {IndicatorStakeholderBaseComponent} from "../utils/stakeholder-base.component";
|
||||||
|
|
||||||
declare var UIkit;
|
declare var UIkit;
|
||||||
|
|
||||||
|
@ -54,10 +51,9 @@ declare var UIkit;
|
||||||
templateUrl: './indicators.component.html',
|
templateUrl: './indicators.component.html',
|
||||||
styleUrls: ['indicators.component.less']
|
styleUrls: ['indicators.component.less']
|
||||||
})
|
})
|
||||||
export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {
|
export class IndicatorsComponent extends IndicatorStakeholderBaseComponent implements OnInit, OnChanges, AfterViewInit {
|
||||||
filesToUpload: Array<File>;
|
filesToUpload: Array<File>;
|
||||||
errorMessage = "";
|
errorMessage = "";
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
@Input()
|
@Input()
|
||||||
public topicIndex: number = 0;
|
public topicIndex: number = 0;
|
||||||
@Input()
|
@Input()
|
||||||
|
@ -71,8 +67,6 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
|
||||||
@Input()
|
@Input()
|
||||||
public user: User = null;
|
public user: User = null;
|
||||||
public preview: string;
|
public preview: string;
|
||||||
public indicatorUtils: IndicatorUtils = new IndicatorUtils();
|
|
||||||
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
|
||||||
public numberIndicatorFb: UntypedFormGroup;
|
public numberIndicatorFb: UntypedFormGroup;
|
||||||
public chartIndicatorFb: UntypedFormGroup;
|
public chartIndicatorFb: UntypedFormGroup;
|
||||||
public chartSections: UntypedFormArray;
|
public chartSections: UntypedFormArray;
|
||||||
|
@ -118,7 +112,6 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
|
||||||
/**
|
/**
|
||||||
* Subscriptions
|
* Subscriptions
|
||||||
**/
|
**/
|
||||||
private subscriptions: any[] = [];
|
|
||||||
private urlSubscriptions: any[] = [];
|
private urlSubscriptions: any[] = [];
|
||||||
private numberSubscription: any[] = [];
|
private numberSubscription: any[] = [];
|
||||||
|
|
||||||
|
@ -127,9 +120,10 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
|
||||||
private statisticsService: StatisticsService,
|
private statisticsService: StatisticsService,
|
||||||
private notificationService: NotificationService,
|
private notificationService: NotificationService,
|
||||||
private fb: UntypedFormBuilder,
|
private fb: UntypedFormBuilder,
|
||||||
private router: Router,
|
protected _router: Router,
|
||||||
private cdr: ChangeDetectorRef,
|
private cdr: ChangeDetectorRef,
|
||||||
private sanitizer: DomSanitizer) {
|
private sanitizer: DomSanitizer) {
|
||||||
|
super()
|
||||||
this.filesToUpload = [];
|
this.filesToUpload = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,13 +140,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
this.subscriptions.forEach(value => {
|
super.ngOnDestroy();
|
||||||
if (value instanceof Subscriber) {
|
|
||||||
value.unsubscribe();
|
|
||||||
} else if (value instanceof Function) {
|
|
||||||
value();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.urlSubscriptions.forEach(value => {
|
this.urlSubscriptions.forEach(value => {
|
||||||
if (value instanceof Subscriber) {
|
if (value instanceof Subscriber) {
|
||||||
value.unsubscribe();
|
value.unsubscribe();
|
||||||
|
|
|
@ -26,12 +26,11 @@
|
||||||
<span class="uk-margin-xsmall-left hide-on-close" [class.uk-invisible-hover]="topicIndex !== i"
|
<span class="uk-margin-xsmall-left hide-on-close" [class.uk-invisible-hover]="topicIndex !== i"
|
||||||
(click)="$event.stopPropagation();$event.preventDefault()">
|
(click)="$event.stopPropagation();$event.preventDefault()">
|
||||||
<a class="uk-link-reset uk-flex uk-flex-middle">
|
<a class="uk-link-reset uk-flex uk-flex-middle">
|
||||||
<icon [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(topic.visibility)"
|
<icon *ngIf="showVisibility" [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(topic.visibility)"
|
||||||
ratio="0.6"></icon>
|
ratio="0.6"></icon>
|
||||||
<icon [flex]="true" name="more_vert"></icon>
|
<icon [flex]="true" name="more_vert"></icon>
|
||||||
</a>
|
</a>
|
||||||
<div #element
|
<div #element uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0; flip: false; container: body">
|
||||||
uk-dropdown="mode: click; pos: bottom-left; offset: 5; delay-hide: 0; flip: false; container: body">
|
|
||||||
<ul class="uk-nav uk-dropdown-nav">
|
<ul class="uk-nav uk-dropdown-nav">
|
||||||
<ng-container *ngIf="isCurator">
|
<ng-container *ngIf="isCurator">
|
||||||
<li>
|
<li>
|
||||||
|
@ -59,9 +58,10 @@
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="uk-nav-divider"></li>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
|
<ng-container *ngIf="showVisibility">
|
||||||
|
<li *ngIf="isCurator" class="uk-nav-divider"></li>
|
||||||
|
<ng-template ngFor [ngForOf]="stakeholderUtils.visibilities" let-v>
|
||||||
<li [class.uk-active]="topic.visibility === v.value">
|
<li [class.uk-active]="topic.visibility === v.value">
|
||||||
<a (click)="openVisibilityModal(i, v.value, 'topic'); hide(element)">
|
<a (click)="openVisibilityModal(i, v.value, 'topic'); hide(element)">
|
||||||
<div class="uk-flex uk-flex-middle">
|
<div class="uk-flex uk-flex-middle">
|
||||||
|
@ -73,6 +73,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngIf="!topic.defaultId && isCurator">
|
<ng-container *ngIf="!topic.defaultId && isCurator">
|
||||||
<li class="uk-nav-divider">
|
<li class="uk-nav-divider">
|
||||||
<li>
|
<li>
|
||||||
|
@ -103,7 +104,7 @@
|
||||||
<span class="uk-margin-xsmall-left hide-on-close" [class.uk-invisible-hover]="categoryIndex !== j"
|
<span class="uk-margin-xsmall-left hide-on-close" [class.uk-invisible-hover]="categoryIndex !== j"
|
||||||
(click)="$event.stopPropagation();$event.preventDefault()">
|
(click)="$event.stopPropagation();$event.preventDefault()">
|
||||||
<a class="uk-link-reset uk-flex uk-flex-middle">
|
<a class="uk-link-reset uk-flex uk-flex-middle">
|
||||||
<icon [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(category.visibility)"
|
<icon *ngIf="showVisibility" [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(category.visibility)"
|
||||||
ratio="0.6"></icon>
|
ratio="0.6"></icon>
|
||||||
<icon [flex]="true" name="more_vert"></icon>
|
<icon [flex]="true" name="more_vert"></icon>
|
||||||
</a>
|
</a>
|
||||||
|
@ -137,9 +138,11 @@
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="uk-nav-divider"></li>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
|
<ng-container *ngIf="showVisibility">
|
||||||
|
<li *ngIf="isCurator" class="uk-nav-divider"></li>
|
||||||
|
<ng-template ngFor [ngForOf]="stakeholderUtils.visibilities" let-v>
|
||||||
<li [class.uk-active]="category.visibility === v.value">
|
<li [class.uk-active]="category.visibility === v.value">
|
||||||
<a (click)="openVisibilityModal(j, v.value, 'category'); hide(element)">
|
<a (click)="openVisibilityModal(j, v.value, 'category'); hide(element)">
|
||||||
<div class="uk-flex uk-flex-middle">
|
<div class="uk-flex uk-flex-middle">
|
||||||
|
@ -151,6 +154,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngIf="!category.defaultId && isCurator">
|
<ng-container *ngIf="!category.defaultId && isCurator">
|
||||||
<li class="uk-nav-divider">
|
<li class="uk-nav-divider">
|
||||||
<li>
|
<li>
|
||||||
|
@ -191,8 +195,8 @@
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
<div #pageContent *ngIf="stakeholder && filters" class="uk-width-1-1" page-content>
|
<div #pageContent *ngIf="stakeholder && filters" class="uk-width-1-1" page-content>
|
||||||
<div actions>
|
<div actions class="uk-margin-medium-top">
|
||||||
<div *ngIf="stakeholder.topics.length > 0" class="uk-flex uk-flex-center uk-margin-medium-top uk-flex-right@m uk-width-1-1">
|
<div *ngIf="stakeholder.topics.length > 0 && showVisibility" class="uk-flex uk-flex-center uk-flex-right@m uk-width-1-1">
|
||||||
<button class="uk-button uk-button-primary uk-flex uk-flex-middle">
|
<button class="uk-button uk-button-primary uk-flex uk-flex-middle">
|
||||||
<icon name="visibility" [flex]="true"></icon>
|
<icon name="visibility" [flex]="true"></icon>
|
||||||
<span class="uk-margin-small-left uk-margin-small-right">Preview</span>
|
<span class="uk-margin-small-left uk-margin-small-right">Preview</span>
|
||||||
|
@ -229,7 +233,7 @@
|
||||||
[class.uk-invisible-hover]="subCategoryIndex !== i"
|
[class.uk-invisible-hover]="subCategoryIndex !== i"
|
||||||
(click)="$event.stopPropagation();$event.preventDefault()">
|
(click)="$event.stopPropagation();$event.preventDefault()">
|
||||||
<a class="uk-link-reset uk-flex uk-flex-middle">
|
<a class="uk-link-reset uk-flex uk-flex-middle">
|
||||||
<icon [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(subCategory.visibility)"
|
<icon *ngIf="showVisibility" [flex]="true" [name]="stakeholderUtils.visibilityIcon.get(subCategory.visibility)"
|
||||||
ratio="0.6"></icon>
|
ratio="0.6"></icon>
|
||||||
<icon [flex]="true" name="more_vert"></icon>
|
<icon [flex]="true" name="more_vert"></icon>
|
||||||
</a>
|
</a>
|
||||||
|
@ -279,9 +283,10 @@
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="uk-nav-divider"></li>
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
|
<ng-container *ngIf="showVisibility">
|
||||||
|
<li *ngIf="isCurator" class="uk-nav-divider"></li>
|
||||||
|
<ng-template ngFor [ngForOf]="stakeholderUtils.visibilities" let-v>
|
||||||
<li [class.uk-active]="subCategory.visibility === v.value">
|
<li [class.uk-active]="subCategory.visibility === v.value">
|
||||||
<a (click)="openVisibilityModal(i, v.value, 'subcategory'); hide(element)">
|
<a (click)="openVisibilityModal(i, v.value, 'subcategory'); hide(element)">
|
||||||
<div class="uk-flex uk-flex-middle">
|
<div class="uk-flex uk-flex-middle">
|
||||||
|
@ -293,6 +298,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngIf="!subCategory.defaultId && isCurator">
|
<ng-container *ngIf="!subCategory.defaultId && isCurator">
|
||||||
<li class="uk-nav-divider">
|
<li class="uk-nav-divider">
|
||||||
<li>
|
<li>
|
||||||
|
@ -348,8 +354,8 @@
|
||||||
<div *ngIf="form" [class.uk-hidden]="loading"
|
<div *ngIf="form" [class.uk-hidden]="loading"
|
||||||
class="uk-grid uk-padding uk-padding-remove-horizontal uk-child-width-1-1" [formGroup]="form" uk-grid>
|
class="uk-grid uk-padding uk-padding-remove-horizontal uk-child-width-1-1" [formGroup]="form" uk-grid>
|
||||||
<div input [formInput]="form.get('name')" class="uk-width-1-2@m" placeholder="Title"></div>
|
<div input [formInput]="form.get('name')" class="uk-width-1-2@m" placeholder="Title"></div>
|
||||||
<div input [formInput]="form.get('visibility')" class="uk-width-1-2@m" placeholder="Status"
|
<div *ngIf="showVisibility" input [formInput]="form.get('visibility')" class="uk-width-1-2@m" placeholder="Status"
|
||||||
[options]="stakeholderUtils.visibility" type="select"></div>
|
[options]="stakeholderUtils.visibilities" type="select"></div>
|
||||||
<div input [formInput]="form.get('description')" placeholder="Description" type="textarea" rows="4"></div>
|
<div input [formInput]="form.get('description')" placeholder="Description" type="textarea" rows="4"></div>
|
||||||
<div *ngIf="form.get('icon')" input [formInput]="form.get('icon')" placeholder="Icon(SVG)" type="textarea"></div>
|
<div *ngIf="form.get('icon')" input [formInput]="form.get('icon')" placeholder="Icon(SVG)" type="textarea"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
import {
|
import {
|
||||||
AfterViewInit,
|
AfterViewInit,
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component, Inject,
|
Component,
|
||||||
|
Inject,
|
||||||
OnDestroy,
|
OnDestroy,
|
||||||
OnInit, PLATFORM_ID,
|
OnInit,
|
||||||
|
PLATFORM_ID,
|
||||||
QueryList,
|
QueryList,
|
||||||
ViewChild,
|
ViewChild,
|
||||||
ViewChildren
|
ViewChildren
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import {ActivatedRoute, Router} from '@angular/router';
|
import {ActivatedRoute, Router} from '@angular/router';
|
||||||
import {Title} from '@angular/platform-browser';
|
import {Title} from '@angular/platform-browser';
|
||||||
import {EnvProperties} from '../../utils/properties/env-properties';
|
|
||||||
import {Category, Stakeholder, SubCategory, Topic, Visibility} from "../../monitor/entities/stakeholder";
|
import {Category, Stakeholder, SubCategory, Topic, Visibility} from "../../monitor/entities/stakeholder";
|
||||||
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
||||||
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
||||||
import {AlertModal} from "../../utils/modal/alert";
|
import {AlertModal} from "../../utils/modal/alert";
|
||||||
import {BehaviorSubject, Subject, Subscriber, Subscription} from "rxjs";
|
import {BehaviorSubject, Subject, Subscriber, Subscription} from "rxjs";
|
||||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
||||||
import {StakeholderUtils} from "../utils/indicator-utils";
|
|
||||||
import {StringUtils} from "../../utils/string-utils.class";
|
import {StringUtils} from "../../utils/string-utils.class";
|
||||||
import {IDeactivateComponent} from "../../utils/can-exit.guard";
|
import {IDeactivateComponent} from "../../utils/can-exit.guard";
|
||||||
import {LayoutService} from "../../dashboard/sharedComponents/sidebar/layout.service";
|
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
import {properties} from "src/environments/environment";
|
import {properties} from "src/environments/environment";
|
||||||
import {Session, User} from "../../login/utils/helper.class";
|
import {Session, User} from "../../login/utils/helper.class";
|
||||||
import {UserManagementService} from "../../services/user-management.service";
|
import {UserManagementService} from "../../services/user-management.service";
|
||||||
import {TransitionGroupComponent} from "../../utils/transition-group/transition-group.component";
|
import {TransitionGroupComponent} from "../../utils/transition-group/transition-group.component";
|
||||||
import {NotificationHandler} from "../../utils/notification-handler";
|
import {NotificationHandler} from "../../utils/notification-handler";
|
||||||
|
import {StakeholderBaseComponent} from "../utils/stakeholder-base.component";
|
||||||
|
|
||||||
declare var UIkit;
|
declare var UIkit;
|
||||||
|
|
||||||
|
@ -34,12 +34,9 @@ declare var UIkit;
|
||||||
selector: 'topic',
|
selector: 'topic',
|
||||||
templateUrl: './topic.component.html',
|
templateUrl: './topic.component.html',
|
||||||
})
|
})
|
||||||
export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeactivateComponent {
|
export class TopicComponent extends StakeholderBaseComponent implements OnInit, OnDestroy, AfterViewInit, IDeactivateComponent {
|
||||||
private topicSubscriptions: any[] = [];
|
private topicSubscriptions: any[] = [];
|
||||||
private subscriptions: any[] = [];
|
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
public offset: number;
|
public offset: number;
|
||||||
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
|
||||||
public loading: boolean = false;
|
public loading: boolean = false;
|
||||||
public stakeholder: Stakeholder;
|
public stakeholder: Stakeholder;
|
||||||
public user: User;
|
public user: User;
|
||||||
|
@ -84,15 +81,15 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private route: ActivatedRoute,
|
protected _route: ActivatedRoute,
|
||||||
private router: Router,
|
protected _router: Router,
|
||||||
private title: Title,
|
protected _title: Title,
|
||||||
private fb: UntypedFormBuilder,
|
private fb: UntypedFormBuilder,
|
||||||
private stakeholderService: StakeholderService,
|
private stakeholderService: StakeholderService,
|
||||||
private userManagementService: UserManagementService,
|
private userManagementService: UserManagementService,
|
||||||
private layoutService: LayoutService,
|
protected cdr: ChangeDetectorRef,
|
||||||
private cdr: ChangeDetectorRef,
|
|
||||||
@Inject(PLATFORM_ID) private platformId) {
|
@Inject(PLATFORM_ID) private platformId) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ngOnInit() {
|
public ngOnInit() {
|
||||||
|
@ -115,7 +112,7 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
this.subCategoryIndex = index;
|
this.subCategoryIndex = index;
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
this.subscriptions.push(this.route.params.subscribe(params => {
|
this.subscriptions.push(this._route.params.subscribe(params => {
|
||||||
if (subscription) {
|
if (subscription) {
|
||||||
subscription.unsubscribe();
|
subscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
@ -136,7 +133,8 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
if (this.topicIndex === -1) {
|
if (this.topicIndex === -1) {
|
||||||
this.navigateToError();
|
this.navigateToError();
|
||||||
} else {
|
} else {
|
||||||
this.title.setTitle(stakeholder.name + " | Indicators");
|
this.title = stakeholder.name + " | Indicators"
|
||||||
|
this.setMetadata();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -163,16 +161,12 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
}
|
}
|
||||||
|
|
||||||
public ngOnDestroy() {
|
public ngOnDestroy() {
|
||||||
|
super.ngOnDestroy();
|
||||||
this.topicSubscriptions.forEach(value => {
|
this.topicSubscriptions.forEach(value => {
|
||||||
if (value instanceof Subscriber) {
|
if (value instanceof Subscriber) {
|
||||||
value.unsubscribe();
|
value.unsubscribe();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.subscriptions.forEach(value => {
|
|
||||||
if (value instanceof Subscriber) {
|
|
||||||
value.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
canExit(): boolean {
|
canExit(): boolean {
|
||||||
|
@ -666,7 +660,7 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
}
|
}
|
||||||
|
|
||||||
private navigateToError() {
|
private navigateToError() {
|
||||||
this.router.navigate([this.properties.errorLink], {queryParams: {'page': this.router.url}});
|
this._router.navigate([this.properties.errorLink], {queryParams: {'page': this._router.url}});
|
||||||
}
|
}
|
||||||
|
|
||||||
get isCurator(): boolean {
|
get isCurator(): boolean {
|
||||||
|
@ -714,8 +708,8 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
this.editModal.cancel();
|
this.editModal.cancel();
|
||||||
NotificationHandler.rise(message);
|
NotificationHandler.rise(message);
|
||||||
if (redirect) {
|
if (redirect) {
|
||||||
this.router.navigate(['../' + saveElement.alias], {
|
this._router.navigate(['../' + saveElement.alias], {
|
||||||
relativeTo: this.route
|
relativeTo: this._route
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, error => {
|
}, error => {
|
||||||
|
@ -758,8 +752,8 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
}
|
}
|
||||||
|
|
||||||
back() {
|
back() {
|
||||||
this.router.navigate(['../'], {
|
this._router.navigate(['../'], {
|
||||||
relativeTo: this.route
|
relativeTo: this._route
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -775,19 +769,6 @@ export class TopicComponent implements OnInit, OnDestroy, AfterViewInit, IDeacti
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public get isSmallScreen() {
|
|
||||||
return this.layoutService.isSmallScreen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public get open() {
|
|
||||||
return this.layoutService.open;
|
|
||||||
}
|
|
||||||
|
|
||||||
public toggleOpen(event: MouseEvent) {
|
|
||||||
event.preventDefault();
|
|
||||||
this.layoutService.setOpen(!this.open);
|
|
||||||
}
|
|
||||||
|
|
||||||
public openVisibilityModal(index: number, visibility: Visibility, type: any) {
|
public openVisibilityModal(index: number, visibility: Visibility, type: any) {
|
||||||
this.index = index;
|
this.index = index;
|
||||||
this.visibility = visibility;
|
this.visibility = visibility;
|
||||||
|
|
|
@ -7,11 +7,9 @@ import {
|
||||||
IndicatorPathType,
|
IndicatorPathType,
|
||||||
IndicatorType,
|
IndicatorType,
|
||||||
SourceType,
|
SourceType,
|
||||||
Stakeholder,
|
Stakeholder, SubCategory,
|
||||||
StakeholderEntities,
|
Topic,
|
||||||
SubCategory,
|
Visibility,
|
||||||
Topic, stakeholderTypes,
|
|
||||||
Visibility
|
|
||||||
} from "../../monitor/entities/stakeholder";
|
} from "../../monitor/entities/stakeholder";
|
||||||
import {AbstractControl, ValidatorFn, Validators} from "@angular/forms";
|
import {AbstractControl, ValidatorFn, Validators} from "@angular/forms";
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
|
@ -19,34 +17,71 @@ import {Session} from "../../login/utils/helper.class";
|
||||||
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
||||||
import {properties} from "src/environments/environment";
|
import {properties} from "src/environments/environment";
|
||||||
|
|
||||||
export class StakeholderUtils {
|
class Entities {
|
||||||
|
stakeholder = 'Dashboard';
|
||||||
|
funder = 'Funder';
|
||||||
|
ri = 'Research Initiative';
|
||||||
|
organization = 'Research Institution';
|
||||||
|
project = 'Project';
|
||||||
|
country = 'National';
|
||||||
|
|
||||||
statuses: Option[] = [
|
stakeholders = 'Dashboards';
|
||||||
{value: 'PUBLIC', label: 'Public'},
|
funders = 'Funders';
|
||||||
{value: 'RESTRICTED', label: 'Restricted'},
|
ris = 'Research Initiatives';
|
||||||
{value: 'PRIVATE', label: 'Private'}
|
organizations = 'Research Institutions';
|
||||||
|
projects = 'Projects';
|
||||||
|
}
|
||||||
|
|
||||||
|
export class StakeholderConfiguration {
|
||||||
|
public static ENTITIES: Entities = new Entities();
|
||||||
|
public static TYPES: Option[] = [
|
||||||
|
{value: 'funder', label: StakeholderConfiguration.ENTITIES.funder},
|
||||||
|
{value: 'ri', label: StakeholderConfiguration.ENTITIES.ri},
|
||||||
|
{value: 'organization', label: StakeholderConfiguration.ENTITIES.organization},
|
||||||
|
{value: 'project', label: StakeholderConfiguration.ENTITIES.project}
|
||||||
];
|
];
|
||||||
|
public static LOCALES: Option[] = [
|
||||||
types: Option[] = [
|
{value: "en", label: 'English'},
|
||||||
...stakeholderTypes
|
{value: "eu", label: 'Europe'}
|
||||||
];
|
];
|
||||||
|
public static FUNDER_TYPES: Option[] = [];
|
||||||
visibility: Option[] = [
|
public static VISIBILITIES: Option[] = [
|
||||||
{icon: 'earth', value: "PUBLIC", label: 'Public'},
|
{icon: 'earth', value: "PUBLIC", label: 'Public'},
|
||||||
{icon: 'restricted', value: "RESTRICTED", label: 'Restricted'},
|
{icon: 'restricted', value: "RESTRICTED", label: 'Restricted'},
|
||||||
{icon: 'incognito', value: "PRIVATE", label: 'Private'},
|
{icon: 'incognito', value: "PRIVATE", label: 'Private'},
|
||||||
];
|
];
|
||||||
|
}
|
||||||
|
|
||||||
locales: Option[] = [
|
export class StakeholderUtils {
|
||||||
{value: "en", label: 'English'},
|
get entities() {
|
||||||
{value: "eu", label: 'Europe'}
|
return StakeholderConfiguration.ENTITIES;
|
||||||
];
|
}
|
||||||
|
|
||||||
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string>([
|
get types() {
|
||||||
["PUBLIC", 'earth'],
|
return StakeholderConfiguration.TYPES
|
||||||
["PRIVATE", 'incognito'],
|
}
|
||||||
["RESTRICTED", 'restricted']
|
|
||||||
]);
|
get funderTypes() {
|
||||||
|
return StakeholderConfiguration.FUNDER_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
get locales() {
|
||||||
|
return StakeholderConfiguration.LOCALES;
|
||||||
|
}
|
||||||
|
|
||||||
|
get visibilities() {
|
||||||
|
return StakeholderConfiguration.VISIBILITIES;
|
||||||
|
}
|
||||||
|
|
||||||
|
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string>(this.visibilities.map(option => [option.value, option.icon]));
|
||||||
|
|
||||||
|
defaultValue(options: Option[]) {
|
||||||
|
return options.length === 1?options[0].value:null;
|
||||||
|
}
|
||||||
|
|
||||||
|
showField(options: Option[]) {
|
||||||
|
return options.length > 1;
|
||||||
|
}
|
||||||
|
|
||||||
getTypesByUserRoles(user, id: string = null): Option[] {
|
getTypesByUserRoles(user, id: string = null): Option[] {
|
||||||
let types = [];
|
let types = [];
|
||||||
|
@ -116,7 +151,7 @@ export class StakeholderUtils {
|
||||||
aliasValidatorString(elements: string[]): ValidatorFn {
|
aliasValidatorString(elements: string[]): ValidatorFn {
|
||||||
return (control: AbstractControl): { [key: string]: string } | null => {
|
return (control: AbstractControl): { [key: string]: string } | null => {
|
||||||
if (control.value && elements.find(element =>
|
if (control.value && elements.find(element =>
|
||||||
element === control.value
|
element === control.value
|
||||||
)) {
|
)) {
|
||||||
return {'error': 'Alias already in use'};
|
return {'error': 'Alias already in use'};
|
||||||
}
|
}
|
||||||
|
@ -127,7 +162,7 @@ export class StakeholderUtils {
|
||||||
aliasValidator(elements: any[]): ValidatorFn {
|
aliasValidator(elements: any[]): ValidatorFn {
|
||||||
return (control: AbstractControl): { [key: string]: string } | null => {
|
return (control: AbstractControl): { [key: string]: string } | null => {
|
||||||
if (control.value && elements.find(element =>
|
if (control.value && elements.find(element =>
|
||||||
element.alias === control.value
|
element.alias === control.value
|
||||||
)) {
|
)) {
|
||||||
return {'error': 'Alias already in use'};
|
return {'error': 'Alias already in use'};
|
||||||
}
|
}
|
||||||
|
@ -197,16 +232,16 @@ export class IndicatorUtils {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.numberSources.set('statistics', [properties.statisticsAPIURL]);
|
this.numberSources.set('statistics', [properties.statisticsAPIURL]);
|
||||||
this.numberSources.set('search', [properties.searchAPIURLLAst]);
|
this.numberSources.set('search', [properties.searchAPIURLLAst]);
|
||||||
this.numberSources.set('stats-tool', [properties.monitorStatsFrameUrl, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/","https://beta.services.openaire.eu/stats-tool/","https://services.openaire.eu/stats-tool/","https://services.openaire.eu/monitor-stats-tool/"]);
|
this.numberSources.set('stats-tool', [properties.monitorStatsFrameUrl, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/", "https://beta.services.openaire.eu/stats-tool/", "https://services.openaire.eu/stats-tool/", "https://services.openaire.eu/monitor-stats-tool/"]);
|
||||||
this.chartSources.set('stats-tool', [properties.monitorStatsFrameUrl, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/","https://beta.services.openaire.eu/stats-tool/","https://services.openaire.eu/stats-tool/","https://services.openaire.eu/monitor-stats-tool/"]);
|
this.chartSources.set('stats-tool', [properties.monitorStatsFrameUrl, "http://marilyn.athenarc.gr:8080/stats-api/", "http://88.197.53.71:8080/stats-api/", "https://stats.madgik.di.uoa.gr/stats-api/", "https://beta.services.openaire.eu/stats-tool/", "https://services.openaire.eu/stats-tool/", "https://services.openaire.eu/monitor-stats-tool/"]);
|
||||||
this.chartSources.set('old', [properties.statisticsFrameAPIURL]);
|
this.chartSources.set('old', [properties.statisticsFrameAPIURL]);
|
||||||
this.chartSources.set('image', [""]);
|
this.chartSources.set('image', [""]);
|
||||||
}
|
}
|
||||||
|
|
||||||
getSourceType(source:string): SourceType{
|
getSourceType(source: string): SourceType {
|
||||||
let sourceType: SourceType = 'search';
|
let sourceType: SourceType = 'search';
|
||||||
this.numberSources.forEach((values, key) => {
|
this.numberSources.forEach((values, key) => {
|
||||||
if(key == source) {
|
if (key == source) {
|
||||||
sourceType = key;
|
sourceType = key;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -557,7 +592,7 @@ export class IndicatorUtils {
|
||||||
|
|
||||||
generateIndicatorByForm(form: any, indicatorPaths: IndicatorPath[], type: IndicatorType, addParameters: boolean = true): Indicator {
|
generateIndicatorByForm(form: any, indicatorPaths: IndicatorPath[], type: IndicatorType, addParameters: boolean = true): Indicator {
|
||||||
let indicator: Indicator = new Indicator(form.name, form.description, form.additionalDescription, type,
|
let indicator: Indicator = new Indicator(form.name, form.description, form.additionalDescription, type,
|
||||||
form.width, form.height, form.visibility, indicatorPaths, form.defaultId);
|
form.width, form.height, form.visibility, indicatorPaths, form.defaultId);
|
||||||
indicator._id = form._id;
|
indicator._id = form._id;
|
||||||
form.indicatorPaths.forEach((indicatorPath, index) => {
|
form.indicatorPaths.forEach((indicatorPath, index) => {
|
||||||
indicator.indicatorPaths[index].type = indicatorPath.type;
|
indicator.indicatorPaths[index].type = indicatorPath.type;
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
import {Directive} from "@angular/core";
|
||||||
|
import {BaseComponent} from "../../sharedComponents/base/base.component";
|
||||||
|
import {IndicatorUtils, StakeholderUtils} from "./indicator-utils";
|
||||||
|
|
||||||
|
@Directive()
|
||||||
|
export abstract class StakeholderBaseComponent extends BaseComponent {
|
||||||
|
|
||||||
|
stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
||||||
|
|
||||||
|
get entities() {
|
||||||
|
return this.stakeholderUtils.entities;
|
||||||
|
}
|
||||||
|
|
||||||
|
get showVisibility() {
|
||||||
|
return this.stakeholderUtils.showField(this.stakeholderUtils.visibilities);
|
||||||
|
}
|
||||||
|
|
||||||
|
get showType() {
|
||||||
|
return this.stakeholderUtils.showField(this.stakeholderUtils.types);
|
||||||
|
}
|
||||||
|
|
||||||
|
get showFunderType() {
|
||||||
|
return this.stakeholderUtils.showField(this.stakeholderUtils.funderTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
get showLocale() {
|
||||||
|
return this.stakeholderUtils.showField(this.stakeholderUtils.locales);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Directive()
|
||||||
|
export abstract class IndicatorStakeholderBaseComponent extends StakeholderBaseComponent {
|
||||||
|
|
||||||
|
indicatorUtils: IndicatorUtils = new IndicatorUtils();
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
import {SafeResourceUrl} from "@angular/platform-browser";
|
import {SafeResourceUrl} from "@angular/platform-browser";
|
||||||
import {properties} from "../../../../environments/environment";
|
import {properties} from "../../../../environments/environment";
|
||||||
import {Session, User} from "../../login/utils/helper.class";
|
import {Session, User} from "../../login/utils/helper.class";
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
|
||||||
|
|
||||||
export const ChartHelper = {
|
export const ChartHelper = {
|
||||||
prefix: "((__",
|
prefix: "((__",
|
||||||
|
@ -19,6 +18,7 @@ export type Visibility = 'PUBLIC' | 'PRIVATE' | 'RESTRICTED';
|
||||||
export class Stakeholder {
|
export class Stakeholder {
|
||||||
_id: string;
|
_id: string;
|
||||||
type: StakeholderType;
|
type: StakeholderType;
|
||||||
|
funderType: string;
|
||||||
name: string;
|
name: string;
|
||||||
index_id;
|
index_id;
|
||||||
index_name: string;
|
index_name: string;
|
||||||
|
@ -37,7 +37,7 @@ export class Stakeholder {
|
||||||
description: string;
|
description: string;
|
||||||
topics: any[];
|
topics: any[];
|
||||||
|
|
||||||
constructor(_id: string, type: StakeholderType, index_id, index_name: string, index_shortName: string, alias: string, visibility: Visibility, logoUrl: string, defaultId: string = null, description: string = null) {
|
constructor(_id: string, type: StakeholderType, index_id: string, index_name: string, index_shortName: string, alias: string, visibility: Visibility, logoUrl: string, defaultId: string = null, description: string = null) {
|
||||||
this._id = _id;
|
this._id = _id;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.index_id = index_id;
|
this.index_id = index_id;
|
||||||
|
@ -297,6 +297,11 @@ export class IndicatorFilterUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*
|
||||||
|
* TODO: Remove after merge with develop
|
||||||
|
* */
|
||||||
export enum StakeholderEntities {
|
export enum StakeholderEntities {
|
||||||
STAKEHOLDER = 'Dashboard',
|
STAKEHOLDER = 'Dashboard',
|
||||||
FUNDER = 'Funder',
|
FUNDER = 'Funder',
|
||||||
|
@ -311,10 +316,3 @@ export enum StakeholderEntities {
|
||||||
ORGANIZATIONS = 'Research Institutions',
|
ORGANIZATIONS = 'Research Institutions',
|
||||||
PROJECTS = 'Projects'
|
PROJECTS = 'Projects'
|
||||||
}
|
}
|
||||||
|
|
||||||
export let stakeholderTypes: Option[] = [
|
|
||||||
{value: 'funder', label: StakeholderEntities.FUNDER},
|
|
||||||
{value: 'ri', label: StakeholderEntities.RI},
|
|
||||||
{value: 'organization', label: StakeholderEntities.ORGANIZATION},
|
|
||||||
{value: 'project', label: StakeholderEntities.PROJECT}
|
|
||||||
];
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ import {Meta, Title} from "@angular/platform-browser";
|
||||||
import {SEOService} from "../../sharedComponents/SEO/SEO.service";
|
import {SEOService} from "../../sharedComponents/SEO/SEO.service";
|
||||||
import {Breadcrumb} from "../../utils/breadcrumbs/breadcrumbs.component";
|
import {Breadcrumb} from "../../utils/breadcrumbs/breadcrumbs.component";
|
||||||
import {Subscriber} from "rxjs";
|
import {Subscriber} from "rxjs";
|
||||||
import {StakeholderEntities} from "../entities/stakeholder";
|
import {StakeholderBaseComponent} from "../../monitor-admin/utils/stakeholder-base.component";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'indicator-themes-page',
|
selector: 'indicator-themes-page',
|
||||||
|
@ -54,9 +54,9 @@ import {StakeholderEntities} from "../entities/stakeholder";
|
||||||
This is the current set of indicator themes we cover. We’ll keep enriching it as new requests and data are coming into the <a href="https://graph.openaire.eu" class="text-graph" target="_blank">OpenAIRE Graph</a>. We are at your disposal, should you have any recommendations!
|
This is the current set of indicator themes we cover. We’ll keep enriching it as new requests and data are coming into the <a href="https://graph.openaire.eu" class="text-graph" target="_blank">OpenAIRE Graph</a>. We are at your disposal, should you have any recommendations!
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Check out the indicator pages (for <a [routerLink]="['../funder']" [relativeTo]="route" class="uk-text-lowercase">{{entities.FUNDERS}}</a>,
|
Check out the indicator pages (for <a [routerLink]="['../funder']" [relativeTo]="route" class="uk-text-lowercase">{{entities.funders}}</a>,
|
||||||
<a [routerLink]="['../organization']" [relativeTo]="route" class="uk-text-lowercase">{{entities.ORGANIZATIONS}}</a> and
|
<a [routerLink]="['../organization']" [relativeTo]="route" class="uk-text-lowercase">{{entities.organizations}}</a> and
|
||||||
<a [routerLink]="['../ri']" [relativeTo]="route" class="uk-text-lowercase">{{entities.RIS}}</a>)
|
<a [routerLink]="['../ri']" [relativeTo]="route" class="uk-text-lowercase">{{entities.ris}}</a>)
|
||||||
for the specific indicators for each type of dashboard, and the <a [routerLink]="['../../methodology']" [relativeTo]="route">methodology and terminology</a> page on how we produce the metrics.
|
for the specific indicators for each type of dashboard, and the <a [routerLink]="['../../methodology']" [relativeTo]="route">methodology and terminology</a> page on how we produce the metrics.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -65,44 +65,24 @@ import {StakeholderEntities} from "../entities/stakeholder";
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
})
|
})
|
||||||
export class IndicatorThemesComponent implements OnInit, OnDestroy {
|
export class IndicatorThemesComponent extends StakeholderBaseComponent implements OnInit {
|
||||||
private subscriptions: any[] = [];
|
|
||||||
public properties = properties;
|
|
||||||
public entities = StakeholderEntities;
|
|
||||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Resources - Themes'}];
|
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Resources - Themes'}];
|
||||||
|
|
||||||
constructor(private router: Router,
|
constructor(protected _router: Router,
|
||||||
private meta: Meta,
|
protected _meta: Meta,
|
||||||
private title: Title,
|
protected _title: Title,
|
||||||
private seoService: SEOService,
|
protected seoService: SEOService,
|
||||||
public route: ActivatedRoute) {
|
protected _route: ActivatedRoute) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.subscriptions.push(this.route.params.subscribe(params => {
|
this.subscriptions.push(this._route.params.subscribe(params => {
|
||||||
const description = "Monitor | Indicator Themes";
|
this.title = "Monitor | Indicator Themes";
|
||||||
const title = "Monitor | Indicator Themes";
|
this.description = "Monitor | Indicator Themes";
|
||||||
this.metaTags(title, description);
|
this.setMetadata();
|
||||||
this.breadcrumbs[0].route = '/' + (params['stakeholder']?params['stakeholder']:'');
|
this.breadcrumbs[0].route = '/' + (params['stakeholder']?params['stakeholder']:'');
|
||||||
this.breadcrumbs[0].name = (params['stakeholder']?'dashboard':'home');
|
this.breadcrumbs[0].name = (params['stakeholder']?'dashboard':'home');
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if (subscription instanceof Subscriber) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
metaTags(title, description) {
|
|
||||||
const url = properties.domain + properties.baseLink + this.router.url;
|
|
||||||
this.seoService.createLinkForCanonicalURL(url, false);
|
|
||||||
this.meta.updateTag({content: url}, "property='og:url'");
|
|
||||||
this.meta.updateTag({content: description}, "name='description'");
|
|
||||||
this.meta.updateTag({content: description}, "property='og:description'");
|
|
||||||
this.meta.updateTag({content: title}, "property='og:title'");
|
|
||||||
this.title.setTitle(title);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import {Injectable} from "@angular/core";
|
import {Injectable} from "@angular/core";
|
||||||
import {MenuItem} from "../../sharedComponents/menu";
|
import {MenuItem} from "../../sharedComponents/menu";
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
import {StakeholderEntities} from "../entities/stakeholder";
|
|
||||||
import {from, Subscription} from "rxjs";
|
import {from, Subscription} from "rxjs";
|
||||||
import {HttpClient} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
import {properties} from "../../../../environments/environment";
|
import {properties} from "../../../../environments/environment";
|
||||||
import {Page} from "../../utils/entities/adminTool/page";
|
import {Page} from "../../utils/entities/adminTool/page";
|
||||||
import {map} from "rxjs/operators";
|
import {map} from "rxjs/operators";
|
||||||
|
import {StakeholderConfiguration} from "../../monitor-admin/utils/indicator-utils";
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
|
@ -16,12 +16,7 @@ export class ResourcesService {
|
||||||
private subscription: Subscription;
|
private subscription: Subscription;
|
||||||
private routes = ResourcesService.types.map(type => '/indicators/' + type.value);
|
private routes = ResourcesService.types.map(type => '/indicators/' + type.value);
|
||||||
|
|
||||||
public static readonly types: Option[] = [
|
public static readonly types: Option[] = StakeholderConfiguration.TYPES;
|
||||||
{value: 'funder', label: StakeholderEntities.FUNDERS},
|
|
||||||
{value: 'ri', label: StakeholderEntities.RIS},
|
|
||||||
{value: 'project', label: StakeholderEntities.PROJECTS},
|
|
||||||
{value: 'organization', label: StakeholderEntities.ORGANIZATIONS}
|
|
||||||
];
|
|
||||||
|
|
||||||
constructor(private http: HttpClient) {
|
constructor(private http: HttpClient) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ export class NotificationConfiguration {
|
||||||
<span *ngIf="mobile" class="uk-margin-right">
|
<span *ngIf="mobile" class="uk-margin-right">
|
||||||
<icon ratio="1.5" name="west" visuallyHidden="back" [flex]="true"></icon>
|
<icon ratio="1.5" name="west" visuallyHidden="back" [flex]="true"></icon>
|
||||||
</span>
|
</span>
|
||||||
<div class="uk-text-bold">Notifications</div>
|
<span class="uk-text-bold">Notifications</span>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="uk-flex uk-flex-right@m uk-flex-center uk-padding uk-padding-remove-vertical">
|
<div class="uk-flex uk-flex-right@m uk-flex-center uk-padding uk-padding-remove-vertical">
|
||||||
<button [disabled]="unreadCount === 0" (click)="readAll()" class="uk-button uk-button-link">Mark As Read ({{unreadCount}})</button>
|
<button [disabled]="unreadCount === 0" (click)="readAll()" class="uk-button uk-button-link">Mark As Read ({{unreadCount}})</button>
|
||||||
|
@ -75,7 +75,7 @@ export class NotificationConfiguration {
|
||||||
<span class="uk-margin-right">
|
<span class="uk-margin-right">
|
||||||
<icon ratio="1.5" name="west" visuallyHidden="back" [flex]="true"></icon>
|
<icon ratio="1.5" name="west" visuallyHidden="back" [flex]="true"></icon>
|
||||||
</span>
|
</span>
|
||||||
<div *ngIf="notification.title" class="uk-text-bold">{{notification.title}}</div>
|
<span *ngIf="notification.title" class="uk-text-bold">{{notification.title}}</span>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="uk-flex uk-flex-middle uk-margin-medium-bottom">
|
<div class="uk-flex uk-flex-middle uk-margin-medium-bottom">
|
||||||
<notification-user [name]="notification.name" [surname]="notification.surname" colorClass="uk-text-secondary" [outline]="true"></notification-user>
|
<notification-user [name]="notification.name" [surname]="notification.surname" colorClass="uk-text-secondary" [outline]="true"></notification-user>
|
||||||
|
|
|
@ -7,11 +7,12 @@ import {NotificationService} from "../notification.service";
|
||||||
import {Notification} from "../notifications";
|
import {Notification} from "../notifications";
|
||||||
import {InputComponent, Option} from "../../sharedComponents/input/input.component";
|
import {InputComponent, Option} from "../../sharedComponents/input/input.component";
|
||||||
import {NotificationHandler} from "../../utils/notification-handler";
|
import {NotificationHandler} from "../../utils/notification-handler";
|
||||||
|
import {BaseComponent} from "../../sharedComponents/base/base.component";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: '[notify-form]',
|
selector: '[notify-form]',
|
||||||
template: `
|
template: `
|
||||||
<form *ngIf="user && form" [formGroup]="form">
|
<form *ngIf="user && form && properties.notificationsAPIURL" [formGroup]="form">
|
||||||
<ng-template [ngIf]="form.get('notify')">
|
<ng-template [ngIf]="form.get('notify')">
|
||||||
<label><input name="notify" type="checkbox" class="uk-checkbox" formControlName="notify"><span class="uk-margin-small-left">{{label}}</span></label>
|
<label><input name="notify" type="checkbox" class="uk-checkbox" formControlName="notify"><span class="uk-margin-small-left">{{label}}</span></label>
|
||||||
<div [class.uk-hidden]="!form.get('notify').value" class="uk-position-relative uk-margin-medium-top">
|
<div [class.uk-hidden]="!form.get('notify').value" class="uk-position-relative uk-margin-medium-top">
|
||||||
|
@ -44,7 +45,7 @@ import {NotificationHandler} from "../../utils/notification-handler";
|
||||||
styleUrls: ['notify-form.component.less'],
|
styleUrls: ['notify-form.component.less'],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class NotifyFormComponent implements OnInit, OnDestroy {
|
export class NotifyFormComponent extends BaseComponent implements OnInit {
|
||||||
@Input()
|
@Input()
|
||||||
public label: string = 'Notify Managers';
|
public label: string = 'Notify Managers';
|
||||||
public form: UntypedFormGroup;
|
public form: UntypedFormGroup;
|
||||||
|
@ -57,13 +58,13 @@ export class NotifyFormComponent implements OnInit, OnDestroy {
|
||||||
public focused: boolean = false;
|
public focused: boolean = false;
|
||||||
@ViewChild('recipients', { static: false }) recipients: InputComponent;
|
@ViewChild('recipients', { static: false }) recipients: InputComponent;
|
||||||
private notification: Notification;
|
private notification: Notification;
|
||||||
private subscriptions: any[] = [];
|
|
||||||
public sending: boolean = false;
|
public sending: boolean = false;
|
||||||
|
|
||||||
constructor(private fb: UntypedFormBuilder,
|
constructor(private fb: UntypedFormBuilder,
|
||||||
private cdr: ChangeDetectorRef,
|
private cdr: ChangeDetectorRef,
|
||||||
private userManagementService: UserManagementService,
|
private userManagementService: UserManagementService,
|
||||||
private notificationService: NotificationService) {
|
private notificationService: NotificationService) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Input()
|
@Input()
|
||||||
|
@ -79,14 +80,6 @@ export class NotifyFormComponent implements OnInit, OnDestroy {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if (subscription instanceof Subscription) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
reset(message: string = null) {
|
reset(message: string = null) {
|
||||||
if (!this.availableGroups) {
|
if (!this.availableGroups) {
|
||||||
this.form = this.fb.group({
|
this.form = this.fb.group({
|
||||||
|
@ -162,16 +155,12 @@ export class NotifyFormComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
get message(): string {
|
get message(): string {
|
||||||
if ((this.form.get('notify') && !this.form.get('notify').value) || (this.groupsAsFromArray && this.groupsAsFromArray.length === 0)) {
|
if (!this.properties.notificationsAPIURL || (this.form.get('notify') && !this.form.get('notify').value) || (this.groupsAsFromArray && this.groupsAsFromArray.length === 0)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return this.form.get('message').value;
|
return this.form.get('message').value;
|
||||||
}
|
}
|
||||||
|
|
||||||
onFocus(event: boolean) {
|
|
||||||
this.focused = event;
|
|
||||||
}
|
|
||||||
|
|
||||||
focus(event) {
|
focus(event) {
|
||||||
this.focused = true;
|
this.focused = true;
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
|
@ -43,7 +43,7 @@ export abstract class BaseComponent implements OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize router params and data (should be called in the constructor)
|
* Initialize router params and data (should be called in the constructor of a component with router-outlet)
|
||||||
* */
|
* */
|
||||||
initRouterParams(route: ActivatedRoute = null) {
|
initRouterParams(route: ActivatedRoute = null) {
|
||||||
if (route) {
|
if (route) {
|
||||||
|
@ -55,6 +55,16 @@ export abstract class BaseComponent implements OnDestroy {
|
||||||
while (r.firstChild) {
|
while (r.firstChild) {
|
||||||
r = r.firstChild;
|
r = r.firstChild;
|
||||||
}
|
}
|
||||||
|
let data = r.snapshot.data;
|
||||||
|
let params = r.snapshot.params;
|
||||||
|
let current = r.snapshot;
|
||||||
|
while (current.parent) {
|
||||||
|
data = {...current.parent.data, ...data};
|
||||||
|
params = {...current.parent.params, ...params};
|
||||||
|
current = current.parent;
|
||||||
|
}
|
||||||
|
r.snapshot.data = data;
|
||||||
|
r.snapshot.params = params;
|
||||||
this.paramsResolved = true;
|
this.paramsResolved = true;
|
||||||
this.params.next(r.snapshot.params);
|
this.params.next(r.snapshot.params);
|
||||||
this.data.next(r.snapshot.data);
|
this.data.next(r.snapshot.data);
|
||||||
|
|
|
@ -47,11 +47,13 @@ export interface StopRule {
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'icon',
|
selector: 'icon',
|
||||||
template: `
|
template: `
|
||||||
<span #svgIcon *ngIf="icon.data" class="uk-icon" [class.uk-preserve]="gradient || icon.preserveColor" [class.uk-flex]="flex" [ngClass]="customClass" [ngStyle]="style" [innerHTML]="icon.data | safeHtml"></span>
|
<ng-container *ngIf="icon">
|
||||||
<span *ngIf="!icon.data && icon.name" [class.uk-flex]="flex" [ngClass]="customClass" [class.uk-display-inline-block]="!flex">
|
<span #svgIcon *ngIf="icon.data" class="uk-icon" [class.uk-preserve]="gradient || icon.preserveColor" [class.uk-flex]="flex" [ngClass]="customClass" [ngStyle]="style" [innerHTML]="icon.data | safeHtml"></span>
|
||||||
<span class="material-icons" [ngClass]="type?type:icon.type" [ngStyle]="style">{{icon.name}}</span>
|
<span *ngIf="!icon.data && icon.name" [class.uk-flex]="flex" [ngClass]="customClass" [class.uk-display-inline-block]="!flex">
|
||||||
</span>
|
<span class="material-icons" [ngClass]="type?type:icon.type" [ngStyle]="style">{{icon.name}}</span>
|
||||||
<span *ngIf="visuallyHidden" class="visually-hidden">{{visuallyHidden}}</span>
|
</span>
|
||||||
|
<span *ngIf="visuallyHidden" class="visually-hidden">{{visuallyHidden}}</span>
|
||||||
|
</ng-container>
|
||||||
`
|
`
|
||||||
})
|
})
|
||||||
export class IconsComponent implements AfterViewInit, OnChanges {
|
export class IconsComponent implements AfterViewInit, OnChanges {
|
||||||
|
@ -149,7 +151,7 @@ export class IconsComponent implements AfterViewInit, OnChanges {
|
||||||
}
|
}
|
||||||
|
|
||||||
initIcon() {
|
initIcon() {
|
||||||
if(this.icon.data && this.svgIcon) {
|
if(this.icon?.data && this.svgIcon) {
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
let svg: Element = this.svgIcon.nativeElement.getElementsByTagName('svg').item(0);
|
let svg: Element = this.svgIcon.nativeElement.getElementsByTagName('svg').item(0);
|
||||||
if(!this.defaultSize && svg) {
|
if(!this.defaultSize && svg) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
export type Environment = "development" | "test" | "beta" | "production";
|
export type Environment = "development" | "test" | "beta" | "production";
|
||||||
export type Dashboard = "explore" | "connect" | "monitor" | "aggregator" | "eosc" | "developers" | "faircore4eosc";
|
export type Dashboard = "explore" | "connect" | "monitor" | "aggregator" | "eosc" | "developers" | "faircore4eosc";
|
||||||
export type PortalType = "explore" | "connect" | "community" | "monitor" | "funder" | "ri" | "project" | "organization" | "aggregator" | "eosc" | "faircore4eosc";
|
export type PortalType = "explore" | "connect" | "community" | "monitor" | "funder" | "ri" | "project" | "organization" | "aggregator" | "eosc" | "faircore4eosc" | "irish";
|
||||||
|
|
||||||
export interface EnvProperties {
|
export interface EnvProperties {
|
||||||
environment?: Environment;
|
environment?: Environment;
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import {UrlSegment} from '@angular/router';
|
import {UrlSegment} from '@angular/router';
|
||||||
import {AbstractControl, UntypedFormGroup, ValidationErrors, ValidatorFn, Validators} from "@angular/forms";
|
import {AbstractControl, UntypedFormGroup, ValidationErrors, ValidatorFn, Validators} from "@angular/forms";
|
||||||
import {Stakeholder, StakeholderEntities} from "../monitor/entities/stakeholder";
|
import {Stakeholder} from "../monitor/entities/stakeholder";
|
||||||
import {CommunityInfo} from "../connect/community/communityInfo";
|
import {CommunityInfo} from "../connect/community/communityInfo";
|
||||||
import {properties} from "../../../environments/environment";
|
import {properties} from "../../../environments/environment";
|
||||||
import {OpenaireEntities} from "./properties/searchFields";
|
import {OpenaireEntities} from "./properties/searchFields";
|
||||||
|
import {StakeholderConfiguration} from "../monitor-admin/utils/indicator-utils";
|
||||||
|
|
||||||
export class Dates {
|
export class Dates {
|
||||||
public static yearMin = 1800;
|
public static yearMin = 1800;
|
||||||
|
@ -524,13 +525,13 @@ export class StringUtils {
|
||||||
|
|
||||||
public static getStakeholderType(stakeholderType: string, plural: boolean = false): string {
|
public static getStakeholderType(stakeholderType: string, plural: boolean = false): string {
|
||||||
if(stakeholderType == "funder") {
|
if(stakeholderType == "funder") {
|
||||||
return plural ? StakeholderEntities.FUNDERS : StakeholderEntities.FUNDER;
|
return plural ? StakeholderConfiguration.ENTITIES.funders : StakeholderConfiguration.ENTITIES.funders;
|
||||||
} else if(stakeholderType == "ri") {
|
} else if(stakeholderType == "ri") {
|
||||||
return plural ? StakeholderEntities.RIS : StakeholderEntities.RI;
|
return plural ?StakeholderConfiguration.ENTITIES.ris : StakeholderConfiguration.ENTITIES.ri;
|
||||||
} else if(stakeholderType == "organization") {
|
} else if(stakeholderType == "organization") {
|
||||||
return plural ? StakeholderEntities.ORGANIZATIONS : StakeholderEntities.ORGANIZATION;
|
return plural ? StakeholderConfiguration.ENTITIES.organizations : StakeholderConfiguration.ENTITIES.organization;
|
||||||
} else if(stakeholderType == "project") {
|
} else if(stakeholderType == "project") {
|
||||||
return plural ? StakeholderEntities.PROJECTS : StakeholderEntities.PROJECT;
|
return plural ? StakeholderConfiguration.ENTITIES.projects: StakeholderConfiguration.ENTITIES.project;
|
||||||
}
|
}
|
||||||
return stakeholderType;
|
return stakeholderType;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue