Skip to content

Commit 69ca8fb

Browse files
author
Kubit
committed
Add resizeObserver utility
1 parent 7501e29 commit 69ca8fb

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

src/utils/resizeObserver/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './resizeObserver';
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { ResizeObserver } from './resizeObserver';
2+
3+
describe('ResizeObserver fallback', () => {
4+
let mockCallback: jest.Mock;
5+
6+
beforeEach(() => {
7+
mockCallback = jest.fn();
8+
});
9+
10+
it('can be observe', () => {
11+
const observer = new ResizeObserver(mockCallback);
12+
observer.observe(document.createElement('div'));
13+
expect(mockCallback).toHaveBeenCalled();
14+
});
15+
16+
it('should not throw when calling unobserve', () => {
17+
const observer = new ResizeObserver(mockCallback);
18+
const testElement = document.createElement('div');
19+
expect(() => observer.unobserve(testElement)).not.toThrow();
20+
});
21+
22+
it('should not throw when calling disconnect', () => {
23+
const observer = new ResizeObserver(mockCallback);
24+
expect(() => observer.disconnect()).not.toThrow();
25+
});
26+
});
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
let ResizeObserver: {
2+
new (callback: ResizeObserverCallback): ResizeObserver;
3+
prototype: ResizeObserver;
4+
};
5+
6+
// Avoid crashing in environments where ResizeObserver is not supported
7+
if (typeof self !== 'undefined' && self.ResizeObserver) {
8+
ResizeObserver = self.ResizeObserver;
9+
} else {
10+
// Define a minimal type for ResizeObserver polyfill
11+
class ResizeObserverPolyfill {
12+
callback;
13+
constructor(callback: ResizeObserverCallback) {
14+
this.callback = callback;
15+
}
16+
17+
observe(_target: Element, _options?: ResizeObserverOptions): void {
18+
this.callback();
19+
}
20+
21+
unobserve(_target: Element): void {
22+
// Do nothing
23+
}
24+
25+
disconnect(): void {
26+
// Do nothing
27+
}
28+
}
29+
30+
ResizeObserver = ResizeObserverPolyfill;
31+
}
32+
export { ResizeObserver };

0 commit comments

Comments
 (0)