svizzle
svizzle copied to clipboard
/ui: port `resizeHandler` action from from WAIfinder
From https://github.com/nestauk/dap_uk_ai_map/blob/f3ce7b1df94afee26d42bc67a84f0662b8685a87/fe/src/lib/utils/svizzle/ui.js#L27
export const resizeHandler = (
node,
{
onResize,
onResizeEnd,
onResizeStart,
timeout = 500
} = {}
) => {
let resizing = false;
const started = size => {
resizing = true;
onResizeStart?.(size);
}
const scheduleEnded = _.debounce(size => {
resizing = false;
onResizeEnd?.(size);
}, timeout);
const observer = new ResizeObserver(entries => {
const [size] = entries[0].borderBoxSize;
!resizing && started(size);
onResize?.(size);
scheduleEnded(size);
});
observer.observe(node);
return () => {
observer.disconnect();
}
}