@ant-design/pro-layout
Version:
122 lines • 6 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import { isNeedOpenHash, ProProvider } from '@ant-design/pro-provider';
import { ConfigProvider, Layout } from 'antd';
import classNames from 'classnames';
import React, { useCallback, useContext, useEffect, useState } from 'react';
import { clearMenuItem } from "../../utils/utils";
import { GlobalHeader } from "../GlobalHeader";
import { TopNavHeader } from "../TopNavHeader";
import { useStyle } from "./style/header";
import { useStylish } from "./style/stylish";
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var Header = Layout.Header;
var DefaultHeader = function DefaultHeader(props) {
var _token$layout2, _token$layout3, _token$layout4;
var isMobile = props.isMobile,
fixedHeader = props.fixedHeader,
propsClassName = props.className,
style = props.style,
collapsed = props.collapsed,
prefixCls = props.prefixCls,
onCollapse = props.onCollapse,
layout = props.layout,
headerRender = props.headerRender,
headerContentRender = props.headerContentRender;
var _useContext = useContext(ProProvider),
token = _useContext.token;
var context = useContext(ConfigProvider.ConfigContext);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
isFixedHeaderScroll = _useState2[0],
setIsFixedHeaderScroll = _useState2[1];
var needFixedHeader = fixedHeader || layout === 'mix';
var renderContent = useCallback(function () {
var isTop = layout === 'top';
var clearMenuData = clearMenuItem(props.menuData || []);
var defaultDom = /*#__PURE__*/_jsx(GlobalHeader, _objectSpread(_objectSpread({
onCollapse: onCollapse
}, props), {}, {
menuData: clearMenuData,
children: headerContentRender && headerContentRender(props, null)
}));
if (isTop && !isMobile) {
defaultDom = /*#__PURE__*/_jsx(TopNavHeader, _objectSpread(_objectSpread({
mode: "horizontal",
onCollapse: onCollapse
}, props), {}, {
menuData: clearMenuData
}));
}
if (headerRender && typeof headerRender === 'function') {
return headerRender(props, defaultDom);
}
return defaultDom;
}, [headerContentRender, headerRender, isMobile, layout, onCollapse, props]);
useEffect(function () {
var _context$getTargetCon;
var dom = (context === null || context === void 0 || (_context$getTargetCon = context.getTargetContainer) === null || _context$getTargetCon === void 0 ? void 0 : _context$getTargetCon.call(context)) || document.body;
var isFixedHeaderFn = function isFixedHeaderFn() {
var _token$layout;
var scrollTop = dom.scrollTop;
if (scrollTop > (((_token$layout = token.layout) === null || _token$layout === void 0 || (_token$layout = _token$layout.header) === null || _token$layout === void 0 ? void 0 : _token$layout.heightLayoutHeader) || 56) && !isFixedHeaderScroll) {
setIsFixedHeaderScroll(true);
return true;
}
if (isFixedHeaderScroll) {
setIsFixedHeaderScroll(false);
}
return false;
};
if (!needFixedHeader) return;
if (typeof window === 'undefined') return;
dom.addEventListener('scroll', isFixedHeaderFn, {
passive: true
});
return function () {
dom.removeEventListener('scroll', isFixedHeaderFn);
};
}, [(_token$layout2 = token.layout) === null || _token$layout2 === void 0 || (_token$layout2 = _token$layout2.header) === null || _token$layout2 === void 0 ? void 0 : _token$layout2.heightLayoutHeader, needFixedHeader, isFixedHeaderScroll]);
var isTop = layout === 'top';
var baseClassName = "".concat(prefixCls, "-layout-header");
var _useStyle = useStyle(baseClassName),
wrapSSR = _useStyle.wrapSSR,
hashId = _useStyle.hashId;
var stylish = useStylish("".concat(baseClassName, ".").concat(baseClassName, "-stylish"), {
proLayoutCollapsedWidth: 64,
stylish: props.stylish
});
var className = classNames(propsClassName, hashId, baseClassName, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(baseClassName, "-fixed-header"), needFixedHeader), "".concat(baseClassName, "-fixed-header-scroll"), isFixedHeaderScroll), "".concat(baseClassName, "-mix"), layout === 'mix'), "".concat(baseClassName, "-fixed-header-action"), !collapsed), "".concat(baseClassName, "-top-menu"), isTop), "".concat(baseClassName, "-header"), true), "".concat(baseClassName, "-stylish"), !!props.stylish));
if (layout === 'side' && !isMobile) return null;
return stylish.wrapSSR(wrapSSR( /*#__PURE__*/_jsx(_Fragment, {
children: /*#__PURE__*/_jsxs(ConfigProvider
// @ts-ignore
, {
theme: {
hashed: isNeedOpenHash(),
components: {
Layout: {
headerBg: 'transparent',
bodyBg: 'transparent'
}
}
},
children: [needFixedHeader && /*#__PURE__*/_jsx(Header, {
style: _objectSpread({
height: ((_token$layout3 = token.layout) === null || _token$layout3 === void 0 || (_token$layout3 = _token$layout3.header) === null || _token$layout3 === void 0 ? void 0 : _token$layout3.heightLayoutHeader) || 56,
lineHeight: "".concat(((_token$layout4 = token.layout) === null || _token$layout4 === void 0 || (_token$layout4 = _token$layout4.header) === null || _token$layout4 === void 0 ? void 0 : _token$layout4.heightLayoutHeader) || 56, "px"),
backgroundColor: 'transparent',
zIndex: 19
}, style)
}), /*#__PURE__*/_jsx(Header, {
className: className,
style: style,
children: renderContent()
})]
})
})));
};
export { DefaultHeader };