ngx-dynamic-dashboard
Version:
an dashboard lib for angular 10
109 lines • 17.8 kB
JavaScript
import { Component } from '@angular/core';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { DetailService } from './service';
/**a
* Detail component
*
*/
export class DetailComponent {
constructor(_router, _route, _detailService) {
this._router = _router;
this._route = _route;
this._detailService = _detailService;
this.chartType = '';
this.chartSeries = '';
this.chartMetric = '';
this.endPointName = '';
this.data = [];
this.searchText = '';
this.navRoutes = [];
this.objectAsArray = [];
this.navigationSubscription = this._router.events.subscribe((e) => {
// If it is a NavigationEnd event re-initalise the component
if (e instanceof NavigationEnd) {
this.getObjectsByMetric(true);
}
});
}
ngOnInit() {
this.chartType = this._route.snapshot.queryParams['chartType'];
this.chartSeries = this._route.snapshot.queryParams['chartSeries'];
this.chartMetric = this._route.snapshot.queryParams['chartMetric'];
this.endPointName = this._route.snapshot.queryParams['endPointName'];
this.getObjectsByMetric(false);
}
getObject(record) {
this.clearDetailDisplay();
Object.keys(record).forEach(key => {
if (key.indexOf('link') < 0) {
this.objectAsArray.push({ 'key': key, 'value': record[key] });
}
});
}
getObjectsByHateoasLink(detail) {
this.clearDetailDisplay();
let href = '';
detail.links.forEach((link) => {
if (link.rel === 'self') {
href = link.href;
}
});
let navArray = href.split('/');
//trying to get data for the current record so do nothing. Avoid this altogether by removing the link from the table.
if (navArray[navArray.length - 1] == this.navRoutes[this.navRoutes.length - 1]) {
return;
}
this.navRoutes.push(navArray[navArray.length - 1]);
this._detailService.getDetail(href).subscribe((data) => {
this.data = data.slice();
});
}
getObjectsByMetric(isReload) {
this.clearDetailDisplay();
this._detailService.getDetailByChartSeriesSelected(this.chartType, this.chartSeries, this.chartMetric, this.endPointName).subscribe(data => {
this.data = data.slice();
});
if (!isReload) {
this.navRoutes.push(this.chartMetric);
}
else {
/**
* todo - this won't work for many routes.
*/
while (this.navRoutes.length > 1) {
this.navRoutes.splice(this.navRoutes.length - 1, 1);
}
}
}
goHome() {
this._router.navigate(['/main-board']);
}
gotToRoute(nav, disabled) {
if (!disabled) {
this._router.navigate(['/detail'], {
queryParams: {
chartType: this.chartType,
chartSeries: this.chartSeries,
chartMetric: this.chartMetric,
endPointName: this.endPointName
}
});
}
}
clearDetailDisplay() {
this.objectAsArray = [];
}
}
DetailComponent.decorators = [
{ type: Component, args: [{
moduleId: module.id,
template: "<div class=\"ui centered stackable grid\" style=\"margin-left: 5px; margin-right: 5px\">\n <div class=\"row\">\n <div class=\"three wide column\"></div>\n <div class=\"ten wide column left aligned\">\n\n <div class=\"ui breadcrumb\">\n <a (click)=\"goHome()\" class=\"section\">Board</a>\n\n <span *ngFor=\"let nav of navRoutes,let i = index\">\n <span class=\"divider\">/</span>\n <a (click)=\"gotToRoute(nav, navRoutes.length -1 == i)\" [ngClass]=\"{'active': navRoutes.length -1 == i }\"\n class=\"section\">{{nav}}</a>\n </span>\n\n </div>\n\n <div class=\"ui segment\">\n <div class=\"ui top right attached label\"><a href=\"http://localhost:8080/detail/downloadFile\"\n target=\"_self\"><i class=\"big grey download icon\"></i></a>\n </div>\n\n <div class=\"ui basic segment\">\n <span class=\"detail-left-header\">\n Type: {{chartSeries}}\n </span>\n <span class=\"detail-right-header\">\n Count: {{data.length}} Tasks\n </span>\n\n </div>\n <div class=\"ui fluid icon input\">\n <i class=\"search icon\"></i>\n <input [(ngModel)]=\"searchText\" placeholder=\"search text goes here\">\n </div>\n <table class=\"ui celled compact fixed table\">\n <thead>\n <tr>\n <th></th>\n <th style=\"text-align: center\">Status</th>\n <th>Master</th>\n <th>Job Name</th>\n <th>Sub Type</th>\n <th>Job Id</th>\n <th>Task Id</th>\n <th>Node</th>\n <th>Disk</th>\n <th>Task Start</th>\n <th>Task End</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let task of data | filter : searchText; let i = index \">\n <td [ngClass]=\"{'negative': task.status != 'Completed', 'positive': task.status == 'Completed' }\">\n {{i + 1}}\n </td>\n <td style=\"text-align: center\"><i [ngClass]=\"{\n 'red ban': task.status != 'Completed',\n 'green check': task.status == 'Completed'\n }\" class=\"icon large \"></i></td>\n <td>{{task.master}}</td>\n <td>{{task.jobName}}</td>\n <td>{{task.subType}}</td>\n <td><a (click)=\"getObjectsByHateoasLink(task)\">{{task.jobId}}</a></td>\n <td><a (click)=\"getObject(task)\">{{task.taskId}}</a></td>\n <td>{{task.node}}</td>\n <td>{{task.disk}}</td>\n <td>{{task.taskStart}}</td>\n <td>{{task.taskEnd}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"three wide column\">\n <div class=\"ui breadcrumb\">\n \n </div>\n <div *ngIf=\"objectAsArray.length\" class=\"ui segment\">\n <div class=\"ui top right attached label\"><i class=\"big download icon\"></i></div>\n\n <div class=\"ui basic segment\">\n <span class=\"detail-left-header\">Detail</span>\n </div>\n\n <table class=\"ui celled compact fixed table\">\n <tr *ngFor=\"let property of objectAsArray; \">\n <td class=\"field\">{{property.key}}</td>\n <td>{{property.value}}</td>\n </tr>\n\n </table>\n </div>\n </div>\n </div>\n</div>\n\n",
styles: ["a,a label{cursor:pointer}.field{background:#4a95c3;color:#fff}.ui .breadcrumb{font-size:1.28571429rem}.detail-right-header{float:right}.detail-left-header,.detail-right-header{color:#616161;font-size:1.2rem}.label{background:transparent}.active{color:grey!important;font-weight:400!important}"]
},] }
];
DetailComponent.ctorParameters = () => [
{ type: Router },
{ type: ActivatedRoute },
{ type: DetailService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvYmVubGkvd29ya3NwYWNlcy9uZ3gtZHluYW1pYy1kYXNoYm9hcmQtZnJhbWV3b3JrL3Byb2plY3RzL25neC1keW5hbWljLWRhc2hib2FyZC9zcmMvIiwic291cmNlcyI6WyJkYXNoYm9hcmQvZGV0YWlsL2RldGFpbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR3hDOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxlQUFlO0lBYXhCLFlBQW9CLE9BQWUsRUFDZixNQUFzQixFQUN0QixjQUE2QjtRQUY3QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFiakQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBRTlCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBT3BCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNuRSw0REFBNEQ7WUFDNUQsSUFBSSxDQUFDLFlBQVksYUFBYSxFQUFFO2dCQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFD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LENBQUM7U0FDekM7YUFBTTtZQUVIOztlQUVHO1lBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2RDtTQUNKO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBaUI7UUFFckMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUdYLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQy9CLFdBQVcsRUFDUDtvQkFDSSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO29CQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7aUJBQ2xDO2FBQ1IsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7O1lBdEhKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLHlzSUFBMEI7O2FBRTdCOzs7WUFac0MsTUFBTTtZQUFyQyxjQUFjO1lBQ2QsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtEZXRhaWxTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2UnO1xuXG5cbi8qKmFcbiAqIERldGFpbCBjb21wb25lbnRcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZpZXcuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3N0eWxlcy5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgY2hhcnRUeXBlID0gJyc7XG4gICAgY2hhcnRTZXJpZXMgPSAnJztcbiAgICBjaGFydE1ldHJpYyA9ICcnO1xuICAgIGVuZFBvaW50TmFtZSA9ICcnO1xuICAgIGRhdGEgPSBbXTtcbiAgICBzZWFyY2hUZXh0ID0gJyc7XG4gICAgbmF2Um91dGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgbmF2aWdhdGlvblN1YnNjcmlwdGlvbjogYW55O1xuICAgIG9iamVjdEFzQXJyYXkgPSA8YW55PltdO1xuXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfZGV0YWlsU2VydmljZTogRGV0YWlsU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBhIE5hdmlnYXRpb25FbmQgZXZlbnQgcmUtaW5pdGFsaXNlIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0T2JqZWN0c0J5TWV0cmljKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jaGFydFR5cGUgPSB0aGlzLl9yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snY2hhcnRUeXBlJ107XG4gICAgICAgIHRoaXMuY2hhcnRTZXJpZXMgPSB0aGlzLl9yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snY2hhcnRTZXJpZXMnXTtcbiAgICAgICAgdGhpcy5jaGFydE1ldHJpYyA9IHRoaXMuX3JvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydjaGFydE1ldHJpYyddO1xuICAgICAgICB0aGlzLmVuZFBvaW50TmFtZSA9IHRoaXMuX3JvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydlbmRQb2ludE5hbWUnXTtcbiAgICAgICAgdGhpcy5nZXRPYmplY3RzQnlNZXRyaWMoZmFsc2UpO1xuXG4gICAgfVxuXG4gICAgZ2V0T2JqZWN0KHJlY29yZDogYW55KSB7XG4gICAgICAgIHRoaXMuY2xlYXJEZXRhaWxEaXNwbGF5KCk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKS5mb3JFYWNoKGtleSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignbGluaycpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0QXNBcnJheS5wdXNoKHsna2V5Jzoga2V5LCAndmFsdWUnOiByZWNvcmRba2V5XX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldE9iamVjdHNCeUhhdGVvYXNMaW5rKGRldGFpbDogYW55KSB7XG4gICAgICAgIHRoaXMuY2xlYXJEZXRhaWxEaXNwbGF5KCk7XG5cbiAgICAgICAgbGV0IGhyZWYgPSAnJztcbiAgICAgICAgZGV0YWlsLmxpbmtzLmZvckVhY2goKGxpbms6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmsucmVsID09PSAnc2VsZicpIHtcbiAgICAgICAgICAgICAgICBocmVmID0gbGluay5ocmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbmF2QXJyYXkgPSBocmVmLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgLy90cnlpbmcgdG8gZ2V0IGRhdGEgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBzbyBkbyBub3RoaW5nLiBBdm9pZCB0aGlzIGFsdG9nZXRoZXIgYnkgcmVtb3ZpbmcgdGhlIGxpbmsgZnJvbSB0aGUgdGFibGUuXG4gICAgICAgIGlmIChuYXZBcnJheVtuYXZBcnJheS5sZW5ndGggLSAxXSA9PSB0aGlzLm5hdlJvdXRlc1t0aGlzLm5hdlJvdXRlcy5sZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXZSb3V0ZXMucHVzaChuYXZBcnJheVtuYXZBcnJheS5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdGhpcy5fZGV0YWlsU2VydmljZS5nZXREZXRhaWwoaHJlZikuc3Vic2NyaWJlKChkYXRhOiBbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5zbGljZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGdldE9iamVjdHNCeU1ldHJpYyhpc1JlbG9hZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNsZWFyRGV0YWlsRGlzcGxheSgpO1xuXG4gICAgICAgIHRoaXMuX2RldGFpbFNlcnZpY2UuZ2V0RGV0YWlsQnlDaGFydFNlcmllc1NlbGVjdGVkKHRoaXMuY2hhcnRUeXBlLCB0aGlzLmNoYXJ0U2VyaWVzLCB0aGlzLmNoYXJ0TWV0cmljLCB0aGlzLmVuZFBvaW50TmFtZSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5zbGljZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWlzUmVsb2FkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlJvdXRlcy5wdXNoKHRoaXMuY2hhcnRNZXRyaWMpO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRvZG8gLSB0aGlzIHdvbid0IHdvcmsgZm9yIG1hbnkgcm91dGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5uYXZSb3V0ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2Um91dGVzLnNwbGljZSh0aGlzLm5hdlJvdXRlcy5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdvSG9tZSgpIHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnL21haW4tYm9hcmQnXSk7XG4gICAgfVxuXG4gICAgZ290VG9Sb3V0ZShuYXY6IHN0cmluZywgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcblxuICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG5cblxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnL2RldGFpbCddLCB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0VHlwZTogdGhpcy5jaGFydFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydFNlcmllczogdGhpcy5jaGFydFNlcmllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0TWV0cmljOiB0aGlzLmNoYXJ0TWV0cmljLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9pbnROYW1lOiB0aGlzLmVuZFBvaW50TmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyRGV0YWlsRGlzcGxheSgpIHtcbiAgICAgICAgdGhpcy5vYmplY3RBc0FycmF5ID0gW107XG4gICAgfVxufVxuIl19