80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
/** Angular Imports */
|
|
import { Component, OnInit } from '@angular/core';
|
|
import { Router } from '@angular/router';
|
|
|
|
/**
|
|
* Dashboard component.
|
|
*/
|
|
@Component({
|
|
selector: 'mifosx-dashboard',
|
|
templateUrl: './dashboard.component.html',
|
|
styleUrls: ['./dashboard.component.scss']
|
|
})
|
|
export class DashboardComponent implements OnInit {
|
|
|
|
/** Array of all user activities */
|
|
userActivity: string[];
|
|
/** Array of most recent user activities */
|
|
recentActivities: string[];
|
|
/** Array of most frequent user activities */
|
|
frequentActivities: string[];
|
|
|
|
/**
|
|
* Gets user activities from local storage.
|
|
*/
|
|
constructor(private router: Router) {
|
|
this.userActivity = JSON.parse(localStorage.getItem('mifosXLocation'));
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.recentActivities = this.getRecentActivities();
|
|
this.frequentActivities = this.getFrequentActivities();
|
|
}
|
|
|
|
/**
|
|
* Returns top eight recent activities.
|
|
*/
|
|
getRecentActivities() {
|
|
const reverseActivities = this.userActivity.reverse();
|
|
const uniqueActivities: string[] = [];
|
|
reverseActivities.forEach((activity: string) => {
|
|
if (!uniqueActivities.includes(activity)) {
|
|
uniqueActivities.push(activity);
|
|
}
|
|
});
|
|
const topEightRecentActivities =
|
|
uniqueActivities
|
|
.filter((activity: string) => !['/', '/login', '/home', '/dashboard'].includes(activity))
|
|
.slice(0, 8);
|
|
return topEightRecentActivities;
|
|
}
|
|
|
|
/**
|
|
* Returns top eight frequent activities.
|
|
*/
|
|
getFrequentActivities() {
|
|
const frequencyCounts: any = {};
|
|
let index = this.userActivity.length;
|
|
while (index) {
|
|
frequencyCounts[this.userActivity[--index]] = (frequencyCounts[this.userActivity[index]] || 0) + 1;
|
|
}
|
|
const frequencyCountsArray = Object.entries(frequencyCounts);
|
|
const topEigthFrequentActivities =
|
|
frequencyCountsArray
|
|
.sort((a: any, b: any) => b[1] - a[1])
|
|
.map((entry: any[]) => entry[0])
|
|
.filter((activity: string) => !['/', '/login', '/home', '/dashboard'].includes(activity))
|
|
.slice(0, 8);
|
|
return topEigthFrequentActivities;
|
|
}
|
|
|
|
/**
|
|
* Navigates to the activity
|
|
*/
|
|
navigatetoActivity(activity:string){
|
|
this.router.navigateByUrl(activity);
|
|
}
|
|
|
|
}
|
|
|