browser-utils.ts 998 B

123456789101112131415161718192021222324252627
  1. import { Breakpoint } from '../interfaces/breakpoints';
  2. const EVENT_TYPE_CHANGE = 'change';
  3. export const addBreakpointListener = (
  4. breakpoint: Breakpoint,
  5. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  6. listener: (this: MediaQueryList, ev: MediaQueryListEvent) => any,
  7. ): MediaQueryList => {
  8. // get the value of '--breakpoint-*'
  9. const breakpointPixel = parseInt(window.getComputedStyle(document.documentElement).getPropertyValue(`--breakpoint-${breakpoint}`), 10);
  10. const mediaQueryList = window.matchMedia(`(min-width: ${breakpointPixel}px)`);
  11. // add event listener
  12. mediaQueryList.addEventListener(EVENT_TYPE_CHANGE, listener);
  13. return mediaQueryList;
  14. };
  15. export const cleanupBreakpointListener = (
  16. mediaQueryList: MediaQueryList,
  17. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  18. listener: (this: MediaQueryList, ev: MediaQueryListEvent) => any,
  19. ): void => {
  20. mediaQueryList.removeEventListener(EVENT_TYPE_CHANGE, listener);
  21. };