import * as React from 'react'; import { Mutation } from 'cbioportal-ts-api-client'; import { TooltipDatum } from 'pages/patientView/timeline/VAFChart'; import { VAFReport } from 'shared/lib/MutationUtils'; export enum MutationStatus { MUTATED_WITH_VAF, MUTATED_BUT_NO_VAF, PROFILED_WITH_READS_BUT_UNCALLED, PROFILED_BUT_NOT_MUTATED, NOT_PROFILED, } export function mutationTooltip( mutation: Mutation, sampleSpecificInfo?: TooltipDatum ) { function vafFraction(vafReport: VAFReport) { return `${vafReport.variantReadCount} reads of ${vafReport.totalReadCount} total`; } let sampleSpecificSection: any = null; if (sampleSpecificInfo) { // show tooltip when hovering a point let vafExplanation: string; switch (sampleSpecificInfo.mutationStatus) { case MutationStatus.MUTATED_WITH_VAF: vafExplanation = `VAF: ${sampleSpecificInfo.vafReport!.vaf.toFixed( 2 )} (${vafFraction(sampleSpecificInfo.vafReport!)})`; break; case MutationStatus.MUTATED_BUT_NO_VAF: vafExplanation = `Mutated, but we don't have VAF data.`; break; case MutationStatus.PROFILED_WITH_READS_BUT_UNCALLED: case MutationStatus.PROFILED_BUT_NOT_MUTATED: vafExplanation = `Mutation not detected (VAF: ${( sampleSpecificInfo.vafReport?.vaf || 0 ).toFixed(2)} (${vafFraction(sampleSpecificInfo.vafReport!)}))`; break; case MutationStatus.NOT_PROFILED: default: vafExplanation = `${sampleSpecificInfo.sampleId} is not sequenced for ${mutation.gene.hugoGeneSymbol} mutations.`; break; } sampleSpecificSection = [ Sample ID: {sampleSpecificInfo.sampleId},
, {vafExplanation}, ]; } return (
Gene: {mutation.gene.hugoGeneSymbol}
Protein Change: {mutation.proteinChange}
{sampleSpecificSection}
); }