diff --git a/angular.json b/angular.json
index dd66c8e..0c1cd14 100644
--- a/angular.json
+++ b/angular.json
@@ -27,6 +27,9 @@
"node_modules/datatables.net-dt/css/jquery.dataTables.css"
],
"scripts": [
+ "src/assets/common-assets/common/jquery.js",
+ "src/assets/common-assets/common/uikit.min.js",
+ "src/assets/common-assets/common/uikit-icons.min.js",
"node_modules/jquery/dist/jquery.js",
"node_modules/datatables.net/js/jquery.dataTables.js"
]
@@ -104,8 +107,10 @@
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"scripts": [
- "node_modules/jquery/dist/jquery.js",
- "node_modules/datatables.net/js/jquery.dataTables.js"
+ "src/assets/common-assets/common/jquery.js",
+ "src/assets/common-assets/common/uikit.min.js",
+ "src/assets/common-assets/common/uikit-icons.min.js",
+ "node_modules/jquery/dist/jquery.js"
],
"styles": [
"src/styles.css",
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 8aac17a..ba0a059 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -32,17 +32,29 @@ const routes: Routes = [
data: {hasAdminMenu: true}
},
{
- path: 'admin/:stakeholder/users',
- loadChildren: './users/users.module#UsersModule',
- resolve: {envSpecific: EnvironmentSpecificResolver}
+
+ path: 'admin/:stakeholder/general',
+ loadChildren: './manageStakeholder/manageStakeholder.module#ManageStakeholderModule',
+ resolve: {envSpecific: EnvironmentSpecificResolver},
+ data: {hasAdminMenu: true}
},
{
- path: 'admin/:stakeholder',
+ path: 'admin/:stakeholder/users',
+ loadChildren: './users/users.module#UsersModule',
+ resolve: {envSpecific: EnvironmentSpecificResolver},
+ data: {hasAdminMenu: true}
+ },
+ {
+ path: 'admin/:stakeholder',
loadChildren: './stakeholder/stakeholder.module#StakeholderModule',
resolve: {envSpecific: EnvironmentSpecificResolver},
},
{
- path: 'admin/:stakeholder/:topic',
+ path: 'admin/:stakeholder/indicators/:topic',
+ loadChildren: './topic/topic.module#TopicModule',
+ resolve: {envSpecific: EnvironmentSpecificResolver},
+ },
+ { path: 'admin/:stakeholder/indicators',
loadChildren: './topic/topic.module#TopicModule',
resolve: {envSpecific: EnvironmentSpecificResolver},
},
diff --git a/src/app/app.component.html b/src/app/app.component.html
index ca494ab..04dd017 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,13 +1,14 @@
-
-
+
-
+ -->
+
+
+
+
-
-
-
- play_circle_filled
- Hide Controls
-
-
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 063d428..f87f2ef 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -7,7 +7,7 @@ import {UserManagementService} from "./openaireLibrary/services/user-management.
import {StakeholderService} from "./openaireLibrary/monitor/services/stakeholder.service";
import {BehaviorSubject, Subscriber} from "rxjs";
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
-import {MenuItem} from "./openaireLibrary/sharedComponents/menu";
+import {MenuItem, RootMenuItem} from "./openaireLibrary/sharedComponents/menu";
import {Stakeholder, Topic} from "./openaireLibrary/monitor/entities/stakeholder";
import {LinksResolver} from "./search/links-resolver";
@@ -27,6 +27,9 @@ export class AppComponent implements OnInit, OnDestroy {
isFrontPage: boolean = false;
isViewPublic: boolean = false;
sideBarItems: MenuItem[] = [];
+ specialSideBarMenuItem:MenuItem = null;
+ menuItems: RootMenuItem[] = [];
+ menuHeader = { route: "/", url: null, title: "Default menu header", logoUrl: null, logoSmallUrl:null, position:'center', badge: false };
userMenuItems: MenuItem[] = [new MenuItem("", "My profile", "", "", false, [], [], {})];
adminMenuItems: MenuItem[] = [];
stakeholder: Stakeholder = null;
@@ -95,8 +98,10 @@ export class AppComponent implements OnInit, OnDestroy {
this.stakeholderService.getStakeholder(this.properties.monitorServiceAPIURL, params['stakeholder']).subscribe(stakeholder => {
if(stakeholder) {
this.stakeholder = stakeholder;
+ this.buildMenu();
LinksResolver.setProperties(this.stakeholder.alias);
this.stakeholderService.setStakeholder(stakeholder);
+ this.layoutService.setSmallScreen((this.innerWidth && this.innerWidth < 1219));
this.layoutService.setOpen(!(this.innerWidth && this.innerWidth < 1219));
if (isSearch) {
this.activeTopic = null;
@@ -110,13 +115,16 @@ export class AppComponent implements OnInit, OnDestroy {
this.stakeholderService.setStakeholder(null);
LinksResolver.resetProperties();
this.navigateToError();
+ this.buildMenu();
}
}, error => {
this.stakeholderService.setStakeholder(null);
LinksResolver.resetProperties();
this.navigateToError();
+ this.buildMenu();
});
} else {
+ this.buildMenu();
if(isSearch) {
this.activeTopic = null;
} else if (params && params['topic']) {
@@ -124,12 +132,14 @@ export class AppComponent implements OnInit, OnDestroy {
} else {
this.activeTopic = this.stakeholder.topics.find(topic => this.isPublicOrIsMember(topic.isPublic) && topic.isActive);
}
+
}
} else {
LinksResolver.resetProperties();
this.stakeholderService.setStakeholder(null);
this.layoutService.setOpen(!(this.innerWidth && this.innerWidth < 1219));
this.stakeholder = null;
+ this.buildMenu();
}
}));
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
@@ -181,36 +191,91 @@ export class AppComponent implements OnInit, OnDestroy {
}
buildMenu() {
+ this.menuItems = [];
+ this.adminMenuItems = [];
this.userMenuItems = [];
- /* if (Session.isPortalAdministrator(this.user)) {
- this.userMenuItems.push(new MenuItem("", "Manage helptexts",
- "", "/helptexts", true, [], [], {communityId:'openaire'}))
-
- }*/
- if (this.isAdmin()) {
- this.userMenuItems.push(new MenuItem("", "Manage profiles",
- "", "/admin", true, [], [], {}))
-
- }
- if (this.user) {
- this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
- }
- if (this.adminMenuItems.length == 0) {
- //nstructor(id: string, name: string, route: string, items: Item[], icon, open: boolean) {
- this.adminMenuItems.push(new MenuItem("stakeholders", "Manage profiles", "", "/admin", false, [], [], {}, "
settings "));
- /*let adminOptions = new MenuItem("adminOptions", "Admin Options", "", "", false, [], [], {})
- adminOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {}));
- adminOptions.items.push(new MenuItem("portals", "Portals", "", "/portals", false, [], [], {}));
- adminOptions.items.push(new MenuItem("entities", "Entities", "", "/entities", false, [], [], {}));
- adminOptions.items.push(new MenuItem("classes", "Class help texts", "", "/classes", false, [], [], {}));
- this.adminMenuItems.push(adminOptions);
- let monitorOptions = new MenuItem("monitorOptions", "Monitor Options", "", "", false, [], [], {})
- monitorOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {communityId: 'openaire'}));
- monitorOptions.items.push(new MenuItem("entities", "Entities", "", "/entities", false, [], [], {communityId: 'openaire'}));
- monitorOptions.items.push(new MenuItem("classes", "Class help texts", "", "/classContents", false, [], [], {communityId: 'openaire'}));
- monitorOptions.items.push(new MenuItem("helptexts", "Help texts", "", "/helptexts", false, [], [], {communityId: 'openaire'}));
- this.adminMenuItems.push(monitorOptions);*/
+ if(this.stakeholder) {
+ if (this.isFrontPage) {
+ this.menuHeader = {
+ route: "/" + this.stakeholder.alias,
+ url: null,
+ title: this.stakeholder.name,
+ logoUrl: null,
+ logoSmallUrl: null,
+ position: 'center',
+ badge: false
+ };
+ // if(this.isAdmin()) {
+ this.menuItems.push({
+ rootItem: new MenuItem("manage", "Manage",
+ "", "/admin", false, [], null, {}), items: []
+ });
+
+ // }
+ this.specialSideBarMenuItem = new MenuItem("search", "Search research outcomes", "", this.properties.searchLinkToResults, false, [], null, {})
+ this.specialSideBarMenuItem.icon = '
';
+
+ } else {
+ this.menuHeader = {
+ route: "/admin/" + this.stakeholder.alias,
+ url: null,
+ title: 'Admin - ' + this.stakeholder.name,
+ logoUrl: null,
+ logoSmallUrl: null,
+ position: 'center',
+ badge: false
+ };
+ this.menuItems.push({
+ rootItem: new MenuItem("", "Dashboard",
+ "", '/'+ this.stakeholder.alias+'/', false, [], null, {}), items: []
+ });
+ this.adminMenuItems.push(new MenuItem("general", "General", "", "/admin/"+this.stakeholder.alias + '/general', false, [], [], {}, "
"));
+ this.adminMenuItems.push(new MenuItem("indicators", "Indicators", "", "/admin/"+this.stakeholder.alias + '/indicators', false, [], [], {}, "
"));
+ this.adminMenuItems.push(new MenuItem("users", "Users", "", "/admin/"+this.stakeholder.alias+"/users", false, [], [], {}, "
"));
+ this.specialSideBarMenuItem = new MenuItem("back", "Manage profiles", "", "/admin",false, [], null, {});
+ this.specialSideBarMenuItem.icon = '
';
+
+ }
+ this.userMenuItems = [];
+ /* if (Session.isPortalAdministrator(this.user)) {
+ this.userMenuItems.push(new MenuItem("", "Manage helptexts",
+ "", "/helptexts", true, [], [], {communityId:'openaire'}))
+
+ }*/
+ if (this.isAdmin()) {
+ this.userMenuItems.push(new MenuItem("", "Manage profiles",
+ "", "/admin", true, [], [], {}))
+ this.specialSideBarMenuItem = null;
+ }
+ if (this.user) {
+ this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
+ }
+ }else{
+ if(this.isFrontPage || !this.hasAdminMenu){
+ this.menuHeader = { route: null, url: "https://" + (this.properties.environment =='beta'?'beta.':'')+'monitor.openaire.eu', title: "Monitor", logoUrl: 'assets/common-assets/logo-large-monitor.png', logoSmallUrl:"assets/common-assets/logo-small-monitor.png", position:'left' , badge: true };
+ //TODO monitor menu items?
+
+ }else{
+ this.menuHeader = { route: "/", url: null, title: "Monitor Dashboard", logoUrl: null, logoSmallUrl:null, position:'center' , badge: false };
+ this.adminMenuItems = [];
+ this.specialSideBarMenuItem = null;
+ this.adminMenuItems.push(new MenuItem("stakeholders", "Manage profiles", "", "/admin", false, [], [], {}, "
"));
+ /*let adminOptions = new MenuItem("adminOptions", "Admin Options", "", "", false, [], [], {})
+ adminOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {}));
+ adminOptions.items.push(new MenuItem("portals", "Portals", "", "/portals", false, [], [], {}));
+ adminOptions.items.push(new MenuItem("entities", "Entities", "", "/entities", false, [], [], {}));
+ adminOptions.items.push(new MenuItem("classes", "Class help texts", "", "/classes", false, [], [], {}));
+ this.adminMenuItems.push(adminOptions);
+ let monitorOptions = new MenuItem("monitorOptions", "Monitor Options", "", "", false, [], [], {})
+ monitorOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {communityId: 'openaire'}));
+ monitorOptions.items.push(new MenuItem("entities", "Entities", "", "/entities", false, [], [], {communityId: 'openaire'}));
+ monitorOptions.items.push(new MenuItem("classes", "Class help texts", "", "/classContents", false, [], [], {communityId: 'openaire'}));
+ monitorOptions.items.push(new MenuItem("helptexts", "Help texts", "", "/helptexts", false, [], [], {communityId: 'openaire'}));
+ this.adminMenuItems.push(monitorOptions);*/
+
+ }
}
+
}
public isAdmin() {
diff --git a/src/app/error/errorPage.component.ts b/src/app/error/errorPage.component.ts
index 1b95afc..dd793f3 100644
--- a/src/app/error/errorPage.component.ts
+++ b/src/app/error/errorPage.component.ts
@@ -3,7 +3,9 @@ import {Component} from '@angular/core';
@Component({
selector: 'openaire-error',
template: `
-
+
+
+
`
})
export class OpenaireErrorPageComponent {
diff --git a/src/app/manageStakeholder/manageStakeholder-routing.module.ts b/src/app/manageStakeholder/manageStakeholder-routing.module.ts
new file mode 100644
index 0000000..5e37524
--- /dev/null
+++ b/src/app/manageStakeholder/manageStakeholder-routing.module.ts
@@ -0,0 +1,21 @@
+import {NgModule} from '@angular/core';
+import {RouterModule} from '@angular/router';
+import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
+import {ManageStakeholderComponent} from "./manageStakeholder.component";
+import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
+
+@NgModule({
+ imports: [
+ RouterModule.forChild([
+ {
+ path: '',
+ component: ManageStakeholderComponent,
+ canActivate: [AdminDashboardGuard],
+ canDeactivate: [PreviousRouteRecorder],
+ data: {hasSidebar: true}
+ }
+ ])
+ ]
+})
+export class ManageStakeholderRoutingModule {
+}
diff --git a/src/app/manageStakeholder/manageStakeholder.component.html b/src/app/manageStakeholder/manageStakeholder.component.html
new file mode 100644
index 0000000..dd8d336
--- /dev/null
+++ b/src/app/manageStakeholder/manageStakeholder.component.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Upload
+
+
Remove
+
+ {{uploadError}}
+
+
+
+
+
+
+
+
+
No default profiles has been found for this type.
+
0"
+ dashboard-input class="uk-form-row" [formInput]="stakeholderFb.get('defaultId')"
+ label="Indicators" [options]="defaultStakeholdersOptions" type="select">
+
+
+
+
+
+
diff --git a/src/app/manageStakeholder/manageStakeholder.component.ts b/src/app/manageStakeholder/manageStakeholder.component.ts
new file mode 100644
index 0000000..f599a35
--- /dev/null
+++ b/src/app/manageStakeholder/manageStakeholder.component.ts
@@ -0,0 +1,383 @@
+import {Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
+import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
+import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
+import {EnvironmentSpecificService} from "../openaireLibrary/utils/properties/environment-specific.service";
+import {Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
+import {Subscriber, zip} from "rxjs";
+import {StakeholderUtils} from "../utils/indicator-utils";
+import {FormBuilder, FormGroup, Validators} from "@angular/forms";
+import {AlertModal} from "../openaireLibrary/utils/modal/alert";
+import {Option} from "../openaireLibrary/dashboard/sharedComponents/input/input.component";
+import {Title} from "@angular/platform-browser";
+import {UserManagementService} from "../openaireLibrary/services/user-management.service";
+import {Session} from "../openaireLibrary/login/utils/helper.class";
+import {UtilitiesService} from "../openaireLibrary/services/utilities.service";
+
+declare var UIkit;
+
+@Component({
+ selector: 'home',
+ templateUrl: "./manageStakeholder.component.html"
+})
+export class ManageStakeholderComponent implements OnInit, OnDestroy {
+
+ public properties: EnvProperties;
+ public loading: boolean = true;
+ public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
+ public defaultStakeholders: Stakeholder[];
+ public stakeholders: Stakeholder[];
+ public stakeholder: Stakeholder;
+ public stakeholderFb: FormGroup;
+ public index: number;
+ public user = null;
+ /**
+ * Filtered Stakeholders
+ */
+ public displayDefaultStakeholders: Stakeholder[];
+ public displayStakeholders: Stakeholder[];
+
+ public defaultStakeholdersOptions: Option[] = [];
+
+ /**
+ * Top filters
+ */
+ public filters: FormGroup;
+ public all: Option = {
+ value: 'all',
+ label: 'All'
+ };
+
+ /**
+ * Grid or List View
+ */
+ public grid: boolean = true;
+ private subscriptions: any[] = [];
+
+ /**
+ * Photo upload
+ * */
+ public file: File;
+ public photo: string | ArrayBuffer;
+ public uploadError: string;
+ public deleteCurrentPhoto: boolean = false;
+ private maxsize: number = 200 * 1024;
+
+ @ViewChild('editStakeholderModal') editStakeholderModal: AlertModal;
+ @ViewChild('deleteStakeholderModal') deleteStakeholderModal: AlertModal;
+
+ constructor(private stakeholderService: StakeholderService,
+ private utilsService: UtilitiesService,
+ private userManagementService: UserManagementService,
+ private propertiesService: EnvironmentSpecificService,
+ private title: Title,
+ private fb: FormBuilder) {
+ }
+
+ ngOnInit(): void {
+ this.buildFilters();
+ this.propertiesService.loadEnvironment()
+ .then(properties => {
+ this.properties = properties;
+ this.title.setTitle('Manage profiles');
+ this.userManagementService.getUserInfo().subscribe(user => {
+ this.user = user;
+ });
+ let data = zip(
+ this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
+ this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL)
+ );
+ data.subscribe(res => {
+ this.defaultStakeholders = res[0];
+ this.stakeholders = res[1];
+ this.displayDefaultStakeholders = res[0];
+ this.displayStakeholders = res[1];
+ this.loading = false;
+ });
+ });
+ this.subscriptions.push(UIkit.util.on(document, 'hidden', '#edit_modal', (): void => {
+ this.removePhoto();
+ }));
+ }
+
+ ngOnDestroy(): void {
+ this.subscriptions.forEach(value => {
+ if (value instanceof Subscriber) {
+ value.unsubscribe();
+ } else if (value instanceof Function) {
+ value();
+ }
+ });
+ }
+
+ hide(element: any) {
+ UIkit.dropdown(element).hide();
+ }
+
+ public changeGrid(value) {
+ this.grid = value;
+ }
+
+ private buildFilters() {
+ this.filters = this.fb.group({
+ privacy: this.fb.control('all'),
+ status: this.fb.control('all'),
+ keyword: this.fb.control('')
+ });
+ this.subscriptions.push(this.filters.get('privacy').valueChanges.subscribe(value => {
+ this.onPrivacyChange(value);
+ }));
+ this.subscriptions.push(this.filters.get('status').valueChanges.subscribe(value => {
+ this.onStatusChange(value);
+ }));
+ this.subscriptions.push(this.filters.get('keyword').valueChanges.subscribe(value => {
+ this.onKeywordChange(value);
+ }));
+ }
+
+ onPrivacyChange(value) {
+ this.displayDefaultStakeholders = this.filterPrivacy(this.defaultStakeholders, value);
+ this.displayStakeholders = this.filterPrivacy(this.stakeholders, value);
+ }
+
+ onStatusChange(value) {
+ this.displayDefaultStakeholders = this.filterStatus(this.defaultStakeholders, value);
+ this.displayStakeholders = this.filterStatus(this.stakeholders, value);
+ }
+
+ onKeywordChange(value) {
+ this.displayDefaultStakeholders = this.filterByKeyword(this.defaultStakeholders, value);
+ this.displayStakeholders = this.filterByKeyword(this.stakeholders, value);
+ }
+
+ onTypeChange(value) {
+ this.defaultStakeholdersOptions = [{
+ label: 'New blank profile',
+ value: '-1'
+ }];
+ this.defaultStakeholders.filter(stakeholder => stakeholder.type === value).forEach(stakeholder => {
+ this.defaultStakeholdersOptions.push({
+ label: 'Use ' + stakeholder.name + ' profile',
+ value: stakeholder._id
+ })
+ });
+ }
+
+
+ private filterPrivacy(stakeholders: Stakeholder[], value): Stakeholder[] {
+ if (value === 'all') {
+ return stakeholders;
+ } else {
+ return stakeholders.filter(stakeholder => stakeholder.isPublic === value);
+ }
+ }
+
+ private filterStatus(stakeholders: Stakeholder[], value): Stakeholder[] {
+ if (value === 'all') {
+ return stakeholders;
+ } else {
+ return stakeholders.filter(stakeholder => stakeholder.isActive === value);
+ }
+ }
+
+ private filterByKeyword(stakeholders: Stakeholder[], value): Stakeholder[] {
+ if (value === null || value === '') {
+ return stakeholders;
+ } else {
+ return stakeholders.filter(stakeholder => (
+ stakeholder.index_id && stakeholder.index_id.toLowerCase().includes(value.toLowerCase())) ||
+ stakeholder.index_shortName && stakeholder.index_shortName.toLowerCase().includes(value.toLowerCase()) ||
+ stakeholder.index_name && stakeholder.index_name.toLowerCase().includes(value.toLowerCase())
+ );
+ }
+ }
+
+ public editStakeholder(stakeholder: Stakeholder = null, isDefault: boolean = false) {
+ if (isDefault) {
+ this.index = (stakeholder) ? this.defaultStakeholders.findIndex(value => value._id === stakeholder._id) : -1;
+ } else {
+ this.index = (stakeholder) ? this.stakeholders.findIndex(value => value._id === stakeholder._id) : -1;
+ }
+ if (!stakeholder) {
+ this.stakeholder = new Stakeholder(null, null, null,
+ null, null, null, false, false, null);
+ } else {
+ this.stakeholder = stakeholder;
+ }
+ this.stakeholderFb = this.fb.group({
+ _id: this.fb.control(this.stakeholder._id),
+ defaultId: this.fb.control(this.stakeholder.defaultId),
+ name: this.fb.control(this.stakeholder.name, Validators.required),
+ description: this.fb.control(this.stakeholder.description),
+ index_name: this.fb.control(this.stakeholder.index_name, Validators.required),
+ index_id: this.fb.control(this.stakeholder.index_id, Validators.required),
+ index_shortName: this.fb.control(this.stakeholder.index_shortName, Validators.required),
+ creationDate: this.fb.control(this.stakeholder.creationDate),
+ alias: this.fb.control(this.stakeholder.alias,
+ [
+ Validators.required,
+ this.stakeholderUtils.aliasValidator(
+ (isDefault) ?
+ this.defaultStakeholders.filter(stakeholder => stakeholder.alias !== this.stakeholder.alias) :
+ this.stakeholders.filter(stakeholder => stakeholder.alias !== this.stakeholder.alias)
+ )]
+ ),
+ isDefault: this.fb.control(isDefault),
+ isPublic: this.fb.control(this.stakeholder.isPublic),
+ isActive: this.fb.control(this.stakeholder.isActive),
+ type: this.fb.control(this.stakeholder.type, Validators.required),
+ topics: this.fb.control(this.stakeholder.topics),
+ managers: this.fb.control(this.stakeholder.managers),
+ isUpload: this.fb.control(this.stakeholder.isUpload),
+ logoUrl: this.fb.control(this.stakeholder.logoUrl),
+ });
+ this.initPhoto();
+ this.subscriptions.push(this.stakeholderFb.get('type').valueChanges.subscribe(value => {
+ this.onTypeChange(value);
+ }));
+ this.subscriptions.push(this.stakeholderFb.get('logoUrl').valueChanges.subscribe(value => {
+ if(value) {
+ this.photo = value;
+ } else {
+ this.photo = 'assets/common-assets/curator-default.png';
+ }
+ }));
+ if (!isDefault) {
+ this.stakeholderFb.setControl('defaultId', this.fb.control(this.stakeholder.defaultId, Validators.required));
+ }
+ if (this.index !== -1) {
+ if (this.stakeholderFb.value.type) {
+ setTimeout(() => {
+ this.stakeholderFb.get('type').disable();
+ }, 0);
+ } else {
+ setTimeout(() => {
+ this.stakeholderFb.get('type').enable();
+ }, 0);
+ }
+ this.editStakeholderModal.okButtonText = 'Save Changes';
+ } else {
+ setTimeout(() => {
+ this.stakeholderFb.get('type').enable();
+ }, 0);
+ this.editStakeholderModal.okButtonText = 'Create';
+ }
+ this.uploadError = null;
+ this.deleteCurrentPhoto = false;
+ this.editStakeholderModal.cancelButtonText = 'Cancel';
+ this.editStakeholderModal.okButtonLeft = false;
+ this.editStakeholderModal.alertMessage = false;
+ this.editStakeholderModal.open();
+ }
+
+ public save() {
+ if (this.file) {
+ this.utilsService.uploadPhoto(this.properties.utilsService + "/upload/stakeholder/" + encodeURIComponent(this.stakeholder.alias), this.file).subscribe(res => {
+ this.deletePhoto();
+ this.removePhoto();
+ this.stakeholderFb.get('logoUrl').setValue(res.filename);
+ this.saveStakeholder();
+ }, error => {
+ this.uploadError = "An error has been occurred during upload your image. Try again later";
+ this.saveStakeholder();
+ });
+ } else if (this.deleteCurrentPhoto) {
+ this.deletePhoto();
+ this.saveStakeholder();
+ } else {
+ this.saveStakeholder();
+ }
+ }
+
+ public saveStakeholder() {
+ if (this.index === -1) {
+ if (!this.stakeholderFb.value.isDefault) {
+ let stakeholder = this.defaultStakeholders.find(value => value._id === this.stakeholderFb.value.defaultId);
+ this.stakeholderFb.setValue(this.stakeholderUtils.createFunderFromDefaultProfile(this.stakeholderFb.value,
+ (stakeholder ? stakeholder.topics : [])));
+ }
+ this.removePhoto();
+ this.stakeholderService.buildStakeholder(this.properties.monitorServiceAPIURL,
+ this.stakeholderFb.value).subscribe(stakeholder => {
+ if (stakeholder.defaultId === null) {
+ this.defaultStakeholders.push(stakeholder);
+ } else {
+ this.stakeholders.push(stakeholder);
+ }
+ });
+ } else {
+ this.stakeholderFb.get('type').enable();
+ this.stakeholderService.saveElement(this.properties.monitorServiceAPIURL, this.stakeholderFb.value).subscribe(stakeholder => {
+ if (stakeholder.defaultId == null) {
+ this.defaultStakeholders[this.index] = stakeholder;
+ } else {
+ this.stakeholders[this.index] = stakeholder;
+ }
+ });
+ }
+ }
+
+
+ public isAdministrator(): boolean {
+ return Session.isPortalAdministrator(this.user);
+ }
+
+ public deletePhoto() {
+ if (this.stakeholder.logoUrl) {
+ this.utilsService.deletePhoto(this.properties.utilsService + '/delete/stakeholder/' + this.stakeholder.logoUrl).subscribe();
+ }
+ }
+
+ fileChangeEvent(event) {
+ if (event.target.files && event.target.files[0]) {
+ this.file = event.target.files[0];
+ if (this.file.type !== 'image/png' && this.file.type !== 'image/jpeg') {
+ this.uploadError = 'You must choose a file with type: image/png or image/jpeg!';
+ this.stakeholderFb.get('isUpload').setValue(false);
+ this.removePhoto();
+ } else if (this.file.size > this.maxsize) {
+ this.uploadError = 'File exceeds size\'s limit! Maximum resolution is 256x256 pixels.';
+ this.stakeholderFb.get('isUpload').setValue(false);
+ this.removePhoto()
+ } else {
+ this.uploadError = null;
+ const reader = new FileReader();
+ reader.readAsDataURL(this.file);
+ reader.onload = () => {
+ this.photo = reader.result;
+ this.stakeholderFb.get('isUpload').setValue(true);
+ };
+ }
+ }
+ }
+
+ initPhoto() {
+ if (this.stakeholderFb.get('logoUrl').value) {
+ if (!this.stakeholderFb.value.isUpload) {
+ this.photo = this.stakeholderFb.get('logoUrl').value;
+ } else {
+ this.photo = this.properties.utilsService + "/download/" + this.stakeholderFb.get('logoUrl').value;
+ }
+ } else {
+ this.photo = 'assets/common-assets/curator-default.png';
+ }
+ }
+
+ removePhoto() {
+ if (typeof document != 'undefined') {
+ (
document.getElementById("photo")).value = "";
+ }
+ this.initPhoto();
+ this.file = null;
+ }
+
+ remove() {
+ this.stakeholderFb.get('isUpload').setValue(false);
+ if (this.file) {
+ this.removePhoto();
+ }
+ if (this.stakeholder.isUpload) {
+ this.stakeholderFb.get('logoUrl').setValue(null);
+ this.deleteCurrentPhoto = true;
+ }
+ }
+}
diff --git a/src/app/manageStakeholder/manageStakeholder.module.ts b/src/app/manageStakeholder/manageStakeholder.module.ts
new file mode 100644
index 0000000..f5a4e36
--- /dev/null
+++ b/src/app/manageStakeholder/manageStakeholder.module.ts
@@ -0,0 +1,31 @@
+import {NgModule} from "@angular/core";
+import {ManageStakeholderComponent} from "./manageStakeholder.component";
+import {ManageStakeholderRoutingModule} from "./manageStakeholder-routing.module";
+import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
+import {CommonModule} from "@angular/common";
+import {RouterModule} from "@angular/router";
+import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
+import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
+import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
+import {ReactiveFormsModule} from "@angular/forms";
+import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
+
+@NgModule({
+ declarations: [ManageStakeholderComponent],
+ imports: [
+ ManageStakeholderRoutingModule,
+ CommonModule,
+ RouterModule,
+ InputModule,
+ LoadingModule,
+ AlertModalModule,
+ ReactiveFormsModule
+ ],
+ providers: [
+ AdminDashboardGuard, PreviousRouteRecorder,
+ ],
+ exports: [ManageStakeholderComponent]
+})
+export class ManageStakeholderModule {
+
+}
diff --git a/src/app/manageStakeholders/manageStakeholders.component.html b/src/app/manageStakeholders/manageStakeholders.component.html
index 8182b31..54547ff 100644
--- a/src/app/manageStakeholders/manageStakeholders.component.html
+++ b/src/app/manageStakeholders/manageStakeholders.component.html
@@ -1,32 +1,32 @@