diff --git a/src/app/home/home-routing.module.ts b/src/app/home/home-routing.module.ts new file mode 100644 index 0000000..dacc8c9 --- /dev/null +++ b/src/app/home/home-routing.module.ts @@ -0,0 +1,21 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {FreeGuard} from '../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {HomeComponent} from "./home.component"; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + path: '', + component: HomeComponent, + canActivate: [FreeGuard], + canDeactivate: [PreviousRouteRecorder], + data: {hasSidebar: false} + } + ]) + ] +}) +export class HomeRoutingModule { +} diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html new file mode 100644 index 0000000..944fef5 --- /dev/null +++ b/src/app/home/home.component.html @@ -0,0 +1,134 @@ +
+
+
+
+
+
+
+
+
+
+
+
+ search +
+
+ +
+ list +
+
+
+
+

Default Profiles

+
+ + +
+
+
+
+ + {{indicatorUtils.isPublicIcon.get(stakeholder.isPublic)}} + {{(stakeholder.isPublic) ? 'Public' : 'Private'}} + + + {{indicatorUtils.isActiveIcon}} + {{(stakeholder.isActive) ? 'Active' : 'Inactive'}} + +
+ more_vert +
+ +
+
+
+
{{stakeholder.index_name}}
+
+
+
+
+ {{indicatorUtils.isPublicIcon.get(stakeholder.isPublic)}} +
{{(stakeholder.isPublic) ? 'Public' : 'Private'}}
+
+
+ {{indicatorUtils.isActiveIcon}} +
{{(stakeholder.isActive) ? 'Active' : 'Inactive'}}
+
+
+
+
+
+
+
+

Stakeholders

+
+ + + +
+ +
+
+
+ {{indicatorUtils.isPublicIcon.get(stakeholder.isPublic)}} +
{{(stakeholder.isPublic) ? 'Public' : 'Private'}}
+
+
+ {{indicatorUtils.isActiveIcon}} +
{{(stakeholder.isActive) ? 'Active' : 'Inactive'}}
+
+
+
+
+ +
+
+
+
diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts new file mode 100644 index 0000000..c010f57 --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,145 @@ +import {Component, OnDestroy, OnInit} from "@angular/core"; +import {StakeholderService} from "../services/stakeholder.service"; +import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"; +import {EnvironmentSpecificService} from "../openaireLibrary/utils/properties/environment-specific.service"; +import {Stakeholder} from "../utils/entities/stakeholder"; +import {Subscriber, zip} from "rxjs"; +import {IndicatorUtils, Option} from "../utils/indicator-utils"; +import {FormBuilder, FormGroup} from "@angular/forms"; + +@Component({ + selector: 'home', + templateUrl: "./home.component.html" +}) +export class HomeComponent implements OnInit, OnDestroy { + + public properties: EnvProperties; + public loading: boolean = true; + public indicatorUtils: IndicatorUtils = new IndicatorUtils(); + public defaultStakeholders: Stakeholder[]; + public stakeholders: Stakeholder[]; + public stakeholder: FormGroup; + /** + * Filtered Stakeholders + */ + public displayDefaultStakeholders: Stakeholder[]; + public displayStakeholders: Stakeholder[]; + /** + * Top filters + */ + public filters: FormGroup; + public all: Option = { + value: 'all', + label: 'All' + }; + + /** + * Grid or List View + */ + public grid: boolean = true; + private subscriptions: any[] = []; + + constructor(private stakeholderService: StakeholderService, + private propertiesService: EnvironmentSpecificService, + private fb: FormBuilder) { + } + + ngOnInit(): void { + this.buildFilters(); + this.propertiesService.loadEnvironment() + .then(properties => { + this.properties = properties; + 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; + }); + }); + } + + ngOnDestroy(): void { + this.subscriptions.forEach(value => { + if (value instanceof Subscriber) { + value.unsubscribe(); + } + }); + } + + 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); + } + + + 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(index = -1) { + /*let stakeholder = this.d + this.fb.group({ + _id: this.fb.control() + })*/ + } +} diff --git a/src/app/home/home.module.ts b/src/app/home/home.module.ts new file mode 100644 index 0000000..27e34ab --- /dev/null +++ b/src/app/home/home.module.ts @@ -0,0 +1,27 @@ +import {NgModule} from "@angular/core"; +import {HomeComponent} from "./home.component"; +import {HomeRoutingModule} from "./home-routing.module"; +import {FreeGuard} from "../openaireLibrary/login/freeGuard.guard"; +import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard"; +import {CommonModule} from "@angular/common"; +import {RouterModule} from "@angular/router"; +import {InputModule} from "../library/sharedComponents/input/input.module"; +import {LoadingModule} from "../library/sharedComponents/loading/loading.module"; + +@NgModule({ + declarations: [HomeComponent], + imports: [ + HomeRoutingModule, + CommonModule, + RouterModule, + InputModule, + LoadingModule + ], + providers: [ + FreeGuard, PreviousRouteRecorder, + ], + exports: [HomeComponent] +}) +export class HomeModule { + +}