Skip to content

Commit e47324e

Browse files
committed
fix(containers): guard _stopLogFollow call against lazy-module timing
destroy() called this._stopLogFollow() unconditionally, but the method lives in container-detail.js which is only loaded on first detail view. Navigating away from the containers list without ever opening a detail view crashed with TypeError. Guarded with typeof check — harmless no-op when the detail module was never loaded. Release: v7.2.1
1 parent aedc6a4 commit e47324e

5 files changed

Lines changed: 13 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to Docker Dash are documented here.
44

5+
## [7.2.1] - 2026-04-23 — Bug fixes
6+
7+
### Fixed
8+
9+
- **Containers page — `TypeError: this._stopLogFollow is not a function`** on every navigation away from the containers list. Regression from the v6.16.0 lazy-load split: `_stopLogFollow` lives in `container-detail.js`, which is only loaded on first detail view, but `destroy()` (eager) called it unconditionally. Guarded the call with a `typeof === 'function'` check — harmless no-op when the detail module was never loaded. [`public/js/pages/containers.js:2935`](public/js/pages/containers.js#L2935)
10+
- **`nav.observability` raw i18n key** rendered in the sidebar. Added `observability` key to the `nav:` block in [`public/js/i18n/en.js`](public/js/i18n/en.js) + [`ro.js`](public/js/i18n/ro.js); other 9 languages fall back to EN via `_fallback`.
11+
512
## [7.2.0] - 2026-04-22 — "In-app Observability Wizard"
613

714
Turns the v7.1.0 observability primitives (compose profile + dashboard JSON + docs) into an admin UI wizard at **System → Observability**. Detects existing Prometheus / Grafana running on the host and offers the right path — integrate, deploy, or hybrid — without operators needing to read the full doc first.

docker-compose.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ services:
44
context: .
55
dockerfile: Dockerfile
66
args:
7-
APP_VERSION: "${APP_VERSION:-7.2.0}"
8-
image: docker-dash:${APP_VERSION:-7.2.0}
7+
APP_VERSION: "${APP_VERSION:-7.2.1}"
8+
image: docker-dash:${APP_VERSION:-7.2.1}
99
container_name: docker-dash
1010
restart: unless-stopped
1111
env_file:
@@ -54,7 +54,7 @@ services:
5454
dd-egress-filter:
5555
build:
5656
context: ./docker/egress-filter
57-
image: docker-dash-egress-filter:${APP_VERSION:-7.2.0}
57+
image: docker-dash-egress-filter:${APP_VERSION:-7.2.1}
5858
container_name: dd-egress-filter
5959
restart: unless-stopped
6060
# Uses the default bridge so target containers on the default bridge can

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "docker-dash",
3-
"version": "7.2.0",
3+
"version": "7.2.1",
44
"description": "Full-featured Docker management dashboard",
55
"main": "src/server.js",
66
"scripts": {

public/js/pages/containers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2932,7 +2932,7 @@ const ContainersPage = {
29322932
clearInterval(this._refreshTimer);
29332933
clearInterval(this._statsTimer);
29342934
if (this._logStream) this._logStream();
2935-
this._stopLogFollow();
2935+
if (typeof this._stopLogFollow === 'function') this._stopLogFollow();
29362936
if (this._boundKbHandler) { document.removeEventListener('keydown', this._boundKbHandler); this._boundKbHandler = null; }
29372937
if (this._sandboxExpiredHandler) { this._sandboxExpiredHandler(); this._sandboxExpiredHandler = null; }
29382938
if (this._execUnsub) this._execUnsub.forEach(fn => fn());

src/version.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
// Single source of truth for the application version.
33
// Updated automatically by: npm version X.Y.Z (via scripts/sync-version.js)
44
// server.js reads this to inject into index.html at startup — no build step needed.
5-
module.exports = '7.2.0';
5+
module.exports = '7.2.1';

0 commit comments

Comments
 (0)