@ant-design/pro-layout
Version:
119 lines (111 loc) • 4.48 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _regeneratorRuntime from "@babel/runtime/regenerator";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["rightContentRender", "prefixCls"];
import React, { useRef, useState } from 'react';
import classNames from 'classnames';
import ResizeObserver from 'rc-resize-observer';
import { defaultRenderLogoAndTitle } from '../SiderMenu/SiderMenu';
import './index.less';
import BaseMenu from '../SiderMenu/BaseMenu';
import { useDebounceFn } from '@ant-design/pro-utils';
/**
* 抽离出来是为了防止 rightSize 经常改变导致菜单 render
*
* @param param0
*/
export var RightContent = function RightContent(_ref) {
var rightContentRender = _ref.rightContentRender,
prefixCls = _ref.prefixCls,
props = _objectWithoutProperties(_ref, _excluded);
var _useState = useState('auto'),
_useState2 = _slicedToArray(_useState, 2),
rightSize = _useState2[0],
setRightSize = _useState2[1];
/** 减少一下渲染的次数 */
var setRightSizeDebounceFn = useDebounceFn( /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(width) {
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
setRightSize(width);
case 1:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}(), 160);
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-right-content"),
style: {
minWidth: rightSize
}
}, /*#__PURE__*/React.createElement("div", {
style: {
paddingRight: 8
}
}, /*#__PURE__*/React.createElement(ResizeObserver, {
onResize: function onResize(_ref3) {
var width = _ref3.width;
setRightSizeDebounceFn.run(width);
}
}, rightContentRender && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-right-content-resize")
}, rightContentRender(_objectSpread(_objectSpread({}, props), {}, {
// 测试专用
//@ts-ignore
rightContentSize: rightSize
}))))));
};
var TopNavHeader = function TopNavHeader(props) {
var ref = useRef(null);
var theme = props.theme,
onMenuHeaderClick = props.onMenuHeaderClick,
contentWidth = props.contentWidth,
rightContentRender = props.rightContentRender,
propsClassName = props.className,
style = props.style,
headerContentRender = props.headerContentRender,
layout = props.layout;
var prefixCls = "".concat(props.prefixCls || 'ant-pro', "-top-nav-header");
var headerDom = defaultRenderLogoAndTitle(_objectSpread(_objectSpread({}, props), {}, {
collapsed: false
}), layout === 'mix' ? 'headerTitleRender' : undefined);
var className = classNames(prefixCls, propsClassName, {
light: theme === 'light'
});
var defaultDom = /*#__PURE__*/React.createElement(BaseMenu, _extends({}, props, props.menuProps));
var headerContentDom = headerContentRender ? headerContentRender === null || headerContentRender === void 0 ? void 0 : headerContentRender(props, defaultDom) : defaultDom;
return /*#__PURE__*/React.createElement("div", {
className: className,
style: style
}, /*#__PURE__*/React.createElement("div", {
ref: ref,
className: "".concat(prefixCls, "-main ").concat(contentWidth === 'Fixed' ? 'wide' : '')
}, headerDom && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-main-left"),
onClick: onMenuHeaderClick
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-logo"),
key: "logo",
id: "logo"
}, headerDom)), /*#__PURE__*/React.createElement("div", {
style: {
flex: 1
},
className: "".concat(prefixCls, "-menu")
}, headerContentDom), rightContentRender && /*#__PURE__*/React.createElement(RightContent, _extends({
rightContentRender: rightContentRender,
prefixCls: prefixCls
}, props))));
};
export default TopNavHeader;