use resize observer in formview

This commit is contained in:
Jan Prochazka
2021-03-21 08:51:18 +01:00
parent 5ebee161ae
commit 437155e4c5
3 changed files with 70 additions and 24 deletions

View File

@@ -0,0 +1,47 @@
import _ from 'lodash';
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 window['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();
},
};
}