Skip to content

Commit 8116f88

Browse files
committed
add ability to modify mutation observer options used internally
1 parent ecc52ac commit 8116f88

File tree

8 files changed

+44
-20
lines changed

8 files changed

+44
-20
lines changed

.size-snapshot.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
{
22
"dist/cjs/react-popper-tooltip.js": {
3-
"bundled": 12816,
4-
"minified": 7779,
5-
"gzipped": 2223
3+
"bundled": 13027,
4+
"minified": 7934,
5+
"gzipped": 2253
66
},
77
"dist/esm/react-popper-tooltip.js": {
8-
"bundled": 12777,
9-
"minified": 7751,
10-
"gzipped": 2211,
8+
"bundled": 12988,
9+
"minified": 7906,
10+
"gzipped": 2240,
1111
"treeshaked": {
1212
"rollup": {
1313
"code": 187,
1414
"import_statements": 167
1515
},
1616
"webpack": {
17-
"code": 8418
17+
"code": 8553
1818
}
1919
}
2020
}

README.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ Modifiers passed directly to the underlying popper.js instance.
278278
For more information, refer to Popper.js’
279279
[modifier docs](https://popper.js.org/popper-documentation.html#modifiers)
280280

281-
Modifiers, applied by default:
281+
Default modifiers:
282282

283283
```
284284
{
@@ -288,6 +288,22 @@ Modifiers, applied by default:
288288
}
289289
```
290290

291+
### mutationObserverOptions
292+
293+
> `object`
294+
295+
Options to `MutationObserver`, used internally for updating tooltip position based on trigger DOM changes.
296+
For more information, refer to [MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) docs.
297+
298+
Default options:
299+
300+
```
301+
{
302+
childList: true,
303+
subtree: true
304+
}
305+
```
306+
291307
## Children and tooltip functions
292308

293309
This is where you render whatever you want. `react-popper-tooltip` uses two render props `children`

codecov.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
coverage:
2+
status:
3+
patch: off

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-popper-tooltip",
3-
"version": "2.10.1",
3+
"version": "2.11.0",
44
"description": "React tooltip library built around react-popper",
55
"homepage": "https://react-popper-tooltip.netlify.com",
66
"repository": {

src/Tooltip.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ import {
77
} from './types';
88
import { callAll, TooltipContext, setRef } from './utils';
99

10-
const MUTATION_OBSERVER_CONFIG: MutationObserverInit = {
11-
childList: true,
12-
subtree: true,
13-
};
14-
1510
class Tooltip extends Component<TooltipProps> {
1611
public static contextType = TooltipContext;
1712

@@ -22,7 +17,7 @@ class Tooltip extends Component<TooltipProps> {
2217
const observer = (this.observer = new MutationObserver(() => {
2318
this.props.scheduleUpdate();
2419
}));
25-
observer.observe(this.tooltipRef!, MUTATION_OBSERVER_CONFIG);
20+
observer.observe(this.tooltipRef!, this.props.mutationObserverOptions);
2621

2722
if (
2823
this.isTriggeredBy('hover') ||

src/TooltipTrigger.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ const DEFAULT_MODIFIERS: PopperJS.Modifiers = {
2020
},
2121
};
2222

23+
const DEFAULT_MUTATION_OBSERVER_CONFIG: MutationObserverInit = {
24+
childList: true,
25+
subtree: true,
26+
};
27+
2328
class TooltipTrigger extends Component<
2429
TooltipTriggerProps,
2530
TooltipTriggerState
@@ -35,6 +40,7 @@ class TooltipTrigger extends Component<
3540
portalContainer: canUseDOM() ? document.body : null,
3641
trigger: 'hover',
3742
usePortal: canUseDOM(),
43+
mutationObserverOptions: DEFAULT_MUTATION_OBSERVER_CONFIG,
3844
};
3945

4046
public state: TooltipTriggerState = {
@@ -62,6 +68,7 @@ class TooltipTrigger extends Component<
6268
portalContainer,
6369
followCursor,
6470
getTooltipRef,
71+
mutationObserverOptions,
6572
...restProps
6673
} = this.props;
6774

@@ -119,6 +126,7 @@ class TooltipTrigger extends Component<
119126
style,
120127
tooltip,
121128
trigger,
129+
mutationObserverOptions,
122130
}}
123131
clearScheduled={this.clearScheduled}
124132
hideTooltip={this.hideTooltip}

src/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ export interface TooltipTriggerProps {
113113
* @default true // for browser environments
114114
*/
115115
usePortal: boolean;
116+
/**
117+
* Options to MutationObserver, used internally for updating
118+
* tooltip position based on trigger DOM changes
119+
* @default { childList: true, subtree: true }
120+
*/
121+
mutationObserverOptions: MutationObserverInit;
116122
/**
117123
* Trigger
118124
*/
@@ -142,6 +148,7 @@ export interface TooltipProps {
142148
placement: PopperJS.Placement;
143149
style: React.CSSProperties;
144150
trigger: Trigger;
151+
mutationObserverOptions: MutationObserverInit;
145152
clearScheduled(): void;
146153
hideTooltip(): void;
147154
tooltip(arg: TooltipArg): React.ReactNode;

tests/TooltipTrigger.spec.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ const Trigger = 'Trigger';
5454
const Trigger2 = 'Trigger2';
5555
const Outside = 'Outside';
5656

57-
window.MutationObserver = class {
58-
public disconnect() {}
59-
public observe() {}
60-
};
61-
6257
jest.useFakeTimers();
6358

6459
it('matches snapshot', () => {

0 commit comments

Comments
 (0)