mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-03 02:26:43 +09:00
Docker's four remaining tabs (Compose, Images, Volumes, Networks) drop their raw <table className="docker-table"> markup and bespoke toolbars for the shape ContainersTab already used. Each gets a distinct viewPageKey AND urlScope, since one route now mounts five tables and a shared scope has them writing each other's ?view=. Views were chosen from what the payload actually carries rather than what would read well: Volumes has no "Unused" view because neither transport reports a reference count, and a Networks "Containers" column was dropped because the agent sends the count and the local service does not — a column that is permanently blank on half your hosts is the exact failure this round exists to stop. Terminal stops hand-rolling two surfaces that already had converged twins in the repo, imported by nothing but the Style Guide: Processes renders ProcessTable, and Services renders serverdetail/ServicesTab, taught to serve the local host as well as a paired agent. This was mostly deletion. Databases: the explorer's tables move onto the shared chrome, losing three raw search inputs, two page-level row counts and their segmented rows. Deployments: the fake table (a header row over <button> rows) becomes a real one, and the target-server <select> becomes the Target column's own menu. Templates keeps its card grid — a catalog is a legitimate place for tiles — but loses the row count, filter-chip row and sort control the shared chrome replaces. FTP and WorkspaceDetail get chrome on tables that had none. components/SearchFilterBar.jsx is deleted: a complete competing search/filter/sort bar with zero importers, confirmed not on the SDK export list. Fixes for regressions the verification pass caught, before they shipped: - Terminal > Processes swapped the whole table out on every `loading` tick. It auto-refreshes on a timer, so the chrome, active view, column rules, sort and scroll position were being unmounted and rebuilt every few seconds. Only the first load swaps now. - The Databases backups pane returned its empty state INSTEAD of the chrome, so a tab with no backups had no Refresh — exactly when you want one, because a backup that just finished is why the list looks empty. - Every open table tab kept its chrome mounted while sharing one urlScope, so four open tables fought over ?dbstruct.view=. Scoped per tab. The process list is namespaced per ENGINE too: `state` reads p.command on MySQL and p.state on PostgreSQL, so one namespace let a MySQL view apply itself to Postgres and match nothing. - The Images size column disagreed with itself: the rule value was base-1000 MB while the cell rendered base-1024, so "Size is over 400 MB" matched a row whose own cell read "392.9 MB". - Deployments' server filter used to reach the whole history through ?server_id=; as a column rule it only reaches what was fetched. The window is explicit now — a full page offers Load more instead of quietly filtering a truncated list. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>