diff options
Diffstat (limited to 'src/containers/download-manager/DownloadManagerWindow.tsx')
-rw-r--r-- | src/containers/download-manager/DownloadManagerWindow.tsx | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/containers/download-manager/DownloadManagerWindow.tsx b/src/containers/download-manager/DownloadManagerWindow.tsx new file mode 100644 index 000000000..e13e51774 --- /dev/null +++ b/src/containers/download-manager/DownloadManagerWindow.tsx | |||
@@ -0,0 +1,46 @@ | |||
1 | import { inject, observer } from 'mobx-react'; | ||
2 | import { Component, ReactPortal } from 'react'; | ||
3 | import ReactDOM from 'react-dom'; | ||
4 | import { Outlet } from 'react-router-dom'; | ||
5 | |||
6 | import { StoresProps } from '../../@types/ferdium-components.types'; | ||
7 | import Layout from '../../components/downloadManager/DownloadManagerLayout'; | ||
8 | import ErrorBoundary from '../../components/util/ErrorBoundary'; | ||
9 | |||
10 | interface IProps {} | ||
11 | |||
12 | @inject('stores', 'actions') | ||
13 | @observer | ||
14 | class DownloadManagerContainer extends Component<IProps> { | ||
15 | portalRoot: any; | ||
16 | |||
17 | el: HTMLDivElement; | ||
18 | |||
19 | constructor(props: StoresProps) { | ||
20 | super(props); | ||
21 | |||
22 | this.portalRoot = document.querySelector('#portalContainer'); | ||
23 | this.el = document.createElement('div'); | ||
24 | } | ||
25 | |||
26 | componentDidMount(): void { | ||
27 | this.portalRoot.append(this.el); | ||
28 | } | ||
29 | |||
30 | componentWillUnmount(): void { | ||
31 | this.el.remove(); | ||
32 | } | ||
33 | |||
34 | render(): ReactPortal { | ||
35 | return ReactDOM.createPortal( | ||
36 | <ErrorBoundary> | ||
37 | <Layout> | ||
38 | <Outlet /> | ||
39 | </Layout> | ||
40 | </ErrorBoundary>, | ||
41 | this.el, | ||
42 | ); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | export default DownloadManagerContainer; | ||