import { Mutation } from 'cbioportal-utils'; import _ from 'lodash'; import * as React from 'react'; import ColumnHeader from '../column/ColumnHeader'; import { Column } from 'react-table'; import ProteinChange, { proteinChangeSortMethod, } from '../column/ProteinChange'; import { annotationSortMethod } from '../column/Annotation'; import { gnomadSortMethod } from '../column/Gnomad'; import { clinvarSortMethod } from '../column/ClinvarInterpretation'; import MutationType from '../column/MutationType'; import { MutationStatus } from '../column/MutationStatus'; import { dbsnpSortMethod } from '../column/Dbsnp'; import { hgvscSortMethod } from '../column/Hgvsc'; import { hgvsgSortMethod } from '../column/Hgvsg'; import { signalSortMethod } from '../column/Signal'; export enum MutationColumn { PROTEIN_CHANGE = 'proteinChange', ANNOTATION = 'annotation', MUTATION_STATUS = 'mutationStatus', MUTATION_TYPE = 'mutationType', CHROMOSOME = 'chromosome', START_POSITION = 'startPosition', END_POSITION = 'endPosition', REFERENCE_ALLELE = 'referenceAllele', VARIANT_ALLELE = 'variantAllele', HGVSG = 'hgvsg', HGVSC = 'hgvsc', GNOMAD = 'gnomad', CLINVAR = 'clinvar', DBSNP = 'dbsnp', SIGNAL = 'signal', } export enum MutationColumnName { PROTEIN_CHANGE = 'Protein Change', ANNOTATION = 'Annotation', MUTATION_STATUS = 'Mutation Status', MUTATION_TYPE = 'Mutation Type', CHROMOSOME = 'Chromosome', START_POSITION = 'Start Pos', END_POSITION = 'End Pos', REFERENCE_ALLELE = 'Ref', VARIANT_ALLELE = 'Var', HGVSG = 'HGVSg', HGVSC = 'HGVSc', GNOMAD = 'gnomAD', CLINVAR = 'ClinVar', DBSNP = 'dbSNP', SIGNAL = 'SIGNAL', } export function rightAlignedCell(cellProps: any) { return {cellProps.value}; } export const MUTATION_COLUMN_HEADERS = { [MutationColumn.PROTEIN_CHANGE]: ( {MutationColumnName.PROTEIN_CHANGE} } /> ), [MutationColumn.ANNOTATION]: ( {MutationColumnName.ANNOTATION} } /> ), [MutationColumn.MUTATION_STATUS]: ( {MutationColumnName.MUTATION_STATUS} } /> ), [MutationColumn.MUTATION_TYPE]: ( {MutationColumnName.MUTATION_TYPE} } /> ), [MutationColumn.CHROMOSOME]: ( {MutationColumnName.CHROMOSOME} } /> ), [MutationColumn.START_POSITION]: ( {MutationColumnName.START_POSITION} } /> ), [MutationColumn.END_POSITION]: ( {MutationColumnName.END_POSITION} } /> ), [MutationColumn.REFERENCE_ALLELE]: ( {MutationColumnName.REFERENCE_ALLELE} } overlay={Reference Allele} /> ), [MutationColumn.VARIANT_ALLELE]: ( {MutationColumnName.VARIANT_ALLELE} } overlay={Variant Allele} /> ), [MutationColumn.HGVSG]: ( {MutationColumnName.HGVSG} } /> ), [MutationColumn.HGVSC]: ( {MutationColumnName.HGVSC} } /> ), [MutationColumn.GNOMAD]: ( {MutationColumnName.GNOMAD}{' '} } overlay={ gnomAD {' '} population allele frequencies. Overall population allele frequency is shown. Hover over a frequency to see the frequency for each specific population. } /> ), [MutationColumn.CLINVAR]: ( {MutationColumnName.CLINVAR}{' '} } overlay={ ClinVar {' '} aggregates information about genomic variation and its relationship to human health. } /> ), [MutationColumn.DBSNP]: ( {MutationColumnName.DBSNP}{' '} } overlay={ The Single Nucleotide Polymorphism Database ( dbSNP ) is a free public archive for genetic variation within and across different species.
NOTE: Currently only SNPs, single base deletions and insertions are supported.
} /> ), [MutationColumn.SIGNAL]: ( {MutationColumnName.SIGNAL}{' '} } overlay={ Prevalence of germline mutations in cancer patients from{' '} SIGNAL } /> ), }; /** * These default columns only include static props. * So, for some columns, like Annotation, no default accessor or Cell (render) properties included. */ export const MUTATION_COLUMNS_DEFINITION = { [MutationColumn.PROTEIN_CHANGE]: { id: MutationColumn.PROTEIN_CHANGE, name: MutationColumnName.PROTEIN_CHANGE, accessor: MutationColumn.PROTEIN_CHANGE, searchable: true, Cell: (column: any) => , Header: MUTATION_COLUMN_HEADERS[MutationColumn.PROTEIN_CHANGE], sortMethod: proteinChangeSortMethod, }, [MutationColumn.ANNOTATION]: { id: MutationColumn.ANNOTATION, name: MutationColumnName.ANNOTATION, Header: MUTATION_COLUMN_HEADERS[MutationColumn.ANNOTATION], sortMethod: annotationSortMethod, }, [MutationColumn.MUTATION_TYPE]: { id: MutationColumn.MUTATION_TYPE, name: MutationColumnName.MUTATION_TYPE, accessor: MutationColumn.MUTATION_TYPE, searchable: true, Cell: (column: any) => , Header: MUTATION_COLUMN_HEADERS[MutationColumn.MUTATION_TYPE], }, [MutationColumn.MUTATION_STATUS]: { id: MutationColumn.MUTATION_STATUS, name: MutationColumnName.MUTATION_STATUS, accessor: MutationColumn.MUTATION_STATUS, searchable: true, Cell: (column: any) => , Header: MUTATION_COLUMN_HEADERS[MutationColumn.MUTATION_STATUS], }, [MutationColumn.CHROMOSOME]: { id: MutationColumn.CHROMOSOME, name: MutationColumnName.CHROMOSOME, accessor: MutationColumn.CHROMOSOME, searchable: true, Cell: rightAlignedCell, Header: MUTATION_COLUMN_HEADERS[MutationColumn.CHROMOSOME], show: false, }, [MutationColumn.START_POSITION]: { id: MutationColumn.START_POSITION, name: MutationColumnName.START_POSITION, accessor: MutationColumn.START_POSITION, searchable: true, Cell: rightAlignedCell, Header: MUTATION_COLUMN_HEADERS[MutationColumn.START_POSITION], show: false, }, [MutationColumn.END_POSITION]: { id: MutationColumn.END_POSITION, name: MutationColumnName.END_POSITION, accessor: MutationColumn.END_POSITION, searchable: true, Cell: rightAlignedCell, Header: MUTATION_COLUMN_HEADERS[MutationColumn.END_POSITION], show: false, }, [MutationColumn.REFERENCE_ALLELE]: { id: MutationColumn.REFERENCE_ALLELE, name: MutationColumnName.REFERENCE_ALLELE, accessor: MutationColumn.REFERENCE_ALLELE, searchable: true, Header: MUTATION_COLUMN_HEADERS[MutationColumn.REFERENCE_ALLELE], show: false, }, [MutationColumn.VARIANT_ALLELE]: { id: MutationColumn.VARIANT_ALLELE, name: MutationColumnName.VARIANT_ALLELE, accessor: MutationColumn.VARIANT_ALLELE, searchable: true, Header: MUTATION_COLUMN_HEADERS[MutationColumn.VARIANT_ALLELE], show: false, }, [MutationColumn.HGVSG]: { id: MutationColumn.HGVSG, name: MutationColumnName.HGVSG, Header: MUTATION_COLUMN_HEADERS[MutationColumn.HGVSG], sortMethod: hgvsgSortMethod, }, [MutationColumn.HGVSC]: { id: MutationColumn.HGVSC, name: MutationColumnName.HGVSC, Header: MUTATION_COLUMN_HEADERS[MutationColumn.HGVSC], sortMethod: hgvscSortMethod, }, [MutationColumn.GNOMAD]: { id: MutationColumn.GNOMAD, name: MutationColumnName.GNOMAD, Header: MUTATION_COLUMN_HEADERS[MutationColumn.GNOMAD], sortMethod: gnomadSortMethod, }, [MutationColumn.CLINVAR]: { id: MutationColumn.CLINVAR, name: MutationColumnName.CLINVAR, Header: MUTATION_COLUMN_HEADERS[MutationColumn.CLINVAR], sortMethod: clinvarSortMethod, show: false, }, [MutationColumn.DBSNP]: { id: MutationColumn.DBSNP, name: MutationColumnName.DBSNP, Header: MUTATION_COLUMN_HEADERS[MutationColumn.DBSNP], sortMethod: dbsnpSortMethod, show: false, }, [MutationColumn.SIGNAL]: { id: MutationColumn.SIGNAL, name: MutationColumnName.SIGNAL, Header: MUTATION_COLUMN_HEADERS[MutationColumn.SIGNAL], sortMethod: signalSortMethod, show: false, }, }; export const DEFAULT_MUTATION_COLUMNS = [ MUTATION_COLUMNS_DEFINITION[MutationColumn.PROTEIN_CHANGE], MUTATION_COLUMNS_DEFINITION[MutationColumn.MUTATION_TYPE], MUTATION_COLUMNS_DEFINITION[MutationColumn.MUTATION_STATUS], MUTATION_COLUMNS_DEFINITION[MutationColumn.CHROMOSOME], MUTATION_COLUMNS_DEFINITION[MutationColumn.START_POSITION], MUTATION_COLUMNS_DEFINITION[MutationColumn.END_POSITION], MUTATION_COLUMNS_DEFINITION[MutationColumn.REFERENCE_ALLELE], MUTATION_COLUMNS_DEFINITION[MutationColumn.VARIANT_ALLELE], MUTATION_COLUMNS_DEFINITION[MutationColumn.HGVSG], MUTATION_COLUMNS_DEFINITION[MutationColumn.HGVSC], MUTATION_COLUMNS_DEFINITION[MutationColumn.CLINVAR], MUTATION_COLUMNS_DEFINITION[MutationColumn.GNOMAD], MUTATION_COLUMNS_DEFINITION[MutationColumn.DBSNP], MUTATION_COLUMNS_DEFINITION[MutationColumn.SIGNAL], ]; export function mergeColumns( defaultColumns: Column>[], customColumns: Column>[] ) { const merged: Column>[] = []; const overrides: Column>[] = []; defaultColumns.forEach(column => { const colOverride = customColumns.find(c => c.id === column.id); merged.push(colOverride || column); if (colOverride) { overrides.push(colOverride); } }); return [...merged, ..._.difference(customColumns, overrides)]; }