diff --git a/src_assets/common/assets/web/troubleshooting.html b/src_assets/common/assets/web/troubleshooting.html
index c33b3db24bc..d9f9cb9596b 100644
--- a/src_assets/common/assets/web/troubleshooting.html
+++ b/src_assets/common/assets/web/troubleshooting.html
@@ -177,7 +177,8 @@
{{ $t('troubleshooting.logs') }}
@@ -195,6 +196,7 @@ {{ $t('troubleshooting.logs') }}
import {
AlertCircle,
AlertTriangle,
+ Check,
CheckCircle,
ChevronDown,
ChevronUp,
@@ -214,6 +216,7 @@ {{ $t('troubleshooting.logs') }}
Navbar,
AlertCircle,
AlertTriangle,
+ Check,
CheckCircle,
ChevronDown,
ChevronUp,
@@ -234,6 +237,7 @@ {{ $t('troubleshooting.logs') }}
closeAppStatus: null,
ddResetPressed: false,
ddResetStatus: null,
+ logsCopied: false,
logs: 'Loading...',
logFilter: null,
logInterval: null,
@@ -375,6 +379,7 @@ {{ $t('troubleshooting.logs') }}
}
},
created() {
+ this._logsCopyTimeout = null;
fetch("/api/config")
.then((r) => r.json())
.then((r) => {
@@ -468,7 +473,20 @@ {{ $t('troubleshooting.logs') }}
},
copyLogs() {
// Copy the filtered view if a filter is active.
- navigator.clipboard.writeText(this.actualLogs);
+ navigator.clipboard.writeText(this.actualLogs).then(() => {
+ // Clear any existing reset timer (handles rapid successive clicks).
+ if (this._logsCopyTimeout) clearTimeout(this._logsCopyTimeout);
+
+ // Show checkmark feedback.
+ this.logsCopied = true;
+
+ // Revert icon after 2 seconds.
+ this._logsCopyTimeout = setTimeout(() => {
+ this.logsCopied = false;
+ }, 2000);
+ }).catch((err) => {
+ console.error('Failed to copy logs:', err);
+ });
},
restart() {
this.restartPressed = true;