From 79f467603aaad07ec5cb552da285e2839a2b2e34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=B3bert=20Kiss?=
Date: Tue, 20 Aug 2019 15:33:28 +0200
Subject: [PATCH] feat: scroll to the end of the firmware log when success of
faild panel visible (#1018)
---
.../firmware/device-firmware.component.html | 4 +--
.../firmware/device-firmware.component.ts | 36 ++++++++++++++-----
.../app/components/xterm/xterm.component.ts | 13 ++++---
3 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.html b/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.html
index b71d0959..b1684738 100644
--- a/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.html
+++ b/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.html
@@ -27,7 +27,7 @@
label="Choose firmware file and flash it">
-
Firmware update failed. Disconnect every USB device from your computer (including USB hubs, KVM switches, USB dongles, and everything else), then connect only your UHK and retry.
@@ -35,7 +35,7 @@
If you've tried the above and the update still keeps failing, please create a GitHub issue, and attach the update log.
-
Firmware update succeeded.
diff --git a/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.ts b/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.ts
index 37f5683b..8e2b6728 100644
--- a/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.ts
+++ b/packages/uhk-web/src/app/components/device/firmware/device-firmware.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnDestroy } from '@angular/core';
+import { Component, OnDestroy, ViewChild } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable, Subscription } from 'rxjs';
import { Constants, HardwareModules, VersionInformation } from 'uhk-common';
@@ -17,6 +17,7 @@ import {
import { UpdateFirmwareAction, UpdateFirmwareWithAction } from '../../../store/actions/device';
import { XtermLog } from '../../../models/xterm-log';
import { UploadFileData } from '../../../models/upload-file-data';
+import { XtermComponent } from '../../xterm/xterm.component';
@Component({
selector: 'device-firmware',
@@ -30,30 +31,41 @@ export class DeviceFirmwareComponent implements OnDestroy {
flashFirmwareButtonDisbabled$: Observable
;
xtermLog$: Observable>;
getAgentVersionInfo$: Observable;
- hardwareModulesSubscription: Subscription;
hardwareModules: HardwareModules;
runningOnNotSupportedWindows$: Observable;
firmwareUpgradeAllowed$: Observable;
- firmwareUpgradeFailed$: Observable;
- firmwareUpgradeSuccess$: Observable;
+
firmwareGithubIssueUrl: string;
+ firmwareUpgradeFailed: boolean;
+ firmwareUpgradeSuccess: boolean;
+
+ @ViewChild(XtermComponent, { static: false })
+ xtermRef: XtermComponent;
+
+ private subscription = new Subscription();
constructor(private store: Store) {
this.flashFirmwareButtonDisbabled$ = store.select(flashFirmwareButtonDisbabled);
this.xtermLog$ = store.select(xtermLog);
this.getAgentVersionInfo$ = store.select(getAgentVersionInfo);
- this.hardwareModulesSubscription = store.select(getHardwareModules).subscribe(data => {
+ this.subscription.add(store.select(getHardwareModules).subscribe(data => {
this.hardwareModules = data;
- });
+ }));
this.runningOnNotSupportedWindows$ = store.select(runningOnNotSupportedWindows);
this.firmwareUpgradeAllowed$ = store.select(firmwareUpgradeAllowed);
- this.firmwareUpgradeFailed$ = store.select(firmwareUpgradeFailed);
- this.firmwareUpgradeSuccess$ = store.select(firmwareUpgradeSuccess);
+ this.subscription.add(store.select(firmwareUpgradeFailed).subscribe(data => {
+ this.firmwareUpgradeFailed = data;
+ this.scrollToTheEndOfTheLogs();
+ }));
+ this.subscription.add(store.select(firmwareUpgradeSuccess).subscribe(data => {
+ this.firmwareUpgradeSuccess = data;
+ this.scrollToTheEndOfTheLogs();
+ }));
this.firmwareGithubIssueUrl = Constants.FIRMWARE_GITHUB_ISSUE_URL;
}
ngOnDestroy(): void {
- this.hardwareModulesSubscription.unsubscribe();
+ this.subscription.unsubscribe();
}
onUpdateFirmware(): void {
@@ -63,4 +75,10 @@ export class DeviceFirmwareComponent implements OnDestroy {
changeFile(data: UploadFileData): void {
this.store.dispatch(new UpdateFirmwareWithAction(data.data));
}
+
+ private scrollToTheEndOfTheLogs(): void {
+ if (this.xtermRef) {
+ this.xtermRef.scrollToTheEnd();
+ }
+ }
}
diff --git a/packages/uhk-web/src/app/components/xterm/xterm.component.ts b/packages/uhk-web/src/app/components/xterm/xterm.component.ts
index 8cbe13f5..1ac67091 100644
--- a/packages/uhk-web/src/app/components/xterm/xterm.component.ts
+++ b/packages/uhk-web/src/app/components/xterm/xterm.component.ts
@@ -13,10 +13,8 @@ export class XtermComponent implements OnChanges {
@ViewChild('scrollMe', { static: false }) divElement: ElementRef;
ngOnChanges(changes: SimpleChanges): void {
- if (changes.logs && this.divElement && this.divElement.nativeElement) {
- setTimeout(() => {
- this.divElement.nativeElement.scrollTop = this.divElement.nativeElement.scrollHeight;
- });
+ if (changes.logs) {
+ this.scrollToTheEnd();
}
}
@@ -24,4 +22,11 @@ export class XtermComponent implements OnChanges {
return this.logs.reduce((value, line) => value + line.message + '\n', '');
}
+ scrollToTheEnd(): void {
+ setTimeout(() => {
+ if (this.divElement && this.divElement.nativeElement) {
+ this.divElement.nativeElement.scrollTop = this.divElement.nativeElement.scrollHeight;
+ }
+ });
+ }
}