import * as React from 'react'; import _ from 'lodash'; import LazyMobXTable, { Column, } from '../../../shared/components/lazyMobXTable/LazyMobXTable'; import { observer } from 'mobx-react'; import { computed, makeObservable } from 'mobx'; import { Checkbox } from 'react-bootstrap'; import { toConditionalPrecisionWithMinimum } from 'shared/lib/FormatUtils'; import { toConditionalPrecision } from 'shared/lib/NumberUtils'; import styles from './styles.module.scss'; import { cytobandFilter } from 'pages/resultsView/ResultsViewTableUtils'; import autobind from 'autobind-decorator'; import { EnrichmentsTableDataStore } from 'pages/resultsView/enrichments/EnrichmentsTableDataStore'; import { AlterationEnrichmentRow } from 'shared/model/AlterationEnrichmentRow'; import { CNA_COLOR_AMP, CNA_COLOR_HOMDEL } from 'cbioportal-frontend-commons'; export interface IAlterationEnrichmentTableProps { visibleOrderedColumnNames?: string[]; customColumns?: { [id: string]: AlterationEnrichmentTableColumn }; data: AlterationEnrichmentRow[]; initialSortColumn?: string; dataStore: EnrichmentsTableDataStore; onCheckGene?: (hugoGeneSymbol: string) => void; onGeneNameClick?: (hugoGeneSymbol: string) => void; checkedGenes?: string[]; } export enum AlterationEnrichmentTableColumnType { GENE = 'GENE', CYTOBAND = 'CYTOBAND', ALTERATION = 'ALTERATION', P_VALUE = 'P_VALUE', Q_VALUE = 'Q_VALUE', LOG_RATIO = 'Log2 Ratio', TENDENCY = 'Tendency', ENRICHED = 'Enriched in', MOST_ENRICHED = 'Most enriched in', } const cnaToAlteration: { [cna: number]: string } = { '2': 'Amp', '-2': 'DeepDel', }; export type AlterationEnrichmentTableColumn = Column< AlterationEnrichmentRow > & { order?: number }; @observer export default class AlterationEnrichmentTable extends React.Component< IAlterationEnrichmentTableProps, {} > { constructor(props: IAlterationEnrichmentTableProps) { super(props); makeObservable(this); } public static defaultProps = { columns: [ AlterationEnrichmentTableColumnType.GENE, AlterationEnrichmentTableColumnType.CYTOBAND, AlterationEnrichmentTableColumnType.P_VALUE, AlterationEnrichmentTableColumnType.Q_VALUE, ], initialSortColumn: 'q-Value', }; private checkboxChange(hugoGeneSymbol: string) { const row: AlterationEnrichmentRow = _.find(this.props.data, { hugoGeneSymbol, })!; row.checked = !row.checked; this.props.onCheckGene!(hugoGeneSymbol); } @autobind private onRowClick(d: AlterationEnrichmentRow) { this.props.onGeneNameClick!(d.hugoGeneSymbol); this.props.dataStore.setHighlighted(d); } @computed get columns(): { [columnEnum: string]: AlterationEnrichmentTableColumn; } { const columns: { [columnEnum: string]: AlterationEnrichmentTableColumn; } = this.props.customColumns || {}; columns[AlterationEnrichmentTableColumnType.GENE] = { name: 'Gene', render: (d: AlterationEnrichmentRow) => (