@ant-design/pro-layout
Version:
297 lines (234 loc) • 12.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ProPageHeader = exports.ProBreadcrumb = void 0;
require("antd/es/affix/style");
var _affix = _interopRequireDefault(require("antd/es/affix"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
require("antd/es/config-provider/style");
var _configProvider = _interopRequireDefault(require("antd/es/config-provider"));
require("antd/es/page-header/style");
var _pageHeader = _interopRequireDefault(require("antd/es/page-header"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
require("antd/es/breadcrumb/style");
var _breadcrumb = _interopRequireDefault(require("antd/es/breadcrumb"));
require("antd/es/tabs/style");
var _tabs = _interopRequireDefault(require("antd/es/tabs"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _RouteContext = _interopRequireDefault(require("../../RouteContext"));
var _GridContent = _interopRequireDefault(require("../GridContent"));
var _FooterToolbar = _interopRequireDefault(require("../FooterToolbar"));
require("./index.less");
var _PageLoading = _interopRequireDefault(require("../PageLoading"));
var _WaterMark = _interopRequireDefault(require("../WaterMark"));
var _excluded = ["title", "content", "pageHeaderRender", "header", "prefixedClassName", "extraContent", "style", "prefixCls", "breadcrumbRender"],
_excluded2 = ["children", "loading", "className", "style", "footer", "affixProps", "ghost", "fixedHeader", "breadcrumbRender"];
function genLoading(spinProps) {
if ((0, _typeof2.default)(spinProps) === 'object') {
return spinProps;
}
return {
spinning: spinProps
};
}
/**
* Render Footer tabList In order to be compatible with the old version of the PageHeader basically
* all the functions are implemented.
*/
var renderFooter = function renderFooter(_ref) {
var tabList = _ref.tabList,
tabActiveKey = _ref.tabActiveKey,
onTabChange = _ref.onTabChange,
tabBarExtraContent = _ref.tabBarExtraContent,
tabProps = _ref.tabProps,
prefixedClassName = _ref.prefixedClassName;
if (Array.isArray(tabList) || tabBarExtraContent) {
return /*#__PURE__*/_react.default.createElement(_tabs.default, (0, _extends2.default)({
className: "".concat(prefixedClassName, "-tabs"),
activeKey: tabActiveKey,
onChange: function onChange(key) {
if (onTabChange) {
onTabChange(key);
}
},
tabBarExtraContent: tabBarExtraContent
}, tabProps), tabList === null || tabList === void 0 ? void 0 : tabList.map(function (item, index) {
return (
/*#__PURE__*/
// eslint-disable-next-line react/no-array-index-key
_react.default.createElement(_tabs.default.TabPane, (0, _extends2.default)({}, item, {
tab: item.tab,
key: item.key || index
}))
);
}));
}
return null;
};
var renderPageHeader = function renderPageHeader(content, extraContent, prefixedClassName) {
if (!content && !extraContent) {
return null;
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-detail")
}, /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-main")
}, /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-row")
}, content && /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-content")
}, content), extraContent && /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-extraContent")
}, extraContent))));
};
/**
* 配置与面包屑相同,只是增加了自动根据路由计算面包屑的功能。此功能必须要在 ProLayout 中使用。
*
* @param props
* @returns
*/
var ProBreadcrumb = function ProBreadcrumb(props) {
var value = (0, _react.useContext)(_RouteContext.default);
return /*#__PURE__*/_react.default.createElement("div", {
style: {
height: '100%',
display: 'flex',
alignItems: 'center'
}
}, /*#__PURE__*/_react.default.createElement(_breadcrumb.default, (0, _extends2.default)({}, value === null || value === void 0 ? void 0 : value.breadcrumb, value === null || value === void 0 ? void 0 : value.breadcrumbProps, props)));
};
exports.ProBreadcrumb = ProBreadcrumb;
var ProPageHeader = function ProPageHeader(props) {
var _breadcrumb$routes;
var value = (0, _react.useContext)(_RouteContext.default);
var title = props.title,
content = props.content,
pageHeaderRender = props.pageHeaderRender,
header = props.header,
prefixedClassName = props.prefixedClassName,
extraContent = props.extraContent,
style = props.style,
prefixCls = props.prefixCls,
breadcrumbRender = props.breadcrumbRender,
restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
var getBreadcrumbRender = (0, _react.useMemo)(function () {
if (!breadcrumbRender) {
return undefined;
}
return breadcrumbRender;
}, [breadcrumbRender]);
if (pageHeaderRender === false) {
return null;
}
if (pageHeaderRender) {
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, " ", pageHeaderRender((0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), value)));
}
var pageHeaderTitle = title;
if (!title && title !== false) {
pageHeaderTitle = value.title;
}
var pageHeaderProps = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, value), {}, {
title: pageHeaderTitle
}, restProps), {}, {
footer: renderFooter((0, _objectSpread2.default)((0, _objectSpread2.default)({}, restProps), {}, {
breadcrumbRender: breadcrumbRender,
prefixedClassName: prefixedClassName
}))
}, header);
var breadcrumb = pageHeaderProps.breadcrumb;
var noHasBreadCrumb = (!breadcrumb || !(breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.itemRender) && !(breadcrumb === null || breadcrumb === void 0 ? void 0 : (_breadcrumb$routes = breadcrumb.routes) === null || _breadcrumb$routes === void 0 ? void 0 : _breadcrumb$routes.length)) && !breadcrumbRender;
if (['title', 'subTitle', 'extra', 'tags', 'footer', 'avatar', 'backIcon'].every(function (item) {
return !pageHeaderProps[item];
}) && noHasBreadCrumb && !content && !extraContent) {
return null;
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-warp")
}, /*#__PURE__*/_react.default.createElement(_pageHeader.default, (0, _extends2.default)({}, pageHeaderProps, {
breadcrumb: breadcrumbRender === false ? undefined : (0, _objectSpread2.default)((0, _objectSpread2.default)({}, pageHeaderProps.breadcrumb), value.breadcrumbProps),
breadcrumbRender: getBreadcrumbRender,
prefixCls: prefixCls
}), (header === null || header === void 0 ? void 0 : header.children) || renderPageHeader(content, extraContent, prefixedClassName)));
};
exports.ProPageHeader = ProPageHeader;
var PageContainer = function PageContainer(props) {
var _classNames, _restProps$header2;
var children = props.children,
_props$loading = props.loading,
loading = _props$loading === void 0 ? false : _props$loading,
className = props.className,
style = props.style,
footer = props.footer,
affixProps = props.affixProps,
ghost = props.ghost,
fixedHeader = props.fixedHeader,
breadcrumbRender = props.breadcrumbRender,
restProps = (0, _objectWithoutProperties2.default)(props, _excluded2);
var value = (0, _react.useContext)(_RouteContext.default);
var _useContext = (0, _react.useContext)(_configProvider.default.ConfigContext),
getPrefixCls = _useContext.getPrefixCls;
var prefixCls = props.prefixCls || getPrefixCls('pro');
var prefixedClassName = "".concat(prefixCls, "-page-container");
var containerClassName = (0, _classnames.default)(prefixedClassName, className, (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-page-container-ghost"), ghost), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-page-container-with-footer"), footer), _classNames));
var content = (0, _react.useMemo)(function () {
return children ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(prefixedClassName, "-children-content")
}, children), value.hasFooterToolbar && /*#__PURE__*/_react.default.createElement("div", {
style: {
height: 48,
marginTop: 24
}
})) : null;
}, [children, prefixedClassName, value.hasFooterToolbar]);
var memoBreadcrumbRender = (0, _react.useMemo)(function () {
var _restProps$header;
if (breadcrumbRender == false) return false;
return breadcrumbRender || (restProps === null || restProps === void 0 ? void 0 : (_restProps$header = restProps.header) === null || _restProps$header === void 0 ? void 0 : _restProps$header.breadcrumbRender);
}, [breadcrumbRender, restProps === null || restProps === void 0 ? void 0 : (_restProps$header2 = restProps.header) === null || _restProps$header2 === void 0 ? void 0 : _restProps$header2.breadcrumbRender]);
var pageHeaderDom = /*#__PURE__*/_react.default.createElement(ProPageHeader, (0, _extends2.default)({}, restProps, {
breadcrumbRender: memoBreadcrumbRender,
ghost: ghost,
prefixCls: undefined,
prefixedClassName: prefixedClassName
}));
var loadingDom = (0, _react.useMemo)(function () {
// 当loading时一个合法的ReactNode时,说明用户使用了自定义loading,直接返回改自定义loading
if ( /*#__PURE__*/_react.default.isValidElement(loading)) {
return loading;
} // 当传递过来的是布尔值,并且为false时,说明不需要显示loading,返回null
if (typeof loading === 'boolean' && !loading) {
return null;
} // 如非上述两种情况,那么要么用户传了一个true,要么用户传了loading配置,使用genLoading生成loading配置后返回PageLoading
var spinProps = genLoading(loading);
return /*#__PURE__*/_react.default.createElement(_PageLoading.default, spinProps);
}, [loading]);
var renderContentDom = (0, _react.useMemo)(function () {
// 只要loadingDom非空我们就渲染loadingDom,否则渲染内容
var dom = loadingDom || content;
if (props.waterMarkProps || value.waterMarkProps) {
var waterMarkProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, value.waterMarkProps), props.waterMarkProps);
return /*#__PURE__*/_react.default.createElement(_WaterMark.default, waterMarkProps, dom);
}
return dom;
}, [props.waterMarkProps, value.waterMarkProps, loadingDom, content]);
return /*#__PURE__*/_react.default.createElement("div", {
style: style,
className: containerClassName
}, fixedHeader && pageHeaderDom ?
/*#__PURE__*/
// 在 hasHeader 且 fixedHeader 的情况下,才需要设置高度
_react.default.createElement(_affix.default, (0, _extends2.default)({
offsetTop: value.hasHeader && value.fixedHeader ? value.headerHeight : 0
}, affixProps), pageHeaderDom) : pageHeaderDom, renderContentDom && /*#__PURE__*/_react.default.createElement(_GridContent.default, null, renderContentDom), footer && /*#__PURE__*/_react.default.createElement(_FooterToolbar.default, {
prefixCls: prefixCls
}, footer));
};
var _default = PageContainer;
exports.default = _default;