From d2440fbee757dbb1e8d5b5c27f2ae5785961baf8 Mon Sep 17 00:00:00 2001 From: alisman Date: Thu, 19 May 2022 13:20:52 -0400 Subject: [PATCH] Add context provider for passing global configuration to components --- package.json | 4 +- .../src/components/appContext/AppContext.tsx | 11 +++ .../downloadControls/DownloadControls.tsx | 9 +- .../cbioportal-frontend-commons/src/index.tsx | 1 + src/appShell/App/Container.tsx | 97 ++++++++++--------- yarn.lock | 38 ++++++-- 6 files changed, 103 insertions(+), 57 deletions(-) create mode 100644 packages/cbioportal-frontend-commons/src/components/appContext/AppContext.tsx diff --git a/package.json b/package.json index 165b0c76e0b..794b81ae7b6 100644 --- a/package.json +++ b/package.json @@ -241,7 +241,7 @@ "rc-tooltip": "^5.0.2", "rc-trigger": "^5.2.1", "rc-util": "^5.8.0", - "react": "16.14.0", + "react": "^16.4", "react-addons-pure-render-mixin": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-bootstrap": "^0.31.5", @@ -251,7 +251,7 @@ "react-collapse": "^4.0.3", "react-color": "^2.18.1", "react-column-resizer": "^1.1.9", - "react-dom": "^16.6.3", + "react-dom": "^16.6", "react-draggable": "^3.3.0", "react-file-download": "^0.3.2", "react-fontawesome": "^1.5.0", diff --git a/packages/cbioportal-frontend-commons/src/components/appContext/AppContext.tsx b/packages/cbioportal-frontend-commons/src/components/appContext/AppContext.tsx new file mode 100644 index 00000000000..ccb81f8c5eb --- /dev/null +++ b/packages/cbioportal-frontend-commons/src/components/appContext/AppContext.tsx @@ -0,0 +1,11 @@ +import React, { Context } from 'react'; + +export interface IAppContext { + showDownloadControls: boolean; +} + +export const AppContext: Context = React.createContext< + IAppContext +>({ + showDownloadControls: true, +}); diff --git a/packages/cbioportal-frontend-commons/src/components/downloadControls/DownloadControls.tsx b/packages/cbioportal-frontend-commons/src/components/downloadControls/DownloadControls.tsx index 0cbe75a8181..ee277654948 100644 --- a/packages/cbioportal-frontend-commons/src/components/downloadControls/DownloadControls.tsx +++ b/packages/cbioportal-frontend-commons/src/components/downloadControls/DownloadControls.tsx @@ -9,8 +9,9 @@ import classnames from 'classnames'; import styles from './DownloadControls.module.scss'; import { saveSvg, saveSvgAsPng } from 'save-svg-as-png'; import svgToPdfDownload from '../../lib/svgToPdfDownload'; -import { isPromiseLike } from 'cbioportal-utils'; import { CSSProperties } from 'react'; +import { isPromiseLike } from 'cbioportal-utils'; +import { AppContext } from '../appContext/AppContext'; type ButtonSpec = { key: string; @@ -290,6 +291,10 @@ export default class DownloadControls extends React.Component< } render() { + if (this.context.showDownloadControls === false) { + return null; + } + let element: any = null; if (this.props.type === 'buttonGroup') { element = ( @@ -399,3 +404,5 @@ export default class DownloadControls extends React.Component< } } } + +DownloadControls.contextType = AppContext; diff --git a/packages/cbioportal-frontend-commons/src/index.tsx b/packages/cbioportal-frontend-commons/src/index.tsx index 25c2a5380d1..df26edda37d 100644 --- a/packages/cbioportal-frontend-commons/src/index.tsx +++ b/packages/cbioportal-frontend-commons/src/index.tsx @@ -59,3 +59,4 @@ export * from './theme/cBioPortalTheme'; export { default as TruncatedText } from './components/truncatedText/TruncatedText'; export * from './lib/hashString'; export * from './lib/getColor'; +export * from './components/appContext/AppContext'; diff --git a/src/appShell/App/Container.tsx b/src/appShell/App/Container.tsx index 648bce38771..3ffd44ed0a4 100644 --- a/src/appShell/App/Container.tsx +++ b/src/appShell/App/Container.tsx @@ -28,6 +28,8 @@ import { shouldShowGenieWarning, } from 'appShell/App/usageAgreements/GenieAgreement'; import makeRoutes from 'routes'; +import { AppContext } from 'cbioportal-frontend-commons'; +import { IAppContext } from 'cbioportal-frontend-commons/src'; interface IContainerProps { location: Location; @@ -60,6 +62,11 @@ export default class Container extends React.Component { ); } + get appContext(): IAppContext { + //return { showDownloadControls: this.appStore.getServerConfig.some_prop } + return { showDownloadControls: true }; + } + render() { if ( !isLocalDBServer() && @@ -86,56 +93,58 @@ export default class Container extends React.Component { } return ( -
- - - {getServerConfig().skin_title} - - + +
+ + + {getServerConfig().skin_title} + + -
- +
+ - {shouldShowStudyViewWarning() && } + {shouldShowStudyViewWarning() && } - {shouldShowGenieWarning() && } + {shouldShowGenieWarning() && } -
- +
+ +
-
- - -
- + +
+ + Return to homepage + + } + errorLog={formatErrorLog( this.appStore.undismissedSiteErrors - ) || - 'Oops. There was an error retrieving data.' - } - body={ - - Return to homepage - - } - errorLog={formatErrorLog( - this.appStore.undismissedSiteErrors - )} - errorMessages={formatErrorMessages( - this.appStore.undismissedSiteErrors - )} - /> -
-
- -
{makeRoutes()}
-
- -
+ )} + errorMessages={formatErrorMessages( + this.appStore.undismissedSiteErrors + )} + /> +
+ + +
{makeRoutes()}
+
+ +
+
); } } diff --git a/yarn.lock b/yarn.lock index 4f5196d3496..0cc70e5d4de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20513,6 +20513,16 @@ react-column-resizer@^1.1.9: resolved "https://registry.yarnpkg.com/react-column-resizer/-/react-column-resizer-1.1.9.tgz#b3e591003d1373ae9a9f85ef9d855813743773dd" integrity sha512-l25LPyN3Gu33RC726cv3ZnS9EaI/B+ZIY1MrJiiHcBqsY4BKRYNBbrZolUfzBjjWDwHOBMc/fZLiSxmDGPqCrQ== +react-dom@16.14.0, react-dom@^16.6: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + react-dom@^15.3.1: version "15.6.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" @@ -20523,7 +20533,7 @@ react-dom@^15.3.1: object-assign "^4.1.0" prop-types "^15.5.10" -react-dom@^16.6.3, react-dom@^16.7.0: +react-dom@^16.7.0: version "16.8.4" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.4.tgz#1061a8e01a2b3b0c8160037441c3bf00a0e3bc48" integrity sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ== @@ -20995,15 +21005,6 @@ react-zeroclipboard@^3.2.2: create-react-class "^15.5.3" envify "^3" -react@16.14.0: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - react@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/react/-/react-0.13.3.tgz#a2dfa85335d7dc02b82b482f089582e64cc13356" @@ -21021,6 +21022,15 @@ react@^16.0.0, react@^16.7.0: prop-types "^15.6.2" scheduler "^0.13.4" +react@^16.4: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + reactable@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/reactable/-/reactable-0.14.1.tgz#2ab9895e3df6da2498625de46d3691592d18c93b" @@ -22288,6 +22298,14 @@ scheduler@^0.13.4: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"