import { useState, useCallback, forwardRef, useImperativeHandle, Fragment } from 'react';
const _PortalManager = forwardRef((props, ref) => {
    const [state, setState] = useState({
        portals: []
    });
    const mount = useCallback((key, children) => {
        setState((prevState) => ({
            portals: [...prevState.portals, { key, children }]
        }));
    }, []);
    const update = useCallback((key, children) => {
        setState((prevState) => ({
            portals: prevState.portals.map((item) => {
                if (item.key === key) {
                    return Object.assign({}, item, { children });
                }
                return item;
            })
        }));
    }, []);
    const unmount = useCallback((key) => {
        setState((prevState) => ({
            portals: prevState.portals.filter((item) => item.key !== key)
        }));
    }, []);
    useImperativeHandle(ref, () => ({
        mount,
        update,
        unmount,
        portals: state.portals
    }));
    return (<>
      {state.portals.map(({ key, children }) => (<Fragment key={key}>
          {children}
        </Fragment>))}
    </>);
});
export default _PortalManager;
