diff --git a/packages/react-topology/package.json b/packages/react-topology/package.json index 8c7ffd1b1e8..72d1bd238cf 100644 --- a/packages/react-topology/package.json +++ b/packages/react-topology/package.json @@ -34,7 +34,6 @@ "@types/d3": "^5.7.2", "@types/d3-force": "^1.2.1", "@types/dagre": "0.7.42", - "@types/react-measure": "^2.0.6", "@types/webcola": "3.2.0", "d3": "^5.16.0", "dagre": "0.8.2", @@ -43,7 +42,7 @@ "mobx-react": "^6.2.0", "point-in-svg-path": "^1.0.1", "popper.js": "^1.16.1", - "react-measure": "^2.3.0", + "react-resize-detector": "^7.1.2", "tslib": "^2.0.0", "webcola": "3.4.0" }, diff --git a/packages/react-topology/src/components/VisualizationSurface.tsx b/packages/react-topology/src/components/VisualizationSurface.tsx index 968e4cd7dd1..c641aa8e7cc 100644 --- a/packages/react-topology/src/components/VisualizationSurface.tsx +++ b/packages/react-topology/src/components/VisualizationSurface.tsx @@ -1,10 +1,9 @@ import * as React from 'react'; -import * as _ from 'lodash'; +import { useResizeDetector } from 'react-resize-detector'; import { action } from 'mobx'; // https://github.com/mobxjs/mobx-react#observer-batching import 'mobx-react/batchingForReactDom'; import { observer } from 'mobx-react'; -import ReactMeasure from 'react-measure'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; import { State } from '../types'; @@ -32,20 +31,20 @@ const VisualizationSurface: React.FunctionComponent = state && controller.setState(state); }, [controller, state]); - const onMeasure = React.useMemo( + const onResize = React.useMemo( () => - _.debounce( - action((contentRect: { client: { width: number; height: number } }) => { - controller.getGraph().setDimensions(new Dimensions(contentRect.client.width, contentRect.client.height)); - }), - 100, - { leading: true, trailing: true } - ), + action((width?: number, height?: number) => { + controller.getGraph().setDimensions(new Dimensions(width, height)); + }), [controller] ); - // dispose of onMeasure - React.useEffect(() => () => onMeasure.cancel(), [onMeasure]); + const { ref } = useResizeDetector({ + onResize, + refreshMode: 'debounce', + refreshRate: 100, + refreshOptions: { leading: true, trailing: true } + }); if (!controller.hasGraph()) { return null; @@ -54,18 +53,13 @@ const VisualizationSurface: React.FunctionComponent = const graph = controller.getGraph(); return ( - - {({ measureRef }: { measureRef: React.LegacyRef }) => ( - // render an outer div because react-measure doesn't seem to fire events properly on svg resize -
- - - - - -
- )} -
+
+ + + + + +
); }; diff --git a/yarn.lock b/yarn.lock index 2078e7b2f2c..e01567abbcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2055,12 +2055,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.2.0": - version "7.9.2" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz" - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.4.5", "@babel/runtime@^7.8.7": version "7.11.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz" @@ -4096,12 +4090,6 @@ dependencies: "@types/react" "*" -"@types/react-measure@^2.0.6": - version "2.0.6" - resolved "https://registry.npmjs.org/@types/react-measure/-/react-measure-2.0.6.tgz" - dependencies: - "@types/react" "*" - "@types/react-router-dom@^4.3.1": version "4.3.5" resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.5.tgz" @@ -9105,10 +9093,6 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.3" -get-node-dimensions@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz" - get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" @@ -14341,15 +14325,6 @@ react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" -react-measure@^2.3.0: - version "2.5.0" - resolved "https://registry.npmjs.org/react-measure/-/react-measure-2.5.0.tgz" - dependencies: - "@babel/runtime" "^7.2.0" - get-node-dimensions "^1.2.1" - prop-types "^15.6.2" - resize-observer-polyfill "^1.5.0" - react-monaco-editor@0.48.0: version "0.48.0" resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.48.0.tgz#f2b547c619f0ba3b49d3c8a0e0168ff9d0aa70dc" @@ -14364,6 +14339,13 @@ react-monaco-editor@^0.41.2: monaco-editor "*" prop-types "^15.7.2" +react-resize-detector@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-7.1.2.tgz#8ef975dd8c3d56f9a5160ac382ef7136dcd2d86c" + integrity sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw== + dependencies: + lodash "^4.17.21" + react-router-dom@^4.3.1: version "4.3.1" resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz" @@ -14936,7 +14918,7 @@ requires-port@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" -resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: +resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz"