DocSpace-buildtools/web/ASC.Web.Common/src/components/Layout/index.js

75 lines
1.6 KiB
JavaScript
Raw Normal View History

2020-11-17 08:36:49 +00:00
import React, { useEffect, useState } from "react";
2020-10-22 17:09:44 +00:00
import styled from "styled-components";
2020-11-17 08:36:49 +00:00
import MobileLayout from "./MobileLayout";
import { utils } from "asc-web-components";
import {
isIOS,
isMobileSafari,
isFirefox,
isChrome,
} from "react-device-detect";
const { size } = utils.device;
2020-10-22 17:09:44 +00:00
const StyledContainer = styled.div`
2020-11-17 08:36:49 +00:00
width: 100%;
height: ${isIOS && !isFirefox
? !isChrome
? "calc(var(--vh, 1vh) * 100 + 57px)"
: "var(--vh, 100vh)"
: "100vh "};
2020-11-17 08:36:49 +00:00
`;
2020-10-27 08:13:42 +00:00
const Layout = (props) => {
2020-11-17 08:36:49 +00:00
const { children } = props;
const isTablet = window.innerWidth <= size.tablet;
2020-10-22 17:09:44 +00:00
const [windowWidth, setWindowWidth] = useState({
matches: isTablet,
});
useEffect(() => {
let mediaQuery = window.matchMedia("(max-width: 1024px)");
mediaQuery.addListener(setWindowWidth);
return () => mediaQuery.removeListener(setWindowWidth);
}, []);
useEffect(() => {
window.addEventListener("resize", resizeHandler);
resizeHandler();
return () => {
window.removeEventListener("resize", resizeHandler);
};
}, []);
const resizeHandler = () => {
let vh;
if (isIOS) {
if (isMobileSafari) {
vh = (window.innerHeight - 57) * 0.01;
}
if (isChrome) {
vh = window.innerHeight;
}
} else {
vh = (window.innerHeight - 57) * 0.01;
}
document.documentElement.style.setProperty("--vh", `${vh}px`);
};
2020-11-17 08:36:49 +00:00
return (
<StyledContainer className="Layout">
2020-11-17 08:36:49 +00:00
{windowWidth && windowWidth.matches ? (
<MobileLayout {...props} className="mobile-layout" />
2020-11-17 08:36:49 +00:00
) : (
children
)}
</StyledContainer>
);
2020-11-17 08:36:49 +00:00
};
export default Layout;