Skip to content

Commit b2d3fef

Browse files
committed
chore(ObserveViewport): add warnig when no ViewportProvider exists to connect to
1 parent 2cbecba commit b2d3fef

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

lib/ObserveViewport.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ interface IContext {
3535
options: IViewportChangeOptions,
3636
) => void;
3737
removeViewportChangeListener: (handler: TViewportChangeHandler) => void;
38+
hasRootProviderAsParent: boolean;
3839
}
3940

4041
export default class ObserveViewport extends React.Component<IProps, IState> {
@@ -106,7 +107,30 @@ export default class ObserveViewport extends React.Component<IProps, IState> {
106107
registerViewportListeners = ({
107108
addViewportChangeListener,
108109
removeViewportChangeListener,
110+
hasRootProviderAsParent,
109111
}: IContext): React.ReactNode => {
112+
if (!hasRootProviderAsParent) {
113+
if (process.env.NODE_ENV !== 'production') {
114+
console.warn(
115+
`react-viewport-utils: <ObserveViewport> component is not able to connect to a <ViewportProvider>. Therefore it cannot detect updates from the viewport and will not work as expected. To resolve this issue please add a <ViewportProvider> as a parent of the <ObserveViewport> component, e.g. directly in the ReactDOM.render call:
116+
117+
import * as ReactDOM from 'react-dom';
118+
import { ViewportProvider, ObserveViewport } from 'react-viewport-utils';
119+
ReactDOM.render(
120+
<ViewportProvider>
121+
<main role="main">
122+
<ObserveViewport>
123+
{({ scroll, dimensions }) => ...}
124+
</ObserveViewport>
125+
</main>
126+
</ViewportProvider>,
127+
document.getElementById('root')
128+
);`,
129+
);
130+
}
131+
return null;
132+
}
133+
110134
const shouldRegister =
111135
this.removeViewportChangeListener !== removeViewportChangeListener &&
112136
this.addViewportChangeListener !== addViewportChangeListener;

0 commit comments

Comments
 (0)