sendou.ink/app/hooks/useMainContentWidth.ts
Kalle 9e829614ed
Some checks are pending
E2E Tests / e2e (push) Waiting to run
Tests and checks on push / run-checks-and-tests (push) Waiting to run
Updates translation progress / update-translation-progress-issue (push) Waiting to run
Replace react-use dependency with a few helpers
2026-06-12 22:40:50 +03:00

39 lines
926 B
TypeScript

import { useState } from "react";
import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
import { useWindowSize } from "./useWindowSize";
const MOBILE_BREAKPOINT = 600;
const DESKTOP_BREAKPOINT = 1000;
type LayoutSize = "mobile" | "tablet" | "desktop";
export function useLayoutSize(): LayoutSize {
const { width } = useWindowSize();
if (width === 0) return "desktop";
if (width < MOBILE_BREAKPOINT) return "mobile";
if (width < DESKTOP_BREAKPOINT) return "tablet";
return "desktop";
}
export function useMainContentWidth() {
const [width, setWidth] = useState(0);
useIsomorphicLayoutEffect(() => {
const main = document.querySelector("main");
if (!main) return;
setWidth(main.clientWidth);
const observer = new ResizeObserver((entries) => {
setWidth(entries[0]?.contentRect.width);
});
observer.observe(main);
return () => observer.disconnect();
}, []);
return width;
}