diff --git a/package.json b/package.json index 7f5d220b6..1c5addfb4 100644 --- a/package.json +++ b/package.json @@ -101,6 +101,7 @@ "@types/react-select": "^3.0.21", "@types/react-spinkit": "^3.0.5", "@types/reactstrap": "^8.0.4", + "@types/resize-observer-browser": "^0.1.11", "@types/webpack-env": "1.15.2", "@typescript-eslint/eslint-plugin": "2.29.0", "@typescript-eslint/parser": "2.29.0", diff --git a/screenshot-test/__baseline_snapshots__/About Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/About Page without Login-snap.png index 0d225b6b4..24c231213 100644 Binary files a/screenshot-test/__baseline_snapshots__/About Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/About Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and not requested-snap.png b/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and not requested-snap.png index 4bd635f32..1f587adf4 100644 Binary files a/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and not requested-snap.png and b/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and not requested-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and requested-snap.png b/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and requested-snap.png index d70009c68..1bc368cfd 100644 Binary files a/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and requested-snap.png and b/screenshot-test/__baseline_snapshots__/Account Settings Page without ROLE_API and requested-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Account Settings Page-snap.png b/screenshot-test/__baseline_snapshots__/Account Settings Page-snap.png index d6a598c85..1259cdf5f 100644 Binary files a/screenshot-test/__baseline_snapshots__/Account Settings Page-snap.png and b/screenshot-test/__baseline_snapshots__/Account Settings Page-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Actionable Genes Page Levels Selected without Login-snap.png b/screenshot-test/__baseline_snapshots__/Actionable Genes Page Levels Selected without Login-snap.png index eeb394c63..0f9325750 100644 Binary files a/screenshot-test/__baseline_snapshots__/Actionable Genes Page Levels Selected without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Actionable Genes Page Levels Selected without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Actionable Genes Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Actionable Genes Page without Login-snap.png index 44caf2fee..6026442ea 100644 Binary files a/screenshot-test/__baseline_snapshots__/Actionable Genes Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Actionable Genes Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme with Login-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme with Login-snap.png index fbceb39b7..b393cbff2 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme with Login-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme with Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme without Login-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme without Login-snap.png index 20f40e68a..b6b1511d9 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Heme without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid with Login-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid with Login-snap.png index 6fce06a65..b271b6dbb 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid with Login-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid with Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid without Login-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid without Login-snap.png index 96d93fa0c..14c2c539b 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Solid without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - With login - Mobile-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - With login - Mobile-snap.png index 214c5fdbd..c9303b256 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - With login - Mobile-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - With login - Mobile-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Without login - Mobile-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Without login - Mobile-snap.png index 2cec9b9b6..8732fc60e 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Without login - Mobile-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Cancer Type - Without login - Mobile-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page with Login-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page with Login-snap.png index 4871e7a95..065b6ff9d 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page with Login-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page with Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Alteration Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Alteration Page without Login-snap.png index 4871e7a95..065b6ff9d 100644 Binary files a/screenshot-test/__baseline_snapshots__/Alteration Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Alteration Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Cancer Genes Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Cancer Genes Page without Login-snap.png index 8f4b7282a..30036fe72 100644 Binary files a/screenshot-test/__baseline_snapshots__/Cancer Genes Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Cancer Genes Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Companies Information Page-snap.png b/screenshot-test/__baseline_snapshots__/Companies Information Page-snap.png index a77683254..ceba0e4e0 100644 Binary files a/screenshot-test/__baseline_snapshots__/Companies Information Page-snap.png and b/screenshot-test/__baseline_snapshots__/Companies Information Page-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Company Details Page-snap.png b/screenshot-test/__baseline_snapshots__/Company Details Page-snap.png index 7af82a230..baa2cb0a9 100644 Binary files a/screenshot-test/__baseline_snapshots__/Company Details Page-snap.png and b/screenshot-test/__baseline_snapshots__/Company Details Page-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Company User Details Page-snap.png b/screenshot-test/__baseline_snapshots__/Company User Details Page-snap.png index 410f33f8c..18eedc2d3 100644 Binary files a/screenshot-test/__baseline_snapshots__/Company User Details Page-snap.png and b/screenshot-test/__baseline_snapshots__/Company User Details Page-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Gene Page with Login-snap.png b/screenshot-test/__baseline_snapshots__/Gene Page with Login-snap.png index 502b48401..ea62364bb 100644 Binary files a/screenshot-test/__baseline_snapshots__/Gene Page with Login-snap.png and b/screenshot-test/__baseline_snapshots__/Gene Page with Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Gene Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Gene Page without Login-snap.png index 6ebf7163a..d1b4ed8fa 100644 Binary files a/screenshot-test/__baseline_snapshots__/Gene Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Gene Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/HGVSg Page on VUE variant with Login-snap.png b/screenshot-test/__baseline_snapshots__/HGVSg Page on VUE variant with Login-snap.png index 91a040283..1f12dfcae 100644 Binary files a/screenshot-test/__baseline_snapshots__/HGVSg Page on VUE variant with Login-snap.png and b/screenshot-test/__baseline_snapshots__/HGVSg Page on VUE variant with Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/HGVSg Page with Login-snap.png b/screenshot-test/__baseline_snapshots__/HGVSg Page with Login-snap.png index 4416dca63..9bb1a1c04 100644 Binary files a/screenshot-test/__baseline_snapshots__/HGVSg Page with Login-snap.png and b/screenshot-test/__baseline_snapshots__/HGVSg Page with Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/HGVSg Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/HGVSg Page without Login-snap.png index 7d92311b1..2f01e97f2 100644 Binary files a/screenshot-test/__baseline_snapshots__/HGVSg Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/HGVSg Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Home Page DX without Login-snap.png b/screenshot-test/__baseline_snapshots__/Home Page DX without Login-snap.png index e792c9d70..e3d2173c2 100644 Binary files a/screenshot-test/__baseline_snapshots__/Home Page DX without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Home Page DX without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Home Page PX without Login-snap.png b/screenshot-test/__baseline_snapshots__/Home Page PX without Login-snap.png index 5229c3862..44a270063 100644 Binary files a/screenshot-test/__baseline_snapshots__/Home Page PX without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Home Page PX without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Home Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Home Page without Login-snap.png index be0ab87a2..5ccc01a0e 100644 Binary files a/screenshot-test/__baseline_snapshots__/Home Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Home Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/LoE Page AAC without Login-snap.png b/screenshot-test/__baseline_snapshots__/LoE Page AAC without Login-snap.png index 4319d53b2..6dcdd86c3 100644 Binary files a/screenshot-test/__baseline_snapshots__/LoE Page AAC without Login-snap.png and b/screenshot-test/__baseline_snapshots__/LoE Page AAC without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/LoE Page DX without Login-snap.png b/screenshot-test/__baseline_snapshots__/LoE Page DX without Login-snap.png index 3e9b43cfb..ffc3a6af5 100644 Binary files a/screenshot-test/__baseline_snapshots__/LoE Page DX without Login-snap.png and b/screenshot-test/__baseline_snapshots__/LoE Page DX without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/LoE Page PX without Login-snap.png b/screenshot-test/__baseline_snapshots__/LoE Page PX without Login-snap.png index d47ff403e..84c2b965b 100644 Binary files a/screenshot-test/__baseline_snapshots__/LoE Page PX without Login-snap.png and b/screenshot-test/__baseline_snapshots__/LoE Page PX without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/LoE Page V1 without Login-snap.png b/screenshot-test/__baseline_snapshots__/LoE Page V1 without Login-snap.png index 8ab36645d..394d55f8a 100644 Binary files a/screenshot-test/__baseline_snapshots__/LoE Page V1 without Login-snap.png and b/screenshot-test/__baseline_snapshots__/LoE Page V1 without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/LoE Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/LoE Page without Login-snap.png index 93737a052..7ee2da499 100644 Binary files a/screenshot-test/__baseline_snapshots__/LoE Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/LoE Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Login Page-snap.png b/screenshot-test/__baseline_snapshots__/Login Page-snap.png index 0b7c85c49..024a4d477 100644 Binary files a/screenshot-test/__baseline_snapshots__/Login Page-snap.png and b/screenshot-test/__baseline_snapshots__/Login Page-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Precision Oncology Therapies Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Precision Oncology Therapies Page without Login-snap.png index 93421e649..46e70a3c4 100644 Binary files a/screenshot-test/__baseline_snapshots__/Precision Oncology Therapies Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Precision Oncology Therapies Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Team Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Team Page without Login-snap.png index 176061eeb..7b0304ffc 100644 Binary files a/screenshot-test/__baseline_snapshots__/Team Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Team Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Terms Page without Login-snap.png b/screenshot-test/__baseline_snapshots__/Terms Page without Login-snap.png index a2de850ac..5f8771644 100644 Binary files a/screenshot-test/__baseline_snapshots__/Terms Page without Login-snap.png and b/screenshot-test/__baseline_snapshots__/Terms Page without Login-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Detail-snap.png b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Detail-snap.png index 54ff90a71..d1c263171 100644 Binary files a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Detail-snap.png and b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Detail-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Overview-snap.png b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Overview-snap.png index 037e99ab7..8faa3fde6 100644 Binary files a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Overview-snap.png and b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#Resource Overview-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Detail-snap.png b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Detail-snap.png index 9f7cd131d..3dab0c096 100644 Binary files a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Detail-snap.png and b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Detail-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Overview-snap.png b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Overview-snap.png index 733da5ddc..29abc45a0 100644 Binary files a/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Overview-snap.png and b/screenshot-test/__baseline_snapshots__/Usage Analysis Page#User Overview-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/User Details Page-snap.png b/screenshot-test/__baseline_snapshots__/User Details Page-snap.png index 33a252c7a..5a5e65a30 100644 Binary files a/screenshot-test/__baseline_snapshots__/User Details Page-snap.png and b/screenshot-test/__baseline_snapshots__/User Details Page-snap.png differ diff --git a/screenshot-test/__baseline_snapshots__/Users Infomation Page-snap.png b/screenshot-test/__baseline_snapshots__/Users Infomation Page-snap.png index 8ba51f65c..42703ab6e 100644 Binary files a/screenshot-test/__baseline_snapshots__/Users Infomation Page-snap.png and b/screenshot-test/__baseline_snapshots__/Users Infomation Page-snap.png differ diff --git a/src/main/java/org/mskcc/cbio/oncokb/config/application/ApplicationProperties.java b/src/main/java/org/mskcc/cbio/oncokb/config/application/ApplicationProperties.java index b11328890..e5bf920d5 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/config/application/ApplicationProperties.java +++ b/src/main/java/org/mskcc/cbio/oncokb/config/application/ApplicationProperties.java @@ -22,6 +22,7 @@ public class ApplicationProperties { private String name; private String baseUrl = ""; private String apiProxyUrl; + private String apiProxyGermlineUrl; private SlackProperties slack; private ProjectProfile profile; private Boolean sitemapEnabled; @@ -62,6 +63,14 @@ public void setApiProxyUrl(String apiProxyUrl) { this.apiProxyUrl = apiProxyUrl; } + public String getApiProxyGermlineUrl() { + return apiProxyGermlineUrl; + } + + public void setApiProxyGermlineUrl(String apiProxyGermlineUrl) { + this.apiProxyGermlineUrl = apiProxyGermlineUrl; + } + public SlackProperties getSlack() { return slack; } public void setSlack( SlackProperties slack ) { this.slack = slack; } diff --git a/src/main/java/org/mskcc/cbio/oncokb/service/ApiProxyService.java b/src/main/java/org/mskcc/cbio/oncokb/service/ApiProxyService.java index 97dbe6ad3..c03095911 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/service/ApiProxyService.java +++ b/src/main/java/org/mskcc/cbio/oncokb/service/ApiProxyService.java @@ -1,6 +1,8 @@ package org.mskcc.cbio.oncokb.service; +import org.apache.commons.lang3.StringUtils; import org.mskcc.cbio.oncokb.config.application.ApplicationProperties; +import org.mskcc.cbio.oncokb.security.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +29,13 @@ public class ApiProxyService { public URI prepareURI(HttpServletRequest request) throws URISyntaxException { String queryString = request.getQueryString(); - return new URI(applicationProperties.getApiProxyUrl() + request.getRequestURI() + (queryString == null ? "" : "?" + queryString)); + String defaultApiProxyUrl = applicationProperties.getApiProxyUrl(); + String germlineParam = request.getParameter("germline"); + if (germlineParam != null && Boolean.TRUE.equals(Boolean.parseBoolean(germlineParam)) + && SecurityUtils.isAuthenticated() && StringUtils.isNotEmpty(applicationProperties.getApiProxyGermlineUrl())) { + defaultApiProxyUrl = applicationProperties.getApiProxyGermlineUrl(); + } + return new URI(defaultApiProxyUrl + request.getRequestURI() + (queryString == null ? "" : "?" + queryString)); } public URI prepareURI(String apiRequest) throws URISyntaxException { diff --git a/src/main/webapp/app/Main.tsx b/src/main/webapp/app/Main.tsx index daa786956..d2339828e 100644 --- a/src/main/webapp/app/Main.tsx +++ b/src/main/webapp/app/Main.tsx @@ -2,9 +2,8 @@ import * as React from 'react'; import Footer from './components/Footer'; import Header from './components/Header'; import { observer } from 'mobx-react'; -import AppRouts from 'app/routes/routes'; +import AppRoutes from 'app/routes/routes'; import { isAuthorized } from 'app/shared/auth/AuthUtils'; -import { Container, Row, Col, Modal, Button } from 'react-bootstrap'; import { Stores } from 'app/App'; import { Prompt, withRouter } from 'react-router'; import { @@ -19,6 +18,7 @@ import { FeedbackModal } from './components/feedback/FeedbackModal'; import { FdaModal } from 'app/components/fdaModal/FdaModal'; import { Location } from 'history'; import autobind from 'autobind-decorator'; +import PageContainer from 'app/components/PageContainer'; export type IMainPage = Stores; @@ -104,15 +104,16 @@ class Main extends React.Component { routing={this.props.routing} appStore={this.props.appStore} /> -
- - - -
+ + + a { - color: white; + line-height: 1rem; border-right: 0.5px solid #fff; - padding: 0 5px; + padding: 0 0.5rem; &:last-child { border: 0; diff --git a/src/main/webapp/app/components/Footer.tsx b/src/main/webapp/app/components/Footer.tsx index 1aa728970..433733568 100644 --- a/src/main/webapp/app/components/Footer.tsx +++ b/src/main/webapp/app/components/Footer.tsx @@ -32,28 +32,19 @@ class Footer extends React.Component<{ lastDataUpdate: string }> {
-
- - MSK - - - CMO - - - cBioPortal - +
+ MSK + + CMO + + + cBioPortal +
diff --git a/src/main/webapp/app/components/PageContainer.tsx b/src/main/webapp/app/components/PageContainer.tsx index 01eedd4d3..6b52726b4 100644 --- a/src/main/webapp/app/components/PageContainer.tsx +++ b/src/main/webapp/app/components/PageContainer.tsx @@ -1,15 +1,44 @@ -import React from 'react'; +import React, { FunctionComponent } from 'react'; import { Col, Row } from 'react-bootstrap'; +import WindowStore from 'app/store/WindowStore'; +import { RouterStore } from 'mobx-react-router'; +import { PAGE_ROUTE } from 'app/config/constants'; +import { GENETIC_TYPE } from 'app/components/geneticTypeTabs/GeneticTypeTabs'; +import { parseGenePagePath } from 'app/shared/utils/UrlUtils'; +const Container: FunctionComponent<{ + inGenePage: boolean; +}> = props => { + if (props.inGenePage) { + return
{props.children}
; + } else { + return ( + + {props.children} + + ); + } +}; const PageContainer: React.FunctionComponent<{ - className?: string; + routing: RouterStore; + windowStore: WindowStore; }> = props => { + const genePagePath = parseGenePagePath(props.routing.location.pathname); + const inGenePage = genePagePath.geneticType !== undefined; return ( - - - {props.children} - - +
+
+ {props.children} +
+
); }; export default PageContainer; diff --git a/src/main/webapp/app/components/geneticTypeTabs/GeneticTypeTabs.tsx b/src/main/webapp/app/components/geneticTypeTabs/GeneticTypeTabs.tsx new file mode 100644 index 000000000..044085c58 --- /dev/null +++ b/src/main/webapp/app/components/geneticTypeTabs/GeneticTypeTabs.tsx @@ -0,0 +1,47 @@ +import React, { FunctionComponent, useState } from 'react'; +import styles from './genetic-type-tabs.module.scss'; +import classnames from 'classnames'; +import { RouterStore } from 'mobx-react-router'; + +export enum GENETIC_TYPE { + SOMATIC = 'somatic', + GERMLINE = 'germline', +} + +const GeneticTypeTabs: FunctionComponent<{ + routing: RouterStore; + hugoSymbol: string; + geneticType?: GENETIC_TYPE; + onChange: (status: string) => void; +}> = props => { + const [selected, setSelected] = useState( + props.geneticType || GENETIC_TYPE.SOMATIC + ); + + const ontoggle = (status: GENETIC_TYPE) => { + setSelected(status); + props.onChange(status); + }; + + return ( +
+ {[GENETIC_TYPE.SOMATIC, GENETIC_TYPE.GERMLINE].map((geneOrigin, idx) => ( +
ontoggle(geneOrigin)} + > + {geneOrigin.substring(0, 1).toUpperCase()} + {geneOrigin.toLowerCase().slice(1)} +
+ ))} +
+ ); +}; + +export default GeneticTypeTabs; diff --git a/src/main/webapp/app/components/geneticTypeTabs/genetic-type-tabs.module.scss b/src/main/webapp/app/components/geneticTypeTabs/genetic-type-tabs.module.scss new file mode 100644 index 000000000..912493f69 --- /dev/null +++ b/src/main/webapp/app/components/geneticTypeTabs/genetic-type-tabs.module.scss @@ -0,0 +1,33 @@ +@import '../../variables'; + +.tabs { + display: flex; + margin: 1.5rem 0 0 0; +} + +.tab { + text-align: center; + padding: 0.75rem 0; + border: 1px solid $oncokb-darker-blue; + cursor: pointer; +} + +.tab:first-child { + border-left: 0; + border-top-right-radius: 3px; +} + +.tab:last-child { + border-right: 0; + border-top-left-radius: 3px; +} + +.selectedTab { + padding-top: 0.5rem; + border-width: 3px 1px 0 1px; +} + +.unselectedTab { + background-color: $inactive; + border-width: 0 0 1px 0; +} diff --git a/src/main/webapp/app/components/geneticTypeTag/GeneticTypeTag.tsx b/src/main/webapp/app/components/geneticTypeTag/GeneticTypeTag.tsx new file mode 100644 index 000000000..f4e38f6a7 --- /dev/null +++ b/src/main/webapp/app/components/geneticTypeTag/GeneticTypeTag.tsx @@ -0,0 +1,25 @@ +import React, { FunctionComponent } from 'react'; +import { GENETIC_TYPE } from 'app/components/geneticTypeTabs/GeneticTypeTabs'; +import classnames from 'classnames'; +import styles from './genetic-type-tag.module.scss'; +import { capitalize } from 'cbioportal-frontend-commons'; + +const GeneticTypeTag: FunctionComponent<{ + geneticType: GENETIC_TYPE; + className?: string; +}> = props => { + return ( + + {capitalize(props.geneticType)} + + ); +}; + +export default GeneticTypeTag; diff --git a/src/main/webapp/app/components/geneticTypeTag/genetic-type-tag.module.scss b/src/main/webapp/app/components/geneticTypeTag/genetic-type-tag.module.scss new file mode 100644 index 000000000..812df90f2 --- /dev/null +++ b/src/main/webapp/app/components/geneticTypeTag/genetic-type-tag.module.scss @@ -0,0 +1,25 @@ +@import '../../variables'; + +.geneticTypeTag { + font-weight: 500 !important; + font-family: "Gotham Book"; + display: inline-flex; + padding: 0 var(--radius-8, 8px); + justify-content: center; + align-items: center; + gap: var(--radius-8, 8px); + border-radius: 56px; +} + +.germlineTag { + @extend .geneticTypeTag; + color: $primary; + border: var(--radius-2, 2px) solid var(--Color-11, $primary); + background: #F0F5FF; +} + +.somaticTag { + @extend .geneticTypeTag; + color: #FFFFFF; + background: $primary; +} diff --git a/src/main/webapp/app/components/infoTile/InfoTile.tsx b/src/main/webapp/app/components/infoTile/InfoTile.tsx new file mode 100644 index 000000000..0bcc0ff07 --- /dev/null +++ b/src/main/webapp/app/components/infoTile/InfoTile.tsx @@ -0,0 +1,52 @@ +import React, { CSSProperties } from 'react'; +import styles from './info-tile.module.scss'; +import { COLOR_GREY } from 'app/config/theme'; +import classnames from 'classnames'; + +export type Category = { + title: string; + content?: JSX.Element | string; + className?: string; +}; +export type InfoTile = { + title: string; + categories: Category[]; + className?: string; +}; + +const Category: React.FunctionComponent = props => { + const isNa = props.content === undefined || props.content === null; + const isText = isNa || typeof props.content === 'string'; + const style: CSSProperties = { height: '3rem' }; + if (isText) { + style.fontSize = '1.5rem'; + style.fontFamily = 'Gotham Bold'; + } + return ( +
+
+ {props.title} +
+
+ {props.content} +
+
+ ); +}; + +const InfoTile: React.FunctionComponent = props => { + return props.categories.length > 0 ? ( +
+
{props.title}
+
+ {props.categories.map((category, idx) => ( + + ))} +
+
+ ) : ( + <> + ); +}; + +export default InfoTile; diff --git a/src/main/webapp/app/components/infoTile/LoETile.tsx b/src/main/webapp/app/components/infoTile/LoETile.tsx new file mode 100644 index 000000000..f38cb77d2 --- /dev/null +++ b/src/main/webapp/app/components/infoTile/LoETile.tsx @@ -0,0 +1,100 @@ +import React from 'react'; +import InfoTile, { Category } from 'app/components/infoTile/InfoTile'; +import { + FdaLevelIcon, + levelOfEvidence2Level, + OncoKBLevelIcon, +} from 'app/shared/utils/Utils'; + +type LoETile = { + highestSensitiveLevel: string | undefined; + highestResistanceLevel: string | undefined; + highestDiagnosticImplicationLevel?: string | undefined; + highestPrognosticImplicationLevel?: string | undefined; + highestFdaLevel?: string | undefined; + className?: string; +}; + +const LoETile: React.FunctionComponent = props => { + const categories: Category[] = []; + if (props.highestSensitiveLevel || props.highestResistanceLevel) { + categories.push({ + title: 'Therapeutic', + content: ( +
+ {props.highestSensitiveLevel && ( + + )} + {props.highestResistanceLevel && ( + + )} +
+ ), + }); + } + if (props.highestDiagnosticImplicationLevel) { + categories.push({ + title: 'Diagnostic', + content: ( +
+ +
+ ), + }); + } + if (props.highestPrognosticImplicationLevel) { + categories.push({ + title: 'Prognostic', + content: ( +
+ +
+ ), + }); + } + if (props.highestFdaLevel) { + categories.push({ + title: 'FDA', + content: ( +
+ +
+ ), + }); + } + + return ( + + ); +}; + +export default LoETile; diff --git a/src/main/webapp/app/components/infoTile/info-tile.module.scss b/src/main/webapp/app/components/infoTile/info-tile.module.scss new file mode 100644 index 000000000..aae0e6728 --- /dev/null +++ b/src/main/webapp/app/components/infoTile/info-tile.module.scss @@ -0,0 +1,17 @@ +@import '../../variables'; + +.tile { + border-radius: 8px; + border: 1px solid $light-grey; + padding: 1rem; + display: inline-block; + box-shadow: $default-box-shadow; +} + +.category:not(:last-child) { + border-right: 1px solid $light-grey; + padding-right: 1rem; +} +.category:not(:first-child) { + padding-left: 1rem; +} diff --git a/src/main/webapp/app/components/levelButton/LevelButton.tsx b/src/main/webapp/app/components/levelButton/LevelButton.tsx index f7e0fd58f..fc902ab2e 100644 --- a/src/main/webapp/app/components/levelButton/LevelButton.tsx +++ b/src/main/webapp/app/components/levelButton/LevelButton.tsx @@ -63,7 +63,7 @@ export const LevelButton = inject('routing')((props: LevelButtonProps) => { >
diff --git a/src/main/webapp/app/components/oncokbMutationMapper/OncokbMutationMapper.tsx b/src/main/webapp/app/components/oncokbMutationMapper/OncokbMutationMapper.tsx index af50b0c17..5413c0f29 100644 --- a/src/main/webapp/app/components/oncokbMutationMapper/OncokbMutationMapper.tsx +++ b/src/main/webapp/app/components/oncokbMutationMapper/OncokbMutationMapper.tsx @@ -12,6 +12,11 @@ export type Oncogenicity = { counts: number; }; +export type Pathogenicity = { + pathogenicity: string; + counts: number; +}; + export interface IOncokbMutationMapperProps extends MutationMapperProps { oncogenicities: Oncogenicity[]; } diff --git a/src/main/webapp/app/components/searchOption/SearchOption.tsx b/src/main/webapp/app/components/searchOption/SearchOption.tsx index 441845567..624e157ff 100644 --- a/src/main/webapp/app/components/searchOption/SearchOption.tsx +++ b/src/main/webapp/app/components/searchOption/SearchOption.tsx @@ -1,8 +1,5 @@ import React from 'react'; -import { - levelOfEvidence2Level, - OncoKBAnnotationIcon, -} from 'app/shared/utils/Utils'; +import { levelOfEvidence2Level, OncoKBAnnotationIcon } from 'app/shared/utils/Utils'; import { Else, If, Then } from 'react-if'; import Highlighter from 'react-highlight-words'; import styles from './SearchOption.module.scss'; @@ -13,11 +10,10 @@ import { FeedbackIcon } from 'app/components/feedback/FeedbackIcon'; import { FeedbackType } from 'app/components/feedback/types'; import { LEVEL_PRIORITY_BY_TYPE, ONCOKB_TM } from 'app/config/constants'; import { Alteration } from 'app/shared/api/generated/OncoKbPrivateAPI'; -import { - sortByLevel, - sortByLevelWithLevels, -} from 'app/shared/utils/ReactTableUtils'; +import { sortByLevelWithLevels } from 'app/shared/utils/ReactTableUtils'; import WithSeparator from 'react-with-separator'; +import GeneticTypeTag from 'app/components/geneticTypeTag/GeneticTypeTag'; +import { GENETIC_TYPE } from 'app/components/geneticTypeTabs/GeneticTypeTabs'; export enum SearchOptionType { GENE = 'GENE', @@ -54,6 +50,9 @@ const GeneSearchOption: React.FunctionComponent<{ searchWords={[props.search]} textToHighlight={`${props.data.gene.hugoSymbol} (Entrez Gene: ${props.data.gene.entrezGeneId})`} /> + {props.data.annotation && Object.values(GENETIC_TYPE).includes(props.data.annotation.toLowerCase() as GENETIC_TYPE) && ( + + )} {props.data.highestSensitiveLevel || props.data.highestResistanceLevel ? ( diff --git a/src/main/webapp/app/components/userMessager/UserMessage.tsx b/src/main/webapp/app/components/userMessager/UserMessage.tsx index cfd38ae3f..720a580d3 100644 --- a/src/main/webapp/app/components/userMessager/UserMessage.tsx +++ b/src/main/webapp/app/components/userMessager/UserMessage.tsx @@ -141,7 +141,9 @@ if ( dateEnd: 1732406400000, content: (
- Join us November 19-23 at AMP 2024! Visit our poster (#I033) or stop by our booth (#1421) to meet our team and explore the latest developments from OncoKB™. See you there! + Join us November 19-23 at AMP 2024! Visit our poster (#I033) or stop + by our booth (#1421) to meet our team and explore the latest + developments from OncoKB™. See you there!
), id: '2024_amp', diff --git a/src/main/webapp/app/config/constants.tsx b/src/main/webapp/app/config/constants.tsx index 24e64d27e..0db2981ab 100644 --- a/src/main/webapp/app/config/constants.tsx +++ b/src/main/webapp/app/config/constants.tsx @@ -122,6 +122,15 @@ export enum ONCOGENICITY { UNKNOWN = 'Unknown', } +export enum PATHOGENICITY { + PATHOGENIC = 'Pathogenic', + LIKELY_PATHOGENIC = 'Likely Pathogenic', + BENIGN = 'Benign', + LIKELY_BENIGN = 'Likely Benign', + UNKNOWN = 'Unknown', + VUS_WITH_SPECIAL_INTERPRETATION = 'VUS with Special Interpretation', +} + export const GENERAL_ONCOGENICITY: { [key: string]: ONCOGENICITY } = { [ONCOGENICITY.ONCOGENIC]: ONCOGENICITY.ONCOGENIC, [ONCOGENICITY.LIKELY_ONCOGENIC]: ONCOGENICITY.ONCOGENIC, @@ -133,6 +142,16 @@ export const GENERAL_ONCOGENICITY: { [key: string]: ONCOGENICITY } = { [ONCOGENICITY.UNKNOWN]: ONCOGENICITY.UNKNOWN, }; +export const GENERAL_PATHOGENICITY: { [key: string]: PATHOGENICITY } = { + [PATHOGENICITY.PATHOGENIC]: PATHOGENICITY.PATHOGENIC, + [PATHOGENICITY.LIKELY_PATHOGENIC]: PATHOGENICITY.LIKELY_PATHOGENIC, + [PATHOGENICITY.UNKNOWN]: PATHOGENICITY.UNKNOWN, + [PATHOGENICITY.LIKELY_BENIGN]: PATHOGENICITY.LIKELY_BENIGN, + [PATHOGENICITY.BENIGN]: PATHOGENICITY.BENIGN, + [PATHOGENICITY.VUS_WITH_SPECIAL_INTERPRETATION]: + PATHOGENICITY.VUS_WITH_SPECIAL_INTERPRETATION, +}; + export enum MUTATION_EFFECT { GAIN_OF_FUNCTION = 'Gain-of-function', LIKELY_GAIN_OF_FUNCTION = 'Likely Gain-of-function', @@ -346,6 +365,7 @@ export enum EVIDENCE_TYPES { STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE = 'STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE', INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY = 'INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY', INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE = 'INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE', + GENOMIC_INDICATOR = 'GENOMIC_INDICATOR', } export const TREATMENT_EVIDENCE_TYPES: EVIDENCE_TYPES[] = [ @@ -432,6 +452,8 @@ export const DEFAULT_GENE_NUMBER: GeneNumber = { highestDiagnosticImplicationLevel: '', highestPrognosticImplicationLevel: '', highestFdaLevel: '', + penetrance: '', + inheritanceMechanism: '', tumorType: 0, }; @@ -446,6 +468,18 @@ export const DEFAULT_MUTATION_EFFECT = { knownEffect: '', }; +export const DEFAULT_GERMLINE_VARIANT = { + cancerRisk: '', + clinVarId: '', + description: '', + genomicIndicators: [], + inheritanceMechanism: '', + inheritanceMechanismDescription: '', + pathogenic: '', + penetrance: '', + penetranceDescription: '', +}; + export const DEFAULT_QUERY = { alteration: '', alterationType: '', @@ -460,6 +494,8 @@ export const DEFAULT_QUERY = { svType: 'UNKNOWN' as 'UNKNOWN', tumorType: '', type: '', + germline: false, + alleleState: '', }; export const DEFAULT_ANNOTATION: VariantAnnotation = { @@ -494,6 +530,7 @@ export const DEFAULT_ANNOTATION: VariantAnnotation = { vue: false, vus: false, + germline: DEFAULT_GERMLINE_VARIANT, }; export enum PAGE_TITLE { @@ -564,6 +601,8 @@ export enum PAGE_ROUTE { CDX = '/companion-diagnostic-devices', GENE_HEADER = '/gene', GENE = '/gene/:hugoSymbol', + SOMATIC_GENE = '/gene/:hugoSymbol/somatic', + GERMLINE_GENE = '/gene/:hugoSymbol/germline', ALTERATION = '/gene/:hugoSymbol/:alteration', HGVSG = '/hgvsg', HGVSG_WITH_QUERY = '/hgvsg/:query', @@ -626,6 +665,10 @@ export enum TABLE_COLUMN_KEY { ONCOGENICITY = 'ONCOGENICITY', MUTATION_EFFECT = 'MUTATION_EFFECT', DESCRIPTION = 'DESCRIPTION', + PATHOGENICITY = 'PATHOGENICITY', + PENETRANCE = 'PENETRANCE', + INHERITANCE_MECHANISM = 'INHERITANCE_MECHANISM', + CANCER_RISK = 'CANCER_RISK', } export const ONCOGENIC_MUTATIONS = 'Oncogenic Mutations'; diff --git a/src/main/webapp/app/config/theme.ts b/src/main/webapp/app/config/theme.ts index 5e3113a46..c6936cb8f 100644 --- a/src/main/webapp/app/config/theme.ts +++ b/src/main/webapp/app/config/theme.ts @@ -5,8 +5,11 @@ export const COLOR_PRIMARY = COLOR_BLUE; export const COLOR_GREY = '#808080'; export const COLOR_LIGHT_GREY = '#D3D3D3'; export const COLOR_BLACK = '#000'; +export const COLOR_WHITE = '#fff'; export const COLOR_WARNING = '#ffc107'; export const COLOR_ERROR = '#dc3545'; export const COLOR_ICON_WITH_INFO = COLOR_BLACK; export const COLOR_ICON_WITHOUT_INFO = COLOR_LIGHT_GREY; + +export const COLOR_SOMATIC = COLOR_BLUE; diff --git a/src/main/webapp/app/index.scss b/src/main/webapp/app/index.scss index 45f67b4ae..302748f23 100644 --- a/src/main/webapp/app/index.scss +++ b/src/main/webapp/app/index.scss @@ -10,15 +10,31 @@ body, height: 100%; } +body { + background-color: $pale-warm-grey !important; +} + +#root { + max-width: 1500px; + margin: 0 auto; + background-color: #fff; +} + h1, -h2 { +h2, +.h1, +.h2 { @include font-gotham('bold'); } h3, h4, h5, -h6 { +h6, +.h3, +.h4, +.h5, +.h6 { @include font-gotham('medium'); } @@ -29,6 +45,7 @@ b { .Main { min-height: 100%; position: relative; + background-color: #fff; } @import '~bootstrap/scss/bootstrap'; @import 'font'; @@ -281,6 +298,22 @@ input[type='radio']:checked { } } +// Overwrite react-responsive-tabs +.RRT__tab.RRT__tab--selected { + border: solid $primary !important; + border-radius: 5px 5px 0 0; + border-width: 3px 1px 1px 1px !important; + border-bottom-color: #ffffff !important; +} +.RRT__tab { + border: 0 !important; + background-color: transparent !important; + border-bottom: 1px solid $primary !important; +} +.RRT__panel { + border-top: 1px solid $primary !important; +} + .oncokbReactTable.ReactTable.fixedHeight { .rt-table { .rt-thead { diff --git a/src/main/webapp/app/pages/HomePage.tsx b/src/main/webapp/app/pages/HomePage.tsx index c4995d4a5..390649165 100644 --- a/src/main/webapp/app/pages/HomePage.tsx +++ b/src/main/webapp/app/pages/HomePage.tsx @@ -225,7 +225,7 @@ class HomePage extends React.Component { - + { - + - - - + + +
{ {levelTypeButtons}
- +
- - + {this.levelGadgets.map( levelGadget => ((this.levelTypeSelected === LEVEL_TYPES.DX && @@ -310,48 +306,35 @@ class HomePage extends React.Component { (this.levelTypeSelected === LEVEL_TYPES.FDA && LEVEL_CLASSIFICATION[levelGadget.level] === LEVEL_TYPES.FDA)) && ( - - - + ) )} - diff --git a/src/main/webapp/app/pages/annotationPage/AlterationView.tsx b/src/main/webapp/app/pages/annotationPage/AlterationView.tsx index f2a551259..8cc3929f5 100644 --- a/src/main/webapp/app/pages/annotationPage/AlterationView.tsx +++ b/src/main/webapp/app/pages/annotationPage/AlterationView.tsx @@ -194,7 +194,7 @@ export default class AlterationView extends React.Component< } } cancerType={this.props.tumorType} - biological={this.relevantBiologicalVariants} + biological={[]} tx={this.props.therapeuticImplications} dx={this.props.diagnosticImplications} px={this.props.prognosticImplications} diff --git a/src/main/webapp/app/pages/annotationPage/AnnotatedAlterations.tsx b/src/main/webapp/app/pages/annotationPage/AnnotatedAlterations.tsx new file mode 100644 index 000000000..c59d3b91d --- /dev/null +++ b/src/main/webapp/app/pages/annotationPage/AnnotatedAlterations.tsx @@ -0,0 +1,149 @@ +import { computed } from 'mobx'; +import { SearchColumn } from 'app/components/oncokbTable/OncoKBTable'; +import { BiologicalVariant } from 'app/shared/api/generated/OncoKbPrivateAPI'; +import { + filterByKeyword, + getDefaultColumnDefinition, +} from 'app/shared/utils/Utils'; +import { + ONCOKB_TM, + REFERENCE_GENOME, + TABLE_COLUMN_KEY, +} from 'app/config/constants'; +import { AlterationPageLink } from 'app/shared/utils/UrlUtils'; +import { Citations } from 'app/shared/api/generated/OncoKbAPI'; +import { DescriptionTooltip } from 'app/pages/annotationPage/DescriptionTooltip'; +import SummaryWithRefs from 'app/oncokb-frontend-commons/src/components/SummaryWithRefs'; +import React, { FunctionComponent } from 'react'; +import { GenePageTable } from 'app/pages/genePage/GenePageTable'; + +const getColumns = (germline: boolean, hugoSymbol: string) => { + const altColumn = { + ...getDefaultColumnDefinition(TABLE_COLUMN_KEY.ALTERATION), + accessor: 'variant', + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.variant.name, keyword), + Cell(props: { original: BiologicalVariant }) { + return ( + <> + + + ); + }, + }; + const descriptionColumn = { + ...getDefaultColumnDefinition(TABLE_COLUMN_KEY.DESCRIPTION), + accessor(d: BiologicalVariant) { + return { + abstracts: d.pathogenicAbstracts, + pmids: d.pathogenicPmids, + } as Citations; + }, + Cell(props: { original: BiologicalVariant }) { + return ( +
+ {props.original.mutationEffectDescription ? ( + + } + /> + ) : undefined} +
+ ); + }, + }; + const somaticColumns = [ + altColumn, + { + ...getDefaultColumnDefinition(TABLE_COLUMN_KEY.ONCOGENICITY), + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.oncogenic, keyword), + }, + { + ...getDefaultColumnDefinition(TABLE_COLUMN_KEY.MUTATION_EFFECT), + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.mutationEffect, keyword), + }, + descriptionColumn, + ]; + const germlineColumns = [ + altColumn, + { + Header: Protein Change, + accessor: 'variant.proteinChange', + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.variant.proteinChange, keyword), + }, + { + Header: Pathogenicity, + accessor: 'pathogenic', + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.pathogenic, keyword), + }, + { + Header: Penetrance, + accessor: 'penetrance', + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.penetrance, keyword), + }, + { + Header: Mechanism of Inheritance, + accessor: 'inheritanceMechanism', + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.inheritanceMechanism, keyword), + }, + { + Header: Cancer Risk, + accessor: 'cancerRisk', + onFilter: (data: BiologicalVariant, keyword: string) => + filterByKeyword(data.cancerRisk, keyword), + }, + descriptionColumn, + ]; + return germline ? germlineColumns : somaticColumns; +}; + +const AnnotatedAlterations: FunctionComponent<{ + germline: boolean; + hugoSymbol: string; + alterations: BiologicalVariant[]; + isLargeScreen?: boolean; +}> = props => { + const style = props.isLargeScreen + ? { + width: '80%', + marginBottom: '-30px', + zIndex: 1, + } + : undefined; + return ( + <> +
+ + A list of the oncogenic and mutation effects of{' '} + all {ONCOKB_TM} curated {props.hugoSymbol} alterations. + +
+ + + ); +}; + +export default AnnotatedAlterations; diff --git a/src/main/webapp/app/pages/annotationPage/AnnotationPage.tsx b/src/main/webapp/app/pages/annotationPage/AnnotationPage.tsx index 5295385f3..6067995c9 100644 --- a/src/main/webapp/app/pages/annotationPage/AnnotationPage.tsx +++ b/src/main/webapp/app/pages/annotationPage/AnnotationPage.tsx @@ -306,7 +306,9 @@ export default class AnnotationPage extends React.Component< // convert all alterations to matchedAlteration/alteration query if not positional variant let mappedAlteration = {} as Alteration; if ( - this.props.store.relevantAlterations.result.map(relevantAlt => relevantAlt.alteration).includes(alt.alteration) + this.props.store.relevantAlterations.result + .map(relevantAlt => relevantAlt.alteration) + .includes(alt.alteration) ) { mappedAlteration = alt; } else { diff --git a/src/main/webapp/app/pages/genePage/GeneAdditionalInfoTable.tsx b/src/main/webapp/app/pages/genePage/GeneAdditionalInfoTable.tsx index 6ed09cd9a..19e927a87 100644 --- a/src/main/webapp/app/pages/genePage/GeneAdditionalInfoTable.tsx +++ b/src/main/webapp/app/pages/genePage/GeneAdditionalInfoTable.tsx @@ -2,28 +2,29 @@ import React from 'react'; import { Table } from 'react-bootstrap'; import { EnsemblGene, Gene } from 'app/shared/api/generated/OncoKbPrivateAPI'; import { Linkout } from 'app/shared/links/Linkout'; -import styles from 'app/pages/genePage/GenePage.module.scss'; import { REFERENCE_GENOME } from 'app/config/constants'; +import ExternalLinkIcon from 'app/shared/icons/ExternalLinkIcon'; const EnsemblIdLinkout: React.FunctionComponent<{ ensemblId: string; referenceGenome: REFERENCE_GENOME; + className?: string; }> = props => { return ( - {props.children ? props.children : props.ensemblId} - + ); }; const getEnsemblText = (grch37: string, grch38: string) => { if (grch37 === grch38) { return ( - + {grch37} ( { ); } else { return ( -
+
{grch37 && ( -
+
+ {grch37} ( {' '} - ({REFERENCE_GENOME.GRCh37}) + > + {REFERENCE_GENOME.GRCh37} + + )
)} {grch38 && ( -
+
+ {grch38} ( {' '} - ({REFERENCE_GENOME.GRCh38}) + > + {REFERENCE_GENOME.GRCh38} + + )
)}
@@ -71,18 +78,17 @@ const RefSeqLinkout: React.FunctionComponent<{ referenceGenome: REFERENCE_GENOME; }> = props => { return ( - {props.children ? props.children : props.refSeq} - + ); }; const getRefSeqText = (grch37: string, grch38: string) => { if (grch37 === grch38) { return ( - + {grch37} ( { } }; +const getTableDataStyle = (row: number, col: number) => { + const style: Partial = {}; + if (row === 0) { + style.borderTop = 0; + } + if (col === 0) { + style.width = 160; + } + return style; +}; const GeneAdditionalInfoTable: React.FunctionComponent<{ gene: Gene; grch37ensemblGene?: EnsemblGene; @@ -136,7 +152,6 @@ const GeneAdditionalInfoTable: React.FunctionComponent<{ content.push([ 'NCBI Gene', {props.gene.entrezGeneId} @@ -155,10 +170,10 @@ const GeneAdditionalInfoTable: React.FunctionComponent<{ 'Location',
{props.grch37ensemblGene && ( -
{`Chr${props.grch37ensemblGene?.chromosome}:${props.grch37ensemblGene?.start}-${props.grch37ensemblGene?.end} (GRch37)`}
+
{`Chr${props.grch37ensemblGene?.chromosome}:${props.grch37ensemblGene?.start}-${props.grch37ensemblGene?.end} (GRCh37)`}
)} {props.grch38ensemblGene && ( -
{`Chr${props.grch38ensemblGene?.chromosome}:${props.grch38ensemblGene?.start}-${props.grch38ensemblGene?.end} (GRch38)`}
+
{`Chr${props.grch38ensemblGene?.chromosome}:${props.grch38ensemblGene?.start}-${props.grch38ensemblGene?.end} (GRCh38)`}
)}
, ]); @@ -176,14 +191,15 @@ const GeneAdditionalInfoTable: React.FunctionComponent<{ ]); } - const firstRowTdStyle = { borderTop: 0 }; return ( {content.map((item, index) => ( - - + + ))} diff --git a/src/main/webapp/app/pages/genePage/GeneInfo.tsx b/src/main/webapp/app/pages/genePage/GeneInfo.tsx index 5c3188781..5792aa3c7 100644 --- a/src/main/webapp/app/pages/genePage/GeneInfo.tsx +++ b/src/main/webapp/app/pages/genePage/GeneInfo.tsx @@ -119,7 +119,7 @@ export const getHighestLevelStrings = ( ); }; -const getGeneTypeSentence = (oncogene: boolean, tsg: boolean) => { +export const getGeneTypeSentence = (oncogene: boolean, tsg: boolean) => { const geneTypes = []; if (oncogene) { geneTypes.push(GENE_TYPE_DESC.ONCOGENE); diff --git a/src/main/webapp/app/pages/genePage/GenePage.module.scss b/src/main/webapp/app/pages/genePage/GenePage.module.scss index 957915039..c9b2e1b5b 100644 --- a/src/main/webapp/app/pages/genePage/GenePage.module.scss +++ b/src/main/webapp/app/pages/genePage/GenePage.module.scss @@ -28,3 +28,8 @@ padding-left: 0; padding-right: 0; } + +.infoTile { + margin-top: 1rem; + flex-grow: 1; +} diff --git a/src/main/webapp/app/pages/genePage/GenePage.tsx b/src/main/webapp/app/pages/genePage/GenePage.tsx index f3bb5760e..e3a446e6d 100644 --- a/src/main/webapp/app/pages/genePage/GenePage.tsx +++ b/src/main/webapp/app/pages/genePage/GenePage.tsx @@ -469,7 +469,7 @@ export default class GenePage extends React.Component { - +
{ )}
- + = props => { + const columns: SearchColumn[] = [ + { + Header: Name, + accessor: 'name', + width: 400, + }, + { + Header: Allele State, + accessor: 'knownEffect', + width: 150, + }, + { + Header: Description, + accessor: 'description', + Cell(row: { original: Evidence }) { + return ( + + ); + }, + }, + { + Header: Associated Variants, + width: 200, + Cell(row: { original: Evidence }) { + return ( + + {row.original.alterations + .map(alt => getAlterationName(alt)) + .join(', ')} + + ); + }, + }, + ]; + return ( + THRESHOLD_TABLE_FIXED_HEIGHT + ? { + height: LG_TABLE_FIXED_HEIGHT, + } + : undefined + } + /> + ); +}; diff --git a/src/main/webapp/app/pages/genePage/SomaticGermlineGenePage.tsx b/src/main/webapp/app/pages/genePage/SomaticGermlineGenePage.tsx new file mode 100644 index 000000000..bf58ea4c1 --- /dev/null +++ b/src/main/webapp/app/pages/genePage/SomaticGermlineGenePage.tsx @@ -0,0 +1,948 @@ +import React, { FunctionComponent } from 'react'; +import { inject, observer } from 'mobx-react'; +import { + AnnotationStore, + FdaImplication, + TherapeuticImplication, +} from 'app/store/AnnotationStore'; +import { + action, + computed, + IReactionDisposer, + observable, + reaction, +} from 'mobx'; +import { Else, If, Then } from 'react-if'; +import { Redirect, RouteComponentProps } from 'react-router'; +import { Button, Col, Container, Row } from 'react-bootstrap'; +import { + getCancerTypeNameFromOncoTreeType, + getCancerTypesName, + getPageTitle, +} from 'app/shared/utils/Utils'; +import LoadingIndicator, { + LoaderSize, +} from 'app/components/loadingIndicator/LoadingIndicator'; +import autobind from 'autobind-decorator'; +import BarChart from 'app/components/barChart/BarChart'; +import { capitalize, DefaultTooltip } from 'cbioportal-frontend-commons'; +import { + ANNOTATION_PAGE_TAB_KEYS, + ANNOTATION_PAGE_TAB_NAMES, + DEFAULT_GENE, + LEVEL_CLASSIFICATION, + LEVEL_TYPES, + ONCOGENIC_MUTATIONS, + ONCOKB_NEWS_GROUP_SUBSCRIPTION_LINK, + PAGE_ROUTE, + REFERENCE_GENOME, +} from 'app/config/constants'; +import { ClinicalVariant } from 'app/shared/api/generated/OncoKbPrivateAPI'; +import { + AlterationPageLink, + getGenePageLink, + parseGenePagePath, +} from 'app/shared/utils/UrlUtils'; +import AppStore from 'app/store/AppStore'; +import { MskimpactLink } from 'app/components/MskimpactLink'; +import WindowStore from 'app/store/WindowStore'; +import { DataFilterType, onFilterOptionSelect } from 'react-mutation-mapper'; +import { CANCER_TYPE_FILTER_ID } from 'app/components/oncokbMutationMapper/FilterUtils'; +import { UnknownGeneAlert } from 'app/shared/alert/UnknownGeneAlert'; +import WithSeparator from 'react-with-separator'; +import { FeedbackIcon } from 'app/components/feedback/FeedbackIcon'; +import { FeedbackType } from 'app/components/feedback/types'; +import * as QueryString from 'query-string'; +import { RouterStore } from 'mobx-react-router'; +import { + GenePageHashQueries, + GenePageSearchQueries, +} from 'app/shared/route/types'; +import AlterationTableTabs from 'app/pages/annotationPage/AlterationTableTabs'; +import { getGeneTypeSentence } from './GeneInfo'; +import GeneAdditionalInfoTable from 'app/pages/genePage/GeneAdditionalInfoTable'; +import OncokbLollipopPlot from './OncokbLollipopPlot'; +import { getUniqueFdaImplications } from 'app/pages/annotationPage/Utils'; +import ShowHideText from 'app/shared/texts/ShowHideText'; +import { AnnotationType } from 'app/pages/annotationPage/AnnotationPage'; +import SummaryWithRefs from 'app/oncokb-frontend-commons/src/components/SummaryWithRefs'; +import { findLast } from 'app/shared/utils/LodashUtils'; +import { Helmet } from 'react-helmet-async'; +import { NcbiLink } from 'app/shared/links/NcbiLink'; +import GeneAliasesDescription from 'app/shared/texts/GeneAliasesDescription'; +import { COLOR_GREY, COLOR_SOMATIC } from 'app/config/theme'; +import LoETile from 'app/components/infoTile/LoETile'; +import GeneticTypeTabs, { + GENETIC_TYPE, +} from 'app/components/geneticTypeTabs/GeneticTypeTabs'; +import InfoTile from 'app/components/infoTile/InfoTile'; +import AnnotatedAlterations from 'app/pages/annotationPage/AnnotatedAlterations'; +import { + LinkedInLink, + TwitterLink, +} from 'app/shared/links/SocialMediaLinks'; +import styles from './GenePage.module.scss'; +import StickyMiniNavBar from 'app/shared/nav/StickyMiniNavBar'; +import MiniNavBarHeader from 'app/shared/nav/MiniNavBarHeader'; +import { GenomicIndicatorTable } from 'app/pages/genePage/GenomicIndicatorTable'; +import GeneticTypeTag from 'app/components/geneticTypeTag/GeneticTypeTag'; + +interface MatchParams { + hugoSymbol: string; +} + +interface GenePageProps extends RouteComponentProps { + appStore: AppStore; + windowStore: WindowStore; + routing: RouterStore; +} + +const NoContent: FunctionComponent<{ + geneticType: GENETIC_TYPE; +}> = props => { + return ( +
+

+ There are no {props.geneticType} mutations annotated in this gene. +

+

Data will be updated as new findings emerge.

+

+

Don’t miss out on the latest data releases and new features.
+
+ Follow us on and , or subscribe to our + low-volume email list! +
+

+ +
+ ); +}; + +@inject('appStore', 'windowStore', 'routing') +@observer +export default class SomaticGermlineGenePage extends React.Component< + GenePageProps, + any +> { + @observable hugoSymbolQuery: string; + @observable showGeneBackground: boolean; + @observable showAdditionalGeneInfo = false; + @observable showPrevalenceData = false; + @observable selectedGeneticType: GENETIC_TYPE; + @observable selectedTab: ANNOTATION_PAGE_TAB_KEYS; + @observable defaultSelectedTab: ANNOTATION_PAGE_TAB_KEYS; + + private store: AnnotationStore; + readonly reactions: IReactionDisposer[] = []; + + getAlterationsByLevelType( + alterations: ClinicalVariant[], + levelType: LEVEL_TYPES + ) { + return alterations.filter(alt => { + return LEVEL_CLASSIFICATION[alt.level] === levelType; + }); + } + + @computed + get filteredTxAlterations() { + if (this.store.filteredClinicalAlterations.length === 0) { + return []; + } + return this.getAlterationsByLevelType( + this.store.filteredClinicalAlterations, + LEVEL_TYPES.TX + ); + } + + getClinicalImplications( + clinicalVariants: ClinicalVariant[] + ): TherapeuticImplication[] { + return clinicalVariants.reduce((acc, variant) => { + const cancerTypeNames = variant.cancerTypes.map(cancerType => + getCancerTypeNameFromOncoTreeType(cancerType) + ); + const excludedCancerTypeNames = variant.excludedCancerTypes.map( + cancerType => getCancerTypeNameFromOncoTreeType(cancerType) + ); + const alterationView = variant.variant.consequence ? ( + + ) : ( + {variant.variant.name} + ); + const cancerTypesName = getCancerTypesName( + cancerTypeNames, + excludedCancerTypeNames + ); + const cancerTypesView = ( + <> + + {cancerTypeNames.map(cancerType => + variant.variant.consequence ? ( + + {cancerType} + + ) : ( + {cancerType} + ) + )} + + {excludedCancerTypeNames.length > 0 ? ( + (excluding {excludedCancerTypeNames.join(', ')}) + ) : ( + <> + )} + + ); + if (variant.drug.length > 0) { + variant.drug.forEach(drug => { + acc.push({ + level: variant.level, + alterations: variant.variant.name, + alterationsView: alterationView, + drugs: drug, + cancerTypes: cancerTypesName, + drugDescription: variant.drugDescription, + cancerTypesView, + citations: { + abstracts: variant.drugAbstracts, + pmids: variant.drugPmids, + }, + }); + }); + } else { + acc.push({ + level: variant.level, + alterations: variant.variant.name, + alterationsView: alterationView, + drugs: '', + cancerTypes: cancerTypesName, + drugDescription: variant.drugDescription, + cancerTypesView, + citations: { + abstracts: variant.drugAbstracts, + pmids: variant.drugPmids, + }, + }); + } + return acc; + }, [] as TherapeuticImplication[]); + } + + getFdaImplication(clinicalVariants: ClinicalVariant[]): FdaImplication[] { + const fdaImplications: FdaImplication[] = []; + clinicalVariants.forEach(clinicalVariant => { + let variants: ClinicalVariant[] = [clinicalVariant]; + // we want to link all oncogenic mutations with Oncogenic Mutations clinical variant + if (clinicalVariant.variant.name === ONCOGENIC_MUTATIONS) { + variants = this.store.oncogenicBiologicalVariants.map( + biologicalVariant => ({ + ...clinicalVariant, + variant: biologicalVariant.variant, + }) + ); + } + variants.forEach(variant => { + const ctNames = variant.cancerTypes.map(ct => + getCancerTypeNameFromOncoTreeType(ct) + ); + const excludedCtNames = variant.excludedCancerTypes.map(ct => + getCancerTypeNameFromOncoTreeType(ct) + ); + fdaImplications.push({ + level: variant.fdaLevel, + alteration: variant.variant, + alterationView: ( + + {variant.variant.name} + + ), + cancerType: getCancerTypesName(ctNames, excludedCtNames), + cancerTypeView: ( + <> + + {ctNames.map(cancerType => ( + + {cancerType} + + ))} + + {excludedCtNames.length > 0 ? ( + (excluding {excludedCtNames.join(', ')}) + ) : ( + <> + )} + + ), + }); + }); + }); + return getUniqueFdaImplications(fdaImplications); + } + + @computed + get filteredDxAlterations() { + if (this.store.filteredClinicalAlterations.length === 0) { + return []; + } + return this.getAlterationsByLevelType( + this.store.filteredClinicalAlterations, + LEVEL_TYPES.DX + ); + } + + @computed + get filteredPxAlterations() { + if (this.store.filteredClinicalAlterations.length === 0) { + return []; + } + return this.getAlterationsByLevelType( + this.store.filteredClinicalAlterations, + LEVEL_TYPES.PX + ); + } + + @computed + get hasClinicalImplications() { + return ( + this.filteredTxAlterations.length > 0 || + this.filteredDxAlterations.length > 0 || + this.filteredPxAlterations.length > 0 + ); + } + + @computed + get hasContent() { + return ( + this.hasClinicalImplications || + this.store.filteredBiologicalAlterations.length > 0 + ); + } + + constructor(props: any) { + super(props); + // eslint-disable-next-line no-console + console.log(`gene page constructer}`); + const genePagePath = parseGenePagePath(window.location.pathname); + if (genePagePath.geneticType) { + this.selectedGeneticType = genePagePath.geneticType; + } + this.hugoSymbolQuery = props.match.params + ? props.match.params.hugoSymbol + : undefined; + const queryStringsHash = QueryString.parse( + window.location.hash + ) as GenePageHashQueries; + if (queryStringsHash.tab) { + this.selectedTab = queryStringsHash.tab; + } + + this.props.appStore.toFdaRecognizedContent = false; + this.reactions.push( + reaction( + () => this.defaultShowGeneBackground, + defaultShowGeneBackground => { + if ( + this.showGeneBackground === undefined && + defaultShowGeneBackground !== undefined + ) { + this.showGeneBackground = defaultShowGeneBackground; + } + } + ), + reaction( + () => [props.routing.location.search], + ([search]) => { + const queryStrings = QueryString.parse( + search + ) as GenePageSearchQueries; + if (queryStrings.refGenome) { + this.store.referenceGenomeQuery = queryStrings.refGenome; + } + }, + { fireImmediately: true } + ), + reaction( + () => [props.routing.location.hash], + ([hash]) => { + const queryStrings = QueryString.parse(hash) as GenePageHashQueries; + if (queryStrings.tab) { + this.defaultSelectedTab = queryStrings.tab; + if (queryStrings.tab === ANNOTATION_PAGE_TAB_KEYS.FDA) { + this.props.appStore.inFdaRecognizedContent = true; + } + } + }, + true + ), + reaction( + () => [this.selectedGeneticType], + ([newGeneticType]) => { + this.props.routing.history.push( + getGenePageLink({ + hugoSymbol: this.hugoSymbolQuery, + geneticType: newGeneticType, + }) + ); + this.store = new AnnotationStore({ + type: AnnotationType.GENE, + germline: newGeneticType === 'germline', + hugoSymbolQuery: this.hugoSymbolQuery, + }); + }, + true + ) + ); + } + + componentDidUpdate(prevProps: any) { + if ( + this.props.match.params.hugoSymbol !== prevProps.match.params.hugoSymbol + ) { + this.hugoSymbolQuery = this.props.match.params.hugoSymbol; + this.store.hugoSymbolQuery = this.hugoSymbolQuery; + } + } + + @autobind + @action + toggleGeneBackground() { + this.showGeneBackground = !this.showGeneBackground; + } + + @autobind + @action + toggleAdditionalGeneInfo() { + this.showAdditionalGeneInfo = !this.showAdditionalGeneInfo; + } + + @autobind + @action + onChangeTab( + selectedTab: ANNOTATION_PAGE_TAB_KEYS, + newTabKey: ANNOTATION_PAGE_TAB_KEYS + ) { + if (newTabKey === ANNOTATION_PAGE_TAB_KEYS.FDA) { + this.props.appStore.inFdaRecognizedContent = true; + } + if ( + selectedTab === ANNOTATION_PAGE_TAB_KEYS.FDA && + newTabKey !== ANNOTATION_PAGE_TAB_KEYS.FDA + ) { + this.props.appStore.showFdaModal = true; + } else { + const newHash: GenePageHashQueries = { tab: newTabKey }; + window.location.hash = QueryString.stringify(newHash); + } + } + + @computed + get pageShouldBeRendered() { + return ( + this.store.geneNumber.isComplete && + this.store.gene.isComplete && + this.store.clinicalAlterations.isComplete && + this.store.biologicalAlterations.isComplete + ); + } + + @computed + get genePanelClass() { + if (this.store.barChartData.length > 0) { + return { + xl: 8, + lg: 8, + xs: 12, + }; + } else { + return { + xl: 12, + lg: 12, + xs: 12, + }; + } + } + + @computed + get isGermline() { + return this.selectedGeneticType === 'germline'; + } + + @computed + get defaultShowGeneBackground() { + if (this.store.biologicalAlterations.isComplete) { + return this.store.biologicalAlterations.result.length === 0; + } else { + return undefined; + } + } + + componentWillUnmount(): void { + for (const reactionItem of this.reactions) { + reactionItem(); + } + this.store.destroy(); + } + + render() { + return ( + <> + + {getPageTitle(`${this.store.hugoSymbol}`)} + + + + + + + + {this.store.gene.isError || + this.store.gene.result === DEFAULT_GENE ? ( + + ) : ( + + + + +
+
+ + {this.store.hugoSymbol} + + {this.store.gene.result.geneAliases.length > + 0 && ( + + )} + + + +
+
+ {getGeneTypeSentence( + this.store.gene.result.oncogene, + this.store.gene.result.tsg + )} +
+
+ + | + +
+ {this.showAdditionalGeneInfo && ( + + + + item.referenceGenome === + REFERENCE_GENOME.GRCh37 + )} + grch38ensemblGene={findLast( + this.store.ensemblGenes.result, + item => + item.referenceGenome === + REFERENCE_GENOME.GRCh38 + )} + /> + + + )} + {this.store.geneSummary.result && ( +
+ + +
+ )} + {this.showGeneBackground && ( +
+ +
+ )} + + + + + (this.selectedGeneticType = status) + } + routing={this.props.routing} + hugoSymbol={this.store.hugoSymbol} + geneticType={this.selectedGeneticType} + /> + {this.hasContent && ( + + {this.store.hugoSymbol} + + + } + linkUnderlineColor={COLOR_SOMATIC} + /> + )} + + +
+ {!this.hasContent && ( + + )} + {this.hasContent && ( + <> +
+ {this.isGermline && ( + + )} + + { + return { + title: + pathogenicity.pathogenicity, + content: pathogenicity.counts.toString(), + }; + } + ) + : this.store.uniqOncogenicity.map( + oncogenicity => { + return { + title: + oncogenicity.oncogenicity, + content: oncogenicity.counts.toString(), + }; + } + ) + } + /> +
+ 0 && + this.store.mutationMapperDataPortal.result + .length > 0 && + !this.isGermline + } + > +
+ } + title={'prevalence data'} + onClick={() => + (this.showPrevalenceData = !this + .showPrevalenceData) + } + /> + {this.showPrevalenceData && ( + +
+
+ Annotated Mutations in{' '} + +
+ + + {this.store.barChartData.length > 0 ? ( + +
+ Cancer Types with{' '} + {this.store.hugoSymbol} Mutations + ( +
+ Currently, the mutation + frequency does not take into + account copy number changes, + chromosomal translocations + or cancer types with fewer + than 50 samples in{' '} + +
+ )} + > + +
+
+ + this.store + .mutationMapperStore && + this.store.mutationMapperStore + .result + ? onFilterOptionSelect( + selectedCancerTypes, + false, + this.store + .mutationMapperStore + .result.dataStore, + DataFilterType.CANCER_TYPE, + CANCER_TYPE_FILTER_ID + ) + : undefined + } + /> + + ) : null} + + )} + + + {this.isGermline && ( + <> + + Genomic Indicators + + + + )} + {this.hasClinicalImplications && ( + <> + + Clinical Implications + + + + )} + {this.store.filteredBiologicalAlterations + .length > 0 && ( + <> + + Annotated{' '} + {this.isGermline + ? 'Variants' + : 'Alterations'} + + + + )} + + )} + + + + + + + + + )} + + + + + + + + + + + + ); + } +} diff --git a/src/main/webapp/app/routes/routes.tsx b/src/main/webapp/app/routes/routes.tsx index 75c7d65b0..b95a37211 100644 --- a/src/main/webapp/app/routes/routes.tsx +++ b/src/main/webapp/app/routes/routes.tsx @@ -9,7 +9,7 @@ import AuthenticationStore from 'app/store/AuthenticationStore'; import CancerGenesPage from 'app/pages/CancerGenesPage'; import ActionableGenesPage from 'app/pages/actionableGenesPage/ActionableGenesPage'; import { RouterStore } from 'mobx-react-router'; -import GenePage from 'app/pages/genePage/GenePage'; +import SomaticGermlineGenePage from 'app/pages/genePage/SomaticGermlineGenePage'; import AlterationPage from 'app/pages/alterationPage/AlterationPage'; import { AccountPage } from 'app/pages/AccountPage'; import ActivateAccount from 'app/components/account/ActivateAccount'; @@ -18,10 +18,8 @@ import PasswordResetFinish from 'app/components/account/PasswordResetFinish'; import PageNotFound from 'app/shared/error/page-not-found'; import AccountPassword from 'app/components/account/AccountPassword'; import AdminRoutes from 'app/routes/AdminRoutes'; -import PageContainer from 'app/components/PageContainer'; import React from 'react'; import LevelOfEvidencePage, { Version } from 'app/pages/LevelOfEvidencePage'; -import NewsPage from 'app/pages/newsPage/NewsPage'; import { RecaptchaBoundaryRoute } from '../shared/auth/RecaptchaBoundaryRoute'; import GenomicPage from 'app/pages/genomicPage/GenomicPage'; import UserPage from 'app/pages/userPage/UserPage'; @@ -38,6 +36,7 @@ import OncologyTherapiesPage from 'app/pages/oncologyTherapiesPage/oncologyThera import { NewsPageNavTab } from 'app/pages/newsPage/NewsPageNavTab'; import CompanionDiagnosticDevicePage from 'app/pages/companionDiagnosticDevicesPage/companionDiagnosticDevicePage'; import OncokbRoute from 'app/shared/route/OncokbRoute'; +import GenePage from 'app/pages/genePage/GenePage'; const getOldLevelsRedirectRoute = (hash: string) => { const queryStrings = QueryString.parse(hash) as { @@ -66,7 +65,7 @@ const getOldLevelsRedirectRoute = (hash: string) => { return ; }; -const AppRouts = (props: { +const AppRoutes = (props: { authenticationStore: AuthenticationStore; appStore: AppStore; routing: RouterStore; @@ -111,238 +110,234 @@ const AppRouts = (props: { to={PAGE_ROUTE.ALTERATION} /> - - - - - - - - - - - - - - - - - - - - - - - - - {getOldLevelsRedirectRoute(window.location.hash)} - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + {getOldLevelsRedirectRoute(window.location.hash)} + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + ); }; -export default AppRouts; +export default AppRoutes; diff --git a/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json b/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json index 4c8d16582..c931835aa 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json +++ b/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json @@ -123,6 +123,21 @@ "required": false, "type": "string" }, + { + "name": "germline", + "in": "query", + "description": "Whether is germline variant", + "required": false, + "type": "boolean", + "default": false + }, + { + "name": "alleleState", + "in": "query", + "description": "Germline variant allele state(monoallelic vs biallelic)", + "required": false, + "type": "string" + }, { "name": "evidenceType", "in": "query", @@ -222,6 +237,21 @@ "type": "string", "default": "GRCh37" }, + { + "name": "germline", + "in": "query", + "description": "Whether is germline variant", + "required": false, + "type": "boolean", + "default": false + }, + { + "name": "alleleState", + "in": "query", + "description": "Germline variant allele state(monoallelic vs biallelic)", + "required": false, + "type": "string" + }, { "name": "tumorType", "in": "query", @@ -335,6 +365,21 @@ "required": false, "type": "string" }, + { + "name": "germline", + "in": "query", + "description": "Whether is germline variant", + "required": false, + "type": "boolean", + "default": false + }, + { + "name": "alleleState", + "in": "query", + "description": "Germline variant allele state(monoallelic vs biallelic)", + "required": false, + "type": "string" + }, { "name": "evidenceType", "in": "query", @@ -484,6 +529,21 @@ "type": "integer", "format": "int32" }, + { + "name": "isGermline", + "in": "query", + "description": "Whether is germline variant", + "required": false, + "type": "boolean", + "default": false + }, + { + "name": "alleleState", + "in": "query", + "description": "Germline variant allele state(monoallelic vs biallelic)", + "required": false, + "type": "string" + }, { "name": "tumorType", "in": "query", @@ -629,6 +689,21 @@ "type": "boolean", "default": false }, + { + "name": "germline", + "in": "query", + "description": "Whether is germline variant", + "required": false, + "type": "boolean", + "default": false + }, + { + "name": "alleleState", + "in": "query", + "description": "Germline variant allele state(monoallelic vs biallelic)", + "required": false, + "type": "string" + }, { "name": "referenceGenome", "in": "query", @@ -967,6 +1042,13 @@ "description": "The fields to be returned.", "required": false, "type": "string" + }, + { + "name": "germline", + "in": "query", + "description": "false", + "required": false, + "type": "boolean" } ], "responses": { @@ -2259,6 +2341,9 @@ "AnnotateMutationByGenomicChangeQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "evidenceTypes": { "type": "array", "items": { @@ -2279,13 +2364,25 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, "genomicLocation": { "type": "string" }, + "germline": { + "type": "boolean" + }, "id": { "type": "string" }, @@ -2316,6 +2413,9 @@ "Query": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "alteration": { "type": "string" }, @@ -2329,6 +2429,9 @@ "type": "integer", "format": "int32" }, + "germline": { + "type": "boolean" + }, "hgvs": { "type": "string" }, @@ -2426,6 +2529,9 @@ "name": { "type": "string" }, + "proteinChange": { + "type": "string" + }, "proteinEnd": { "type": "integer", "format": "int32" @@ -2722,7 +2828,16 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] }, "gene": { @@ -2788,7 +2903,16 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] }, "excludedCancerTypes": { @@ -2881,6 +3005,9 @@ "NO" ] }, + "name": { + "type": "string" + }, "relevantCancerTypes": { "type": "array", "items": { @@ -2923,6 +3050,9 @@ "AnnotateStructuralVariantQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "evidenceTypes": { "type": "array", "items": { @@ -2943,7 +3073,16 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, @@ -2956,6 +3095,9 @@ "geneB": { "$ref": "#/definitions/QueryGene" }, + "germline": { + "type": "boolean" + }, "id": { "type": "string" }, @@ -3007,6 +3149,9 @@ "geneSummary": { "type": "string" }, + "germline": { + "$ref": "#/definitions/GermlineVariant" + }, "highestDiagnosticImplicationLevel": { "type": "string", "enum": [ @@ -3270,6 +3415,41 @@ } } }, + "GermlineVariant": { + "type": "object", + "properties": { + "cancerRisk": { + "type": "string" + }, + "clinVarId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "genomicIndicators": { + "type": "array", + "items": { + "type": "string" + } + }, + "inheritanceMechanism": { + "type": "string" + }, + "inheritanceMechanismDescription": { + "type": "string" + }, + "pathogenic": { + "type": "string" + }, + "penetrance": { + "type": "string" + }, + "penetranceDescription": { + "type": "string" + } + } + }, "InfoLevel": { "type": "object", "properties": { @@ -3622,6 +3802,9 @@ "AnnotateMutationByProteinChangeQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "alteration": { "type": "string" }, @@ -3648,13 +3831,25 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, "gene": { "$ref": "#/definitions/QueryGene" }, + "germline": { + "type": "boolean" + }, "id": { "type": "string" }, @@ -3967,6 +4162,9 @@ "AnnotateCopyNumberAlterationQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "copyNameAlterationType": { "type": "string", "enum": [ @@ -3996,13 +4194,25 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, "gene": { "$ref": "#/definitions/QueryGene" }, + "germline": { + "type": "boolean" + }, "id": { "type": "string" }, @@ -4021,6 +4231,9 @@ "AnnotateMutationByHGVSgQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "evidenceTypes": { "type": "array", "items": { @@ -4041,10 +4254,22 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, + "germline": { + "type": "boolean" + }, "hgvsg": { "type": "string" }, diff --git a/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts b/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts index e30269b6b..15a888f50 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts +++ b/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts @@ -2,10 +2,14 @@ import * as request from "superagent"; type CallbackHandler = (err: any, res ? : request.Response) => void; export type AnnotateMutationByGenomicChangeQuery = { - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'alleleState': string + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > 'genomicLocation': string + 'germline': boolean + 'id': string 'referenceGenome': "GRCh37" | "GRCh38" @@ -20,7 +24,9 @@ export type TreatmentDrug = { }; export type Query = { - 'alteration': string + 'alleleState': string + + 'alteration': string 'alterationType': string @@ -28,6 +34,8 @@ export type Query = { 'entrezGeneId': number + 'germline': boolean + 'hgvs': string 'hugoSymbol': string @@ -80,6 +88,8 @@ export type Alteration = { 'name': string + 'proteinChange': string + 'proteinEnd': number 'proteinStart': number @@ -208,7 +218,7 @@ export type GeneEvidence = { 'evidenceId': number - 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" 'gene': Gene @@ -232,7 +242,7 @@ export type Evidence = { 'description': string - 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" 'excludedCancerTypes': Array < TumorType > @@ -252,6 +262,8 @@ export type Evidence = { 'liquidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + 'name': string + 'relevantCancerTypes': Array < TumorType > 'solidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" @@ -262,7 +274,9 @@ export type Evidence = { }; export type AnnotateStructuralVariantQuery = { - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'alleleState': string + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > 'functionalFusion': boolean @@ -270,6 +284,8 @@ export type AnnotateStructuralVariantQuery = { 'geneB': QueryGene + 'germline': boolean + 'id': string 'referenceGenome': "GRCh37" | "GRCh38" @@ -292,6 +308,8 @@ export type IndicatorQueryResp = { 'geneSummary': string + 'germline': GermlineVariant + 'highestDiagnosticImplicationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" 'highestFdaLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" @@ -366,6 +384,26 @@ export type ArticleAbstract = { 'link': string +}; +export type GermlineVariant = { + 'cancerRisk': string + + 'clinVarId': string + + 'description': string + + 'genomicIndicators': Array < string > + + 'inheritanceMechanism': string + + 'inheritanceMechanismDescription': string + + 'pathogenic': string + + 'penetrance': string + + 'penetranceDescription': string + }; export type InfoLevel = { 'colorHex': string @@ -532,14 +570,18 @@ export type VariantConsequence = { }; export type AnnotateMutationByProteinChangeQuery = { - 'alteration': string + 'alleleState': string + + 'alteration': string 'consequence': string - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > 'gene': QueryGene + 'germline': boolean + 'id': string 'proteinEnd': number @@ -626,12 +668,16 @@ export type MutationEffectResp = { }; export type AnnotateCopyNumberAlterationQuery = { - 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS" + 'alleleState': string - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS" + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > 'gene': QueryGene + 'germline': boolean + 'id': string 'referenceGenome': "GRCh37" | "GRCh38" @@ -640,7 +686,11 @@ export type AnnotateCopyNumberAlterationQuery = { }; export type AnnotateMutationByHGVSgQuery = { - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'alleleState': string + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > + + 'germline': boolean 'hgvsg': string @@ -728,6 +778,8 @@ export default class OncoKbAPI { 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS", 'referenceGenome' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'evidenceType' ? : string, $queryParameters ? : any }): string { @@ -753,6 +805,14 @@ export default class OncoKbAPI { queryParameters['tumorType'] = parameters['tumorType']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['evidenceType'] !== undefined) { queryParameters['evidenceType'] = parameters['evidenceType']; } @@ -776,6 +836,8 @@ export default class OncoKbAPI { * @param {string} copyNameAlterationType - Copy number alteration type * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ annotateCopyNumberAlterationsGetUsingGETWithHttpInfo(parameters: { @@ -784,6 +846,8 @@ export default class OncoKbAPI { 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS", 'referenceGenome' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, $domain ? : string @@ -825,6 +889,14 @@ export default class OncoKbAPI { queryParameters['tumorType'] = parameters['tumorType']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['evidenceType'] !== undefined) { queryParameters['evidenceType'] = parameters['evidenceType']; } @@ -850,6 +922,8 @@ export default class OncoKbAPI { * @param {string} copyNameAlterationType - Copy number alteration type * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ annotateCopyNumberAlterationsGetUsingGET(parameters: { @@ -858,6 +932,8 @@ export default class OncoKbAPI { 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS", 'referenceGenome' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, $domain ? : string @@ -946,6 +1022,8 @@ export default class OncoKbAPI { annotateMutationsByGenomicChangeGetUsingGETURL(parameters: { 'genomicLocation': string, 'referenceGenome' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, $queryParameters ? : any @@ -960,6 +1038,14 @@ export default class OncoKbAPI { queryParameters['referenceGenome'] = parameters['referenceGenome']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['tumorType'] !== undefined) { queryParameters['tumorType'] = parameters['tumorType']; } @@ -984,12 +1070,16 @@ export default class OncoKbAPI { * @name OncoKbAPI#annotateMutationsByGenomicChangeGetUsingGET * @param {string} genomicLocation - Genomic location. Example: 7,140453136,140453136,A,T * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ annotateMutationsByGenomicChangeGetUsingGETWithHttpInfo(parameters: { 'genomicLocation': string, 'referenceGenome' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, @@ -1020,6 +1110,14 @@ export default class OncoKbAPI { queryParameters['referenceGenome'] = parameters['referenceGenome']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['tumorType'] !== undefined) { queryParameters['tumorType'] = parameters['tumorType']; } @@ -1046,12 +1144,16 @@ export default class OncoKbAPI { * @name OncoKbAPI#annotateMutationsByGenomicChangeGetUsingGET * @param {string} genomicLocation - Genomic location. Example: 7,140453136,140453136,A,T * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ annotateMutationsByGenomicChangeGetUsingGET(parameters: { 'genomicLocation': string, 'referenceGenome' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, @@ -1142,6 +1244,8 @@ export default class OncoKbAPI { 'hgvsg': string, 'referenceGenome' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'evidenceType' ? : string, $queryParameters ? : any }): string { @@ -1159,6 +1263,14 @@ export default class OncoKbAPI { queryParameters['tumorType'] = parameters['tumorType']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['evidenceType'] !== undefined) { queryParameters['evidenceType'] = parameters['evidenceType']; } @@ -1180,12 +1292,16 @@ export default class OncoKbAPI { * @param {string} hgvsg - HGVS genomic format. Example: 7:g.140453136A>T * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ annotateMutationsByHGVSgGetUsingGETWithHttpInfo(parameters: { 'hgvsg': string, 'referenceGenome' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, $domain ? : string @@ -1219,6 +1335,14 @@ export default class OncoKbAPI { queryParameters['tumorType'] = parameters['tumorType']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['evidenceType'] !== undefined) { queryParameters['evidenceType'] = parameters['evidenceType']; } @@ -1242,12 +1366,16 @@ export default class OncoKbAPI { * @param {string} hgvsg - HGVS genomic format. Example: 7:g.140453136A>T * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ annotateMutationsByHGVSgGetUsingGET(parameters: { 'hgvsg': string, 'referenceGenome' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, + 'alleleState' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, $domain ? : string @@ -1341,6 +1469,8 @@ export default class OncoKbAPI { 'consequence' ? : "feature_truncation" | "frameshift_variant" | "inframe_deletion" | "inframe_insertion" | "start_lost" | "missense_variant" | "splice_region_variant" | "stop_gained" | "synonymous_variant" | "intron_variant", 'proteinStart' ? : number, 'proteinEnd' ? : number, + 'isGermline' ? : boolean, + 'alleleState' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, $queryParameters ? : any @@ -1375,6 +1505,14 @@ export default class OncoKbAPI { queryParameters['proteinEnd'] = parameters['proteinEnd']; } + if (parameters['isGermline'] !== undefined) { + queryParameters['isGermline'] = parameters['isGermline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['tumorType'] !== undefined) { queryParameters['tumorType'] = parameters['tumorType']; } @@ -1404,6 +1542,8 @@ export default class OncoKbAPI { * @param {string} consequence - Consequence. Exacmple: missense_variant * @param {integer} proteinStart - Protein Start. Example: 600 * @param {integer} proteinEnd - Protein End. Example: 600 + * @param {boolean} isGermline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ @@ -1415,6 +1555,8 @@ export default class OncoKbAPI { 'consequence' ? : "feature_truncation" | "frameshift_variant" | "inframe_deletion" | "inframe_insertion" | "start_lost" | "missense_variant" | "splice_region_variant" | "stop_gained" | "synonymous_variant" | "intron_variant", 'proteinStart' ? : number, 'proteinEnd' ? : number, + 'isGermline' ? : boolean, + 'alleleState' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, @@ -1460,6 +1602,14 @@ export default class OncoKbAPI { queryParameters['proteinEnd'] = parameters['proteinEnd']; } + if (parameters['isGermline'] !== undefined) { + queryParameters['isGermline'] = parameters['isGermline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['tumorType'] !== undefined) { queryParameters['tumorType'] = parameters['tumorType']; } @@ -1491,6 +1641,8 @@ export default class OncoKbAPI { * @param {string} consequence - Consequence. Exacmple: missense_variant * @param {integer} proteinStart - Protein Start. Example: 600 * @param {integer} proteinEnd - Protein End. Example: 600 + * @param {boolean} isGermline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. */ @@ -1502,6 +1654,8 @@ export default class OncoKbAPI { 'consequence' ? : "feature_truncation" | "frameshift_variant" | "inframe_deletion" | "inframe_insertion" | "start_lost" | "missense_variant" | "splice_region_variant" | "stop_gained" | "synonymous_variant" | "intron_variant", 'proteinStart' ? : number, 'proteinEnd' ? : number, + 'isGermline' ? : boolean, + 'alleleState' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, $queryParameters ? : any, @@ -1595,6 +1749,8 @@ export default class OncoKbAPI { 'entrezGeneIdB' ? : number, 'structuralVariantType': "DELETION" | "TRANSLOCATION" | "DUPLICATION" | "INSERTION" | "INVERSION" | "FUSION" | "UNKNOWN", 'isFunctionalFusion': boolean, + 'germline' ? : boolean, + 'alleleState' ? : string, 'referenceGenome' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, @@ -1626,6 +1782,14 @@ export default class OncoKbAPI { queryParameters['isFunctionalFusion'] = parameters['isFunctionalFusion']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['referenceGenome'] !== undefined) { queryParameters['referenceGenome'] = parameters['referenceGenome']; } @@ -1658,6 +1822,8 @@ export default class OncoKbAPI { * @param {integer} entrezGeneIdB - The entrez gene ID B. (Higher priority than hugoSymbolB) Example: 613 * @param {string} structuralVariantType - Structural variant type * @param {boolean} isFunctionalFusion - Whether is functional fusion + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. @@ -1669,6 +1835,8 @@ export default class OncoKbAPI { 'entrezGeneIdB' ? : number, 'structuralVariantType': "DELETION" | "TRANSLOCATION" | "DUPLICATION" | "INSERTION" | "INVERSION" | "FUSION" | "UNKNOWN", 'isFunctionalFusion': boolean, + 'germline' ? : boolean, + 'alleleState' ? : string, 'referenceGenome' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, @@ -1721,6 +1889,14 @@ export default class OncoKbAPI { return; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + + if (parameters['alleleState'] !== undefined) { + queryParameters['alleleState'] = parameters['alleleState']; + } + if (parameters['referenceGenome'] !== undefined) { queryParameters['referenceGenome'] = parameters['referenceGenome']; } @@ -1755,6 +1931,8 @@ export default class OncoKbAPI { * @param {integer} entrezGeneIdB - The entrez gene ID B. (Higher priority than hugoSymbolB) Example: 613 * @param {string} structuralVariantType - Structural variant type * @param {boolean} isFunctionalFusion - Whether is functional fusion + * @param {boolean} germline - Whether is germline variant + * @param {string} alleleState - Germline variant allele state(monoallelic vs biallelic) * @param {string} referenceGenome - Reference genome, either GRCh37 or GRCh38. The default is GRCh37 * @param {string} tumorType - OncoTree(http://oncotree.info) tumor type name. The field supports OncoTree Code, OncoTree Name and OncoTree Main type. Example: Melanoma * @param {string} evidenceType - Evidence type to compute. This could help to improve the performance if you only look for sub-content. Example: ONCOGENIC. All available evidence type are GENE_SUMMARY, MUTATION_SUMMARY, TUMOR_TYPE_SUMMARY, PROGNOSTIC_SUMMARY, DIAGNOSTIC_SUMMARY, ONCOGENIC, MUTATION_EFFECT, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE. For multiple evidence types query, use ',' as separator. @@ -1766,6 +1944,8 @@ export default class OncoKbAPI { 'entrezGeneIdB' ? : number, 'structuralVariantType': "DELETION" | "TRANSLOCATION" | "DUPLICATION" | "INSERTION" | "INVERSION" | "FUSION" | "UNKNOWN", 'isFunctionalFusion': boolean, + 'germline' ? : boolean, + 'alleleState' ? : string, 'referenceGenome' ? : string, 'tumorType' ? : string, 'evidenceType' ? : string, @@ -2199,6 +2379,7 @@ export default class OncoKbAPI { 'levelOfEvidence' ? : string, 'evidenceTypes' ? : string, 'fields' ? : string, + 'germline' ? : boolean, $queryParameters ? : any }): string { let queryParameters: any = {}; @@ -2247,6 +2428,10 @@ export default class OncoKbAPI { queryParameters['fields'] = parameters['fields']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -2272,6 +2457,7 @@ export default class OncoKbAPI { * @param {string} levelOfEvidence - Separate by comma. LEVEL_1, LEVEL_2A, LEVEL_2B, LEVEL_3A, LEVEL_3B, LEVEL_4, LEVEL_R1, LEVEL_R2, LEVEL_R3 * @param {string} evidenceTypes - Separate by comma. Evidence type includes GENE_SUMMARY, GENE_BACKGROUND, MUTATION_SUMMARY, ONCOGENIC, MUTATION_EFFECT, VUS, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, TUMOR_TYPE_SUMMARY, DIAGNOSTIC_SUMMARY, PROGNOSTIC_SUMMARY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE * @param {string} fields - The fields to be returned. + * @param {boolean} germline - false */ evidencesLookupGetUsingGETWithHttpInfo(parameters: { 'entrezGeneId' ? : number, @@ -2285,6 +2471,7 @@ export default class OncoKbAPI { 'levelOfEvidence' ? : string, 'evidenceTypes' ? : string, 'fields' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -2344,6 +2531,10 @@ export default class OncoKbAPI { queryParameters['fields'] = parameters['fields']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -2371,6 +2562,7 @@ export default class OncoKbAPI { * @param {string} levelOfEvidence - Separate by comma. LEVEL_1, LEVEL_2A, LEVEL_2B, LEVEL_3A, LEVEL_3B, LEVEL_4, LEVEL_R1, LEVEL_R2, LEVEL_R3 * @param {string} evidenceTypes - Separate by comma. Evidence type includes GENE_SUMMARY, GENE_BACKGROUND, MUTATION_SUMMARY, ONCOGENIC, MUTATION_EFFECT, VUS, PROGNOSTIC_IMPLICATION, DIAGNOSTIC_IMPLICATION, TUMOR_TYPE_SUMMARY, DIAGNOSTIC_SUMMARY, PROGNOSTIC_SUMMARY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY, STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY, INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE * @param {string} fields - The fields to be returned. + * @param {boolean} germline - false */ evidencesLookupGetUsingGET(parameters: { 'entrezGeneId' ? : number, @@ -2384,6 +2576,7 @@ export default class OncoKbAPI { 'levelOfEvidence' ? : string, 'evidenceTypes' ? : string, 'fields' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < Array < Evidence > diff --git a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json index f7f3c2f8c..1264c5979 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json +++ b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json @@ -284,6 +284,13 @@ "required": false, "type": "string", "default": "false" + }, + { + "name": "germline", + "in": "query", + "description": "false", + "required": false, + "type": "boolean" } ], "responses": { @@ -383,6 +390,13 @@ "description": "hugoSymbol", "required": false, "type": "string" + }, + { + "name": "germline", + "in": "query", + "description": "false", + "required": false, + "type": "boolean" } ], "responses": { @@ -428,6 +442,13 @@ "description": "hugoSymbol", "required": false, "type": "string" + }, + { + "name": "germline", + "in": "query", + "description": "false", + "required": false, + "type": "boolean" } ], "responses": { @@ -1053,6 +1074,13 @@ "description": "The gene symbol used in Human Genome Organisation.", "required": true, "type": "string" + }, + { + "name": "germline", + "in": "query", + "description": "false", + "required": false, + "type": "boolean" } ], "responses": { @@ -1728,6 +1756,13 @@ "description": "OncoTree tumor type name/main type/code", "required": false, "type": "string" + }, + { + "name": "germline", + "in": "query", + "description": "false", + "required": false, + "type": "boolean" } ], "responses": { @@ -1754,6 +1789,9 @@ "AnnotateMutationByGenomicChangeQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "evidenceTypes": { "type": "array", "items": { @@ -1774,13 +1812,25 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, "genomicLocation": { "type": "string" }, + "germline": { + "type": "boolean" + }, "id": { "type": "string" }, @@ -1841,6 +1891,9 @@ "Query": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "alteration": { "type": "string" }, @@ -1854,6 +1907,9 @@ "type": "integer", "format": "int32" }, + "germline": { + "type": "boolean" + }, "hgvs": { "type": "string" }, @@ -1962,6 +2018,9 @@ "name": { "type": "string" }, + "proteinChange": { + "type": "string" + }, "proteinEnd": { "type": "integer", "format": "int32" @@ -2080,6 +2139,9 @@ "geneSummary": { "type": "string" }, + "germline": { + "$ref": "#/definitions/GermlineVariant" + }, "highestDiagnosticImplicationLevel": { "type": "string", "enum": [ @@ -2769,7 +2831,16 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] }, "excludedCancerTypes": { @@ -2862,6 +2933,9 @@ "NO" ] }, + "name": { + "type": "string" + }, "relevantCancerTypes": { "type": "array", "items": { @@ -3032,6 +3106,41 @@ } } }, + "GermlineVariant": { + "type": "object", + "properties": { + "cancerRisk": { + "type": "string" + }, + "clinVarId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "genomicIndicators": { + "type": "array", + "items": { + "type": "string" + } + }, + "inheritanceMechanism": { + "type": "string" + }, + "inheritanceMechanismDescription": { + "type": "string" + }, + "pathogenic": { + "type": "string" + }, + "penetrance": { + "type": "string" + }, + "penetranceDescription": { + "type": "string" + } + } + }, "Drug": { "type": "object", "properties": { @@ -3194,6 +3303,12 @@ "highestSensitiveLevel": { "type": "string" }, + "inheritanceMechanism": { + "type": "string" + }, + "penetrance": { + "type": "string" + }, "tumorType": { "type": "integer", "format": "int32" @@ -3368,6 +3483,9 @@ "AnnotateMutationByHGVSgQuery": { "type": "object", "properties": { + "alleleState": { + "type": "string" + }, "evidenceTypes": { "type": "array", "items": { @@ -3388,10 +3506,22 @@ "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE", + "PATHOGENIC", + "GENOMIC_INDICATOR", + "GENOMIC_INDICATOR_ALLELE_STATE", + "GENE_PENETRANCE", + "GENE_INHERITANCE_MECHANISM", + "GENE_CANCER_RISK", + "VARIANT_PENETRANCE", + "VARIANT_INHERITANCE_MECHANISM", + "VARIANT_CANCER_RISK" ] } }, + "germline": { + "type": "boolean" + }, "hgvsg": { "type": "string" }, @@ -3413,6 +3543,12 @@ "BiologicalVariant": { "type": "object", "properties": { + "cancerRisk": { + "type": "string" + }, + "inheritanceMechanism": { + "type": "string" + }, "mutationEffect": { "type": "string" }, @@ -3446,6 +3582,24 @@ "type": "string" } }, + "pathogenic": { + "type": "string" + }, + "pathogenicAbstracts": { + "type": "array", + "items": { + "$ref": "#/definitions/ArticleAbstract" + } + }, + "pathogenicPmids": { + "type": "array", + "items": { + "type": "string" + } + }, + "penetrance": { + "type": "string" + }, "variant": { "$ref": "#/definitions/Alteration" } diff --git a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts index 327e22870..e66cc9656 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts +++ b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts @@ -2,10 +2,14 @@ import * as request from "superagent"; type CallbackHandler = (err: any, res ? : request.Response) => void; export type AnnotateMutationByGenomicChangeQuery = { - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'alleleState': string + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > 'genomicLocation': string + 'germline': boolean + 'id': string 'referenceGenome': "GRCh37" | "GRCh38" @@ -30,7 +34,9 @@ export type TreatmentDrug = { }; export type Query = { - 'alteration': string + 'alleleState': string + + 'alteration': string 'alterationType': string @@ -38,6 +44,8 @@ export type Query = { 'entrezGeneId': number + 'germline': boolean + 'hgvs': string 'hugoSymbol': string @@ -96,6 +104,8 @@ export type Alteration = { 'name': string + 'proteinChange': string + 'proteinEnd': number 'proteinStart': number @@ -156,6 +166,8 @@ export type VariantAnnotation = { 'geneSummary': string + 'germline': GermlineVariant + 'highestDiagnosticImplicationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" 'highestFdaLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" @@ -392,7 +404,7 @@ export type Evidence = { 'description': string - 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" 'excludedCancerTypes': Array < TumorType > @@ -412,6 +424,8 @@ export type Evidence = { 'liquidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + 'name': string + 'relevantCancerTypes': Array < TumorType > 'solidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" @@ -484,6 +498,26 @@ export type ArticleAbstract = { 'link': string +}; +export type GermlineVariant = { + 'cancerRisk': string + + 'clinVarId': string + + 'description': string + + 'genomicIndicators': Array < string > + + 'inheritanceMechanism': string + + 'inheritanceMechanismDescription': string + + 'pathogenic': string + + 'penetrance': string + + 'penetranceDescription': string + }; export type Drug = { 'drugName': string @@ -568,6 +602,10 @@ export type GeneNumber = { 'highestSensitiveLevel': string + 'inheritanceMechanism': string + + 'penetrance': string + 'tumorType': number }; @@ -626,7 +664,11 @@ export type MutationEffectResp = { }; export type AnnotateMutationByHGVSgQuery = { - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + 'alleleState': string + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" | "PATHOGENIC" | "GENOMIC_INDICATOR" | "GENOMIC_INDICATOR_ALLELE_STATE" | "GENE_PENETRANCE" | "GENE_INHERITANCE_MECHANISM" | "GENE_CANCER_RISK" | "VARIANT_PENETRANCE" | "VARIANT_INHERITANCE_MECHANISM" | "VARIANT_CANCER_RISK" > + + 'germline': boolean 'hgvsg': string @@ -638,7 +680,11 @@ export type AnnotateMutationByHGVSgQuery = { }; export type BiologicalVariant = { - 'mutationEffect': string + 'cancerRisk': string + + 'inheritanceMechanism': string + + 'mutationEffect': string 'mutationEffectAbstracts': Array < ArticleAbstract > @@ -652,6 +698,14 @@ export type BiologicalVariant = { 'oncogenicPmids': Array < string > + 'pathogenic': string + + 'pathogenicAbstracts': Array < ArticleAbstract > + + 'pathogenicPmids': Array < string > + + 'penetrance': string + 'variant': Alteration }; @@ -1052,6 +1106,7 @@ export default class OncoKbPrivateAPI { searchTreatmentsGetUsingGETURL(parameters: { 'gene': string, 'level' ? : string, + 'germline' ? : boolean, $queryParameters ? : any }): string { let queryParameters: any = {}; @@ -1064,6 +1119,10 @@ export default class OncoKbPrivateAPI { queryParameters['level'] = parameters['level']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -1080,10 +1139,12 @@ export default class OncoKbPrivateAPI { * @name OncoKbPrivateAPI#searchTreatmentsGetUsingGET * @param {string} gene - The search query, it could be hugoSymbol or entrezGeneId. * @param {string} level - The level of evidence. + * @param {boolean} germline - false */ searchTreatmentsGetUsingGETWithHttpInfo(parameters: { 'gene': string, 'level' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -1112,6 +1173,10 @@ export default class OncoKbPrivateAPI { queryParameters['level'] = parameters['level']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -1130,10 +1195,12 @@ export default class OncoKbPrivateAPI { * @name OncoKbPrivateAPI#searchTreatmentsGetUsingGET * @param {string} gene - The search query, it could be hugoSymbol or entrezGeneId. * @param {string} level - The level of evidence. + * @param {boolean} germline - false */ searchTreatmentsGetUsingGET(parameters: { 'gene': string, 'level' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < Array < Treatment > @@ -1237,6 +1304,7 @@ export default class OncoKbPrivateAPI { }; searchVariantsBiologicalGetUsingGETURL(parameters: { 'hugoSymbol' ? : string, + 'germline' ? : boolean, $queryParameters ? : any }): string { let queryParameters: any = {}; @@ -1245,6 +1313,10 @@ export default class OncoKbPrivateAPI { queryParameters['hugoSymbol'] = parameters['hugoSymbol']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -1260,9 +1332,11 @@ export default class OncoKbPrivateAPI { * @method * @name OncoKbPrivateAPI#searchVariantsBiologicalGetUsingGET * @param {string} hugoSymbol - hugoSymbol + * @param {boolean} germline - false */ searchVariantsBiologicalGetUsingGETWithHttpInfo(parameters: { 'hugoSymbol' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -1282,6 +1356,10 @@ export default class OncoKbPrivateAPI { queryParameters['hugoSymbol'] = parameters['hugoSymbol']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -1299,9 +1377,11 @@ export default class OncoKbPrivateAPI { * @method * @name OncoKbPrivateAPI#searchVariantsBiologicalGetUsingGET * @param {string} hugoSymbol - hugoSymbol + * @param {boolean} germline - false */ searchVariantsBiologicalGetUsingGET(parameters: { 'hugoSymbol' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < Array < BiologicalVariant > @@ -1312,6 +1392,7 @@ export default class OncoKbPrivateAPI { }; searchVariantsClinicalGetUsingGETURL(parameters: { 'hugoSymbol' ? : string, + 'germline' ? : boolean, $queryParameters ? : any }): string { let queryParameters: any = {}; @@ -1320,6 +1401,10 @@ export default class OncoKbPrivateAPI { queryParameters['hugoSymbol'] = parameters['hugoSymbol']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -1335,9 +1420,11 @@ export default class OncoKbPrivateAPI { * @method * @name OncoKbPrivateAPI#searchVariantsClinicalGetUsingGET * @param {string} hugoSymbol - hugoSymbol + * @param {boolean} germline - false */ searchVariantsClinicalGetUsingGETWithHttpInfo(parameters: { 'hugoSymbol' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -1357,6 +1444,10 @@ export default class OncoKbPrivateAPI { queryParameters['hugoSymbol'] = parameters['hugoSymbol']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -1374,9 +1465,11 @@ export default class OncoKbPrivateAPI { * @method * @name OncoKbPrivateAPI#searchVariantsClinicalGetUsingGET * @param {string} hugoSymbol - hugoSymbol + * @param {boolean} germline - false */ searchVariantsClinicalGetUsingGET(parameters: { 'hugoSymbol' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < Array < ClinicalVariant > @@ -2308,12 +2401,16 @@ export default class OncoKbPrivateAPI { }; utilsNumbersGeneGetUsingGETURL(parameters: { 'hugoSymbol': string, + 'germline' ? : boolean, $queryParameters ? : any }): string { let queryParameters: any = {}; let path = '/utils/numbers/gene/{hugoSymbol}'; path = path.replace('{hugoSymbol}', parameters['hugoSymbol'] + ''); + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { @@ -2330,9 +2427,11 @@ export default class OncoKbPrivateAPI { * @method * @name OncoKbPrivateAPI#utilsNumbersGeneGetUsingGET * @param {string} hugoSymbol - The gene symbol used in Human Genome Organisation. + * @param {boolean} germline - false */ utilsNumbersGeneGetUsingGETWithHttpInfo(parameters: { 'hugoSymbol': string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -2355,6 +2454,10 @@ export default class OncoKbPrivateAPI { return; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -2372,9 +2475,11 @@ export default class OncoKbPrivateAPI { * @method * @name OncoKbPrivateAPI#utilsNumbersGeneGetUsingGET * @param {string} hugoSymbol - The gene symbol used in Human Genome Organisation. + * @param {boolean} germline - false */ utilsNumbersGeneGetUsingGET(parameters: { 'hugoSymbol': string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < GeneNumber > { @@ -3370,6 +3475,7 @@ export default class OncoKbPrivateAPI { 'hgvsg' ? : string, 'genomicChange' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, $queryParameters ? : any }): string { let queryParameters: any = {}; @@ -3402,6 +3508,10 @@ export default class OncoKbPrivateAPI { queryParameters['tumorType'] = parameters['tumorType']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -3423,6 +3533,7 @@ export default class OncoKbPrivateAPI { * @param {string} hgvsg - HGVS genomic format. Example: 7:g.140453136A>T * @param {string} genomicChange - Genomic change format. Example: 7,140453136,140453136,A,T * @param {string} tumorType - OncoTree tumor type name/main type/code + * @param {boolean} germline - false */ utilVariantAnnotationGetUsingGETWithHttpInfo(parameters: { 'hugoSymbol' ? : string, @@ -3432,6 +3543,7 @@ export default class OncoKbPrivateAPI { 'hgvsg' ? : string, 'genomicChange' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -3475,6 +3587,10 @@ export default class OncoKbPrivateAPI { queryParameters['tumorType'] = parameters['tumorType']; } + if (parameters['germline'] !== undefined) { + queryParameters['germline'] = parameters['germline']; + } + if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { var parameter = parameters.$queryParameters[parameterName]; @@ -3498,6 +3614,7 @@ export default class OncoKbPrivateAPI { * @param {string} hgvsg - HGVS genomic format. Example: 7:g.140453136A>T * @param {string} genomicChange - Genomic change format. Example: 7,140453136,140453136,A,T * @param {string} tumorType - OncoTree tumor type name/main type/code + * @param {boolean} germline - false */ utilVariantAnnotationGetUsingGET(parameters: { 'hugoSymbol' ? : string, @@ -3507,6 +3624,7 @@ export default class OncoKbPrivateAPI { 'hgvsg' ? : string, 'genomicChange' ? : string, 'tumorType' ? : string, + 'germline' ? : boolean, $queryParameters ? : any, $domain ? : string }): Promise < VariantAnnotation > { diff --git a/src/main/webapp/app/shared/icons/ExternalLinkIcon.tsx b/src/main/webapp/app/shared/icons/ExternalLinkIcon.tsx index 797e9d6e4..78413eae0 100644 --- a/src/main/webapp/app/shared/icons/ExternalLinkIcon.tsx +++ b/src/main/webapp/app/shared/icons/ExternalLinkIcon.tsx @@ -1,6 +1,16 @@ import React from 'react'; +import { Linkout } from 'app/shared/links/Linkout'; +import styles from './external-link-icon.module.scss'; -const ExternalLinkIcon: React.FunctionComponent<{}> = props => { - return ; +const ExternalLinkIcon: React.FunctionComponent<{ + link: string; + className?: string; +}> = props => { + return ( + + {props.children} + + + ); }; export default ExternalLinkIcon; diff --git a/src/main/webapp/app/shared/icons/ShowHideToggleIcon.tsx b/src/main/webapp/app/shared/icons/ShowHideToggleIcon.tsx index ddd58fac3..f280d67e9 100644 --- a/src/main/webapp/app/shared/icons/ShowHideToggleIcon.tsx +++ b/src/main/webapp/app/shared/icons/ShowHideToggleIcon.tsx @@ -7,7 +7,7 @@ const ShowHideToggleIcon: React.FunctionComponent<{ return ( ); }; diff --git a/src/main/webapp/app/shared/icons/external-link-icon.module.scss b/src/main/webapp/app/shared/icons/external-link-icon.module.scss new file mode 100644 index 000000000..7e58ea03e --- /dev/null +++ b/src/main/webapp/app/shared/icons/external-link-icon.module.scss @@ -0,0 +1,26 @@ +.externalLinkContainer { + display: flex; + justify-content: center; + align-items: baseline; +} + +.externalLinkContainer:hover { + text-decoration: none; +} + +.externalLinkContent:hover { + text-decoration: underline; +} + +.icon { + opacity: 0; + max-width: 0; + transition: transform 0.3s ease-in-out, max-width 0.3s ease-in-out, + opacity 0.3s linear, margin-left 0.3s ease-in-out; +} + +.externalLinkContainer:hover .icon { + opacity: 1; + max-width: 15px; + margin-left: 0.5rem; +} diff --git a/src/main/webapp/app/shared/links/NcbiLink.tsx b/src/main/webapp/app/shared/links/NcbiLink.tsx new file mode 100644 index 000000000..e279a551b --- /dev/null +++ b/src/main/webapp/app/shared/links/NcbiLink.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import ExternalLinkIcon from 'app/shared/icons/ExternalLinkIcon'; + +export const NcbiLink: React.FunctionComponent<{ + entrezGeneId: number; +}> = props => { + return ( + + NCBI Gene: + + {props.entrezGeneId} + + + ); +}; diff --git a/src/main/webapp/app/shared/nav/MiniNavBarHeader.tsx b/src/main/webapp/app/shared/nav/MiniNavBarHeader.tsx new file mode 100644 index 000000000..4cfe81734 --- /dev/null +++ b/src/main/webapp/app/shared/nav/MiniNavBarHeader.tsx @@ -0,0 +1,13 @@ +import React from 'react'; + +type IMiniNavBarHeader = { + id: string; + children: React.ReactNode; +}; +export default function MiniNavBarHeader({ id, children }: IMiniNavBarHeader) { + return ( +

+ {children} +

+ ); +} diff --git a/src/main/webapp/app/shared/nav/StickyMiniNavBar.module.scss b/src/main/webapp/app/shared/nav/StickyMiniNavBar.module.scss new file mode 100644 index 000000000..490b61df2 --- /dev/null +++ b/src/main/webapp/app/shared/nav/StickyMiniNavBar.module.scss @@ -0,0 +1,44 @@ +@import '../../variables.scss'; +@import '../../font.scss'; + +$sticky-border: #E3E5EC; +.container { + a:hover { + text-decoration: none; + } + + position: sticky; + top: 50px; + z-index: 100; + border-bottom: 1px solid $sticky-border; + background-color: white; +} + +.containerSticky { + box-shadow: $default-box-shadow; +} + +.stickyHeader { + @extend .font-bold; + color: #000; + font-weight: bold; + display: flex; + align-items: center; + justify-content: center; + padding: 7px 0; +} + +.stickySection { + color: #000; + display: flex; + align-items: center; + justify-content: center; + border-bottom: 4px solid transparent; + padding: 7px 0 3px 0; +} + +.stickySectionSelected { + @extend .font-bold; + font-weight: bold; + border-bottom-color: $primary; +} diff --git a/src/main/webapp/app/shared/nav/StickyMiniNavBar.tsx b/src/main/webapp/app/shared/nav/StickyMiniNavBar.tsx new file mode 100644 index 000000000..a819f21e2 --- /dev/null +++ b/src/main/webapp/app/shared/nav/StickyMiniNavBar.tsx @@ -0,0 +1,229 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import { Row, Col, Container } from 'react-bootstrap'; +import styles from './StickyMiniNavBar.module.scss'; +import classNames from 'classnames'; +import classnames from 'classnames'; + +function getNavBarSectionElements() { + return document.querySelectorAll('[mini-nav-bar-header]'); +} + +function useScrollToHash({ stickyHeight }: { stickyHeight: number }) { + const location = useLocation(); + + useEffect(() => { + const hash = location.hash; + if (hash) { + let element: Element | null; + try { + element = document.querySelector(hash); + } catch { + element = null; + } + if (element) { + const targetPosition = + element.getBoundingClientRect().top + window.scrollY; + window.scrollTo({ + behavior: 'smooth', + top: targetPosition - stickyHeight, + }); + } + } + }, [location]); + return location.hash; +} + +type IStickyMiniNavBar = { + title: string | JSX.Element; + linkUnderlineColor: string; + stickyBackgroundColor?: string; +}; + +export default function StickyMiniNavBar({ + title, + linkUnderlineColor, + stickyBackgroundColor, +}: IStickyMiniNavBar) { + const [headerHeight, setHeaderHeight] = useState(0); + const [isSticky, setIsSticky] = useState(false); + const [sections, setSections] = useState< + { id: string; label: string | null }[] + >([]); + const [passedElements, setPassedElements] = useState< + Record + >({}); + const stickyDivRef = useRef(null); + const hash = useScrollToHash({ + stickyHeight: + headerHeight + + (stickyDivRef.current?.getBoundingClientRect().height ?? 0), + }); + + useEffect(() => { + const newSections: typeof sections = []; + const miniNavBarSections = getNavBarSectionElements(); + miniNavBarSections.forEach(ele => { + newSections.push({ + id: ele.id, + label: ele.textContent, + }); + }); + setSections(newSections); + + const headerElement = document.querySelector('header'); + + const updateHeaderHeight = () => { + if (headerElement) { + setHeaderHeight(headerElement.getBoundingClientRect().height); + } + }; + + updateHeaderHeight(); + + const resizeObserver = new ResizeObserver(() => { + updateHeaderHeight(); + }); + + if (headerElement) { + resizeObserver.observe(headerElement); + } + + return () => { + if (headerElement) { + resizeObserver.unobserve(headerElement); + } + }; + }, []); + + useEffect(() => { + const miniNavBarSections = getNavBarSectionElements(); + const intersectionObserver = new IntersectionObserver(entries => { + const newPassedElements: typeof passedElements = {}; + entries.forEach(entry => { + const targetId = entry.target.getAttribute('id') ?? ''; + const hasId = sections.find(x => x.id === targetId); + newPassedElements[targetId] = { + isPassed: + hasId !== undefined && + (entry.isIntersecting || entry.boundingClientRect.y < 0), + isInView: hasId !== undefined && entry.isIntersecting, + }; + }); + setPassedElements(x => { + return { + ...x, + ...newPassedElements, + }; + }); + }); + miniNavBarSections.forEach(x => intersectionObserver.observe(x)); + return () => { + miniNavBarSections.forEach(x => intersectionObserver.unobserve(x)); + }; + }, [sections]); + + const handleScroll = () => { + if (stickyDivRef.current) { + const stickyOffset = stickyDivRef.current.getBoundingClientRect().top; + setIsSticky(stickyOffset <= headerHeight); + } + }; + + useEffect(() => { + window.addEventListener('scroll', handleScroll); + + return () => { + window.removeEventListener('scroll', handleScroll); + }; + }, [headerHeight]); + + const currentSectionId = [...sections].sort( + ({ id: leftId }, { id: rightId }) => { + const leftPassedInfo = passedElements[leftId] ?? {}; + const rightPassedInfo = passedElements[rightId] ?? {}; + if (`#${leftId}` === hash && leftPassedInfo.isInView) { + return -1; + } else if (`#${rightId}` === hash && rightPassedInfo.isInView) { + return 1; + } else if (leftPassedInfo.isInView && !rightPassedInfo.isInView) { + return -1; + } else if (rightPassedInfo.isInView && !leftPassedInfo.isInView) { + return 1; + } else if (rightPassedInfo.isPassed) { + return 1; + } else if (leftPassedInfo.isPassed) { + return -1; + } else { + return 0; + } + } + )[0]?.id; + + return ( + + +
+ + + + + ); +} diff --git a/src/main/webapp/app/shared/texts/GeneAliasesDescription.tsx b/src/main/webapp/app/shared/texts/GeneAliasesDescription.tsx index 7e1fa27b4..db0bc1ad5 100644 --- a/src/main/webapp/app/shared/texts/GeneAliasesDescription.tsx +++ b/src/main/webapp/app/shared/texts/GeneAliasesDescription.tsx @@ -2,7 +2,14 @@ import React from 'react'; const GeneAliasesDescription: React.FunctionComponent<{ geneAliases: string[]; + className?: string; + style?: React.CSSProperties; }> = props => { - return {`Also known as ${props.geneAliases.join(', ')}`}; + return ( + {`Also known as ${props.geneAliases.join(', ')}`} + ); }; export default GeneAliasesDescription; diff --git a/src/main/webapp/app/shared/texts/ShowHideText.tsx b/src/main/webapp/app/shared/texts/ShowHideText.tsx index df46b702f..7d93336b0 100644 --- a/src/main/webapp/app/shared/texts/ShowHideText.tsx +++ b/src/main/webapp/app/shared/texts/ShowHideText.tsx @@ -1,5 +1,6 @@ import React from 'react'; import ShowHideToggleIcon from '../icons/ShowHideToggleIcon'; +import { COLOR_GREY, COLOR_PRIMARY } from 'app/config/theme'; const ShowHideText: React.FunctionComponent<{ show: boolean; @@ -11,7 +12,7 @@ const ShowHideText: React.FunctionComponent<{ return (
props.onClick()} > {`${props.show ? 'Hide' : 'Show'} ${props.title}`}{' '} diff --git a/src/main/webapp/app/shared/utils/ReactTableUtils.ts b/src/main/webapp/app/shared/utils/ReactTableUtils.ts index 3f51a8349..18c18fe4f 100644 --- a/src/main/webapp/app/shared/utils/ReactTableUtils.ts +++ b/src/main/webapp/app/shared/utils/ReactTableUtils.ts @@ -3,6 +3,7 @@ import { LEVELS, MUTATION_EFFECT, ONCOGENICITY, + PATHOGENICITY, } from 'app/config/constants'; import { Alteration, Citations } from '../api/generated/OncoKbAPI'; import { @@ -117,6 +118,16 @@ const oncogenicityOrder = [ ONCOGENICITY.INCONCLUSIVE, ONCOGENICITY.UNKNOWN, ]; + +const pathogenicityOrder = [ + PATHOGENICITY.PATHOGENIC, + PATHOGENICITY.LIKELY_PATHOGENIC, + PATHOGENICITY.UNKNOWN, + PATHOGENICITY.LIKELY_BENIGN, + PATHOGENICITY.BENIGN, + PATHOGENICITY.VUS_WITH_SPECIAL_INTERPRETATION, +]; + const mutationEffectOrder = [ MUTATION_EFFECT.GAIN_OF_FUNCTION, MUTATION_EFFECT.LIKELY_GAIN_OF_FUNCTION, @@ -154,6 +165,13 @@ export function oncogenicitySortMethod(a: ONCOGENICITY, b: ONCOGENICITY) { ); } +export function pathogenicitySortMethod(a: PATHOGENICITY, b: PATHOGENICITY) { + return sortByArrayIndexAsc( + pathogenicityOrder.indexOf(a), + pathogenicityOrder.indexOf(b) + ); +} + export function mutationEffectSortMethod( a: MUTATION_EFFECT, b: MUTATION_EFFECT diff --git a/src/main/webapp/app/shared/utils/TempAnnotationUtils.ts b/src/main/webapp/app/shared/utils/TempAnnotationUtils.ts index 6809d57e2..09c375990 100644 --- a/src/main/webapp/app/shared/utils/TempAnnotationUtils.ts +++ b/src/main/webapp/app/shared/utils/TempAnnotationUtils.ts @@ -7,7 +7,7 @@ export function getTabDefaultActiveKey( hasFdaData: boolean, defaultSelectedTab?: ANNOTATION_PAGE_TAB_KEYS ) { - let defaultTabBasedOnData = ANNOTATION_PAGE_TAB_KEYS.BIOLOGICAL; + let defaultTabBasedOnData; if (hasTxData) { defaultTabBasedOnData = ANNOTATION_PAGE_TAB_KEYS.TX; } else if (hasDxData) { diff --git a/src/main/webapp/app/shared/utils/UrlUtils.tsx b/src/main/webapp/app/shared/utils/UrlUtils.tsx index b6f4a78ef..ec7d1cf42 100644 --- a/src/main/webapp/app/shared/utils/UrlUtils.tsx +++ b/src/main/webapp/app/shared/utils/UrlUtils.tsx @@ -27,6 +27,7 @@ import * as QueryString from 'querystring'; import { YEAR_END_SUMMARY_RANGE } from 'app/pages/newsPage/NewsPageNavTab'; import { ALTERNATIVE_ALLELES_REGEX } from 'app/config/constants/regex'; import WithSeparator from 'react-with-separator'; +import { GENETIC_TYPE } from 'app/components/geneticTypeTabs/GeneticTypeTabs'; export const getHostLinkWithProtocol = (): string => { return `${window.location.protocol}//${window.location.host}`; @@ -34,11 +35,15 @@ export const getHostLinkWithProtocol = (): string => { export const getGenePageLink = (props: { hugoSymbol: string; + geneticType?: GENETIC_TYPE; searchQueries?: GenePageSearchQueries; hashQueries?: GenePageHashQueries; withProtocolHostPrefix?: boolean; }): string => { let pageLink = `${PAGE_ROUTE.GENE_HEADER}/${props.hugoSymbol}`; + if (props.geneticType) { + pageLink += `/${props.geneticType}`; + } if (props.searchQueries && Object.keys(props.searchQueries).length > 0) { pageLink = `${pageLink}?${QueryString.stringify(props.searchQueries)}`; } @@ -171,6 +176,32 @@ export const getAlternativeAllelesPageLinks = ( } }; +export type GenePagePath = { + hugoSymbol?: string; + geneticType?: GENETIC_TYPE; +}; + +export const parseGenePagePath = (pathname: string) => { + const startsWithGene = pathname.startsWith(PAGE_ROUTE.GENE_HEADER); + const inBasicGenePage = (pathname.match(/\//g) || []).length === 2; + const inExtendedGenePage = + (pathname.match(/\//g) || []).length === 3 && + (pathname.endsWith(GENETIC_TYPE.SOMATIC) || + pathname.endsWith(GENETIC_TYPE.GERMLINE)); + if (startsWithGene && (inBasicGenePage || inExtendedGenePage)) { + const segments = pathname.split('/') || []; + const result: GenePagePath = { + hugoSymbol: segments[1], + }; + if (segments.length > 3) { + result.geneticType = segments[3] as GENETIC_TYPE; + } + return result; + } else { + return {}; + } +}; + export const getGenomicPageLocation = (props: { rootRoute: PAGE_ROUTE.GENOMIC_CHANGE | PAGE_ROUTE.HGVSG; query: string; @@ -231,9 +262,7 @@ export const MSILink: React.FunctionComponent<{}> = () => { export const OncoTreeLink: React.FunctionComponent<{}> = props => { return ( - - OncoTree - + OncoTree ); }; diff --git a/src/main/webapp/app/shared/utils/Utils.tsx b/src/main/webapp/app/shared/utils/Utils.tsx index 8872c91e6..6a83f29d9 100644 --- a/src/main/webapp/app/shared/utils/Utils.tsx +++ b/src/main/webapp/app/shared/utils/Utils.tsx @@ -15,6 +15,7 @@ import { FUSIONS, GAIN_OF_FUNCTION_MUTATIONS, GENERAL_ONCOGENICITY, + GENERAL_PATHOGENICITY, LEVEL_PRIORITY, LEVEL_TYPES, LEVELS, @@ -70,6 +71,10 @@ export function shortenOncogenicity(oncogenicity: string): string { return GENERAL_ONCOGENICITY[oncogenicity]; } +export function shortenPathogenicity(pathogenicity: string): string { + return GENERAL_PATHOGENICITY[pathogenicity]; +} + export function shortenTextByCharacters(text: string, cutoff: number) { const shortText = (text || '').trim(); if (shortText.length <= cutoff) { @@ -296,8 +301,11 @@ export const OncoKBOncogenicityIcon: React.FunctionComponent<{ export const OncoKBLevelIcon: React.FunctionComponent<{ level: LEVELS; withDescription?: boolean; -}> = ({ level, withDescription = true }) => { - const oncokbIcon = ; + size?: 's1' | 's2' | 's3'; +}> = ({ level, withDescription = true, size = 's1' }) => { + const oncokbIcon = ( + + ); return withDescription ? ( {oncokbIcon} ) : ( @@ -308,14 +316,18 @@ export const OncoKBLevelIcon: React.FunctionComponent<{ export const FdaLevelIcon: React.FunctionComponent<{ level: LEVELS; withDescription?: boolean; -}> = ({ level, withDescription = true }) => { + size?: 's1' | 's2' | 's3'; +}> = ({ level, withDescription = true, size = 's1' }) => { + const scale = parseInt(size.slice(1), 0); + const style = { + fontSize: 9 * scale, + lineHeight: `${18 * scale}px`, + margin: '0 3px', + }; const fdaIcon = ( - + - + {level.toString().replace('Fda', '')} diff --git a/src/main/webapp/app/store/AnnotationStore.ts b/src/main/webapp/app/store/AnnotationStore.ts index 81d9e76ad..a4f27d333 100644 --- a/src/main/webapp/app/store/AnnotationStore.ts +++ b/src/main/webapp/app/store/AnnotationStore.ts @@ -39,9 +39,16 @@ import { getCancerTypeNameFromOncoTreeType, isOncogenic, shortenOncogenicity, + shortenPathogenicity, } from 'app/shared/utils/Utils'; -import { oncogenicitySortMethod } from 'app/shared/utils/ReactTableUtils'; -import { Oncogenicity } from 'app/components/oncokbMutationMapper/OncokbMutationMapper'; +import { + oncogenicitySortMethod, + pathogenicitySortMethod, +} from 'app/shared/utils/ReactTableUtils'; +import { + Oncogenicity, + Pathogenicity, +} from 'app/components/oncokbMutationMapper/OncokbMutationMapper'; import { OncokbMutation } from 'app/components/oncokbMutationMapper/OncokbMutation'; import { applyCancerTypeFilter, @@ -62,6 +69,7 @@ import { export interface IAnnotationStore { type: AnnotationType; + germline?: boolean; hugoSymbolQuery?: string; alterationQuery?: string; tumorTypeQuery?: string; @@ -98,6 +106,7 @@ export function getCustomFilterAppliers() { } export class AnnotationStore { + @observable germline: boolean; @observable hugoSymbolQuery: string; @observable alterationQuery: string; @observable tumorTypeQuery: string; @@ -142,6 +151,7 @@ export class AnnotationStore { constructor(props: IAnnotationStore) { this.annotationType = props.type; + if (props.germline !== undefined) this.germline = props.germline; if (props.hugoSymbolQuery) this.hugoSymbolQuery = props.hugoSymbolQuery; if (props.alterationQuery) this.alterationQuery = props.alterationQuery; if (props.tumorTypeQuery) this.tumorTypeQuery = props.tumorTypeQuery; @@ -246,12 +256,35 @@ export class AnnotationStore { }, }); + readonly genomicIndicators = remoteData({ + await: () => [this.gene], + invoke: async () => { + try { + const evidences = await apiClient.evidencesLookupGetUsingGET({ + hugoSymbol: this.gene.result.hugoSymbol, + evidenceTypes: EVIDENCE_TYPES.GENOMIC_INDICATOR, + germline: true, + }); + if (evidences.length > 0) { + return evidences; + } else { + return []; + } + } catch (e) { + notifyError(e, 'Error loading genomic indicators'); + return []; + } + }, + default: [], + }); + readonly geneNumber = remoteData({ await: () => [this.gene], invoke: async () => { try { return await privateClient.utilsNumbersGeneGetUsingGET({ hugoSymbol: this.gene.result.hugoSymbol, + germline: this.germline, }); } catch (e) { return DEFAULT_GENE_NUMBER; @@ -266,6 +299,7 @@ export class AnnotationStore { return apiClient.evidencesLookupGetUsingGET({ hugoSymbol: this.gene.result.hugoSymbol, variant: this.alterationQuery, + germline: this.germline, evidenceTypes: EVIDENCE_TYPES.MUTATION_EFFECT, }); }, @@ -279,6 +313,7 @@ export class AnnotationStore { const clinicalVariants = await privateClient.searchVariantsClinicalGetUsingGET( { hugoSymbol: this.gene.result.hugoSymbol, + germline: this.germline, } ); return clinicalVariants.filter(clinicalVariant => @@ -299,6 +334,7 @@ export class AnnotationStore { invoke: async () => { return privateClient.searchVariantsBiologicalGetUsingGET({ hugoSymbol: this.gene.result.hugoSymbol, + germline: this.germline, }); }, default: [], @@ -359,6 +395,7 @@ export class AnnotationStore { alteration: this.alterationQuery, tumorType: this.tumorTypeQuery, referenceGenome: this.referenceGenomeQuery, + germline: this.germline, }); }, default: DEFAULT_ANNOTATION, @@ -478,6 +515,28 @@ export class AnnotationStore { }, [] as Oncogenicity[]); } + calculatePathogenicities(biologicalAlterations: BiologicalVariant[]) { + const pathogenicities = biologicalAlterations.reduce((acc, item) => { + const pathogenic = shortenPathogenicity(item.pathogenic); + const variant = { + ...item, + pathogenic, + }; + if (!acc[pathogenic]) acc[pathogenic] = []; + acc[pathogenic].push(variant); + return acc; + }, {}); + const keys = Object.keys(pathogenicities).sort(pathogenicitySortMethod); + return keys.reduce((acc, pathogenicity) => { + const datum = pathogenicities[pathogenicity]; + acc.push({ + pathogenicity, + counts: datum.length, + }); + return acc; + }, [] as Pathogenicity[]); + } + @computed get annotationData() { switch (this.annotationType) { @@ -667,6 +726,11 @@ export class AnnotationStore { return this.calculateOncogenicities(this.biologicalAlterations.result); } + @computed + get uniqPathogenicity() { + return this.calculatePathogenicities(this.biologicalAlterations.result); + } + @computed get isFiltered() { return ( diff --git a/src/main/webapp/app/store/AppStore.ts b/src/main/webapp/app/store/AppStore.ts index 80407b8e0..2f807e73e 100644 --- a/src/main/webapp/app/store/AppStore.ts +++ b/src/main/webapp/app/store/AppStore.ts @@ -1,16 +1,14 @@ -import { action, observable } from 'mobx'; +import { observable } from 'mobx'; import { remoteData } from 'cbioportal-frontend-commons'; import apiClient from 'app/shared/api/oncokbClientInstance'; import { OncoKBInfo } from 'app/shared/api/generated/OncoKbAPI'; import { MainNumber } from 'app/shared/api/generated/OncoKbPrivateAPI'; import oncokbPrivateClient from 'app/shared/api/oncokbPrivateClientInstance'; import { - DEFAULT_FEEDBACK_ANNOTATION, DEFAULT_MAIN_NUMBERS, DEFAULT_ONCOKB_INFO, } from 'app/config/constants'; import { Feedback } from 'app/components/feedback/types'; -import autobind from 'autobind-decorator'; import { Location } from 'history'; export interface IAppConfig { diff --git a/src/main/webapp/app/variables.scss b/src/main/webapp/app/variables.scss index 7e5c14d53..d7f87a8e4 100644 --- a/src/main/webapp/app/variables.scss +++ b/src/main/webapp/app/variables.scss @@ -8,10 +8,13 @@ $font-family-sans-serif: 'Gotham Book', serif; $blue: $oncokb-blue; $grey: #808080; // grey $light-grey: #d3d3d3; // light grey +$pale-blue-grey: #f0f7ff; // msk pale blue grey +$pale-warm-grey: #fbf9f7; // msk pale warm grey $primary: $oncokb-blue; $secondary: $grey; $warning: #ffc107; $danger: #dc3545; +$inactive: #f2f4f8; // from design team $link-hover-color: $oncokb-darker-blue; $nav-bg-color: $oncokb-blue; @@ -40,3 +43,5 @@ $container-max-widths: ( ) !default; $bigger-default-font-size: 1.2rem; + +$default-box-shadow: 0px 0.75px 2px 0px rgba(0, 22, 65, 0.10), 0px 1.5px 4px 0px rgba(0, 22, 65, 0.10), 0px 3px 8px 0px rgba(0, 22, 65, 0.10); diff --git a/tsconfig.json b/tsconfig.json index 86191528b..4e3b3f574 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "suppressImplicitAnyIndexErrors": true, "outDir": "target/classes/static/app", "lib": ["dom", "es2020"], - "types": ["jest", "webpack-env"], + "types": ["jest", "webpack-env", "resize-observer-browser"], "allowJs": true, "checkJs": false, "baseUrl": "./", diff --git a/yarn.lock b/yarn.lock index 381986b5f..93b43948e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2726,6 +2726,11 @@ "@types/react" "*" popper.js "^1.14.1" +"@types/resize-observer-browser@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.11.tgz#d3c98d788489d8376b7beac23863b1eebdd3c13c" + integrity sha512-cNw5iH8JkMkb3QkCoe7DaZiawbDQEUX8t7iuQaRTyLOyQCR2h+ibBD4GJt7p5yhUHrlOeL7ZtbxNHeipqNsBzQ== + "@types/resize-observer-browser@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.5.tgz#36d897708172ac2380cd486da7a3daf1161c1e23" @@ -13181,9 +13186,9 @@ oncokb-styles@~0.1.2: integrity sha512-tuy5s3qFxgf1ogMATQSRPNgLlAMrvOOTCAN1dm/wJ+VZoStbJ7g36/qHwc99UPfh3vrB05broLodF+k58p5tUw== oncokb-styles@~1.4.0-alpha.0: - version "1.4.0-alpha.0" - resolved "https://registry.yarnpkg.com/oncokb-styles/-/oncokb-styles-1.4.0-alpha.0.tgz#1ea7133cc2267cfe0b8cf1112f46f9b17146a4bc" - integrity sha512-ZVtDgYw7f5pN8KT4r5K/v0kcG4SH9JOoZW8IvoaHGkru6DMt0K/YnlnkG7cbmk5wa4bvzXAJkMcnajI1/DNEdA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/oncokb-styles/-/oncokb-styles-1.4.2.tgz#ad601699636875abe425d80b25c050d28d47c2bc" + integrity sha512-dq/w/OZv7oTjQzyXRo54ldC3PiHHu36eVuFmS0U5PGlk3Qx8XfB9XSwELHKTgmuen5H8YKQJxc/h3cBlFBF7Xw== oncokb-ts-api-client@^1.0.4: version "1.0.4"
{item[0]}{item[1]} + {item[0]} + {item[1]}