/
getBreakpoint.js
28 lines (24 loc) · 1003 Bytes
/
getBreakpoint.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import { getWindow } from 'ssr-window';
export default function getBreakpoint(breakpoints, base = 'window', containerEl) {
if (!breakpoints || (base === 'container' && !containerEl)) return undefined;
let breakpoint = false;
const window = getWindow();
const currentWidth = base === 'window' ? window.innerWidth : containerEl.clientWidth;
const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
const points = Object.keys(breakpoints).map((point) => {
if (typeof point === 'string' && point.indexOf('@') === 0) {
const minRatio = parseFloat(point.substr(1));
const value = currentHeight * minRatio;
return { value, point };
}
return { value: point, point };
});
points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
for (let i = 0; i < points.length; i += 1) {
const { point, value } = points[i];
if (value <= currentWidth) {
breakpoint = point;
}
}
return breakpoint || 'max';
}