Redesigned view for carves and queries#880
Merged
Merged
Conversation
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.
Summary
Reworks the carve detail and query detail views in the SPA to surface more of the data the backend already returns and to give operators explicit refresh control. Frontend-only; no API or storage changes.
Carve detail (
CarveDetailPage)carve_size), Blocks (completed/total + %), and Max block size (max(f.block_size)across the carve's files). An operator can read the carve's state at a glance instead of scanning rows.Block sizecolumn was removed (block size is a per-carve value); it now lives once as Max block size in the summary. The table is wrapped in anoverflow-x-autocontainer with amin-wso it fills the available width and scrolls only when genuinely narrow. Columns: Node · Path · Status · Size · Blocks · Completed · Archived · Download.neverfor a no-expiration carve.Query detail (
QueryDetailPage)qc.invalidateQueries()with no key, refetching every active query on the page (query, results, queries list, and any other live data) so an operator watching a query land gets a fully fresh view.neverfor the zero/0001case (timestamp in the tooltip). The set side was already correct (run page sendsexp_hours; backend maps0 → time.Time{}and otherwisenow + hours), so only the display changed.Behavior / risk notes
Max block sizeis derived client-side from the existingCarveFile.block_sizefield — no new API field.Validation
tsc --noEmitclean.CarveDetailPage.test.tsxcases: the Refresh button reloads the carve; a 2-file carve renders the summary band (Files / Total size / Blocks / Max block size), theExpires: neverheader, and the new Path / Archived columns. Passes.QueryDetailPage.test.tsxcases: the Refresh button reloads both the query and its results (refresh everything); a no-expiration query showsExpires: never. Passes.LoginPage/ProfilePageones (jsdomlocalStorage), unchanged by this PR.Files
frontend/src/features/carves/CarveDetailPage.tsx— summary band, expanded table, Expires header, refresh button.frontend/src/features/carves/CarveDetailPage.test.tsx— summary/columns/expiration + refresh tests.frontend/src/features/queries/QueryDetailPage.tsx— refresh-everything, always-visible expiration.frontend/src/features/queries/QueryDetailPage.test.tsx— refresh + expiration tests.