mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
![]() |
import React, { createContext, useContext, useMemo } from "react";
|
||
|
import { useMediaLayout } from "use-media";
|
||
|
|
||
|
const MediaContext = createContext(null);
|
||
|
|
||
|
export const MediaProvider = ({ theme, children }) => {
|
||
|
const { sm, md, lg, xl } = theme.breakpoints;
|
||
|
const isSm = useMediaLayout({ maxWidth: md });
|
||
|
const isMd = useMediaLayout({ minWidth: md, maxWidth: lg });
|
||
|
const isLg = useMediaLayout({ minWidth: lg, maxWidth: xl });
|
||
|
const isXl = useMediaLayout({ minWidth: xl });
|
||
|
let mediaSize = false;
|
||
|
switch (true) {
|
||
|
case isSm:
|
||
|
mediaSize = "sm";
|
||
|
break;
|
||
|
case isMd:
|
||
|
mediaSize = "md";
|
||
|
break;
|
||
|
case isLg:
|
||
|
mediaSize = "lg";
|
||
|
break;
|
||
|
case isXl:
|
||
|
mediaSize = "xl";
|
||
|
break;
|
||
|
}
|
||
|
const value = useMemo(
|
||
|
() => ({ isSm: isSm, isMd: isMd, isLg: isLg, isXl: isXl, mediaSize: mediaSize }),
|
||
|
[isSm, isMd, isLg, isXl, mediaSize]
|
||
|
);
|
||
|
return <MediaContext.Provider value={value}>{children}</MediaContext.Provider>;
|
||
|
};
|
||
|
|
||
|
export default () => useContext(MediaContext);
|