import {of as observableOf, Observable } from 'rxjs'; import {mergeMap, takeUntil } from 'rxjs/operators'; import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { Router, ActivatedRoute, Params } from '@angular/router'; 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 { GrantCriteria } from '../../core/query/grant/grant-criteria'; import { AuthService } from '../../core/services/auth/auth.service'; import { DashboardService } from '../../core/services/dashboard/dashboard.service'; import { GrantService } from '../../core/services/grant/grant.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'; @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[]; grantActivities: any[]; dmpActivities: any[]; organisationActivities: any[]; public dashboardStatisticsData: DashboardStatisticsModel; public formControl = new FormControl(); grantAutoCompleteConfiguration: SingleAutoCompleteConfiguration; public searchControl = new FormControl(); filteredOptions: Observable; recentActivityTypeEnum = RecentActivityType; public search = false; dmpListingItems: DmpListingModel[] = []; datasetListingItems: DatasetListingModel[] = []; constructor( private router: Router, private route: ActivatedRoute, private grantService: GrantService, 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.totalGrantCount = 0; } ngOnInit() { // if (this.isAuthenticated()) { // this.userService.getRecentActivity() // .pipe(takeUntil(this._destroyed)) // .subscribe(response => { // this.datasetActivities = response['recentDatasetActivities']; // this.dmpActivities = response['recentDmpActivities']; // this.grantActivities = response['recentGrantActivities']; // this.organisationActivities = response['totalOrganisationCount']; // }); // } // this.grantAutoCompleteConfiguration = { // filterFn: this.searchGrant.bind(this), // items: this.searchGrant(''), // displayFn: (item) => item['label'], // titleFn: (item) => item['label'] // }; const breadCrumbs = []; this.breadCrumbs = observableOf(breadCrumbs); if (!this.isAuthenticated()) { this.dashboardService.getStatistics() .pipe(takeUntil(this._destroyed)) .subscribe(results => { //let data = results['payload']; this.dashboardStatisticsData = results; }); this.getPublicDmps(); this.getPublicDatasets(); } else { this.dashboardService.getUserStatistics() .pipe(takeUntil(this._destroyed)) .subscribe(results => { this.dashboardStatisticsData = results; }); } this.filteredOptions = this.searchControl.valueChanges.pipe(mergeMap(x => { return this.searchBarService.search(x); })); } public isAuthenticated(): boolean { return !(!this.authentication.current()); } searchGrant(query: string) { const grantRequestItem: RequestItem = new RequestItem(); grantRequestItem.criteria = new GrantCriteria(); grantRequestItem.criteria.like = query; return this.grantService.getWithExternal(grantRequestItem); } redirect(id: string, type: RecentActivityType) { switch (type) { case RecentActivityType.Grant: { this.router.navigate(['grants/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, "listing").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) { if (!this.isAuthenticated()) { this.router.navigate(['../explore-plans/overview', dmp.id], { relativeTo: this.route }); } else { 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']); } }