DocSpace-buildtools/packages/asc-web-common/components/Section/sub-components/section-header.js

171 lines
4.2 KiB
JavaScript
Raw Normal View History

import React from "react";
import styled, { css } from "styled-components";
import equal from "fast-deep-equal/react";
import classnames from "classnames";
import PropTypes from "prop-types";
2021-03-03 09:47:28 +00:00
import { LayoutContextConsumer } from "studio/Layout/context";
import { isMobile, isMobileOnly } from "react-device-detect";
import { tablet, desktop, mobile } from "@appserver/components/utils/device";
import NoUserSelect from "@appserver/components/utils/commonStyles";
import { getBannerAttribute } from "@appserver/components/utils/banner";
2022-01-28 13:44:58 +00:00
import Base from "@appserver/components/themes/base";
const StyledSectionHeader = styled.div`
position: relative;
height: 53px;
margin-right: 20px;
${NoUserSelect}
@media ${tablet} {
height: 61px;
margin-right: 16px;
}
2021-05-18 14:59:34 +00:00
${isMobile &&
css`
margin-right: 0px !important;
2021-05-18 14:59:34 +00:00
`}
${isMobile &&
css`
height: ${(props) =>
props.maintenanceExist ? "120px" : "61px"} !important;
width: ${(props) => !props.isLoaded && "100%"};
margin-top: 62px;
@media ${tablet} {
margin-top: ${(props) => props.marginTop};
}
`}
.section-header {
height: 53px;
${isMobile &&
css`
max-width: calc(100vw - 32px);
width: 100%;
`}
${isMobile &&
2021-05-18 14:59:34 +00:00
css`
position: fixed;
top: ${(props) => props.top};
2021-05-18 14:59:34 +00:00
width: ${(props) =>
props.isArticlePinned ? `calc(100% - 272px)` : "100%"};
background-color: #fff;
z-index: 149;
padding-right: 16px;
padding-top: 5px;
2021-05-18 14:59:34 +00:00
`}
}
2021-05-18 14:59:34 +00:00
${isMobile &&
css`
.section-header,
.section-header--hidden {
&,
.group-button-menu-container > div:first-child {
transition: top 0.3s cubic-bezier(0, 0, 0.8, 1);
-moz-transition: top 0.3s cubic-bezier(0, 0, 0.8, 1);
-ms-transition: top 0.3s cubic-bezier(0, 0, 0.8, 1);
-webkit-transition: top 0.3s cubic-bezier(0, 0, 0.8, 1);
-o-transition: top 0.3s cubic-bezier(0, 0, 0.8, 1);
}
.group-button-menu-container {
padding-bottom: 0;
2021-05-18 14:59:34 +00:00
> div:first-child {
top: ${(props) => (!props.isSectionHeaderVisible ? "56px" : "0px")};
2021-05-18 14:59:34 +00:00
@media ${desktop} {
${isMobile &&
css`
position: absolute;
`}
}
}
}
}
2021-05-18 14:59:34 +00:00
`}
.section-header--hidden {
${isMobile &&
css`
top: -61px;
`}
}
`;
StyledSectionHeader.defaultProps = { theme: Base };
class SectionHeader extends React.Component {
constructor(props) {
super(props);
2020-11-17 08:36:49 +00:00
2022-03-14 10:43:05 +00:00
this.state = { orientationChanged: false };
}
2022-03-14 10:43:05 +00:00
componentDidMount() {
window.addEventListener("orientationchange", this.orientationChangeHandler);
}
2022-03-14 10:43:05 +00:00
orientationChangeHandler = () => {
this.setState((state) => ({
orientationChanged: !state.orientationChanged,
}));
};
render() {
// console.log("PageLayout SectionHeader render");
// eslint-disable-next-line react/prop-types
const {
isArticlePinned,
isHeaderVisible,
viewAs,
maintenanceExist,
snackbarExist,
...rest
} = this.props;
let top = "48px";
let marginTop = "52px";
const mainBar = document.getElementById("main-bar");
if (maintenanceExist) {
const { sectionHeaderTop, sectionHeaderMarginTop } = getBannerAttribute();
top = sectionHeaderTop;
marginTop = sectionHeaderMarginTop;
}
return (
<LayoutContextConsumer>
{(value) => (
<StyledSectionHeader
isArticlePinned={isArticlePinned}
isSectionHeaderVisible={value.isVisible}
2021-10-06 12:44:39 +00:00
viewAs={viewAs}
maintenanceExist={maintenanceExist && mainBar}
top={top}
marginTop={marginTop}
>
2020-11-17 08:36:49 +00:00
<div
2021-01-26 15:21:50 +00:00
className={classnames("section-header hidingHeader", {
2021-05-18 14:59:34 +00:00
"section-header--hidden":
value.isVisible === undefined ? false : !value.isVisible,
2021-01-26 15:21:50 +00:00
})}
2020-11-17 08:36:49 +00:00
{...rest}
/>
</StyledSectionHeader>
)}
</LayoutContextConsumer>
);
}
}
SectionHeader.displayName = "SectionHeader";
2021-01-26 15:21:50 +00:00
SectionHeader.propTypes = {
isArticlePinned: PropTypes.bool,
isHeaderVisible: PropTypes.bool,
};
export default SectionHeader;