• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zwave-js / zwave-js-ui
20%

Build:
DEFAULT BRANCH: master
Repo Added 20 Sep 2022 02:07PM UTC
Token mus2r2yYRz7XGYVesP5DKNJXitjqkrcyd regen
Build 2648 Last
Files 71
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: SELECT
CHANGE BRANCH
x
Sync Branches
  • No branch selected
  • 01-ui-foundation
  • 02-ui-icons
  • @release-it/conventional-changelog@10.0.4
  • @zwave-js/server@1.23.1
  • @zwave-js/server@1.24.1
  • @zwave-js/server@1.37.0
  • @zwave-js/server@1.38.0
  • @zwave-js/server@1.39.0
  • @zwave-js/server@3.2.1
  • @zwave-js/server@3.8.0
  • AlCalzone-patch-1
  • SYNC-NODE-NAME-LOC
  • actions-updates
  • actually-live-network-map
  • add-node-dsk
  • ai-repo-chooser
  • alpine-3.21
  • application-test
  • armv7-pkg
  • association-error-ui
  • associations-error
  • auto-redirect
  • battery-fix
  • better-logs-intercept
  • bug/to-subscribe-set-to-map
  • bump
  • bump-actions
  • bump-deps
  • bump-docker
  • bump-jsonl
  • bump-node
  • bump-server
  • bump-server-1.23.0
  • bump-zwave-js
  • bump-zwavejs-and-server
  • bump_2
  • central-scene-default-mqtt-ad
  • changelog-links
  • chore-docker
  • chore-package-ations-bump
  • chore-pem
  • chore/bump-node-to-18-14-2
  • chore/bump-node-version
  • chore/claude-md-reference-copilot-instructions
  • chore/include-node-19-in-tests
  • chore/mock-server-fleet
  • chore/update-alpine-3.22
  • cleanup-logs
  • compact-sort
  • compact-table
  • compress
  • config-db
  • controller-events
  • controller-values
  • copilot-instructions
  • copilot/add-checkbox-bypass-restriction
  • copilot/add-compact-view-default-setting
  • copilot/add-custom-browser-title-option
  • copilot/add-debugging-package-wizard
  • copilot/add-destructive-parameter-support
  • copilot/add-disable-background-checking
  • copilot/add-driver-startup-logging
  • copilot/add-last-awake-state-ui
  • copilot/add-manual-poll-button
  • copilot/add-save-settings-without-restart
  • copilot/add-text-for-navigation-tabs
  • copilot/allow-new-device-classes
  • copilot/bump-nodejs-to-24
  • copilot/feat-use-new-user-cc-apis
  • copilot/fix-4271-2
  • copilot/fix-4355
  • copilot/fix-4357
  • copilot/fix-4366
  • copilot/fix-4377
  • copilot/fix-4379
  • copilot/fix-4381
  • copilot/fix-battery-level-reporting
  • copilot/fix-controller-background-rssi-chart
  • copilot/fix-debug-capture-logs
  • copilot/fix-direct-controller-connection
  • copilot/fix-discord-webhook-400-error
  • copilot/fix-discord-workflow-issue
  • copilot/fix-fab-in-store
  • copilot/fix-firmware-update-button-issue
  • copilot/fix-last-awake-column-timestamp
  • copilot/fix-last-seen-time-compact-view
  • copilot/fix-log-to-file-issue
  • copilot/fix-multiple-file-selection-issue
  • copilot/fix-nodes-json-import-issue
  • copilot/fix-null-cc-value-display
  • copilot/fix-pwa-cache-issue
  • copilot/fix-query-latest-release-info
  • copilot/fix-race-condition-firmware-check
  • copilot/fix-refresh-node-neighbors
  • copilot/fix-settings-update-restart-issue
  • copilot/fix-tcp-connection-issue
  • copilot/fix-ui-update-on-route-rebuild
  • copilot/fix-unknown-notification-issue
  • copilot/fix-wakeup-interval-issue
  • copilot/fix-warning-ui-groups-associations
  • copilot/improve-agents-md-file
  • copilot/migrate-to-vite-7
  • copilot/pin-zwave-js-fixed-version
  • copilot/sub-pr-4520
  • copilot/unhide-button-aria-attributes
  • copilot/update-deprecated-packages
  • copilot/update-status-on-task-completion
  • copilot/validate-number-inputs-against-allowed-values
  • crc-error-zniffer
  • credential-management
  • ct-101
  • custom-zwavejs-build
  • dark-mode
  • dark-toggle
  • date-zniffer
  • dbm-limits
  • debug-autoscroll
  • default-host
  • default-powerlevel-message
  • dependabot/github_actions/actions/checkout-3
  • dependabot/github_actions/actions/setup-node-3.4.1
  • dependabot/github_actions/actions/stale-6
  • dependabot/github_actions/actions/upload-artifact-3
  • dependabot/github_actions/docker/build-push-action-3
  • dependabot/github_actions/docker/login-action-2
  • dependabot/github_actions/docker/metadata-action-4
  • dependabot/github_actions/docker/setup-qemu-action-2.0.0
  • dependabot/github_actions/github/codeql-action-2
  • dependabot/github_actions/peter-evans/create-pull-request-4
  • dependabot/npm_and_yarn/axios-1.7.4
  • dependabot/npm_and_yarn/multi-9423f4c335
  • dependabot/npm_and_yarn/npm_and_yarn-0d7ef37a24
  • dependabot/npm_and_yarn/npm_and_yarn-2c2cf9d17b
  • dependabot/npm_and_yarn/npm_and_yarn-6ea9762674
  • dependabot/npm_and_yarn/npm_and_yarn-87115a91ec
  • dependabot/npm_and_yarn/npm_and_yarn-cf14978afc
  • dependabot/npm_and_yarn/npm_and_yarn-d5195a8e32
  • dependabot/npm_and_yarn/npm_and_yarn-e04d5d616f
  • dependabot/npm_and_yarn/uplot-1.6.31
  • deps-bump
  • discord-bot
  • discovery-lights
  • discovery-scene-units
  • docker-alpine
  • docker-fix
  • docker22
  • dockerfixing
  • docs#3054
  • docs/improve-documentation
  • download-zniffer-trace
  • drop-18
  • drop-yarn
  • enable_renovate
  • esbuild
  • esbuild-pkg
  • eslint-bump
  • esmoduleinterop
  • event-channels
  • external-auth-fix
  • external-port-setting
  • feat#1942
  • feat#2517
  • feat#2695
  • feat#2730
  • feat#2767
  • feat#2768
  • feat#2835
  • feat#2847
  • feat#2857
  • feat#2859
  • feat#2871
  • feat#2896
  • feat#2921
  • feat#2998
  • feat#3008
  • feat#3097
  • feat#3129
  • feat#3162
  • feat#3225
  • feat#uid_prefix
  • feat-add-state-classes
  • feat-auto-powerleve
  • feat-cc-config-enabled
  • feat-changelog
  • feat-dsk
  • feat-dump
  • feat-inclusion-state
  • feat-load-zlf
  • feat-long-range
  • feat-max-files
  • feat-mqtt-options
  • feat-note-ui
  • feat-otw-update
  • feat-restart
  • feat-time
  • feat-tz-locale
  • feat-vid
  • feat-zjs10.6
  • feat-zniffer
  • feat/configuration-templates
  • feat/docker-more-semver
  • feat/hass-suggested-area
  • feat/ingress
  • feat/pagination-top
  • feat/playwright-screenshot-tooling
  • feat/plugin-on-demand-install
  • feature/learnMode
  • fix#2691
  • fix#2761
  • fix#2789
  • fix#2819
  • fix#2845
  • fix#2945
  • fix#2975
  • fix#2983
  • fix#2993
  • fix#3034
  • fix#3045
  • fix#3141
  • fix#3190
  • fix#782
  • fix(ui)--improve-network-graph-popup-positioning
  • fix-3461
  • fix-QR-code-scanning
  • fix-arm-build
  • fix-association-error
  • fix-auth
  • fix-auto-powerlevel
  • fix-basic-auth
  • fix-build
  • fix-circular
  • fix-colors
  • fix-config-changed
  • fix-controller-events
  • fix-cover-up-down
  • fix-default-eu-region
  • fix-default-host
  • fix-dev-reload
  • fix-discovery-coves
  • fix-docker
  • fix-driver-function
  • fix-formatting-in-debug-window
  • fix-groups-LR
  • fix-hardreset
  • fix-indicator-not-defined
  • fix-k8s-deployment
  • fix-key-check
  • fix-log-rotate
  • fix-logger
  • fix-manager
  • fix-mcc-discovery
  • fix-mode-thermostat
  • fix-mqtt-callbacks
  • fix-name-loc-on-added
  • fix-nodes-manager
  • fix-optional-deps
  • fix-otw
  • fix-otw-firmware-update
  • fix-otw-progress
  • fix-pack
  • fix-pkg-config-sync
  • fix-powerlevel-auto
  • fix-rebuild-node-routes
  • fix-refresh-after-lr-powerlevel-set
  • fix-region-check-for-europe
  • fix-release
  • fix-reproducible-builds
  • fix-restart
  • fix-schedule-lock-cc-query
  • fix-scheduled-jobs
  • fix-set-return-routes
  • fix-stringify
  • fix-stuff
  • fix-topics
  • fix-unconnected-battery
  • fix-update-firmware
  • fix-valueid
  • fix-valueid-2
  • fix-win-build
  • fix-windows
  • fix-windows-v2
  • fix-zniffer-init
  • fix-zniffer-routes
  • fix/confirm-dialog-margins
  • fix/is-authenticated
  • fix/mqtt-payload-numeric-parsing
  • fix/node-status-stale-after-replace
  • fix/remove-deprecated-csurf
  • fix/request-body-size-limits
  • fix/session-secret-startup-guard
  • fix/snippet-endpoint-auth
  • fix/socket-reconnect-loop-4564
  • fix/ui-performance-and-inclusion-cleanup
  • fixFWUpdate
  • fixed-footer-header
  • fw-infor
  • gh-queue
  • handle-battery-cc-notification
  • hard-reset
  • hass-mqtt-availability
  • healthcheck-improvements
  • inclusion-state-changed
  • inverted-checkbox
  • joneshf/ouknwmotlvts
  • kc/feat/configurable-defaultPsw
  • last-active
  • launch-task
  • link-iterations
  • link-statistics
  • logs-dir
  • logs-spacing
  • marcin-witkowski-language-improvements
  • master
  • max-lr-powerlevel
  • mergify/configuration-deprecated-update
  • mergify/robertsLando/config-update
  • migrate-vite-v7
  • move-to-esm
  • mqtt-ad-revert-central-scene-state-class
  • mqtt-discovery-configuration
  • mqtt-discovery-scene
  • multiple-releases
  • next-to-last
  • nif-event
  • nlwr
  • no-safe
  • no-transform-types
  • no-watch-local-zwave-js
  • nodes-store-update
  • npm-pack
  • nvm-restore-raw
  • opensource-alt-patch-1
  • optimization/frontend-runtime-deps
  • optimize-space
  • ota-rfregion
  • ota-updates-nits
  • otw-update-service
  • parse-ota-changelog
  • patch-1
  • patch-2
  • patch-4
  • patch-5
  • pinia
  • plugins-fix
  • privacy-mode
  • refactor-heal
  • refactor/docker-build-cache
  • refs/pull/3176/merge
  • refs/pull/3210/merge
  • refs/pull/3212/merge
  • refs/pull/3224/merge
  • refs/pull/3240/merge
  • refs/pull/3247/merge
  • refs/pull/3260/merge
  • refs/pull/3263/merge
  • refs/pull/3268/merge
  • refs/pull/3278/merge
  • refs/pull/3292/merge
  • refs/pull/3293/merge
  • refs/pull/3294/merge
  • refs/pull/3299/merge
  • refs/pull/3305/merge
  • refs/pull/3306/merge
  • refs/pull/3308/merge
  • refs/pull/3318/merge
  • refs/pull/3319/merge
  • refs/pull/3324/merge
  • refs/pull/3325/merge
  • refs/pull/3331/merge
  • refs/pull/3332/merge
  • refs/pull/3335/merge
  • refs/pull/3337/merge
  • refs/pull/3345/merge
  • refs/pull/3346/merge
  • refs/pull/3348/merge
  • refs/pull/3349/merge
  • refs/pull/3351/merge
  • refs/pull/3359/merge
  • refs/pull/3360/merge
  • refs/pull/3367/merge
  • refs/pull/3375/merge
  • refs/pull/3377/merge
  • refs/pull/3706/merge
  • release-ot
  • remove_node_14
  • reorder-settings
  • replace-failed
  • restart
  • reuse-code-api
  • revert-3539-mqtt-discovery-scene
  • revert-changes
  • rework-ota-region
  • rf-region-mandatory
  • rollup-issue
  • routedACK
  • save-options-on-node
  • scene-activation-mqtt-ad
  • scheduler-fix
  • search-in-table
  • settings-improvements
  • settings-ui-not-peristed
  • sh-syntax-error
  • sk-fix-typo
  • smart-start-improvements
  • snyk-fix-39d19f89e2774cc34c8c79fbe864ac9f
  • table-header
  • throttle_otw
  • toggle-hass-discovery
  • trackpad-scroll-speed
  • typo
  • ui-settings-changed
  • ui-theme-fix
  • unresponsive-setting
  • unsued-reds
  • update_k8s_ingress_to_not_beta
  • update_node_and_alpine
  • update_to_node_18
  • upload-file-to-folder
  • usercc-test
  • validate-number-inputs
  • views-settings
  • vite-8
  • vitejs
  • vue3-refactor
  • websocket
  • zip-firmware
  • zj-server
  • zjs
  • zjs-15
  • zjs-v11
  • zjs10.12.0
  • zniffer-update
  • zwave-js-13
  • zwave-js-13.0.2
  • zwave-js-14
  • zwave-js-15.3.0
  • zwave-js@10.10.0
  • zwave-js@10.14.0
  • zwave-js@10.14.1
  • zwave-js@10.17.0
  • zwave-js@10.18.0
  • zwave-js@10.2.0
  • zwave-js@10.21.0
  • zwave-js@10.22.1
  • zwave-js@10.22.2
  • zwave-js@10.22.3
  • zwave-js@10.23.1
  • zwave-js@10.23.5
  • zwave-js@10.3.1
  • zwave-js@10.5.0
  • zwave-js@10.5.4
  • zwave-js@10.5.5
  • zwave-js@10.5.6
  • zwave-js@11.10.0
  • zwave-js@11.13.1
  • zwave-js@11.14.0
  • zwave-js@11.4.1
  • zwave-js@11.4.2
  • zwave-js@11.5.1
  • zwave-js@11.6.0
  • zwave-js@11.8.1
  • zwave-js@11.9.0
  • zwave-js@11.9.2
  • zwave-js@12
  • zwave-js@12.0.2
  • zwave-js@12.1.1
  • zwave-js@12.10.0
  • zwave-js@12.10.1
  • zwave-js@12.11.0
  • zwave-js@12.11.1
  • zwave-js@12.11.2
  • zwave-js@12.12.0
  • zwave-js@12.12.1
  • zwave-js@12.12.2
  • zwave-js@12.12.3
  • zwave-js@12.12.4
  • zwave-js@12.12.5
  • zwave-js@12.13.0
  • zwave-js@12.3.0
  • zwave-js@12.3.1
  • zwave-js@12.3.2
  • zwave-js@12.4.0
  • zwave-js@12.4.1
  • zwave-js@12.4.2
  • zwave-js@12.4.3
  • zwave-js@12.4.4
  • zwave-js@12.5.1
  • zwave-js@12.5.2
  • zwave-js@12.5.3
  • zwave-js@12.5.4
  • zwave-js@12.5.5
  • zwave-js@12.5.6
  • zwave-js@12.6.0
  • zwave-js@12.7.0
  • zwave-js@12.8.1
  • zwave-js@12.9.1
  • zwave-js@13.0.1
  • zwave-js@13.0.3
  • zwave-js@13.1.0
  • zwave-js@13.10.0
  • zwave-js@13.10.1
  • zwave-js@13.10.2
  • zwave-js@13.10.3
  • zwave-js@13.2.0
  • zwave-js@13.3.0
  • zwave-js@13.3.1
  • zwave-js@13.4.0
  • zwave-js@13.5.0
  • zwave-js@13.7.0
  • zwave-js@13.8.0
  • zwave-js@13.9.0
  • zwave-js@13.9.1
  • zwave-js@14.3.1
  • zwave-js@14.3.10
  • zwave-js@14.3.11
  • zwave-js@14.3.12
  • zwave-js@14.3.5
  • zwave-js@14.3.6
  • zwave-js@14.3.7
  • zwave-js@14.3.8
  • zwave-js@14.3.9
  • zwave-js@15.0.0
  • zwave-js@15.0.3
  • zwave-js@15.0.4
  • zwave-js@15.0.5
  • zwave-js@15.0.6
  • zwave-js@15.1.0
  • zwave-js@15.1.2
  • zwave-js@15.1.3
  • zwave-js@15.10.0
  • zwave-js@15.11.0
  • zwave-js@15.12.0
  • zwave-js@15.13.0
  • zwave-js@15.14.0
  • zwave-js@15.15.0
  • zwave-js@15.15.2
  • zwave-js@15.15.3
  • zwave-js@15.16.0
  • zwave-js@15.17.0
  • zwave-js@15.17.1
  • zwave-js@15.18.0
  • zwave-js@15.19.0
  • zwave-js@15.20.0
  • zwave-js@15.20.1
  • zwave-js@15.21.0
  • zwave-js@15.22.0
  • zwave-js@15.22.1
  • zwave-js@15.22.2
  • zwave-js@15.23.0
  • zwave-js@15.23.2
  • zwave-js@15.23.4
  • zwave-js@15.23.5
  • zwave-js@15.24.0
  • zwave-js@15.3.1
  • zwave-js@15.4.1
  • zwave-js@15.4.2
  • zwave-js@15.5.0
  • zwave-js@15.6.0
  • zwave-js@15.7.0
  • zwave-js@15.8.0
  • zwave-js@15.9.0

