import { invertObj } from "ramda"; import { LayoutMedia } from "@components/LayoutMap/layoutMapConfig"; export function getWindowSize() { if (typeof window !== "undefined") { const { innerWidth, innerHeight } = window; return { innerWidth, innerHeight }; } return { innerWidth: 0, innerHeight: 0 }; } export function floorSearch(innerWidth: number, reverses: Array) { const len = reverses.length; let currentNode = reverses[0]; for (let k = 0; k < len; k++) { currentNode = reverses[k]; if (innerWidth >= Number(reverses[k])) { break; } } return { currentNode }; } export function throttle(fn: any, delay = 500) { let prev = new Date().getTime(); return function (...args: any) { let now = new Date().getTime(); if (now - prev >= delay) { fn(...args); prev = now; } }; } export function calcNewestNodeAndMedia( purePoints: (string | number)[], breakpoints: { [index: string]: string } | { [index: number]: string } ) { const { innerWidth } = getWindowSize(); const { currentNode } = floorSearch(innerWidth, purePoints); const currentMedia = invertObj(breakpoints)?.[String(currentNode)] as LayoutMedia; return { innerWidth, currentNode, currentMedia }; }