mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 16:36:00 +00:00
use resize observer in formview
This commit is contained in:
47
packages/web/src/utility/resizeObserver.ts
Normal file
47
packages/web/src/utility/resizeObserver.ts
Normal 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();
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user