You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							39 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							39 lines
						
					
					
						
							1.0 KiB
						
					
					
				// @flow strict
 | 
						|
import * as React from 'react';
 | 
						|
 | 
						|
export const ManagerReferenceNodeContext: React.Context<?Element>  = React.createContext();
 | 
						|
export const ManagerReferenceNodeSetterContext: React.Context<
 | 
						|
  void | ((?Element) => void)
 | 
						|
> = React.createContext();
 | 
						|
 | 
						|
export type ManagerProps = $ReadOnly<{
 | 
						|
  children: React.Node,
 | 
						|
}>;
 | 
						|
 | 
						|
export function Manager({ children }: ManagerProps): React.Node {
 | 
						|
  const [referenceNode, setReferenceNode] = React.useState<?Element>(null);
 | 
						|
 | 
						|
  const hasUnmounted = React.useRef(false);
 | 
						|
  React.useEffect(() => {
 | 
						|
    return () => {
 | 
						|
      hasUnmounted.current = true;
 | 
						|
    };
 | 
						|
  }, []);
 | 
						|
 | 
						|
  const handleSetReferenceNode = React.useCallback((node) => {
 | 
						|
    if (!hasUnmounted.current) {
 | 
						|
      setReferenceNode(node);
 | 
						|
    }
 | 
						|
  }, []);
 | 
						|
 | 
						|
  return (
 | 
						|
    <ManagerReferenceNodeContext.Provider value={referenceNode}>
 | 
						|
      <ManagerReferenceNodeSetterContext.Provider
 | 
						|
        value={handleSetReferenceNode}
 | 
						|
      >
 | 
						|
        {children}
 | 
						|
      </ManagerReferenceNodeSetterContext.Provider>
 | 
						|
    </ManagerReferenceNodeContext.Provider>
 | 
						|
  );
 | 
						|
}
 |