Skip to content

Commit b92e54c

Browse files
committed
Add Portal fixture
1 parent 97f3701 commit b92e54c

3 files changed

Lines changed: 63 additions & 13 deletions

File tree

fixtures/dom/src/components/fixtures/mouse-events/index.js

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
const React = window.React;
2+
const ReactDOM = window.ReactDOM;
23

3-
const Rectangle = ({style, ...props}) => (
4-
<div {...props} style={{border: '1px solid black', padding: 40, ...style}} />
4+
const Rectangle = ({style, nodeRef, ...props}) => (
5+
<div
6+
{...props}
7+
ref={nodeRef}
8+
style={{border: '1px solid black', padding: 40, ...style}}
9+
/>
510
);
611

12+
var portalContainer = document.createElement('div');
13+
document.body.appendChild(portalContainer)
14+
15+
716
class MouseEventsFixtures extends React.Component {
8-
state = {log: []};
17+
state = {log: [], box: null };
918

1019
log = msg => {
1120
this.setState(({log}) => ({
@@ -15,7 +24,28 @@ class MouseEventsFixtures extends React.Component {
1524
clearLog = () => {
1625
this.setState({log: []});
1726
};
27+
28+
componentDidMount() {
29+
this.getDimensions()
30+
}
31+
componentDidUpdate() {
32+
this.getDimensions()
33+
}
34+
35+
getDimensions() {
36+
if (!this.state.box && this.node) {
37+
const { left, bottom } = this.node.getBoundingClientRect()
38+
this.setState({
39+
box: { left: left + 10, top: bottom - 10 },
40+
})
41+
} else if (this.state.box && !this.node) {
42+
this.setState({ box: null })
43+
}
44+
}
45+
1846
render() {
47+
const { box } = this.state;
48+
1949
let getLogger = prefix => e => this.log(`${prefix}: ${e.type}`);
2050
let outerLogger = getLogger('outer');
2151
let innerLogger = getLogger('inner');
@@ -35,8 +65,31 @@ class MouseEventsFixtures extends React.Component {
3565
<Rectangle onMouseEnter={outerLogger} onMouseLeave={outerLogger}>
3666
<Rectangle onMouseEnter={innerLogger} onMouseLeave={innerLogger} />
3767
</Rectangle>
68+
69+
<p>
70+
Moving from the outer rectangle to the inner blue Portal should not trigger a
71+
mouseleave on the outer rectangle.
72+
</p>
73+
<Rectangle
74+
onMouseEnter={outerLogger}
75+
onMouseLeave={outerLogger}
76+
nodeRef={n => this.node = n}
77+
>
78+
79+
{ReactDOM.unstable_createPortal(
80+
<div
81+
style={{ position: 'fixed', border: '1px solid blue', padding: 10, ...box }}
82+
onMouseEnter={innerLogger}
83+
onMouseLeave={innerLogger}
84+
>
85+
portal
86+
</div>,
87+
portalContainer,
88+
)}
89+
</Rectangle>
3890
</div>
3991

92+
4093
<div className="container">
4194
<h4>Console: <button onClick={this.clearLog}>clear</button></h4>
4295
<pre className="output">

src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -859,25 +859,20 @@ describe('ReactDOMFiber', () => {
859859

860860
function simulateMouseMove(from, to) {
861861
if (from) {
862-
ReactTestUtils.simulateNativeEventOnNode('topMouseOut', from, {
863-
target: from,
864-
relatedTarget: to,
865-
});
862+
ReactTestUtils.simulateNativeEventOnNode('topMouseLeave', from, {});
866863
}
867864
if (to) {
868-
ReactTestUtils.simulateNativeEventOnNode('topMouseOver', to, {
869-
target: to,
870-
relatedTarget: from,
871-
});
865+
ReactTestUtils.simulateNativeEventOnNode('topMouseEnter', to, {});
872866
}
873867
}
874868

875869
ReactDOM.render(
876870
<div>
877871
<div
878872
onMouseEnter={() => ops.push('enter parent')}
879-
onMouseLeave={() => ops.push('leave parent')}>
880-
<div ref={n => (firstTarget = n)} />
873+
onMouseLeave={() => ops.push('leave parent')}
874+
ref={n => (firstTarget = n)}>
875+
881876
{ReactDOM.unstable_createPortal(
882877
<div
883878
onMouseEnter={() => ops.push('enter portal')}

src/renderers/dom/shared/eventPlugins/SimpleEventPlugin.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ var topLevelEventsToDispatchConfig: {[key: TopLevelTypes]: DispatchConfig} = {};
137137

138138
var type = {
139139
dependencies: [topEvent],
140+
phasedRegistrationNames: null,
141+
registrationName: null,
140142
};
141143

142144
if (isPhased) {

0 commit comments

Comments
 (0)