Skip to content

Explore: checkbox lists with an apply button, virtualized rows, portal-style gene tables - #77

Merged
alisman merged 1 commit into
masterfrom
session/explore
Oct 27, 2026
Merged

alisman merged 1 commit into
masterfrom
session/explore

Conversation

@alisman

@alisman alisman commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

What

Explore's lists now work the way the cBioPortal study view's do.

  • Checkboxes and an apply button on every list: clinical value lists, generic-assay values, a gene's states, timeline events, case lists, data types, the study breakdown and the three gene tables. The checked rows of one list become one filter (an OR) when you press the button in the bar under the list.

  • No wrapping: row text is cut off with "…" instead.

  • Virtualized: only the rows in view are mounted (@tanstack/react-virtual), so long lists scroll cheaply.

  • Split only by checked rows: a list's chart menu offers "Split by checked (n)", greyed out until something is checked. Arms follow the order the rows were checked in. Pies and histograms keep "Split by this".

  • Gene tables: the bars are gone and only the portal's columns are shown, under a header that stays put while the list scrolls. Each table is one tile wide.

    • Mutated: Gene · # Mut · # · Freq
    • CNA: Gene · Cytoband · CNA · # · Freq
    • SV: Gene · # SV · # · Freq

    "#" counts every altered sample, as on the portal; its tooltip says how many come from off-panel calls. Freq's tooltip gives altered ÷ profiled for that gene.

  • List tiles fill the height their grid row gives them.

  • Form controls (checkbox, radio, input, select, textarea) have a darker border colour, --control-line, so an unchecked box no longer looks disabled.

lib/partition-arms.ts gains armsFromItems. The split's starting cohort drops only the chart's own filter, and for an assay chart only that one entity's. More than 8 arms is refused. There are unit tests for all three in test/cohort-partitions.test.ts.

Verification

  • Checked in the browser on msk_chord_2024 and genie_public:
    • Checking TP53 and KRAS applies TP53: MUT; KRAS: MUT.
    • Checking two cancer types applies one CANCER_TYPE ∈ {…} filter.
    • Split by checked builds the arms in the order the rows were checked.
    • Every row of each gene table shares one column layout and fits a 329px tile.
  • Type check and eslint pass on the changed files.
  • Not run locally: the full gate (scripts/gate.sh). I stopped it partway and am relying on CI for it.

Preview

🤖 Generated with Claude Code

https://claude.ai/code/session_015r2Q6P7ZAZY2nYM5sZmwUP

@vercel

vercel Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cbiolab-genie Ready Ready Preview Oct 27, 2026 12:18am UTC
cohort-lab Ready Ready Preview Oct 27, 2026 12:18am UTC

Request Review

…le gene tables

Every list on Explore (clinical value lists, generic-assay values, a gene's
states, timeline events, case lists, data types, the study breakdown and the
three gene tables) now works the portal study view's way: rows carry
checkboxes, and the checked rows of one list are applied together as one
filter (an OR) from a bar under the list. Rows never wrap, and only the rows
in view are mounted (@tanstack/react-virtual), so a 500-gene table or a
thousands-value facet scrolls cheaply.

A list's chart menu splits only by its checked rows ("Split by checked (n)",
disabled until something is checked); arms keep the order rows were checked
in. lib/partition-arms.ts gains armsFromItems (parent drops the chart's own
filter; an assay chart drops only its own entity; more than 8 arms refused).

Gene tables show the portal's columns only (Gene, # Mut / # SV, #, Freq;
CNA: Gene, Cytoband, CNA, #, Freq) under a sticky header, one tile wide; "#"
counts every altered sample and its tooltip names off-panel calls, Freq's
tooltip gives altered / profiled. A tile whose body is a list fills the
height its grid row gives it. Form controls (checkbox, radio, input, select,
textarea) get a darker border token, --control-line, so an unchecked box no
longer reads as disabled.

Verified in the browser on msk_chord_2024 and genie_public: TP53 + KRAS
applies "TP53: MUT; KRAS: MUT"; two cancer types give one CANCER_TYPE in {...}
filter; split-by-checked builds arms in checked order; every row of each gene
table shares one column layout and fits a single tile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015r2Q6P7ZAZY2nYM5sZmwUP
@alisman
alisman merged commit 7d203c1 into master Oct 27, 2026
10 checks passed

This branch was successfully deployed

1 active deployment
Preview – cohort-lab — 2717cd22 Deployed Oct 27, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant