Skip to content

Commit e48311c

Browse files
authored
fix: add intersection observer for resize detection (#3819)
* fix: add intersection observer for resize detection * feat: add IntersectionObserver support for jest environment * build: add intersection-observer and update package.json
1 parent 8437c2e commit e48311c

File tree

5 files changed

+20
-0
lines changed

5 files changed

+20
-0
lines changed

jest.setup.jsdom.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require('./jest.setup.base');
22
require('jest-canvas-mock');
3+
require('intersection-observer');
34
require('jest-fetch-mock').enableMocks();
45
const { Buffer } = require('buffer');
56
const timer = require('timers');

jest.setup.node.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ global.getComputedStyle = jsdom.window.getComputedStyle;
4242
global.window = jsdom.window;
4343
global.DOMParser = jsdom.window.DOMParser;
4444
global.MutationObserver = jsdom.window.MutationObserver;
45+
global.IntersectionObserver = jsdom.window.IntersectionObserver;
4546
global.KeyboardEvent = jsdom.window.KeyboardEvent;
4647
global.requestAnimationFrame = (fn) => setTimeout(fn, 16);
4748
global.cancelAnimationFrame = (timer) => {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
"glob": "^8.0.1",
108108
"handlebars": "^4.7.3",
109109
"husky": "^7.0.4",
110+
"intersection-observer": "^0.12.2",
110111
"is-git-clean": "^1.1.0",
111112
"jest": "^29.7.0",
112113
"jest-canvas-mock": "^2.4.0",

packages/monaco-enhance/src/browser/zone-widget.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,13 @@ export abstract class ResizeZoneWidget extends ZoneWidget {
459459

460460
protected observeContainer(dom: HTMLDivElement): IDisposable {
461461
this.wrap = dom;
462+
const intersectionObserver = new IntersectionObserver((entries) => {
463+
for (const entry of entries) {
464+
if (entry.isIntersecting) {
465+
this.resizeZoneWidget();
466+
}
467+
}
468+
});
462469
const mutationObserver = new MutationObserver((mutations) => {
463470
mutations.forEach((mutation) => {
464471
if (mutation.type === 'childList') {
@@ -482,9 +489,11 @@ export abstract class ResizeZoneWidget extends ZoneWidget {
482489
});
483490
this.resizeZoneWidget();
484491
});
492+
intersectionObserver.observe(this.wrap);
485493
mutationObserver.observe(this.wrap, { childList: true, subtree: true });
486494
return {
487495
dispose() {
496+
intersectionObserver.disconnect();
488497
mutationObserver.disconnect();
489498
},
490499
};

yarn.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1992,6 +1992,7 @@ __metadata:
19921992
glob: "npm:^8.0.1"
19931993
handlebars: "npm:^4.7.3"
19941994
husky: "npm:^7.0.4"
1995+
intersection-observer: "npm:^0.12.2"
19951996
is-git-clean: "npm:^1.1.0"
19961997
jest: "npm:^29.7.0"
19971998
jest-canvas-mock: "npm:^2.4.0"
@@ -10904,6 +10905,13 @@ __metadata:
1090410905
languageName: node
1090510906
linkType: hard
1090610907

10908+
"intersection-observer@npm:^0.12.2":
10909+
version: 0.12.2
10910+
resolution: "intersection-observer@npm:0.12.2"
10911+
checksum: 10/cb1a6369bd1636b3f227d7cb7fec22f5a35b9d8ba9e26303b405d50c54c3ef02c5a547107b1d951e7eb421e192a564222faf4660a21fad69c34dcb9f926c159c
10912+
languageName: node
10913+
linkType: hard
10914+
1090710915
"invariant@npm:^2.2.4":
1090810916
version: 2.2.4
1090910917
resolution: "invariant@npm:2.2.4"

0 commit comments

Comments
 (0)