UNPKG

@ant-design/pro-layout

Version:
122 lines 6 kB
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 };