Skip to content

Commit 3c7ff95

Browse files
committed
refactor!: remove resize-detector and update vue deps to 2.7+
1 parent d774558 commit 3c7ff95

File tree

4 files changed

+50
-30
lines changed

4 files changed

+50
-30
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 7.0.0
2+
3+
### Breaking changes
4+
5+
* Dropped browsers without `ResizeObserver` support. Can work with [resize-observer-polyfill](https://www.npmjs.com/package/resize-observer-polyfill).
6+
* Dropped support for Vue < 2.7.
7+
18
## 6.7.3
29

310
* Fixed that `padding` on the component root doesn't work.

package.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
"scripts/postinstall.js"
2323
],
2424
"dependencies": {
25-
"resize-detector": "^0.3.0",
2625
"vue-demi": "^0.13.11"
2726
},
2827
"devDependencies": {
@@ -75,14 +74,11 @@
7574
"@vue/composition-api": "^1.0.5",
7675
"@vue/runtime-core": "^3.0.0",
7776
"echarts": "^5.4.1",
78-
"vue": "^2.6.12 || ^3.1.1"
77+
"vue": "^2.7.0 || ^3.1.1"
7978
},
8079
"jsdelivr": "dist/index.umd.min.js",
8180
"license": "MIT",
8281
"peerDependenciesMeta": {
83-
"@vue/composition-api": {
84-
"optional": true
85-
},
8682
"@vue/runtime-core": {
8783
"optional": true
8884
}

pnpm-lock.yaml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/composables/autoresize.ts

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
import { watch, type Ref, type PropType } from "vue-demi";
22
import { throttle } from "echarts/core";
3-
import {
4-
addListener,
5-
removeListener,
6-
type ResizeCallback
7-
} from "resize-detector";
83
import { type EChartsType } from "../types";
94

105
type AutoresizeProp =
@@ -19,28 +14,50 @@ export function useAutoresize(
1914
autoresize: Ref<AutoresizeProp | undefined>,
2015
root: Ref<HTMLElement | undefined>
2116
): void {
22-
let resizeListener: ResizeCallback | null = null;
17+
watch(
18+
[root, chart, autoresize],
19+
([root, chart, autoresize], _, onCleanup) => {
20+
let ro: ResizeObserver | null = null;
2321

24-
watch([root, chart, autoresize], ([root, chart, autoresize], _, cleanup) => {
25-
if (root && chart && autoresize) {
26-
const autoresizeOptions = autoresize === true ? {} : autoresize;
27-
const { throttle: wait = 100, onResize } = autoresizeOptions;
22+
if (root && chart && autoresize) {
23+
const { offsetWidth, offsetHeight } = root;
24+
const autoresizeOptions = autoresize === true ? {} : autoresize;
25+
const { throttle: wait = 100, onResize } = autoresizeOptions;
2826

29-
const callback = () => {
30-
chart.resize();
31-
onResize?.();
32-
};
27+
let initialResizeTriggered = false;
3328

34-
resizeListener = wait ? throttle(callback, wait) : callback;
35-
addListener(root, resizeListener);
36-
}
29+
const callback = () => {
30+
chart.resize();
31+
onResize?.();
32+
};
33+
34+
const resizeCallback = wait ? throttle(callback, wait) : callback;
3735

38-
cleanup(() => {
39-
if (root && resizeListener) {
40-
removeListener(root, resizeListener);
36+
ro = new ResizeObserver(() => {
37+
// We just skip ResizeObserver's initial resize callback if the
38+
// size has not changed since the chart is rendered.
39+
if (!initialResizeTriggered) {
40+
initialResizeTriggered = true;
41+
if (
42+
root.offsetWidth === offsetWidth &&
43+
root.offsetHeight === offsetHeight
44+
) {
45+
return;
46+
}
47+
}
48+
resizeCallback();
49+
});
50+
ro.observe(root);
4151
}
42-
});
43-
});
52+
53+
onCleanup(() => {
54+
if (ro) {
55+
ro.disconnect();
56+
ro = null;
57+
}
58+
});
59+
}
60+
);
4461
}
4562

4663
export const autoresizeProps = {

0 commit comments

Comments
 (0)