Allow OHIFCornerstoneExtension to have children passed into it upon declaration

This commit is contained in:
Erik Ziegler 2019-02-07 17:56:23 +01:00
parent 3d1eff07ad
commit 35fd77573b
6 changed files with 46 additions and 12 deletions

View File

@ -21,3 +21,5 @@ npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
.idea .idea
yalc.lock

View File

@ -26,7 +26,7 @@
"react-dom": "^15.0.0 || ^16.0.0", "react-dom": "^15.0.0 || ^16.0.0",
"react-redux": "^6.0.0", "react-redux": "^6.0.0",
"redux": "^4.0.1", "redux": "^4.0.1",
"ohif-core": "^0.2.6" "ohif-core": "^0.2.7"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.2.2", "@babel/core": "^7.2.2",

View File

@ -1,6 +1,29 @@
import React, { Component } from 'react';
import OHIFCornerstoneViewport from './OHIFCornerstoneViewport.js'; import OHIFCornerstoneViewport from './OHIFCornerstoneViewport.js';
/**
* Pass in 'children' to a React component. The purpose of this is to
* allow end users of this extension to pass in components which will
* be rendered on top of the base components.
*
* @param WrappedComponent
* @param children
* @return {function(*): *}
*/
function withChildren(WrappedComponent, children) {
return function(props) {
return <WrappedComponent children={children} { ...props } />;
};
}
// Note: If you are authoring extensions which use stateful libraries (e.g. cornerstone-core, react-redux) as peerDependencies and are also duplicated at the application level, try using 'yalc' to link it to the application, rather than yarn link. This can help fix 'module not found' issues.
// https://github.com/whitecolor/yalc
export default class OHIFCornerstoneExtension { export default class OHIFCornerstoneExtension {
constructor(children) {
this.children = children;
}
/** /**
* Extension ID is a unique id, might be used for namespacing extension specific redux actions/reducers (?) * Extension ID is a unique id, might be used for namespacing extension specific redux actions/reducers (?)
*/ */
@ -9,6 +32,10 @@ export default class OHIFCornerstoneExtension {
} }
getViewportModule() { getViewportModule() {
if (this.children && this.children.viewport) {
return withChildren(OHIFCornerstoneViewport, this.children.viewport);
}
return OHIFCornerstoneViewport; return OHIFCornerstoneViewport;
} }

View File

@ -41,7 +41,8 @@ class OHIFCornerstoneViewport extends Component {
static propTypes = { static propTypes = {
studies: PropTypes.object, studies: PropTypes.object,
displaySet: PropTypes.object, displaySet: PropTypes.object,
viewportIndex: PropTypes.number viewportIndex: PropTypes.number,
children: PropTypes.node
}; };
static id = 'OHIFCornerstoneViewport'; static id = 'OHIFCornerstoneViewport';
@ -160,6 +161,7 @@ class OHIFCornerstoneViewport extends Component {
viewportIndex={this.props.viewportIndex} viewportIndex={this.props.viewportIndex}
/> />
)} )}
{this.props.children}
</> </>
); );
} }

View File

@ -4563,22 +4563,24 @@ react-cornerstone-viewport@^0.1.9:
stylus "^0.54.5" stylus "^0.54.5"
react-dom@^16.6.3: react-dom@^16.6.3:
version "16.6.3" version "16.8.1"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4"
integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" object-assign "^4.1.1"
prop-types "^15.6.2" prop-types "^15.6.2"
scheduler "^0.11.2" scheduler "^0.13.1"
react@^16.6.3: react@^16.6.3:
version "16.6.3" version "16.8.1"
resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a"
integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" object-assign "^4.1.1"
prop-types "^15.6.2" prop-types "^15.6.2"
scheduler "^0.11.2" scheduler "^0.13.1"
read-pkg-up@^2.0.0: read-pkg-up@^2.0.0:
version "2.0.0" version "2.0.0"
@ -4990,9 +4992,10 @@ sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
scheduler@^0.11.2: scheduler@^0.13.1:
version "0.11.3" version "0.13.1"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.1.tgz#1a217df1bfaabaf4f1b92a9127d5d732d85a9591"
integrity sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" object-assign "^4.1.1"

View File

@ -1 +1 @@
export default '5bb64fd9254dbd2dd152424fcf584d3a34b05c8a'; export default '3d1eff07addbc53ced948c42cac8bd351ff083df';