Summary
The MaveMD scoreset table on the landing page (SearchVariantsScreen.vue) was designed when the collection was smaller. At 80+ score sets it is hard to navigate and does not surface the information users need to identify relevant datasets. This issue proposes four targeted improvements: a gene filter, merged score set + publication column, a clearer ACMG calibration status indicator, and a variant count column.
Problem
-
No way to navigate to a gene of interest. The table groups score sets by gene (via maveMdScoreSetsGroupedByGene) but provides no filter or search — users must scroll through all gene groups to find the one they care about.
-
Publication column links to the wrong destination. The Publication column renders a citation shortname (getScoreSetShortName) but routes to the scoreSet detail page — the same destination as the Score Set column. It should link to the external publication (DOI or PubMed).
-
Calibrations badge is uninterpretable. The X / Y badge (calibrations with ACMG evidence / total calibrations) is opaque to users unfamiliar with the data model. There is no label, tooltip, or legend.
-
No signal of dataset size. numVariants is available on every ScoreSet object but is not shown. This is a meaningful indicator of dataset quality and scope.
Proposed Behavior
1. Gene typeahead filter
Add a text input above the table that filters maveMdScoreSetsGroupedByGene to gene groups whose name matches the input (case-insensitive substring or prefix match). Clearing the input restores the full list. The existing computed property provides the data; only a reactive filter predicate and an input element are needed.
2. Merge Score Set + Publication into a single card-style column
Replace the two separate columns with one column that renders:
- Line 1: Score set title as a
router-link to the scoreSet route (same as today).
- Line 2: Citation shortname (
getScoreSetShortName) as a smaller, muted external link to the publication. Resolve the URL from primaryPublicationIdentifiers[0] — prefer a DOI link if identifier and dbName indicate a DOI, otherwise fall back to a PubMed URL using the identifier. If no publication identifier is available, render the citation as plain text.
This also fixes the existing bug where the Publication column links to the scoreset page.
3. ACMG calibration status indicator
Replace the X / Y badge with a labeled status derived from calibrationCountWithEvidence and calibrationCountTotal:
| Condition |
Label |
Style suggestion |
total === 0 |
None |
Gray / muted |
withEvidence === 0 && total > 0 |
Uncalibrated |
Gray / muted |
withEvidence > 0 && withEvidence < total |
Partial |
Yellow / warning |
withEvidence === total && total > 0 |
Fully calibrated |
Green / success |
The indicator should remain a router-link to the scoreSetCalibrations route. A v-tooltip (using the existing PrimeVue directive pattern already used in CalibrationTable.vue) on the indicator or its column header should explain what the status means.
4. Variant count column
Add a Variants column displaying scoreSet.numVariants formatted with a thousands separator. This gives users a quick sense of dataset size without navigating to the scoreset page.
Acceptance Criteria
Implementation Notes
- All required data (
numVariants, primaryPublicationIdentifiers, scoreCalibrations) is already present on the ScoreSet objects populated by fetchMaveMdScoreSets. No backend changes are needed.
- The gene filter should operate on
maveMdScoreSetsGroupedByGene (already computed); add a filterGene reactive string and filter the grouped map before rendering.
- Publication URL resolution logic belongs in
src/lib/score-sets.ts alongside the existing getScoreSetShortName helper. A function getPublicationUrl(scoreSet: ScoreSet): string | null that checks dbName and constructs the appropriate external URL keeps the template clean.
- The calibration status derivation can live in a small helper alongside
calibrationCountWithEvidence and calibrationCountTotal, or be inlined as a computed in the component — either is fine given the logic is simple.
- Use the
v-tooltip PrimeVue directive for the calibration tooltip; the pattern is established in CalibrationTable.vue.
- The gene filter input should use the same styling as other search inputs in the application to remain visually consistent.
Summary
The MaveMD scoreset table on the landing page (
SearchVariantsScreen.vue) was designed when the collection was smaller. At 80+ score sets it is hard to navigate and does not surface the information users need to identify relevant datasets. This issue proposes four targeted improvements: a gene filter, merged score set + publication column, a clearer ACMG calibration status indicator, and a variant count column.Problem
No way to navigate to a gene of interest. The table groups score sets by gene (via
maveMdScoreSetsGroupedByGene) but provides no filter or search — users must scroll through all gene groups to find the one they care about.Publication column links to the wrong destination. The Publication column renders a citation shortname (
getScoreSetShortName) but routes to thescoreSetdetail page — the same destination as the Score Set column. It should link to the external publication (DOI or PubMed).Calibrations badge is uninterpretable. The
X / Ybadge (calibrations with ACMG evidence / total calibrations) is opaque to users unfamiliar with the data model. There is no label, tooltip, or legend.No signal of dataset size.
numVariantsis available on everyScoreSetobject but is not shown. This is a meaningful indicator of dataset quality and scope.Proposed Behavior
1. Gene typeahead filter
Add a text input above the table that filters
maveMdScoreSetsGroupedByGeneto gene groups whose name matches the input (case-insensitive substring or prefix match). Clearing the input restores the full list. The existing computed property provides the data; only a reactive filter predicate and an input element are needed.2. Merge Score Set + Publication into a single card-style column
Replace the two separate columns with one column that renders:
router-linkto thescoreSetroute (same as today).getScoreSetShortName) as a smaller, muted external link to the publication. Resolve the URL fromprimaryPublicationIdentifiers[0]— prefer a DOI link ifidentifieranddbNameindicate a DOI, otherwise fall back to a PubMed URL using the identifier. If no publication identifier is available, render the citation as plain text.This also fixes the existing bug where the Publication column links to the scoreset page.
3. ACMG calibration status indicator
Replace the
X / Ybadge with a labeled status derived fromcalibrationCountWithEvidenceandcalibrationCountTotal:total === 0withEvidence === 0 && total > 0withEvidence > 0 && withEvidence < totalwithEvidence === total && total > 0The indicator should remain a
router-linkto thescoreSetCalibrationsroute. Av-tooltip(using the existing PrimeVue directive pattern already used inCalibrationTable.vue) on the indicator or its column header should explain what the status means.4. Variant count column
Add a
Variantscolumn displayingscoreSet.numVariantsformatted with a thousands separator. This gives users a quick sense of dataset size without navigating to the scoreset page.Acceptance Criteria
scoreSetroute.primaryPublicationIdentifiers; rows with no publication identifier render the citation as plain text.X / Ybadge.scoreSetCalibrationsroute.numVariantsfor each score set, formatted with a thousands separator.SearchVariantsScreen.vueand its imported helpers; no new API calls are required.Implementation Notes
numVariants,primaryPublicationIdentifiers,scoreCalibrations) is already present on theScoreSetobjects populated byfetchMaveMdScoreSets. No backend changes are needed.maveMdScoreSetsGroupedByGene(already computed); add afilterGenereactive string and filter the grouped map before rendering.src/lib/score-sets.tsalongside the existinggetScoreSetShortNamehelper. A functiongetPublicationUrl(scoreSet: ScoreSet): string | nullthat checksdbNameand constructs the appropriate external URL keeps the template clean.calibrationCountWithEvidenceandcalibrationCountTotal, or be inlined as a computed in the component — either is fine given the logic is simple.v-tooltipPrimeVue directive for the calibration tooltip; the pattern is established inCalibrationTable.vue.