refactor(list): migrate remaining app-table consumers onto signal-list - #5402
Merged
norman-abramovitz merged 7 commits intoMay 31, 2026
Conversation
The <app-action-monitor> table component was rendered nowhere (the live app-action-monitor-icon is a separate component, kept). Drop it and its module declaration / public-api export ahead of the legacy list teardown.
Restores two affordances dropped in the rewrite (grounded in v4.9.2): - Per-row rowState: row coloring (error/warning/info), structured message segments (bold/tone/link/break, not innerHTML), a __rowMessage template hook, plus the deleting bar / blocked dim / busy spinner that gave multiline-bulk operations their per-row feedback. - Tri-state checkbox select-all header (consumer-driven selectableCount/ onToggle) + per-row onToggle for side effects, restoring the legacy TableHeaderSelectComponent. Framework-level: serves CF bulk ops and k8s. 50 specs pass.
Replace the legacy <app-table> + ITableListDataSource with a signal-list config (static read-only history, toSignal of fetchReleaseHistory, fixed newest-first order). Drops a TableComponent consumer.
Replace <app-table> with <app-signal-list>; reuse the checkbox and connection cells as projected appSignalListCell templates. A refreshTick signal bumps the endpoints array reference after Select All/None so the OnPush cells re-render under zoneless change detection.
Migrate kube-config-selection off the legacy <app-table>/TableComponent (workstream T, T4): - select column -> signal-list `kind: 'checkbox'` with the restored tri-state select-all header + a per-row onToggle that runs the helper validity pass; selection mirrors each cluster's `_selected` flag via selectedKeys, rebuilt in clustersChanged() - name -> inline signal-native edit in the host (drops the legacy TableCellEditComponent dependency) - url -> text; type/user/cert reuse the existing cells as appSignalListCell template cells - per-row validation messages/coloring ride config.rowState = row._state Also restore the file-picker gate: the Angular 20 signal/strict-mode migration rewrote the v4.9.2 `!(clusters$ | async)` as `(clusters$ | async) === false`, which never matches (clusters$ is array|null, filtered to truthy), leaving the picker unreachable so the page could not load a kube config at all. Delete the now-orphaned select + name cell components and drop them from the kubernetes setup module.
Migrate the kube-config import step off the legacy <app-table> (workstream T, T5): - action/description -> signal-list text columns - per-action progress icon -> a `status` template cell rendering <app-action-monitor-icon>, fed a per-row-cached actionState observable (asObservable() mints a fresh stream per call, so cache by action to avoid re-subscribing every change-detection pass) - per-action skip/error messages ride config.rowState = row.state Drop the now-orphaned KubeConfigTableImportStatusComponent wrapper (its cellConfig(row) indirection is no longer needed) and remove it from the kubernetes setup module. The sequential register/connect processing is unchanged.
Migrate the manage-users-modify org-roles table off the legacy <app-table>/TableComponent (workstream T, T4b) — the last <app-table> consumer outside the kubernetes workload list: - org select column reuses the existing app-table-cell-select-org cell as an appSignalListCell template - the four role columns (manager/auditor/billing manager/user) render app-cf-role-checkbox directly, matching the already-migrated space-roles-list-wrapper pattern, instead of going through the TableCellRoleOrgSpaceComponent wrapper - the single-org row + loading feed signal-list via writable signals fed from the existing orgConnect$/isTableLoading$ chains Delete the now-orphaned TableCellRoleOrgSpaceComponent.
norman-abramovitz
approved these changes
May 31, 2026
norman-abramovitz
left a comment
Contributor
There was a problem hiding this comment.
The next step in removing ngrx and replacing with angular signals.
norman-abramovitz
approved these changes
May 31, 2026
norman-abramovitz
left a comment
Contributor
There was a problem hiding this comment.
One more step to eliminating the ngrx code.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Workstream T — migrate the remaining
<app-table>/TableComponentconsumers onto<app-signal-list>Part of the legacy ngrx
list/framework teardown. This branch frees the lightweight<app-table>/ITableListDataSourcetable by migrating its last consumers to the signal-list, and restores per-row functionality that the rewrite had dropped. (The only remaining<app-table>in the tree is the kubernetes workload list, which is workstream K — the heavykubernetes-resource-list<app-list-view>fallback — out of scope here.)Signal-list framework additions (grounded in v4.9.2, restoring dropped UI)
rowState(SignalListConfig.rowState): row coloring (error/warning/info), a structured-segment message sub-row (text/bold/tone/link/break — declarative, noinnerHTML), plusdeleting/blocked/busyaffordances. This is also the per-row feedback layer future bulk operations need.onToggleonkind: 'checkbox'columns (restores the v4.9.2TableHeaderSelectComponent). Framework-level, so both k8s and CF bulk-select consume it.Consumer migrations
appSignalListCelltemplate cells.TableCellEditComponent),rowStatevalidation messages, reused type/user/cert cells. Also fixes a regression: the Angular 20 signal/strict migration rewrote the file-picker gate!(clusters$ | async)as(clusters$ | async) === false, which never matches (clusters$isarray | null), leaving the picker unreachable so the page could not load a kube config.statustemplate cell rendering<app-action-monitor-icon>; per-action error/skip messages riderowState.<app-cf-role-checkbox>directly (matching the already-migrated space-roles list).Cleanup
Deleted now-orphaned cells: app-action-monitor table, kube-config name + select cells, kube-config import-status wrapper, and
TableCellRoleOrgSpaceComponent; pruned the kubernetes setup module.Verification
Full gate green locally: lint (no errors), vitest 2465 passed / 3 skipped / 0 failed, production build succeeds, jetstream Go tests pass. Each migration was validated with a production build before commit.