openreplay/frontend/app/components/Modal/index.tsx
2022-06-28 14:09:43 +02:00

64 lines
1.4 KiB
TypeScript

//@ts-nocheck
import React, { Component, createContext } from 'react';
import Modal from './Modal';
const ModalContext = createContext({
component: null,
props: {
right: false,
onClose: () => {},
},
showModal: (component: any, props: any) => {},
hideModal: () => {}
});
export class ModalProvider extends Component {
handleKeyDown = (e: any) => {
if (e.keyCode === 27) {
this.hideModal();
}
}
showModal = (component, props = { }) => {
this.setState({
component,
props
});
document.addEventListener('keydown', this.handleKeyDown);
document.querySelector("body").style.overflow = 'hidden';
};
hideModal = () => {
document.removeEventListener('keydown', this.handleKeyDown);
document.querySelector("body").style.overflow = 'visible';
const { props } = this.state;
if (props.onClose) {
props.onClose();
};
this.setState({
component: null,
props: {}
});
}
state = {
component: null,
props: {},
showModal: this.showModal,
hideModal: this.hideModal
};
render() {
return (
<ModalContext.Provider value={this.state}>
<Modal {...this.state} />
{this.props.children}
</ModalContext.Provider>
);
}
}
export const ModalConsumer = ModalContext.Consumer;
export const useModal = () => React.useContext(ModalContext);