-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathmodal-container.jsx
More file actions
84 lines (68 loc) · 1.87 KB
/
Copy pathmodal-container.jsx
File metadata and controls
84 lines (68 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import './modal-container.scss'
import React from 'react'
import ReactDOM from 'react-dom'
import isOrNot from '../util/isornot'
const PORTAL_CONTAINER_DOM_ID = 'obojobo-draft--components--modal-container--content'
class ModalContainer extends React.Component {
constructor() {
super()
this.onMutation = this.onMutation.bind(this)
this.onRefChanged = this.onRefChanged.bind(this)
this.state = {
numPortalElements: 0
}
}
onMutation() {
// eslint-disable-next-line react/no-find-dom-node
const elPortalContainer = ReactDOM.findDOMNode(
document.getElementById(ModalContainer.PORTAL_CONTAINER_DOM_ID)
)
this.setState({
numPortalElements: elPortalContainer.children.length
})
}
watchForPortalContainerMutations() {
if (!this.observer) {
this.observer = new MutationObserver(this.onMutation)
}
this.observer.disconnect()
// eslint-disable-next-line react/no-find-dom-node
const elPortalContainer = ReactDOM.findDOMNode(
document.getElementById(ModalContainer.PORTAL_CONTAINER_DOM_ID)
)
if (elPortalContainer) {
this.observer.observe(elPortalContainer, {
childList: true
})
}
}
componentDidMount() {
this.watchForPortalContainerMutations()
}
onRefChanged() {
this.watchForPortalContainerMutations()
}
render() {
return (
<div
className={
'obojobo-draft--components--modal-container' +
isOrNot(
(this.props.modalItem && this.props.modalItem.component) ||
this.state.numPortalElements > 0,
'active'
)
}
>
<div className="content legacy">
{this.props.modalItem && this.props.modalItem.component
? this.props.modalItem.component
: null}
</div>
<div className="content portal" id={PORTAL_CONTAINER_DOM_ID} ref={this.onRefChanged}></div>
</div>
)
}
}
ModalContainer.PORTAL_CONTAINER_DOM_ID = PORTAL_CONTAINER_DOM_ID
export default ModalContainer