From 6a2ac8cc4e1a77c10f632eccfd73b91082fe4a4a Mon Sep 17 00:00:00 2001 From: "k.triantafyllou" Date: Tue, 11 Apr 2023 01:28:53 +0300 Subject: [PATCH] Add stats profile entity class. Add stats profiles in admin tabs --- .../admin-tabs/admin-tabs.component.ts | 9 +- monitor/entities/stakeholder.ts | 14 ++- monitor/services/stakeholder.service.ts | 89 +++++++++---------- 3 files changed, 62 insertions(+), 50 deletions(-) diff --git a/dashboard/sharedComponents/admin-tabs/admin-tabs.component.ts b/dashboard/sharedComponents/admin-tabs/admin-tabs.component.ts index 087c4c71..f7cd106f 100644 --- a/dashboard/sharedComponents/admin-tabs/admin-tabs.component.ts +++ b/dashboard/sharedComponents/admin-tabs/admin-tabs.component.ts @@ -11,9 +11,10 @@ import {ActivatedRoute} from "@angular/router";
  • Portals
  • Pages
  • Entities
  • -
  • Menus
  • -
  • Classes
  • -
  • Customization
  • +
  • Menus
  • +
  • Classes
  • +
  • Customization
  • +
  • Stats Profiles
  • ` }) @@ -25,7 +26,7 @@ export class AdminTabsComponent implements OnInit { @Input() public user: User; @Input() - public tab: "portal" | "page" | "entity" | "menu" | "class" | "customization"= 'page'; + public tab: "portal" | "page" | "entity" | "menu" | "class" | "customization" | "stats-profiles" = 'page'; private subscriptions: any[] = []; constructor(private route: ActivatedRoute, private userManagementService: UserManagementService) { diff --git a/monitor/entities/stakeholder.ts b/monitor/entities/stakeholder.ts index 3c14d3ec..dd4bf082 100644 --- a/monitor/entities/stakeholder.ts +++ b/monitor/entities/stakeholder.ts @@ -213,8 +213,20 @@ export class IndicatorPath { } } + +export class StatsProfile { + _id: string; + name: string; + + constructor(name: string) { + this._id = null; + this.name = name; + } +} + export type FilterType = "fundingL0"|"start_year" | "end_year" | "co-funded"; -export class IndicatorFilterUtils{ + +export class IndicatorFilterUtils { static getFilter(fieldPath: string, filterType:FilterType) { if((filterType == "start_year" || filterType == "end_year") && (fieldPath.indexOf(".year") != -1 || fieldPath.indexOf(".start year") != -1) diff --git a/monitor/services/stakeholder.service.ts b/monitor/services/stakeholder.service.ts index c71f7f8e..21fffb88 100644 --- a/monitor/services/stakeholder.service.ts +++ b/monitor/services/stakeholder.service.ts @@ -4,13 +4,10 @@ import {BehaviorSubject, from, Observable, Subscriber} from "rxjs"; import {Indicator, Section, Stakeholder, StakeholderInfo, Visibility} from "../entities/stakeholder"; import {HelperFunctions} from "../../utils/HelperFunctions.class"; import {map} from "rxjs/operators"; -import {ActivatedRoute} from "@angular/router"; import {properties} from "../../../../environments/environment"; import {CustomOptions} from "../../services/servicesUtils/customOptions.class"; import {StringUtils} from "../../utils/string-utils.class"; -let maps: string[] = ['parameters', 'filters']; - export interface Reorder { action: 'moved' | 'added' | 'removed', target: string, @@ -21,25 +18,25 @@ export interface Reorder { providedIn: "root" }) export class StakeholderService { - + private stakeholderSubject: BehaviorSubject = null; private promise: Promise; private sub; - + constructor(private http: HttpClient) { this.stakeholderSubject = new BehaviorSubject(null); } - + ngOnDestroy() { this.clearSubscriptions(); } - + clearSubscriptions() { if (this.sub instanceof Subscriber) { this.sub.unsubscribe(); } } - + getStakeholder(alias: string, shouldUpdate: boolean = false): Observable { if (!this.stakeholderSubject.value || this.stakeholderSubject.value.alias !== alias || shouldUpdate) { this.promise = new Promise((resolve, reject) => { @@ -56,78 +53,80 @@ export class StakeholderService { } return from(this.getStakeholderAsync()); } - + async getStakeholderAsync() { - if(this.promise) { + if (this.promise) { await this.promise; this.promise = null; } this.clearSubscriptions(); return this.stakeholderSubject.getValue(); } - + getAlias(url: string): Observable { return this.http.get(url + '/stakeholder/alias', CustomOptions.registryOptions()).pipe(map(stakeholders => { return this.formalize(stakeholders); })); } - + getStakeholders(url: string, type: string = null, defaultId: string = null): Observable<(Stakeholder & StakeholderInfo)[]> { - return this.http.get(url + '/stakeholder' + ((type) ? ('?type=' + type) : '') + ((!type && defaultId)? ('?defaultId=' + defaultId):''), CustomOptions.registryOptions()).pipe(map(stakeholders => { + return this.http.get(url + '/stakeholder' + ((type) ? ('?type=' + type) : '') + ((!type && defaultId) ? ('?defaultId=' + defaultId) : ''), CustomOptions.registryOptions()).pipe(map(stakeholders => { return this.formalize(this.checkIsUpload(stakeholders)); })); } - + getMyStakeholders(url: string, type: string = null): Observable<(Stakeholder & StakeholderInfo)[]> { return this.http.get(url + '/my-stakeholder' + ((type) ? ('?type=' + type) : ''), CustomOptions.registryOptions()).pipe(map(stakeholders => { return this.formalize(this.checkIsUpload(stakeholders)); })); } - + getDefaultStakeholders(url: string, type: string = null): Observable { return this.http.get(url + '/stakeholder/default' + ((type) ? ('?type=' + type) : ''), CustomOptions.registryOptions()).pipe(map(stakeholders => { return this.formalize(this.checkIsUpload(stakeholders)); })); } - + buildStakeholder(url: string, stakeholder: Stakeholder): Observable { - if(stakeholder.alias && stakeholder.alias.startsWith('/')) { - stakeholder.alias = stakeholder.alias.slice(1); - } + if (stakeholder.alias && stakeholder.alias.startsWith('/')) { + stakeholder.alias = stakeholder.alias.slice(1); + } return this.http.post(url + '/build-stakeholder', stakeholder, CustomOptions.registryOptions()).pipe(map(stakeholder => { return this.formalize(this.checkIsUpload(stakeholder)); })); } - + changeVisibility(url: string, path: string[], visibility: Visibility, propagate: boolean = false): Observable { - return this.http.post(url + '/' + path.join('/') + '/change-visibility' + '?visibility=' + visibility + (propagate?'&propagate=true':''), null, CustomOptions.registryOptions()); + return this.http.post(url + '/' + path.join('/') + '/change-visibility' + '?visibility=' + visibility + (propagate ? '&propagate=true' : ''), null, CustomOptions.registryOptions()); } - + saveElement(url: string, element: any, path: string[] = []): Observable { - if(element.alias && element.alias.startsWith('/')) { - element.alias = element.alias.slice(1); - } + if (element.alias && element.alias.startsWith('/')) { + element.alias = element.alias.slice(1); + } path = HelperFunctions.encodeArray(path); return this.http.post(url + ((path.length > 0) ? '/' : '') + path.join('/') + '/save', element, CustomOptions.registryOptions()).pipe(map(element => { - if(path.length === 0) { - return this.formalize(this.checkIsUpload(element)); - } else { - return this.formalize(element); - } - })); - } - saveBulkElements(url: string, indicators, path: string[] = []): Observable { - path = HelperFunctions.encodeArray(path); - return this.http.post(url + ((path.length > 0) ? '/' : '') + path.join('/') + - '/save-bulk', indicators, CustomOptions.registryOptions()).pipe(map(element => { - if(path.length === 0) { + if (path.length === 0) { return this.formalize(this.checkIsUpload(element)); } else { return this.formalize(element); } })); } + + saveBulkElements(url: string, indicators, path: string[] = []): Observable { + path = HelperFunctions.encodeArray(path); + return this.http.post(url + ((path.length > 0) ? '/' : '') + path.join('/') + + '/save-bulk', indicators, CustomOptions.registryOptions()).pipe(map(element => { + if (path.length === 0) { + return this.formalize(this.checkIsUpload(element)); + } else { + return this.formalize(element); + } + })); + } + saveSection(url: string, element: any, path: string[] = [], index: number = -1): Observable
    { path = HelperFunctions.encodeArray(path); return this.http.post
    (url + ((path.length > 0) ? '/' : '') + path.join('/') + @@ -135,7 +134,7 @@ export class StakeholderService { return this.formalize(element); })); } - + deleteElement(url: string, path: string[], childrenAction: string = null): Observable { path = HelperFunctions.encodeArray(path); let params: string = ""; @@ -144,29 +143,29 @@ export class StakeholderService { } return this.http.delete(url + '/' + path.join('/') + '/delete' + params, CustomOptions.registryOptions()); } - + reorderElements(url: string, path: string[], ids: string[]): Observable { path = HelperFunctions.encodeArray(path); return this.http.post(url + '/' + path.join('/') + '/reorder', ids, CustomOptions.registryOptions()); } - + reorderIndicators(url: string, path: string[], reorder: Reorder, type: string = 'chart'): Observable { path = HelperFunctions.encodeArray(path); return this.http.post(url + '/' + path.join('/') + '/' + type + '/reorder', reorder, CustomOptions.registryOptions()).pipe(map(indicators => { return this.formalize(indicators); })); } - + getStakeholderAsObservable(): Observable { return this.stakeholderSubject.asObservable(); } - + setStakeholder(stakeholder: Stakeholder) { this.stakeholderSubject.next(stakeholder); } - + private checkIsUpload(response: Stakeholder | Stakeholder[]): any | any[] { - if(Array.isArray(response)) { + if (Array.isArray(response)) { response.forEach(value => { value.isUpload = value.logoUrl && !StringUtils.isValidUrl(value.logoUrl); }); @@ -175,7 +174,7 @@ export class StakeholderService { } return response; } - + private formalize(element: any) { return HelperFunctions.copy(element); }