Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 84b27ef

Browse files
piecykFezVrasta
authored andcommitted
fix: setPopperNode only to update popper instance for HTMLElement (#253)
1 parent 5c423ed commit 84b27ef

File tree

6 files changed

+49
-23
lines changed

6 files changed

+49
-23
lines changed

.size-snapshot.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{
22
"dist/index.umd.js": {
3-
"bundled": 49703,
4-
"minified": 17814,
5-
"gzipped": 5717
3+
"bundled": 49749,
4+
"minified": 17751,
5+
"gzipped": 5578
66
},
77
"dist/index.umd.min.js": {
8-
"bundled": 25362,
9-
"minified": 10181,
10-
"gzipped": 3420
8+
"bundled": 24376,
9+
"minified": 10020,
10+
"gzipped": 3347
1111
},
1212
"dist/index.esm.js": {
13-
"bundled": 9794,
14-
"minified": 5639,
15-
"gzipped": 1769,
13+
"bundled": 10105,
14+
"minified": 5808,
15+
"gzipped": 1838,
1616
"treeshaked": {
1717
"rollup": {
18-
"code": 4637,
18+
"code": 4604,
1919
"import_statements": 137
2020
},
2121
"webpack": {
22-
"code": 5371
22+
"code": 5725
2323
}
2424
}
2525
}

src/Popper.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export class InnerPopper extends React.Component<PopperProps, PopperState> {
7474
arrowNode: ?HTMLElement = null;
7575

7676
setPopperNode = (popperNode: ?HTMLElement) => {
77-
if (this.popperNode === popperNode) return;
77+
if (!popperNode || this.popperNode === popperNode) return;
7878

7979
safeInvoke(this.props.innerRef, popperNode);
8080
this.popperNode = popperNode;
@@ -83,10 +83,7 @@ export class InnerPopper extends React.Component<PopperProps, PopperState> {
8383
};
8484

8585
setArrowNode = (arrowNode: ?HTMLElement) => {
86-
if (this.arrowNode === arrowNode) return;
8786
this.arrowNode = arrowNode;
88-
89-
if (!this.popperInstance) this.updatePopperInstance();
9087
};
9188

9289
updateStateModifier = {
@@ -192,6 +189,7 @@ export class InnerPopper extends React.Component<PopperProps, PopperState> {
192189
}
193190

194191
componentWillUnmount() {
192+
safeInvoke(this.props.innerRef, null);
195193
this.destroyPopperInstance();
196194
}
197195

@@ -218,7 +216,9 @@ export default function Popper({ referenceElement, ...props }: PopperProps) {
218216
<ManagerContext.Consumer>
219217
{({ referenceNode }) => (
220218
<InnerPopper
221-
referenceElement={referenceElement ? referenceElement : referenceNode}
219+
referenceElement={
220+
referenceElement !== undefined ? referenceElement : referenceNode
221+
}
222222
{...props}
223223
/>
224224
)}

src/Popper.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ describe('Popper component', () => {
7171
const referenceElement = document.createElement('div');
7272
expect(() =>
7373
mount(
74-
<InnerPopper referenceElemen={referenceElement}>
74+
<InnerPopper referenceElement={referenceElement}>
7575
{({ ref, style, placement, arrowProps }) => (
7676
<div
7777
ref={current => ref(current)}

src/__mocks__/popper.js.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,41 @@ export default class Popper {
88
};
99

1010
constructor(reference, popper, options = {}) {
11+
const modifiers = Object.keys(options.modifiers)
12+
.map(name => ({
13+
name,
14+
...options.modifiers[name],
15+
}))
16+
.sort((a, b) => a.order - b.order);
17+
18+
const update = () => {
19+
const data = {
20+
placement: options.placement,
21+
arrowStyles: {},
22+
offsets: {
23+
popper: {
24+
position: 'absolute',
25+
},
26+
reference: {},
27+
},
28+
};
29+
modifiers.forEach(m => {
30+
if (m.enabled && m.fn) {
31+
m.fn(data, m);
32+
}
33+
});
34+
};
35+
update();
36+
1137
return {
1238
reference,
1339
popper,
1440
options: { ...Popper.Defaults, ...options },
1541
state: this.state,
1642
destroy: () => (this.state.isDestroyed = true),
17-
scheduleUpdate: () => {},
43+
scheduleUpdate: () => {
44+
update();
45+
},
1846
};
1947
}
2048
}

src/__snapshots__/Popper.test.js.snap

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@ exports[`Popper component renders the expected markup 1`] = `
88
referenceElement={<div />}
99
>
1010
<div
11+
data-placement="bottom"
1112
style={
1213
Object {
13-
"left": 0,
14-
"opacity": 0,
15-
"pointerEvents": "none",
1614
"position": "absolute",
17-
"top": 0,
1815
}
1916
}
2017
>

yarn.lock

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2048,9 +2048,10 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
20482048
safe-buffer "^5.0.1"
20492049
sha.js "^2.4.8"
20502050

2051-
create-react-context@^0.2.1, create-react-context@^0.2.2:
2051+
create-react-context@<=0.2.2, create-react-context@^0.2.2:
20522052
version "0.2.2"
20532053
resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca"
2054+
integrity sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A==
20542055
dependencies:
20552056
fbjs "^0.8.0"
20562057
gud "^1.0.0"

0 commit comments

Comments
 (0)