import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { Router, ActivatedRoute, Params } from '@angular/router'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../core/common/base/base.component'; import { RecentActivityType } from '../../core/common/enum/recent-activity-type'; import { DashboardStatisticsModel } from '../../core/model/dashboard/dashboard-statistics-model'; import { SearchBarItem } from '../../core/model/dashboard/search-bar-item'; import { ProjectCriteria } from '../../core/query/project/project-criteria'; import { AuthService } from '../../core/services/auth/auth.service'; import { DashboardService } from '../../core/services/dashboard/dashboard.service'; import { ProjectService } from '../../core/services/project/project.service'; import { SearchBarService } from '../../core/services/search-bar/search-bar.service'; import { UserService } from '../../core/services/user/user.service'; import { SingleAutoCompleteConfiguration } from '../../library/auto-complete/single/single-auto-complete-configuration'; import { RequestItem } from '../../core/query/request-item'; import { DmpListingModel } from '../../core/model/dmp/dmp-listing'; import { DmpService } from '../../core/services/dmp/dmp.service'; import { DataTableRequest } from '../../core/model/data-table/data-table-request'; import { DmpCriteria } from '../../core/query/dmp/dmp-criteria'; import { ExploreDmpCriteriaModel } from '../../core/query/explore-dmp/explore-dmp-criteria'; import { DatasetListingModel } from '../../core/model/dataset/dataset-listing'; import { DatasetService } from '../../core/services/dataset/dataset.service'; import { ExploreDatasetCriteriaModel } from '../../core/query/explore-dataset/explore-dataset-criteria'; import { BreadcrumbItem } from '../misc/breadcrumb/definition/breadcrumb-item'; import { IBreadCrumbComponent } from '../misc/breadcrumb/definition/IBreadCrumbComponent'; import { Observable } from 'rxjs'; @Component({ selector: 'app-dashboard', templateUrl: './dashboard.component.html', styleUrls: ['./dashboard.component.scss'], }) export class DashboardComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { breadCrumbs: Observable; public userInfo: any; datasetActivities: any[]; projectActivities: any[]; dmpActivities: any[]; organisationActivities: any[]; public dashboardStatisticsData: DashboardStatisticsModel; public formControl = new FormControl(); projectAutoCompleteConfiguration: SingleAutoCompleteConfiguration; public searchControl = new FormControl(); filteredOptions: Observable; recentActivityTypeEnum = RecentActivityType; public search = false; dmpListingItems: DmpListingModel[] = []; datasetListingItems: DatasetListingModel[] = []; constructor( private router: Router, private route: ActivatedRoute, private projectService: ProjectService, private dmpService: DmpService, private datasetService: DatasetService, private dashboardService: DashboardService, private searchBarService: SearchBarService, private authentication: AuthService, private userService: UserService ) { super(); // this.dashboardStatisticsData.totalDataManagementPlanCount = 0; // this.dashboardStatisticsData.totalDataSetCount = 0; // this.dashboardStatisticsData.totalProjectCount = 0; } ngOnInit() { // if (this.isAuthenticated()) { // this.userService.getRecentActivity() // .pipe(takeUntil(this._destroyed)) // .subscribe(response => { // this.datasetActivities = response['recentDatasetActivities']; // this.dmpActivities = response['recentDmpActivities']; // this.projectActivities = response['recentProjectActivities']; // this.organisationActivities = response['totalOrganisationCount']; // }); // } // this.projectAutoCompleteConfiguration = { // filterFn: this.searchProject.bind(this), // items: this.searchProject(''), // displayFn: (item) => item['label'], // titleFn: (item) => item['label'] // }; const breadCrumbs = []; this.breadCrumbs = Observable.of(breadCrumbs); if (!this.isAuthenticated()) { this.dashboardService.getStatistics() .pipe(takeUntil(this._destroyed)) .subscribe(results => { //let data = results['payload']; this.dashboardStatisticsData = results; }); } else { this.dashboardService.getUserStatistics() .pipe(takeUntil(this._destroyed)) .subscribe(results => { this.dashboardStatisticsData = results; }); } this.filteredOptions = this.searchControl.valueChanges.flatMap(x => { return this.searchBarService.search(x); }); this.getPublicDmps(); this.getPublicDatasets(); } public isAuthenticated(): boolean { return !(!this.authentication.current()); } searchProject(query: string) { const projectRequestItem: RequestItem = new RequestItem(); projectRequestItem.criteria = new ProjectCriteria(); projectRequestItem.criteria.like = query; return this.projectService.getWithExternal(projectRequestItem); } redirect(id: string, type: RecentActivityType) { switch (type) { case RecentActivityType.Project: { this.router.navigate(['projects/edit/' + id]); return; } case RecentActivityType.Dataset: { this.router.navigate(['datasets/edit/' + id]); return; } case RecentActivityType.Dmp: { this.router.navigate(['plans/edit/' + id]); return; } default: throw new Error('Unsupported Activity Type '); } } getPublicDmps() { const dmpCriteria = new ExploreDmpCriteriaModel(); const fields: Array = new Array(); fields.push('asc'); const dataTableRequest: DataTableRequest = new DataTableRequest(0, 2, { fields: fields }); dataTableRequest.criteria = dmpCriteria; return this.dmpService.getPublicPaged(dataTableRequest).pipe(takeUntil(this._destroyed)).subscribe(result => { this.dmpListingItems = result.data; }); } getPublicDatasets() { const dmpCriteria = new ExploreDatasetCriteriaModel(); const fields: Array = new Array(); fields.push('asc'); const dataTableRequest: DataTableRequest = new DataTableRequest(0, 4, { fields: fields }); dataTableRequest.criteria = dmpCriteria; return this.datasetService.getPublicPaged(dataTableRequest).pipe(takeUntil(this._destroyed)).subscribe(result => { this.datasetListingItems = result.data; }); } dmpClicked(dmp: DmpListingModel) { this.router.navigate(['/plans/publicEdit/' + dmp.id]); } datasetClicked(dataset: DatasetListingModel) { this.router.navigate(['/datasets/publicEdit/' + dataset.id]); } viewAllPublicDmpsClicked() { this.router.navigate(['/explore-plans']); } viewAllPublicDatasetsClicked() { this.router.navigate(['explore']); } }