UserListComponent: selectedUsers plain Set breaks OnPush bulk-selection UI #1018

Closed
opened 2026-08-12 08:08:53 +00:00 by spikerj · 1 comment
Owner

Summary

UserListComponent.selectedUsers is a plain Set. In-place mutations (add/delete) do not create a new reference, so OnPush does not re-render @if (selectedUsers.size) / bulk-selection chrome even after detectChanges(). The checkbox event path that replaces or otherwise triggers CD works; programmatic/in-place Set updates can leave the toolbar stale.

Found by

Wave 6 coverage tick 9 a1 — characterized in user-list render suite (3a5d96cc / ledger).

Expected

Use a signal, immutable Set replacement (selectedUsers = new Set(...)), or markForCheck after mutations so bulk-selection UI stays in sync.

## Summary `UserListComponent.selectedUsers` is a plain `Set`. In-place mutations (add/delete) do not create a new reference, so OnPush does not re-render `@if (selectedUsers.size)` / bulk-selection chrome even after `detectChanges()`. The checkbox event path that replaces or otherwise triggers CD works; programmatic/in-place Set updates can leave the toolbar stale. ## Found by Wave 6 coverage tick 9 a1 — characterized in user-list render suite (`3a5d96cc` / ledger). ## Expected Use a signal, immutable Set replacement (`selectedUsers = new Set(...)`), or markForCheck after mutations so bulk-selection UI stays in sync.
Author
Owner

Resolved in spikersoft-angular PR #819 (merged to master). UserList selectedUsers is a signal so OnPush bulk-selection updates. Closing.

Resolved in spikersoft-angular [PR #819](https://git.spikersoft.com/spikerj/spikersoft-angular/pulls/819) (merged to `master`). UserList selectedUsers is a signal so OnPush bulk-selection updates. Closing.
Sign in to join this conversation.