Skip to content

Commit c9b415a

Browse files
Merge pull request #602 from bcgsc/develop
Update release 7.0.0 branch with DEVSU-2544
2 parents c1f039e + 5975902 commit c9b415a

File tree

10 files changed

+230
-238
lines changed

10 files changed

+230
-238
lines changed

app/common.d.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ type GeneType = {
144144
tumourSuppressor: boolean;
145145
};
146146

147-
type AnyVariantType = 'cnv' | 'mut' | 'sv' | 'exp' | 'msi' | 'tmb';
147+
type AnyVariantType = 'cnv' | 'mut' | 'sv' | 'exp' | 'msi' | 'tmb' | 'sigv';
148148

149149
type VariantTypeMap<T extends AnyVariantType> = {
150150
'cnv': CopyNumberType;
@@ -153,6 +153,7 @@ type VariantTypeMap<T extends AnyVariantType> = {
153153
'exp': ExpOutliersType;
154154
'msi': MsiType;
155155
'tmb': TmburType;
156+
'sigv': SignatureVariantType;
156157
}[T];
157158

158159
type KbMatchType<T extends AnyVariantType = AnyVariantType> = {
@@ -331,6 +332,13 @@ type MsiType = {
331332
variantType: 'msi';
332333
} & RecordDefaults;
333334

335+
type SignatureVariantType = {
336+
displayName: string | null;
337+
signatureName: string | null;
338+
variantTypeName: string | null;
339+
variantType: 'sigv';
340+
} & RecordDefaults;
341+
334342
type TemplateType = {
335343
name: string;
336344
headerImage: ImageType;
@@ -402,6 +410,7 @@ export {
402410
TumourSummaryType,
403411
TmburType,
404412
MsiType,
413+
SignatureVariantType,
405414
MutationBurdenType,
406415
ImmuneType,
407416
MicrobialType,

app/components/Sidebar/index.tsx

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ const Sidebar = (): JSX.Element => {
279279
</Link>
280280
</ListItem>
281281
<ListItem
282-
className={`sidebar__collapse-item ${pathname.includes('search')&&!pathname.includes('kb') ? 'sidebar__collapse-item--active' : ''}`}
282+
className={`sidebar__collapse-item ${pathname.includes('search') && !pathname.includes('kb') ? 'sidebar__collapse-item--active' : ''}`}
283283
disableGutters
284284
>
285285
{sidebarMaximized && (
@@ -292,25 +292,7 @@ const Sidebar = (): JSX.Element => {
292292
className={`sidebar__subtext ${sidebarMaximized ? 'sidebar__subtext--visible' : 'sidebar__subtext--hidden'}`}
293293
variant="subtitle1"
294294
>
295-
Search by Variant
296-
</Typography>
297-
</Link>
298-
</ListItem>
299-
<ListItem
300-
className={`sidebar__collapse-item ${pathname.includes('kbmatches') ? 'sidebar__collapse-item--active' : ''}`}
301-
disableGutters
302-
>
303-
{sidebarMaximized && (
304-
<Box sx={{ width: '8px' }} />
305-
)}
306-
<Link className="sidebar__link" to="/search-by-kbmatches">
307-
<ContentPasteSearchIcon color="action" />
308-
<Typography
309-
display="inline"
310-
className={`sidebar__subtext ${sidebarMaximized ? 'sidebar__subtext--visible' : 'sidebar__subtext--hidden'}`}
311-
variant="subtitle1"
312-
>
313-
Search by KB Matches
295+
Search for Reports
314296
</Typography>
315297
</Link>
316298
</ListItem>

app/index.scss

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,19 @@ html body {
7373
}
7474
}
7575

76-
// Shared between SearchView and SearchByKbmatchView
7776
.search-view {
7877
margin: auto;
7978
left: 16px;
8079
max-width: 800px;
8180
min-width: 800px;
82-
padding-bottom: 32px;
8381
position: relative;
8482
right: 16px;
85-
top: 35vh;
83+
top: 30vh;
84+
85+
&__component {
86+
margin-top: 32px;
87+
width: fit-content;
88+
}
8689

8790
&__bar {
8891
box-sizing: border-box;
@@ -123,4 +126,4 @@ html body {
123126
padding-right: 32px;
124127
}
125128
}
126-
// Shared between SearchView and SearchByKbmatchView
129+

app/utils/searchReportsColumns.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import startCase from '@/utils/startCase';
22

33
function searchReportsColumns(report, analyst, reviewer, bioinformatician, searchType) {
44
return {
5-
matchedVariant: searchType=== 'kbmatches' ? report?.kbMatches[0]?.kbVariant : report?.genomicAlterationsIdentified[0]?.geneVariant,
5+
matchedVariant: searchType === 'kbmatches' ? report?.kbMatches[0]?.kbVariant : report?.genomicAlterationsIdentified[0]?.geneVariant,
66
patientID: report.patientId,
77
analysisBiopsy: report.biopsyName,
88
reportType: report.template.name === 'probe' ? 'Targeted Gene' : startCase(report.template.name),

app/views/MainView/index.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const ReportsView = lazy(() => import('../ReportsView'));
3333
const MyReportsView = lazy(() => import('../MyReportsView'));
3434
const PatientsView = lazy(() => import('../PatientsView'));
3535
const SearchView = lazy(() => import('../SearchView'));
36-
const SearchByKbmatchView = lazy(() => import('../SearchByKbmatchView'));
3736
const ReportsByVariantView = lazy(() => import('../ReportsByVariantView'));
3837
const ReportView = lazy(() => import('../ReportView'));
3938
const PrintView = lazy(() => import('../PrintView'));
@@ -225,11 +224,10 @@ const Main = (): JSX.Element => {
225224
</Route>
226225
<AuthenticatedRoute component={TermsView} path="/terms" />
227226
<AuthenticatedRoute exact component={PatientsView} path="/reports/patients/:patientId" />
228-
<AuthenticatedRoute exact component={ReportsByVariantView} path="/(search|search-by-kbmatches)/result" />
227+
<AuthenticatedRoute exact component={ReportsByVariantView} path="/(search-by-key-variant|search-by-kbmatches)/result" />
229228
<AuthenticatedRoute component={ReportsView} path="/reports" />
230229
<AuthenticatedRoute component={MyReportsView} path="/my-reports" />
231230
<AuthenticatedRoute component={SearchView} path="/search" />
232-
<AuthenticatedRoute component={SearchByKbmatchView} path="/search-by-kbmatches" />
233231
<Redirect exact from="/report/:ident/(genomic|probe)/summary" to="/report/:ident/summary" />
234232
<AuthenticatedRoute component={ReportView} path="/report/:ident" />
235233
<AuthenticatedRoute component={PrintView} path="/print/:ident" showNav={false} onToggleNav={setIsNavVisible} />

app/views/ReportView/components/KbMatches/coalesce.ts

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import {
22
KbMatchedStatementType, AnyVariantType, KbMatchType,
33
} from '@/common';
4-
import { isArray } from 'lodash';
54

65
function getVariantName<V extends AnyVariantType>(variant: KbMatchType<V>['variant'], variantType: V) {
76
if (variantType === 'cnv') {
8-
const { gene: { name }, cnvState } = variant as KbMatchType<'cnv'>['variant'];
9-
return `${name} ${cnvState}`;
7+
const { gene: { name: geneName }, cnvState } = variant as KbMatchType<'cnv'>['variant'];
8+
return `${geneName} ${cnvState}`;
109
}
1110

1211
if (variantType === 'sv') {
@@ -24,16 +23,21 @@ function getVariantName<V extends AnyVariantType>(variant: KbMatchType<V>['varia
2423
}
2524

2625
if (variantType === 'mut') {
27-
const { gene: { name }, proteinChange } = variant as KbMatchType<'mut'>['variant'];
28-
return `${name}:${proteinChange}`;
26+
const { gene: { name: geneName }, proteinChange } = variant as KbMatchType<'mut'>['variant'];
27+
return `${geneName}:${proteinChange}`;
2928
}
3029

3130
if (variantType === 'msi' || variantType === 'tmb') {
3231
return (variant as KbMatchType<'tmb' | 'msi'>['variant']).kbCategory;
3332
}
3433

35-
const { gene: { name }, expressionState } = variant as KbMatchType<'exp'>['variant'];
36-
return `${name} ${expressionState}`;
34+
if (variantType === 'sigv') {
35+
const { displayName } = variant as KbMatchType<'sigv'>['variant'];
36+
return `${displayName}`;
37+
}
38+
39+
const { gene: { name: geneName }, expressionState } = variant as KbMatchType<'exp'>['variant'];
40+
return `${geneName} ${expressionState}`;
3741
}
3842

3943
function getBucketKey(entry: KbMatchedStatementType, delimiter = '||') {
@@ -46,24 +50,22 @@ function getBucketKey(entry: KbMatchedStatementType, delimiter = '||') {
4650
if (kbMatches.length > 1) {
4751
let bucketKey = '';
4852
for (const kbMatch of kbMatches) {
49-
if (!isArray(kbMatch)) {
50-
const variantName = getVariantName(kbMatch?.variant, kbMatch?.variantType);
51-
const { relevance, disease } = entry;
52-
const commonSuffix = `${context}${delimiter}${variantName}${delimiter}${relevance}${delimiter}${disease}`;
53-
if (kbMatch?.variantType === 'sv') {
54-
const {
55-
variant: { gene1: { name: gene1Name }, gene2: { name: gene2Name } },
56-
} = kbMatch as KbMatchType<'sv'>;
57-
bucketKey += `${gene1Name}${delimiter}${gene2Name}${delimiter}${commonSuffix}`;
58-
} else if (kbMatch?.variantType === 'msi' || kbMatch?.variantType === 'tmb') {
59-
const { kbCategory } = kbMatch.variant as KbMatchType<'tmb' | 'msi'>['variant'];
60-
bucketKey += `${kbCategory}${delimiter}${commonSuffix}`;
61-
} else {
62-
const {
63-
variant: { gene: { name: geneName } },
64-
} = kbMatch as KbMatchType<'cnv' | 'exp' | 'mut'>;
65-
bucketKey += `${geneName}${delimiter}${commonSuffix}`;
66-
}
53+
const variantName = getVariantName(kbMatch?.variant, kbMatch?.variantType);
54+
const { relevance, disease } = entry;
55+
const commonSuffix = `${context}${delimiter}${variantName}${delimiter}${relevance}${delimiter}${disease}`;
56+
if (kbMatch?.variantType === 'sv') {
57+
const {
58+
variant: { gene1: { name: gene1Name }, gene2: { name: gene2Name } },
59+
} = kbMatch as KbMatchType<'sv'>;
60+
bucketKey += `${gene1Name || '?'}${delimiter}${gene2Name || '?'}${delimiter}${commonSuffix}`;
61+
} else if (kbMatch?.variantType === 'msi' || kbMatch?.variantType === 'tmb') {
62+
const { kbCategory } = kbMatch.variant as KbMatchType<'tmb' | 'msi'>['variant'];
63+
bucketKey += `${kbCategory}${delimiter}${commonSuffix}`;
64+
} else {
65+
const {
66+
variant: { gene: { name: geneName } },
67+
} = kbMatch as KbMatchType<'cnv' | 'exp' | 'mut'>;
68+
bucketKey += `${geneName}${delimiter}${commonSuffix}`;
6769
}
6870
}
6971
return bucketKey;
@@ -74,22 +76,7 @@ function getBucketKey(entry: KbMatchedStatementType, delimiter = '||') {
7476
const variantName = getVariantName(kbMatch?.variant, kbMatch?.variantType);
7577
const { relevance, disease } = entry;
7678
const commonSuffix = `${context}${delimiter}${variantName}${delimiter}${relevance}${delimiter}${disease}`;
77-
if (kbMatch?.variantType === 'sv') {
78-
const {
79-
variant: { gene1: { name: gene1Name }, gene2: { name: gene2Name } },
80-
} = kbMatch as KbMatchType<'sv'>;
81-
return `${gene1Name}${delimiter}${gene2Name}${delimiter}${commonSuffix}`;
82-
}
83-
84-
if (kbMatch?.variantType === 'msi' || kbMatch?.variantType === 'tmb') {
85-
const { kbCategory } = kbMatch.variant as KbMatchType<'tmb' | 'msi'>['variant'];
86-
return `${kbCategory}${delimiter}${commonSuffix}`;
87-
}
88-
89-
const {
90-
variant: { gene: { name: geneName } },
91-
} = kbMatch as KbMatchType<'cnv' | 'exp' | 'mut'>;
92-
return `${geneName}${delimiter}${commonSuffix}`;
79+
return commonSuffix;
9380
}
9481

9582
return null;

app/views/ReportView/components/KbMatches/columnDefs.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,45 +18,42 @@ const columnDefs: ColDef[] = [
1818
for (const kbMatch of kbMatchesNonNull) {
1919
if (kbMatch?.variantType === 'msi') {
2020
geneName.push('msi');
21-
continue;
2221
}
2322
if (kbMatch?.variantType === 'tmb') {
2423
geneName.push('tmb');
25-
continue;
2624
}
2725
if (kbMatch?.variant?.gene) {
2826
geneName.push(kbMatch?.variant?.gene.name);
29-
continue;
3027
}
3128
if (kbMatch?.variant?.gene1 && kbMatch?.variant?.gene2) {
3229
geneName.push(`${kbMatch?.variant?.gene1.name}, ${kbMatch?.variant?.gene2.name}`);
33-
continue;
3430
}
3531
if (kbMatch?.variant?.gene1) {
3632
geneName.push(kbMatch?.variant?.gene1.name);
37-
continue;
3833
}
3934
if (kbMatch?.variant?.gene2) {
4035
geneName.push(kbMatch?.variant?.gene2.name);
41-
continue;
4236
}
4337
}
4438
return geneName.join(', ');
4539
}
46-
const kbMatch = kbMatchesNonNull[0];
40+
const [kbMatch] = kbMatchesNonNull;
4741
// msi and tmb doesn't have gene field
4842
if (kbMatch?.variantType === 'msi') {
4943
return 'msi';
5044
}
5145
if (kbMatch?.variantType === 'tmb') {
5246
return 'tmb';
5347
}
48+
if (kbMatch?.variantType === 'sigv') {
49+
return kbMatch?.variant?.displayName;
50+
}
5451
if (kbMatch?.variant?.gene) {
55-
return kbMatch?.variant?.gene.name;
52+
return kbMatch?.variant?.gene?.name;
5653
}
57-
return kbMatch?.variant?.gene1.name && kbMatch?.variant?.gene2.name
58-
? `${kbMatch?.variant?.gene1.name}, ${kbMatch?.variant?.gene2.name}`
59-
: kbMatch?.variant?.gene1.name || kbMatch?.variant?.gene2.name;
54+
return kbMatch?.variant?.gene1?.name && kbMatch?.variant?.gene2?.name
55+
? `${kbMatch?.variant?.gene1?.name}, ${kbMatch?.variant?.gene2?.name}`
56+
: kbMatch?.variant?.gene1?.name || kbMatch?.variant?.gene2?.name;
6057
}
6158
return null;
6259
},
@@ -104,16 +101,19 @@ const columnDefs: ColDef[] = [
104101
})`);
105102
break;
106103
case ('mut'):
107-
variantArr.push(`${kbMatch?.variant.gene.name}:${kbMatch?.variant.proteinChange}`);
104+
variantArr.push(`${kbMatch?.variant?.gene?.name}:${kbMatch?.variant?.proteinChange}`);
108105
break;
109106
case ('tmb'):
110-
variantArr.push(kbMatch?.variant.kbCategory);
107+
variantArr.push(kbMatch?.variant?.kbCategory);
111108
break;
112109
case ('msi'):
113-
variantArr.push(kbMatch?.variant.kbCategory);
110+
variantArr.push(kbMatch?.variant?.kbCategory);
111+
break;
112+
case ('sigv'):
113+
variantArr.push(kbMatch?.variant?.displayName);
114114
break;
115115
default:
116-
variantArr.push(`${kbMatch?.variant.gene.name} ${kbMatch?.variant.expressionState}`);
116+
variantArr.push(`${kbMatch?.variant?.gene?.name} ${kbMatch?.variant?.expressionState}`);
117117
break;
118118
}
119119
}

app/views/ReportsByVariantView/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState, useEffect, useCallback } from 'react';
2-
import { useParams, useLocation } from 'react-router-dom';
2+
import { useLocation } from 'react-router-dom';
33
import { Chip, Typography } from '@mui/material';
44
import api from '@/services/api';
55
import withLoading, { WithLoadingInjectedProps } from '@/hoc/WithLoading';

0 commit comments

Comments
 (0)