123456789101112131415161718192021222324252627282930313233343536373839 |
- // @flow
- import * as React from 'react';
- import createContext, { type Context } from 'create-react-context';
-
- export const ManagerReferenceNodeContext: Context<?HTMLElement> = createContext();
- export const ManagerReferenceNodeSetterContext: Context<
- void | ((?HTMLElement) => void)
- > = createContext();
-
- export type ManagerProps = {
- children: React.Node,
- };
-
- export default class Manager extends React.Component<ManagerProps> {
- referenceNode: ?HTMLElement;
-
- setReferenceNode = (newReferenceNode: ?HTMLElement) => {
- if (newReferenceNode && this.referenceNode !== newReferenceNode) {
- this.referenceNode = newReferenceNode;
- this.forceUpdate();
- }
- };
-
- componentWillUnmount() {
- this.referenceNode = null;
- }
-
- render() {
- return (
- <ManagerReferenceNodeContext.Provider value={this.referenceNode}>
- <ManagerReferenceNodeSetterContext.Provider
- value={this.setReferenceNode}
- >
- {this.props.children}
- </ManagerReferenceNodeSetterContext.Provider>
- </ManagerReferenceNodeContext.Provider>
- );
- }
- }
|