import * as React from 'react';
import { Circle } from 'better-react-spinkit';
import 'rc-tooltip/assets/bootstrap_white.css';
import { Mutation } from 'cbioportal-ts-api-client';
import {
TableCellStatusIndicator,
TableCellStatus,
} from 'cbioportal-frontend-commons';
import GenomeNexusCache, {
GenomeNexusCacheDataType,
} from 'shared/cache/GenomeNexusCache';
import styles from './exon.module.scss';
export default class ExonColumnFormatter {
public static renderFunction(
data: Mutation[],
genomeNexusCache: GenomeNexusCache | undefined,
showTotalNumberOfExons?: boolean
) {
const genomeNexusCacheData = ExonColumnFormatter.getGenomeNexusDataFromCache(
data,
genomeNexusCache
);
return (
{ExonColumnFormatter.getExonDataViz(
genomeNexusCacheData,
showTotalNumberOfExons
)}
);
}
private static getGenomeNexusDataFromCache(
data: Mutation[],
cache: GenomeNexusCache | undefined
): GenomeNexusCacheDataType | null {
if (data.length === 0 || !cache) {
return null;
}
return cache.get(data[0]);
}
private static getExonDataViz(
genomeNexusCacheData: GenomeNexusCacheDataType | null,
showTotalNumberOfExons?: boolean
) {
let status: TableCellStatus | null = null;
if (genomeNexusCacheData === null) {
status = TableCellStatus.LOADING;
} else if (
genomeNexusCacheData.status === 'error' ||
genomeNexusCacheData.data?.successfully_annotated === false
) {
status = TableCellStatus.ERROR;
} else if (genomeNexusCacheData.data === null) {
status = TableCellStatus.NA;
} else {
let exonData = ExonColumnFormatter.getData(genomeNexusCacheData);
if (exonData == null) {
return exonData;
} else {
return (
{' '}
{exonData.split('/')[0]}{' '}
{showTotalNumberOfExons && (
{' '}
{`/ ${exonData.split('/')[1]}`}{' '}
)}
);
}
}
if (status !== null) {
// show loading circle
if (status === TableCellStatus.LOADING) {
return (
);
} else {
return ;
}
}
}
public static getData(
genomeNexusCache: GenomeNexusCacheDataType | null
): string | null {
let exonData: string | null = null;
if (genomeNexusCache?.data) {
const genomeNexusData = genomeNexusCache.data;
const exon =
genomeNexusData.annotation_summary?.transcriptConsequenceSummary
?.exon;
if (exon) {
exonData = exon;
} else if (genomeNexusData.transcript_consequences) {
const transcriptConsequence = genomeNexusData.transcript_consequences.filter(
x =>
x.transcript_id ===
genomeNexusData.annotation_summary
?.transcriptConsequenceSummary?.transcriptId &&
x.exon
)[0];
exonData = transcriptConsequence?.exon || null;
}
}
return exonData;
}
public static download(
data: Mutation[],
genomeNexusCache: GenomeNexusCache
): string {
const genomeNexusCacheData = ExonColumnFormatter.getGenomeNexusDataFromCache(
data,
genomeNexusCache
);
const exonData =
genomeNexusCacheData &&
ExonColumnFormatter.getData(genomeNexusCacheData);
if (!exonData) {
return '';
} else {
return exonData;
}
}
public static getSortValue(
data: Mutation[],
genomeNexusCache: GenomeNexusCache
): number | null {
const genomeNexusCacheData = ExonColumnFormatter.getGenomeNexusDataFromCache(
data,
genomeNexusCache
);
if (genomeNexusCacheData) {
let exonData = ExonColumnFormatter.getData(genomeNexusCacheData);
if (exonData == null) {
return null;
} else {
return parseInt(exonData.split('/')[0]);
}
} else {
return null;
}
}
}