* redesign is inevitable * ui: change kai design, add sessions to list, swap to new icon * ui: some changes for suggestions in thread
78 lines
1.7 KiB
TypeScript
78 lines
1.7 KiB
TypeScript
// @ts-nocheck
|
|
import React, { Component, createContext } from 'react';
|
|
import Modal from './Modal';
|
|
import { className } from '@medv/finder';
|
|
|
|
const ModalContext = createContext({
|
|
component: null,
|
|
props: {
|
|
right: true,
|
|
onClose: () => {},
|
|
},
|
|
showModal: (
|
|
component: any,
|
|
props: Record<string, any>,
|
|
onClose?: () => void,
|
|
) => {},
|
|
hideModal: () => {},
|
|
});
|
|
|
|
export class ModalProvider extends Component {
|
|
onCloseCb = () => null;
|
|
|
|
handleKeyDown = (e: any) => {
|
|
if (e.keyCode === 27) {
|
|
this.hideModal();
|
|
}
|
|
};
|
|
|
|
showModal = (component, props = { right: true }, onClose?: () => void) => {
|
|
this.setState({
|
|
component,
|
|
props,
|
|
className: props.className || undefined,
|
|
});
|
|
document.addEventListener('keydown', this.handleKeyDown);
|
|
document.querySelector('body').style.overflow = 'hidden';
|
|
this.onCloseCb = onClose || this.onCloseCb;
|
|
};
|
|
|
|
hideModal = () => {
|
|
document.removeEventListener('keydown', this.handleKeyDown);
|
|
document.querySelector('body').style.overflow = 'visible';
|
|
const { props } = this.state;
|
|
if (this.onCloseCb) {
|
|
this.onCloseCb();
|
|
}
|
|
if (props.onClose) {
|
|
props.onClose();
|
|
}
|
|
this.setState({
|
|
component: null,
|
|
props: {},
|
|
});
|
|
};
|
|
|
|
state = {
|
|
component: null,
|
|
get isModalActive() {
|
|
return this.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);
|