diff --git a/browser/src/ClinvarVariantsTrack/clinvarVariantCategories.ts b/browser/src/ClinvarVariantsTrack/clinvarVariantCategories.ts index 868d29278..7e872b280 100644 --- a/browser/src/ClinvarVariantsTrack/clinvarVariantCategories.ts +++ b/browser/src/ClinvarVariantsTrack/clinvarVariantCategories.ts @@ -16,7 +16,7 @@ const CLINICAL_SIGNIFICANCE_GROUPS = { 'Conflicting classifications of pathogenicity', 'conflicting data from submitters', ]), - benign: new Set(['Benign', 'Likely benign', 'Benign/Likely benign']), + benign: new Set(['Likely benign', 'Benign/Likely benign', 'Benign']), other: new Set([ 'other', 'drug response', @@ -29,6 +29,22 @@ const CLINICAL_SIGNIFICANCE_GROUPS = { ]), } as const +const buildPriorityMapping = () => { + const mapping: { [key: string]: number } = {} + let priority = 1 + + for (const category of CLINICAL_SIGNIFICANCE_CATEGORIES) { + const group = CLINICAL_SIGNIFICANCE_GROUPS[category as ClinicalSignificance] + for (const significance of group) { + mapping[significance] = priority++ + } + } + + return mapping +} + +export const CLINICAL_SIGNIFICANCE_SORT_PRIORITY = buildPriorityMapping() + export type ClinicalSignificance = keyof typeof CLINICAL_SIGNIFICANCE_GROUPS export const clinvarVariantClinicalSignificanceCategory = (variant: any) => { diff --git a/browser/src/VariantList/sortUtilities.ts b/browser/src/VariantList/sortUtilities.ts index 4de3bad96..07c72a328 100644 --- a/browser/src/VariantList/sortUtilities.ts +++ b/browser/src/VariantList/sortUtilities.ts @@ -1,3 +1,5 @@ +import { CLINICAL_SIGNIFICANCE_SORT_PRIORITY } from '../ClinvarVariantsTrack/clinvarVariantCategories' + export const isEmpty = (val: any) => val === undefined || val === null || val === '' export const makeCompareFunction = @@ -29,3 +31,11 @@ export const makeStringCompareFunction = (key: any) => export const makeNumericCompareFunction = (key: any) => makeCompareFunction(key, (v1: any, v2: any) => v1 - v2) + +export const makeClinvarCompareFunction = (key: any) => + makeCompareFunction(key, (v1: string, v2: string) => { + return ( + (CLINICAL_SIGNIFICANCE_SORT_PRIORITY[v1] ?? 999) - + (CLINICAL_SIGNIFICANCE_SORT_PRIORITY[v2] ?? 999) + ) + }) diff --git a/browser/src/VariantList/variantTableColumns.tsx b/browser/src/VariantList/variantTableColumns.tsx index f1cad47ea..df1ee7a64 100644 --- a/browser/src/VariantList/variantTableColumns.tsx +++ b/browser/src/VariantList/variantTableColumns.tsx @@ -8,6 +8,7 @@ import { Cell, NumericCell, renderAlleleCountCell, renderAlleleFrequencyCell } f import { getCategoryFromConsequence, getLabelForConsequenceTerm } from '../vepConsequences' import SampleSourceIcon from './SampleSourceIcon' import { + makeClinvarCompareFunction, makeCompareFunction, makeNumericCompareFunction, makeStringCompareFunction, @@ -126,7 +127,7 @@ const variantTableColumns: VariantTableColumn[] = [ description: 'ClinVar clinical significance', grow: 1, minWidth: 150, - compareFunction: makeStringCompareFunction('clinical_significance'), + compareFunction: makeClinvarCompareFunction('clinical_significance'), getSearchTerms: (variant: any) => variant.clinical_significance, render: (variant: any, _: any, { highlightWords }: any) => (