Files
dbgate/packages/web/src/utility/resizeObserver.ts
2021-03-21 08:54:49 +01:00

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();
},
};
}