mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 03:06:00 +00:00
49 lines
999 B
TypeScript
49 lines
999 B
TypeScript
import _ from 'lodash';
|
|
import ResizeObserver from 'resize-observer-polyfill';
|
|
|
|
export default function resizeObserver(node, observerEnabled) {
|
|
const measure = () => {
|
|
const rect = node.getBoundingClientRect();
|
|
|
|
node.dispatchEvent(
|
|
new CustomEvent('resize', {
|
|
detail: {
|
|
width: rect.width,
|
|
height: rect.height,
|
|
},
|
|
})
|
|
);
|
|
};
|
|
|
|
let resizeObserver = null;
|
|
|
|
function doUpdate() {
|
|
if (observerEnabled && !resizeObserver) {
|
|
resizeObserver = new ResizeObserver(() => {
|
|
measure();
|
|
});
|
|
resizeObserver.observe(node);
|
|
}
|
|
if (!observerEnabled && resizeObserver) {
|
|
resizeObserver.disconnect();
|
|
resizeObserver = null;
|
|
}
|
|
}
|
|
|
|
doUpdate();
|
|
if (observerEnabled) measure();
|
|
|
|
return {
|
|
destroy() {
|
|
if (resizeObserver) {
|
|
resizeObserver.disconnect();
|
|
resizeObserver = null;
|
|
}
|
|
},
|
|
update(value) {
|
|
observerEnabled = value;
|
|
doUpdate();
|
|
},
|
|
};
|
|
}
|