stremio-web/src/common/Modal/Modal.js
2019-01-28 13:05:37 +02:00

30 lines
1,022 B
JavaScript

import React, { useRef, useState, useEffect } from 'react';
import ReactDOM from 'react-dom';
import { FocusableContext } from 'stremio-common';
import withModalsContainer from './withModalsContainer';
const Modal = ({ modalsContainer, children }) => {
const modalContainerRef = useRef(null);
const [focusable, setFocusable] = useState(false);
useEffect(() => {
const nextFocusable = modalsContainer.lastElementChild === modalContainerRef.current;
if (nextFocusable !== focusable) {
setFocusable(nextFocusable);
}
});
return ReactDOM.createPortal(
<FocusableContext.Provider value={focusable}>
<div ref={modalContainerRef} className={'modal-container'}>
{children}
</div>
</FocusableContext.Provider>,
modalsContainer
);
};
const ModalWithModalsContainer = withModalsContainer(Modal);
ModalWithModalsContainer.displayName = 'ModalWithModalsContainer';
export default ModalWithModalsContainer;