victory-core
Version:
35 lines • 1.14 kB
JavaScript
import React from "react";
export const PortalContext = /*#__PURE__*/React.createContext(undefined);
PortalContext.displayName = "PortalContext";
export const usePortalContext = () => {
const context = React.useContext(PortalContext);
return context;
};
export const PortalProvider = _ref => {
let {
children
} = _ref;
const [portalChildren, setPortalChildren] = React.useState(new Map());
const addChild = React.useCallback((id, element) => {
setPortalChildren(prevChildren => {
const nextChildren = new Map(prevChildren);
nextChildren.set(id, element);
return nextChildren;
});
}, [setPortalChildren]);
const removeChild = React.useCallback(id => {
setPortalChildren(prevChildren => {
const nextChildren = new Map(prevChildren);
nextChildren.delete(id);
return nextChildren;
});
}, [setPortalChildren]);
const contextValue = React.useMemo(() => ({
addChild,
removeChild,
children: portalChildren
}), [addChild, removeChild, portalChildren]);
return /*#__PURE__*/React.createElement(PortalContext.Provider, {
value: contextValue
}, children);
};