mirror of
https://github.com/streamich/react-use.git
synced 2026-01-18 14:06:52 +00:00
32 lines
869 B
TypeScript
32 lines
869 B
TypeScript
import { useEffect, useState, useMemo } from 'react';
|
|
|
|
const createBreakpoint = (
|
|
breakpoints: { [name: string]: number } = { laptopL: 1440, laptop: 1024, tablet: 768 }
|
|
) => () => {
|
|
const [screen, setScreen] = useState(0);
|
|
|
|
useEffect(() => {
|
|
const setSideScreen = (): void => {
|
|
setScreen(window.innerWidth);
|
|
};
|
|
setSideScreen();
|
|
window.addEventListener('resize', setSideScreen);
|
|
return () => {
|
|
window.removeEventListener('resize', setSideScreen);
|
|
};
|
|
});
|
|
const sortedBreakpoints = useMemo(() => Object.entries(breakpoints).sort((a, b) => (a[1] >= b[1] ? 1 : -1)), [
|
|
breakpoints,
|
|
]);
|
|
const result = sortedBreakpoints.reduce((acc, [name, width]) => {
|
|
if (screen >= width) {
|
|
return name;
|
|
} else {
|
|
return acc;
|
|
}
|
|
}, sortedBreakpoints[0][0]);
|
|
return result;
|
|
};
|
|
|
|
export default createBreakpoint;
|