[monitor-admin-library | DONE | CHANGED]: Move general in library
This commit is contained in:
parent
a3aa803433
commit
b50411c396
|
@ -6,7 +6,7 @@ import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
|
||||||
imports: [RouterModule.forChild([
|
imports: [RouterModule.forChild([
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
loadChildren: () => import('../general/general.module').then(m => m.GeneralModule),
|
loadChildren: () => import('../openaireLibrary/monitor-admin/general/general.module').then(m => m.GeneralModule),
|
||||||
pathMatch: 'full'
|
pathMatch: 'full'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
.uk-border-circle {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
& > img {
|
|
||||||
max-width: 64px;
|
|
||||||
max-height: 64px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,443 +0,0 @@
|
||||||
import {Component, Input, OnDestroy, ViewChild} from "@angular/core";
|
|
||||||
import {Stakeholder} from "../../openaireLibrary/monitor/entities/stakeholder";
|
|
||||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
|
||||||
import {StakeholderUtils} from "../../openaireLibrary/monitor-admin/utils/indicator-utils";
|
|
||||||
import {Option} from "../../openaireLibrary/sharedComponents/input/input.component";
|
|
||||||
import {Subscription} from "rxjs";
|
|
||||||
import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties";
|
|
||||||
import {properties} from "../../../environments/environment";
|
|
||||||
import {StakeholderService} from "../../openaireLibrary/monitor/services/stakeholder.service";
|
|
||||||
import {UtilitiesService} from "../../openaireLibrary/services/utilities.service";
|
|
||||||
import {Role, Session, User} from "../../openaireLibrary/login/utils/helper.class";
|
|
||||||
import {UserManagementService} from "../../openaireLibrary/services/user-management.service";
|
|
||||||
import {StringUtils} from "../../openaireLibrary/utils/string-utils.class";
|
|
||||||
import {NotifyFormComponent} from "../../openaireLibrary/notifications/notify-form/notify-form.component";
|
|
||||||
import {NotificationUtils} from "../../openaireLibrary/notifications/notification-utils";
|
|
||||||
import {Notification} from "../../openaireLibrary/notifications/notifications";
|
|
||||||
import {NotificationHandler} from "../../openaireLibrary/utils/notification-handler";
|
|
||||||
import {StatsProfilesService} from "../../openaireLibrary/monitor-admin/utils/services/stats-profiles.service";
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'edit-stakeholder',
|
|
||||||
template: `
|
|
||||||
<form *ngIf="stakeholderFb" [formGroup]="stakeholderFb">
|
|
||||||
<div class="uk-grid uk-grid-large" uk-grid>
|
|
||||||
<div class="uk-width-1-2@m">
|
|
||||||
<div input id="name" [formInput]="stakeholderFb.get('name')"
|
|
||||||
placeholder="Name"></div>
|
|
||||||
</div>
|
|
||||||
<div class="uk-width-1-2@m">
|
|
||||||
<div input [formInput]="stakeholderFb.get('alias')"
|
|
||||||
placeholder="URL Alias"></div>
|
|
||||||
</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 class="uk-width-1-3@m">
|
|
||||||
<div input [formInput]="stakeholderFb.get('projectUpdateDate')" [type]="'date'"
|
|
||||||
placeholder="Last Project Update"></div>
|
|
||||||
</div>
|
|
||||||
</ng-container>
|
|
||||||
<div class="uk-width-1-3@m">
|
|
||||||
<div input [formInput]="stakeholderFb.get('locale')" [type]="'select'"
|
|
||||||
[options]="stakeholderUtils.locales"
|
|
||||||
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-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 input class="uk-width-expand" type="logoURL" [placeholder]="'Link to the logo'"
|
|
||||||
[formInput]="stakeholderFb.get('logoUrl')"></div>
|
|
||||||
</div>
|
|
||||||
<div *ngIf="stakeholderFb.get('isUpload').value" class="uk-width-1-1 uk-flex uk-flex-middle">
|
|
||||||
<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 [class]="canChooseTemplate ? 'uk-width-1-3@m' : 'uk-width-1-2@m'">
|
|
||||||
<div input [formInput]="stakeholderFb.get('visibility')"
|
|
||||||
[placeholder]="'Select a status'"
|
|
||||||
[options]="stakeholderUtils.statuses" type="select"></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']
|
|
||||||
})
|
|
||||||
export class EditStakeholderComponent implements OnDestroy {
|
|
||||||
@Input()
|
|
||||||
public disableAlias: boolean = false;
|
|
||||||
public stakeholderFb: UntypedFormGroup;
|
|
||||||
public secure: boolean = false;
|
|
||||||
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
|
||||||
public defaultStakeholdersOptions: Option[];
|
|
||||||
public defaultStakeholders: Stakeholder[];
|
|
||||||
public alias: string[];
|
|
||||||
public stakeholder: Stakeholder;
|
|
||||||
public isDefault: boolean;
|
|
||||||
public isNew: boolean;
|
|
||||||
public loading: boolean = false;
|
|
||||||
public types: Option[];
|
|
||||||
public statsProfiles: string[];
|
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
private subscriptions: any[] = [];
|
|
||||||
/**
|
|
||||||
* Photo upload
|
|
||||||
* */
|
|
||||||
public file: File;
|
|
||||||
public photo: string | ArrayBuffer;
|
|
||||||
public uploadError: string;
|
|
||||||
public deleteCurrentPhoto: boolean = false;
|
|
||||||
private maxsize: number = 200 * 1024;
|
|
||||||
user: User;
|
|
||||||
@ViewChild('notify', {static: true}) notify: NotifyFormComponent;
|
|
||||||
private notification: Notification;
|
|
||||||
|
|
||||||
constructor(private fb: UntypedFormBuilder,
|
|
||||||
private stakeholderService: StakeholderService,
|
|
||||||
private statsProfileService: StatsProfilesService,
|
|
||||||
private utilsService: UtilitiesService, private userManagementService: UserManagementService,) {
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
public init(stakeholder: Stakeholder, alias: string[], defaultStakeholders: Stakeholder[], isDefault: boolean, isNew: boolean) {
|
|
||||||
this.reset();
|
|
||||||
this.deleteCurrentPhoto = false;
|
|
||||||
this.stakeholder = stakeholder;
|
|
||||||
this.alias = alias;
|
|
||||||
this.defaultStakeholders = defaultStakeholders;
|
|
||||||
this.isDefault = isDefault;
|
|
||||||
this.isNew = isNew;
|
|
||||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
|
||||||
this.user = user;
|
|
||||||
if (this.isCurator) {
|
|
||||||
this.subscriptions.push(this.statsProfileService.getStatsProfiles().subscribe(statsProfiles => {
|
|
||||||
this.statsProfiles = statsProfiles;
|
|
||||||
}, error => {
|
|
||||||
this.statsProfiles = [];
|
|
||||||
}));
|
|
||||||
} else {
|
|
||||||
this.statsProfiles = [];
|
|
||||||
}
|
|
||||||
this.types = this.stakeholderUtils.getTypesByUserRoles(this.user, this.stakeholder.alias);
|
|
||||||
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),
|
|
||||||
statsProfile: this.fb.control(this.stakeholder.statsProfile, Validators.required),
|
|
||||||
locale: this.fb.control(this.stakeholder.locale, Validators.required),
|
|
||||||
projectUpdateDate: this.fb.control(this.stakeholder.projectUpdateDate),
|
|
||||||
creationDate: this.fb.control(this.stakeholder.creationDate),
|
|
||||||
alias: this.fb.control(this.stakeholder.alias,
|
|
||||||
[
|
|
||||||
Validators.required,
|
|
||||||
this.stakeholderUtils.aliasValidatorString(
|
|
||||||
this.alias.filter(alias => alias !== this.stakeholder.alias)
|
|
||||||
)]
|
|
||||||
),
|
|
||||||
isDefault: this.fb.control((this.isDefault)),
|
|
||||||
visibility: this.fb.control(this.stakeholder.visibility, Validators.required),
|
|
||||||
type: this.fb.control(this.stakeholder.type, Validators.required),
|
|
||||||
topics: this.fb.control(this.stakeholder.topics),
|
|
||||||
isUpload: this.fb.control(this.stakeholder.isUpload),
|
|
||||||
logoUrl: this.fb.control(this.stakeholder.logoUrl),
|
|
||||||
});
|
|
||||||
if (this.stakeholder.isUpload) {
|
|
||||||
this.stakeholderFb.get('logoUrl').clearValidators();
|
|
||||||
this.stakeholderFb.get('logoUrl').updateValueAndValidity();
|
|
||||||
} else {
|
|
||||||
this.stakeholderFb.get('logoUrl').setValidators([StringUtils.urlValidator()]);
|
|
||||||
this.stakeholderFb.get('logoUrl').updateValueAndValidity();
|
|
||||||
}
|
|
||||||
this.subscriptions.push(this.stakeholderFb.get('isUpload').valueChanges.subscribe(value => {
|
|
||||||
if (value == true) {
|
|
||||||
this.stakeholderFb.get('logoUrl').clearValidators();
|
|
||||||
this.stakeholderFb.updateValueAndValidity();
|
|
||||||
} else {
|
|
||||||
this.stakeholderFb.get('logoUrl').setValidators([StringUtils.urlValidator()]);
|
|
||||||
this.stakeholderFb.updateValueAndValidity();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
this.secure = (!this.stakeholderFb.get('logoUrl').value || this.stakeholderFb.get('logoUrl').value.includes('https://'));
|
|
||||||
this.subscriptions.push(this.stakeholderFb.get('logoUrl').valueChanges.subscribe(value => {
|
|
||||||
this.secure = (!value || value.includes('https://'));
|
|
||||||
}));
|
|
||||||
this.initPhoto();
|
|
||||||
this.subscriptions.push(this.stakeholderFb.get('type').valueChanges.subscribe(value => {
|
|
||||||
this.onTypeChange(value, defaultStakeholders);
|
|
||||||
}));
|
|
||||||
this.stakeholderFb.setControl('defaultId', this.fb.control(stakeholder.defaultId, (this.isDefault && !this.isNew)?[]:Validators.required));
|
|
||||||
if (!this.isNew) {
|
|
||||||
this.notification = NotificationUtils.editStakeholder(this.user.firstname + ' ' + this.user.lastname, this.stakeholder.name);
|
|
||||||
this.notify.reset(this.notification.message);
|
|
||||||
if (this.isAdmin) {
|
|
||||||
if (this.disableAlias) {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.stakeholderFb.get('alias').disable();
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!this.isCurator) {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.stakeholderFb.get('statsProfile').disable();
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
setTimeout(() => {
|
|
||||||
this.stakeholderFb.get('alias').disable();
|
|
||||||
this.stakeholderFb.get('index_id').disable();
|
|
||||||
this.stakeholderFb.get('index_name').disable();
|
|
||||||
this.stakeholderFb.get('index_shortName').disable();
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
setTimeout(() => {
|
|
||||||
this.stakeholderFb.get('type').disable();
|
|
||||||
}, 0);
|
|
||||||
} else {
|
|
||||||
this.notification = NotificationUtils.createStakeholder(this.user.firstname + ' ' + this.user.lastname);
|
|
||||||
this.notify.reset(this.notification.message);
|
|
||||||
setTimeout(() => {
|
|
||||||
this.stakeholderFb.get('type').enable();
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public get isAdmin() {
|
|
||||||
return Session.isPortalAdministrator(this.user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public get isCurator() {
|
|
||||||
return this.stakeholder && (this.isAdmin || Session.isCurator(this.stakeholder.type, this.user));
|
|
||||||
}
|
|
||||||
|
|
||||||
public get disabled(): boolean {
|
|
||||||
return (this.stakeholderFb && this.stakeholderFb.invalid) ||
|
|
||||||
(this.stakeholderFb && this.stakeholderFb.pristine && !this.isNew && !this.file) ||
|
|
||||||
(this.uploadError && this.uploadError.length > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public get dirty(): boolean {
|
|
||||||
return this.stakeholderFb && this.stakeholderFb.dirty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public get canChooseTemplate(): boolean {
|
|
||||||
return this.isNew && this.stakeholderFb.get('type').valid && !!this.defaultStakeholdersOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
reset() {
|
|
||||||
this.uploadError = null;
|
|
||||||
this.stakeholderFb = null;
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if (subscription instanceof Subscription) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
onTypeChange(value, defaultStakeholders: Stakeholder[]) {
|
|
||||||
this.stakeholderFb.setControl('defaultId', this.fb.control(this.stakeholder.defaultId, (this.isDefault && !this.isNew)?[]:Validators.required));
|
|
||||||
this.defaultStakeholdersOptions = [{
|
|
||||||
label: 'New blank profile',
|
|
||||||
value: '-1'
|
|
||||||
}];
|
|
||||||
defaultStakeholders.filter(stakeholder => stakeholder.type === value).forEach(stakeholder => {
|
|
||||||
this.defaultStakeholdersOptions.push({
|
|
||||||
label: 'Use ' + stakeholder.name + ' profile',
|
|
||||||
value: stakeholder._id
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public save(callback: Function, errorCallback: Function = null) {
|
|
||||||
this.loading = true;
|
|
||||||
if (this.file) {
|
|
||||||
this.subscriptions.push(this.utilsService.uploadPhoto(this.properties.utilsService + "/upload/" + encodeURIComponent(this.stakeholderFb.getRawValue().type) + "/" + encodeURIComponent(this.stakeholderFb.getRawValue().alias), this.file).subscribe(res => {
|
|
||||||
this.deletePhoto();
|
|
||||||
this.stakeholderFb.get('logoUrl').setValue(res.filename);
|
|
||||||
this.removePhoto();
|
|
||||||
this.saveStakeholder(callback, errorCallback);
|
|
||||||
}, error => {
|
|
||||||
this.uploadError = "An error has been occurred during upload your image. Try again later";
|
|
||||||
this.saveStakeholder(callback, errorCallback);
|
|
||||||
}));
|
|
||||||
} else if (this.deleteCurrentPhoto) {
|
|
||||||
this.deletePhoto();
|
|
||||||
this.saveStakeholder(callback, errorCallback);
|
|
||||||
} else {
|
|
||||||
this.saveStakeholder(callback, errorCallback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public saveStakeholder(callback: Function, errorCallback: Function = null) {
|
|
||||||
if (this.isNew) {
|
|
||||||
let defaultStakeholder = this.defaultStakeholders.find(value => value._id === this.stakeholderFb.getRawValue().defaultId);
|
|
||||||
this.stakeholderFb.setValue(this.stakeholderUtils.createFunderFromDefaultProfile(this.stakeholderFb.getRawValue(),
|
|
||||||
(defaultStakeholder ? defaultStakeholder.topics : []), this.stakeholderFb.getRawValue().isDefault));
|
|
||||||
this.removePhoto();
|
|
||||||
if(this.stakeholderFb.getRawValue().isDefault) {
|
|
||||||
this.stakeholderFb.get('defaultId').setValue(null);
|
|
||||||
}
|
|
||||||
this.subscriptions.push(this.stakeholderService.buildStakeholder(this.properties.monitorServiceAPIURL,
|
|
||||||
this.stakeholderFb.getRawValue()).subscribe(stakeholder => {
|
|
||||||
this.notification.entity = stakeholder._id;
|
|
||||||
this.notification.stakeholder = stakeholder.alias;
|
|
||||||
this.notification.stakeholderType = stakeholder.type;
|
|
||||||
this.notification.groups = [Role.curator(stakeholder.type)];
|
|
||||||
this.notify.sendNotification(this.notification);
|
|
||||||
NotificationHandler.rise(stakeholder.name + ' has been <b>successfully created</b>');
|
|
||||||
callback(stakeholder);
|
|
||||||
this.loading = false;
|
|
||||||
}, error => {
|
|
||||||
NotificationHandler.rise('An error has occurred. Please try again later', 'danger');
|
|
||||||
if (errorCallback) {
|
|
||||||
errorCallback(error)
|
|
||||||
}
|
|
||||||
this.loading = false;
|
|
||||||
}));
|
|
||||||
} else {
|
|
||||||
this.subscriptions.push(this.stakeholderService.saveElement(this.properties.monitorServiceAPIURL, this.stakeholderFb.getRawValue()).subscribe(stakeholder => {
|
|
||||||
this.notification.entity = stakeholder._id;
|
|
||||||
this.notification.stakeholder = stakeholder.alias;
|
|
||||||
this.notification.stakeholderType = stakeholder.type;
|
|
||||||
this.notification.groups = [Role.curator(stakeholder.type), Role.manager(stakeholder.type, stakeholder.alias)];
|
|
||||||
this.notify.sendNotification(this.notification);
|
|
||||||
NotificationHandler.rise(stakeholder.name + ' has been <b>successfully saved</b>');
|
|
||||||
callback(stakeholder);
|
|
||||||
this.loading = false;
|
|
||||||
}, error => {
|
|
||||||
NotificationHandler.rise('An error has occurred. Please try again later', 'danger');
|
|
||||||
if (errorCallback) {
|
|
||||||
errorCallback(error)
|
|
||||||
}
|
|
||||||
this.loading = false;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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.stakeholderFb.get('isUpload').markAsDirty();
|
|
||||||
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.stakeholderFb.get('isUpload').markAsDirty();
|
|
||||||
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);
|
|
||||||
this.stakeholderFb.get('isUpload').markAsDirty();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initPhoto() {
|
|
||||||
if (this.stakeholderFb.getRawValue().isUpload) {
|
|
||||||
this.photo = this.properties.utilsService + "/download/" + this.stakeholderFb.get('logoUrl').value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
removePhoto() {
|
|
||||||
if (this.file) {
|
|
||||||
if (typeof document != 'undefined') {
|
|
||||||
(<HTMLInputElement>document.getElementById("photo")).value = "";
|
|
||||||
}
|
|
||||||
this.initPhoto();
|
|
||||||
this.file = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
remove() {
|
|
||||||
this.stakeholderFb.get('isUpload').setValue(false);
|
|
||||||
this.stakeholderFb.get('isUpload').markAsDirty();
|
|
||||||
this.removePhoto();
|
|
||||||
this.stakeholderFb.get('logoUrl').setValue(null);
|
|
||||||
if (this.stakeholder.isUpload) {
|
|
||||||
this.deleteCurrentPhoto = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public deletePhoto() {
|
|
||||||
if (this.stakeholder.logoUrl && this.stakeholder.isUpload) {
|
|
||||||
this.subscriptions.push(this.utilsService.deletePhoto(this.properties.utilsService + '/delete/' +
|
|
||||||
encodeURIComponent(this.stakeholder.type) + "/" + encodeURIComponent(this.stakeholder.alias) + "/" + this.stakeholder.logoUrl).subscribe());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import {NgModule} from "@angular/core";
|
|
||||||
import {EditStakeholderComponent} from "./edit-stakeholder.component";
|
|
||||||
import {CommonModule} from "@angular/common";
|
|
||||||
import {InputModule} from "../../openaireLibrary/sharedComponents/input/input.module";
|
|
||||||
import {ReactiveFormsModule} from "@angular/forms";
|
|
||||||
import {IconsModule} from "../../openaireLibrary/utils/icons/icons.module";
|
|
||||||
import {NotifyFormModule} from "../../openaireLibrary/notifications/notify-form/notify-form.module";
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [CommonModule, InputModule, ReactiveFormsModule, IconsModule, NotifyFormModule],
|
|
||||||
declarations: [EditStakeholderComponent],
|
|
||||||
exports: [EditStakeholderComponent]
|
|
||||||
})
|
|
||||||
export class EditStakeholderModule {}
|
|
|
@ -1,19 +0,0 @@
|
||||||
import {NgModule} from '@angular/core';
|
|
||||||
import {RouterModule} from '@angular/router';
|
|
||||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
|
||||||
import {GeneralComponent} from "./general.component";
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
RouterModule.forChild([
|
|
||||||
{
|
|
||||||
path: '',
|
|
||||||
component: GeneralComponent,
|
|
||||||
canDeactivate: [PreviousRouteRecorder],
|
|
||||||
data: {hasSidebar: true}
|
|
||||||
}
|
|
||||||
])
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class GeneralRoutingModule {
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
<div page-content>
|
|
||||||
<div actions>
|
|
||||||
<sidebar-mobile-toggle class="uk-margin-top uk-hidden@m uk-display-block"></sidebar-mobile-toggle>
|
|
||||||
<div class="uk-section-xsmall uk-container uk-margin-top">
|
|
||||||
<div class="uk-flex uk-flex-center uk-flex-right@m">
|
|
||||||
<button class="uk-button uk-button-default uk-margin-right"
|
|
||||||
(click)="reset()" [class.uk-disabled]="loading || !editStakeholderComponent.dirty"
|
|
||||||
[disabled]="loading || !editStakeholderComponent.dirty">Reset
|
|
||||||
</button>
|
|
||||||
<button class="uk-button uk-button-primary" [class.uk-disabled]="loading || editStakeholderComponent.disabled"
|
|
||||||
(click)="save()" [disabled]="loading || editStakeholderComponent.disabled">Save
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div inner>
|
|
||||||
<div *ngIf="stakeholder" class="uk-container">
|
|
||||||
|
|
||||||
<div class="uk-position-relative" style="min-height: 60vh">
|
|
||||||
<div [class.uk-hidden]="loading" class="uk-section uk-section-small">
|
|
||||||
<edit-stakeholder #editStakeholderComponent [disableAlias]="true"></edit-stakeholder>
|
|
||||||
</div>
|
|
||||||
<div *ngIf="loading" class="uk-position-center">
|
|
||||||
<loading *ngIf="loading"></loading>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,75 +0,0 @@
|
||||||
import {ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
|
|
||||||
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
|
|
||||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
|
||||||
import {Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
|
|
||||||
import { Subscription, zip} from "rxjs";
|
|
||||||
import {EditStakeholderComponent} from "./edit-stakeholder/edit-stakeholder.component";
|
|
||||||
import {properties} from "../../environments/environment";
|
|
||||||
import {Title} from "@angular/platform-browser";
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'general',
|
|
||||||
templateUrl: "./general.component.html"
|
|
||||||
})
|
|
||||||
export class GeneralComponent implements OnInit, OnDestroy {
|
|
||||||
|
|
||||||
public stakeholder: Stakeholder;
|
|
||||||
public alias: string[];
|
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
public defaultStakeholders: Stakeholder[];
|
|
||||||
public loading: boolean = false;
|
|
||||||
private subscriptions: any[] = [];
|
|
||||||
@ViewChild('editStakeholderComponent') editStakeholderComponent: EditStakeholderComponent;
|
|
||||||
|
|
||||||
constructor(private stakeholderService: StakeholderService,
|
|
||||||
private cdr: ChangeDetectorRef,
|
|
||||||
private title: Title) {
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
this.loading = true;
|
|
||||||
this.subscriptions.push(this.stakeholderService.getStakeholderAsObservable().subscribe(stakeholder => {
|
|
||||||
this.stakeholder = stakeholder;
|
|
||||||
this.cdr.detectChanges();
|
|
||||||
if(this.stakeholder) {
|
|
||||||
this.title.setTitle(this.stakeholder.name + " | General");
|
|
||||||
let data = zip(
|
|
||||||
this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
|
|
||||||
this.stakeholderService.getAlias(this.properties.monitorServiceAPIURL)
|
|
||||||
);
|
|
||||||
this.subscriptions.push(data.subscribe(res => {
|
|
||||||
this.defaultStakeholders = res[0];
|
|
||||||
this.alias = res[1];
|
|
||||||
this.reset();
|
|
||||||
this.loading = false;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public reset() {
|
|
||||||
this.editStakeholderComponent.init(this.stakeholder, this.alias, this.defaultStakeholders, this.stakeholder.defaultId == null, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public save() {
|
|
||||||
this.loading = true;
|
|
||||||
this.editStakeholderComponent.save((stakeholder) => {
|
|
||||||
this.stakeholder = stakeholder;
|
|
||||||
this.stakeholderService.setStakeholder(this.stakeholder);
|
|
||||||
this.reset();
|
|
||||||
this.loading = false;
|
|
||||||
}, (error) => {
|
|
||||||
console.error(error);
|
|
||||||
this.loading = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if(subscription instanceof Subscription) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
import {NgModule} from "@angular/core";
|
|
||||||
import {GeneralComponent} from "./general.component";
|
|
||||||
import {GeneralRoutingModule} from "./general-routing.module";
|
|
||||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
|
||||||
import {CommonModule} from "@angular/common";
|
|
||||||
import {RouterModule} from "@angular/router";
|
|
||||||
import {InputModule} from "../openaireLibrary/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 {EditStakeholderModule} from "./edit-stakeholder/edit-stakeholder.module";
|
|
||||||
import {PageContentModule} from "../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module";
|
|
||||||
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
|
|
||||||
import {
|
|
||||||
SidebarMobileToggleModule
|
|
||||||
} from "../openaireLibrary/dashboard/sharedComponents/sidebar/sidebar-mobile-toggle/sidebar-mobile-toggle.module";
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
declarations: [GeneralComponent],
|
|
||||||
imports: [
|
|
||||||
GeneralRoutingModule,
|
|
||||||
CommonModule,
|
|
||||||
RouterModule,
|
|
||||||
InputModule,
|
|
||||||
LoadingModule,
|
|
||||||
AlertModalModule,
|
|
||||||
ReactiveFormsModule,
|
|
||||||
EditStakeholderModule,
|
|
||||||
PageContentModule,
|
|
||||||
LogoUrlPipeModule,
|
|
||||||
SidebarMobileToggleModule
|
|
||||||
],
|
|
||||||
providers: [
|
|
||||||
PreviousRouteRecorder,
|
|
||||||
],
|
|
||||||
exports: [GeneralComponent]
|
|
||||||
})
|
|
||||||
export class GeneralModule {
|
|
||||||
|
|
||||||
}
|
|
|
@ -10,7 +10,7 @@ import {Option} from "../openaireLibrary/sharedComponents/input/input.component"
|
||||||
import {Title} from "@angular/platform-browser";
|
import {Title} from "@angular/platform-browser";
|
||||||
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||||
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
||||||
import {EditStakeholderComponent} from "../general/edit-stakeholder/edit-stakeholder.component";
|
import {EditStakeholderComponent} from "../openaireLibrary/monitor-admin/general/edit-stakeholder/edit-stakeholder.component";
|
||||||
import {properties} from "../../environments/environment";
|
import {properties} from "../../environments/environment";
|
||||||
import {ActivatedRoute} from "@angular/router";
|
import {ActivatedRoute} from "@angular/router";
|
||||||
import {CacheIndicatorsService} from "../openaireLibrary/monitor-admin/utils/cache-indicators/cache-indicators.service";
|
import {CacheIndicatorsService} from "../openaireLibrary/monitor-admin/utils/cache-indicators/cache-indicators.service";
|
||||||
|
|
|
@ -8,7 +8,6 @@ import {InputModule} from "../openaireLibrary/sharedComponents/input/input.modul
|
||||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||||
import {ReactiveFormsModule} from "@angular/forms";
|
import {ReactiveFormsModule} from "@angular/forms";
|
||||||
import {EditStakeholderModule} from "../general/edit-stakeholder/edit-stakeholder.module";
|
|
||||||
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
|
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
|
||||||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||||
import {earth, incognito, restricted} from "../openaireLibrary/utils/icons/icons";
|
import {earth, incognito, restricted} from "../openaireLibrary/utils/icons/icons";
|
||||||
|
@ -19,6 +18,7 @@ import {
|
||||||
SidebarMobileToggleModule
|
SidebarMobileToggleModule
|
||||||
} from "../openaireLibrary/dashboard/sharedComponents/sidebar/sidebar-mobile-toggle/sidebar-mobile-toggle.module";
|
} from "../openaireLibrary/dashboard/sharedComponents/sidebar/sidebar-mobile-toggle/sidebar-mobile-toggle.module";
|
||||||
import {SliderTabsModule} from "../openaireLibrary/sharedComponents/tabs/slider-tabs.module";
|
import {SliderTabsModule} from "../openaireLibrary/sharedComponents/tabs/slider-tabs.module";
|
||||||
|
import {EditStakeholderModule} from "../openaireLibrary/monitor-admin/general/edit-stakeholder/edit-stakeholder.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [ManageStakeholdersComponent],
|
declarations: [ManageStakeholdersComponent],
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit de3fbe8d69ebab14da17913704db3f6a0e35983a
|
Subproject commit 1710819fb9d35bedeaca4d85db664b8f79be2e76
|
Loading…
Reference in New Issue