@findify/react-components
Version:
Findify react UI components
30 lines (29 loc) • 1.2 kB
JSX
import { createFactory, useCallback, useState } from 'react';
import { createPortal } from 'react-dom';
import Loadable from 'react-loadable';
import chunks from 'helpers/chunks';
const Drawer = Loadable({
loader: chunks.components.drawer,
loading: () => null,
});
export const withDrawer = (modalName, modalComponent, { renderTo, ...options } = {}) => (BaseComponent) => {
const componentFactory = createFactory(modalComponent);
return (props) => {
const [isOpen, setOpen] = useState(false);
const _showModal = useCallback((name) => {
if (modalName === name)
return setOpen(true);
props.showModal?.(name);
}, []);
const _hideModal = useCallback((name) => {
if (modalName === name)
return setOpen(false);
props.hideModal?.(name);
}, []);
return (<>
<BaseComponent {...props} showModal={_showModal} hideModal={_hideModal}/>
{isOpen &&
createPortal(<Drawer {...props} options={options} name={modalName} children={componentFactory} showModal={_showModal} hideModal={_hideModal}/>, renderTo || document.body)}
</>);
};
};