15 Jun 2026 08:17AM UTC coverage: 19.652% (-0.006%) from 19.658%
27533209408

push

github

web-flow
fix(ui): keep node index map consistent after node removal (#4667)

## Problem

Closes #4666

After using **Advanced → Failed Node → Replace** to replace a node, the
node's **Status icon stays "Dead"** in the UI even though everything
else works — pinging the node reports success, but the icon won't update
until the browser is refreshed.

## Root cause

The frontend store (`src/stores/base.js`) maintains `nodesMap`, a
`nodeId → index in this.nodes` lookup used by both `getNode` and
`updateNode`. `removeNode` spliced a node out of the array but only
deleted *that* node's `nodesMap` entry:

```js
this.nodesMap.delete(n.id)
this.nodes.splice(index, 1)   // every later node shifts down one slot
```

Splicing shifts every node *after* the removed index down by one, but
their `nodesMap` entries keep pointing at the old (now off-by-one)
index. "Replace Failed Node" removes the old node mid-array and then
re-includes a new one, so afterwards the map is wrong for every later
node. Incoming **partial** `nodeUpdated` status events (alive/dead/ping)
are then `Object.assign`-ed into the *wrong* array slot, so the visible
node's status never changes.

A browser refresh fixes it because `init` → `initNodes` rebuilds the map
from scratch — which also confirms the backend status was correct the
whole time.

## Fix

Rebuild `nodesMap` from the array after the splice, matching the
reassign-a-fresh-`Map` pattern already used by `resetNodes`. This is the
removal-side counterpart to the existing `updateNode` decision (#4639)
to avoid splicing-on-update for the same index-integrity reason.

Frontend-only, one method changed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

410 of 535 branches covered (76.64%)

Branch coverage included in aggregate %.

0 of 8 new or added lines in 1 file covered. (0.0%)

4419 of 24037 relevant lines covered (18.38%)

1.16 hits per line

Relevant lines Covered
Build:
Build:
24037 RELEVANT LINES 4419 COVERED LINES
1.16 HITS PER LINE
Source Files on master
  • Tree
  • List 71
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
27533209408 master fix(ui): keep node index map consistent after node removal (#4667) ## Problem Closes #4666 After using **Advanced → Failed Node → Replace** to replace a node, the node's **Status icon stays "Dead"** in the UI even though everything else works —... push 15 Jun 2026 08:18AM UTC web-flow github
19.65
27533071291 fix/node-status-stale-after-replace Merge fdc8b2191 into dc129d33a Pull #4667 15 Jun 2026 08:15AM UTC web-flow github
19.65
27340538910 master fix(api): require authentication for the snippet listing endpoint (#4661) push 11 Jun 2026 10:29AM UTC web-flow github
19.66
27340464097 fix/request-body-size-limits Merge daf96d638 into 87c89da15 Pull #4663 11 Jun 2026 10:27AM UTC web-flow github
19.36
27340449041 fix/snippet-endpoint-auth Merge 20aff2967 into 87c89da15 Pull #4661 11 Jun 2026 10:27AM UTC web-flow github
19.36
27338933787 fix/session-secret-startup-guard Merge e8b9b462f into 87c89da15 Pull #4664 11 Jun 2026 09:58AM UTC web-flow github
19.47
27337955825 fix/request-body-size-limits Merge 8fc8cd518 into 87c89da15 Pull #4663 11 Jun 2026 09:40AM UTC web-flow github
19.36
27337430127 fix/mqtt-payload-numeric-parsing Merge 7bf3af345 into 87c89da15 Pull #4662 11 Jun 2026 09:30AM UTC web-flow github
19.55
27335081664 master fix(api): apply imported node metadata across wrapped and legacy nodes.json formats (#4636) - [x] Review new actionable PR comments and confirm required follow-up - [x] Check recent CI workflow run status/logs for this branch - [x] Run baseline l... push 11 Jun 2026 08:47AM UTC web-flow github
19.36
27334731684 fix/snippet-endpoint-auth Merge ba5566396 into 82792a9c1 Pull #4661 11 Jun 2026 08:40AM UTC web-flow github
18.55
See All Builds (2279)

Badge your Repo: zwave-js-ui

We detected this repo isn’t badged! Grab the embed code to the right, add it to your repo to show off your code coverage, and when the badge is live hit the refresh button to remove this message.

Could not find badge in README.

Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

Refresh
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc