useIsSidebarCompact.ts 696 B

123456789101112131415161718192021222324
  1. import { useState, useEffect } from 'react';
  2. const SIDEBAR_COMPACT_BREAKPOINT = 1144;
  3. export function useIsSidebarCompact(): boolean {
  4. const [isCompact, setIsCompact] = useState(() =>
  5. typeof window !== 'undefined' ? window.innerWidth < SIDEBAR_COMPACT_BREAKPOINT : false
  6. );
  7. useEffect(() => {
  8. const mediaQuery = window.matchMedia(`(max-width: ${SIDEBAR_COMPACT_BREAKPOINT - 1}px)`);
  9. const handleChange = (e: MediaQueryListEvent) => {
  10. setIsCompact(e.matches);
  11. };
  12. setIsCompact(mediaQuery.matches);
  13. mediaQuery.addEventListener('change', handleChange);
  14. return () => mediaQuery.removeEventListener('change', handleChange);
  15. }, []);
  16. return isCompact;
  17. }