import React, { useState, useImperativeHandle } from 'react'; import Popup from './popup'; import ReactDom from 'react-dom'; export const mountContainer = (ref: any) => { let kwaiPopoverMount = document.getElementById('kwaiPopoverMount'); if (!kwaiPopoverMount) { document.body.insertAdjacentHTML( 'beforeend', '
' ); kwaiPopoverMount = document.getElementById('kwaiPopoverMount') as HTMLElement; } ReactDom.render(, kwaiPopoverMount); }; //export const mountPopup = (props: IProps) => { // console.log(props); // const ref = useRef(); // const container = mountContainer(); // const popupContainer = document.createElement('div'); // container.appendChild(popupContainer); // ReactDom.render(, popupContainer); // return ref; //}; export const getSiblingLocation = (ref: any) => { const child = ref.current ? ref.current.previousElementSibling : document.body; return getNodeAbsolutePosition(child as HTMLElement); }; export function getNodeAbsolutePosition(element: HTMLElement) { const rect = element.getBoundingClientRect(); const bodyRect = document.body.getBoundingClientRect(); return { width: rect.width, height: rect.height, left: rect.left - bodyRect.left, top: rect.top - bodyRect.top, right: bodyRect.right - rect.right, bottom: bodyRect.bottom - rect.bottom - bodyRect.height, }; } const PopupHub = React.forwardRef(function(props, ref) { const [popups, setPopups] = useState([]); useImperativeHandle(ref, () => ({ setPopups, popups })); return ( <> {popups.map(({ uid, ...rest }: any) => ( ))} ); });