Skip to content

Commit 2e49354

Browse files
author
Oscar Gotting
committed
Replaced DOMNodeRemoved event by MutationObserver
1 parent 91ed7d8 commit 2e49354

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

packages/graphql-playground-react/src/components/Playground/GraphQLEditor.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -425,14 +425,18 @@ class GraphQLEditor extends React.PureComponent<Props & ReduxProps> {
425425
private handleHintInformationRender = elem => {
426426
elem.addEventListener('click', this.onClickHintInformation)
427427

428-
let onRemoveFn
429-
elem.addEventListener(
430-
'DOMNodeRemoved',
431-
(onRemoveFn = () => {
432-
elem.removeEventListener('DOMNodeRemoved', onRemoveFn)
433-
elem.removeEventListener('click', this.onClickHintInformation)
434-
}),
435-
)
428+
const observer = new MutationObserver((mutations) => {
429+
mutations.forEach((mutation) => {
430+
mutation.removedNodes.forEach((removedNode) => {
431+
if (removedNode === elem) {
432+
elem.removeEventListener('click', this.onClickHintInformation);
433+
observer.disconnect();
434+
}
435+
});
436+
});
437+
});
438+
439+
observer.observe(elem, { childList: true });
436440
}
437441

438442
private handleResizeStart = downEvent => {

packages/graphql-playground-react/src/components/Playground/onHasCompletion.tsx

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,20 @@ export default function onHasCompletion(cm, data, onHintInformationRender) {
8787
// When CodeMirror attempts to remove the hint UI, we detect that it was
8888
// removed from our wrapper and in turn remove the wrapper from the
8989
// original container.
90-
let onRemoveFn
91-
wrapper.addEventListener(
92-
'DOMNodeRemoved',
93-
(onRemoveFn = event => {
94-
if (event.target === hintsUl) {
95-
wrapper.removeEventListener('DOMNodeRemoved', onRemoveFn)
96-
wrapper.parentNode.removeChild(wrapper)
97-
wrapper = null
98-
information = null
99-
onRemoveFn = null
100-
}
101-
}),
102-
)
90+
const observer = new MutationObserver((mutations) => {
91+
mutations.forEach((mutation) => {
92+
mutation.removedNodes.forEach((removedNode) => {
93+
if (removedNode === hintsUl) {
94+
wrapper.parentNode.removeChild(wrapper);
95+
wrapper = null;
96+
information = null;
97+
observer.disconnect();
98+
}
99+
});
100+
});
101+
});
102+
103+
observer.observe(wrapper, { childList: true });
103104
}
104105

105106
// Now that the UI has been set up, add info to information.

0 commit comments

Comments
 (0)