svizzle icon indicating copy to clipboard operation
svizzle copied to clipboard

/ui: port `resizeHandler` action from from WAIfinder

Open mindrones opened this issue 2 years ago • 0 comments

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

mindrones avatar Nov 07 '22 11:11 mindrones