Add qPCR + TapeStation support, table-pending transitions, and run files/report refinements - #34
Merged
Merged
Conversation
…d" files to be reprocessed
Introduces a shared TablePendingProvider + TablePendingBoundary pair that ties every shallow:false nuqs write (pagination, toolbars, per-column filters) into a React transition. While the RSC refetch is in flight the stale table dims to 60%, blocks pointer events, and shows a thin sliding indeterminate bar; pagination controls disable themselves instantly to prevent queued double-clicks. A 120ms delay before the visible treatment appears keeps fast fetches from flickering. Applied to the dashboard runs table, per-instrument runs tables (incl. column filter dropdowns), and the watcher event log.
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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
This branch adds first-class support for two new instrument types (qPCR and TapeStation), introduces a shared "stale table" pending treatment that ties every server-side query-string change to a React transition, and delivers a batch of run-detail / run-files / report-section refinements.
Changes
qPCR + TapeStation instrument support
web-app/drizzle/0006_qpcr_tape_station.sqlextendinginstrument_typewithqpcrandtape_station, with matching enum +VALID_INSTRUMENT_TYPESentries inweb-app/lib/db/schema.ts.web-app/components/runs/variants/qpcr-run-detail.tsxandtape-station-run-detail.tsx, wired into the variant dispatcher inweb-app/components/runs/variants/index.tsx.web-app/components/instruments/runs-table/qpcr-runs-table.tsxwith a filterable "Dye Channels" column backed bygetQpcrFilterOptionsanddye_channelsearch param (web-app/lib/api/instrument-runs.ts,web-app/lib/search-params.ts,filterable-column-header.tsx).hasQpcrMetadata/hasTapeStationMetadatahelpers inweb-app/components/runs/run-metadata-badges.tsx; dye-channel color helper inweb-app/lib/instrument-colors.ts.qpcr/tape_stationinweb-app/components/instruments/edit-instrument-dialog.tsx.Table pending / stale treatment
web-app/components/table-pending.tsxexportingTablePendingProvider,TablePendingBoundary, anduseTablePending. Provides a React transition that siblinguseQueryState(s)calls hook into viastartTransition, with a 120 ms delay before any visible change to avoid flicker on fast fetches.app/page.tsx+dashboard/runs-toolbar.tsx), per-instrument runs (app/instruments/[instrumentId]/page.tsx+instrument-runs-toolbar.tsx+filterable-column-header.tsx), and the watcher event log (watcher-detail-tabs.tsx+event-log-toolbar.tsx+event-log.tsx).pagination-nav.tsxnow reads the pending state, dims to 60% opacity, blocks pointer events, and setsaria-busywhile the RSC payload streams in;Prev/Nextdisable themselves instantly to prevent queued double-clicks.@keyframes table-pending-slideinweb-app/app/globals.cssdrives the thin sliding indeterminate bar.Run files table
web-app/components/runs/run-files-table.tsx(status badge logic, selection column, row actions).run-files-section.tsxnow owns only state + handlers.completedfiles to be reprocessed (previously onlyfailed); reprocess action now gates onREPROCESSABLE_STATUSES = { completed, failed }.Run report section
run-report-section.tsxnow renders PDFs (by content type or.pdfextension) in an inline<iframe>alongside processed images, so qPCR / TapeStation exports render in-page. Count label updated toN file(s).web-app/components/runs/report-data-table.tsx.File size fix for processed artifacts
lambda/src/data_hub_lambda/azure_600_gel_doc/process_file.pyandspectramax_plate_reader/process_file.pynow passsize_bytes=...stat().st_sizewhen recording processed outputs, so the Total Size column accounts for derived PNG / CSV files.Misc UX
RunMetadatanow returnsnullinstead of the "No metadata recorded yet" placeholder, cleaning up run-detail pages when there is nothing to show.Breaking changes
0006_qpcr_tape_stationmust be applied before deploy; it adds two values to theinstrument_typeenum. No existing data is altered.Driveby changes
chore: Run formatter,4fed033).pagination-nav.tsx(atPrev/atNextlocals, collapsed duplicatedclassNameternaries).InstrumentRunsTable/ dispatcher updated to acceptqpcrFilterOptionsalongside the existing plate-reader / gel-doc options.qpcrandtape_station.Testing
0006_qpcr_tape_station.sqlin a clean staging DB; confirm theinstrument_typeenum now includesqpcrandtape_station.QpcrRunsTablewith a populated "Dye Channels" column; verify the column dropdown filter round-trips via?dye_channel=....completedfile from the files table; verify the action is offered (was previously hidden) and existing report data is cleared.