@pisell/layout
Version:
基于 Fusion 设计系统的自然布局体系
69 lines (68 loc) • 5.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _context = _interopRequireDefault(require("../common/context"));
var _utils = require("../utils");
var _excluded = ["children", "mode", "noPadding", "style"];
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* Content 的高度默认占据 一个屏幕的剩余空间,即使里面内容不足也应该背景色撑满
* @param props
* @param ref
*/
var PageContent = function PageContent(props, ref) {
var _navNode, _navNode$props, _asideNode, _asideNode$props, _classNames, _classNames2, _classNames3;
var children = props.children,
mode = props.mode,
noPadding = props.noPadding,
style = props.style,
others = (0, _objectWithoutPropertiesLoose2["default"])(props, _excluded);
var _useContext = (0, _react.useContext)(_context["default"]),
prefix = _useContext.prefix;
var sectionWrapperRef = (0, _react.useRef)(null);
var navNode;
var asideNode;
var newChildren = _react.Children.map(children, function (child) {
var tm;
if ( /*#__PURE__*/(0, _react.isValidElement)(child)) {
var _child$type;
// @ts-ignore
tm = child === null || child === void 0 ? void 0 : (_child$type = child.type) === null || _child$type === void 0 ? void 0 : _child$type.typeMark;
if (tm === 'Nav') {
navNode = child;
} else if (tm === 'Aside') {
asideNode = child;
}
}
return tm !== 'Nav' && tm !== 'Aside' ? child : null;
});
var navWidth = ((_navNode = navNode) === null || _navNode === void 0 ? void 0 : (_navNode$props = _navNode.props) === null || _navNode$props === void 0 ? void 0 : _navNode$props.width) || 0;
var asideWidth = ((_asideNode = asideNode) === null || _asideNode === void 0 ? void 0 : (_asideNode$props = _asideNode.props) === null || _asideNode$props === void 0 ? void 0 : _asideNode$props.width) || 0;
var centerMode = !!(asideNode || navNode);
var mainCls = (0, _classnames["default"])((_classNames = {}, _classNames[prefix + "page-main"] = true, _classNames));
var contentHelpCls = (0, _classnames["default"])((_classNames2 = {}, _classNames2[prefix + "page-bg-" + mode] = !!mode, _classNames2[prefix + "page-min-height-helper"] = true, _classNames2[prefix + "page-content--with-aside"] = asideNode, _classNames2[prefix + "page-content--with-nav"] = navNode, _classNames2[prefix + "page-content--center-mode"] = navNode || asideNode, _classNames2[prefix + "page-content--single-col"] = !navNode && !asideNode, _classNames2));
var contentCls = (0, _classnames["default"])((_classNames3 = {}, _classNames3[prefix + "page-content"] = true, _classNames3[prefix + "page-content-no-padding"] = noPadding, _classNames3[prefix + "page-content--with-nav"] = navNode, _classNames3));
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
ref: ref,
className: contentHelpCls
}, others), /*#__PURE__*/_react["default"].createElement("div", {
className: contentCls,
style: (0, _extends2["default"])({}, centerMode ? {
gridTemplateColumns: (navWidth ? (0, _utils.wrapUnit)(navWidth) : '') + " 1fr " + (asideWidth ? (0, _utils.wrapUnit)(asideWidth) : '')
} : null, style)
}, navNode, /*#__PURE__*/_react["default"].createElement("main", {
ref: sectionWrapperRef,
className: mainCls
}, newChildren), asideNode));
};
var RefPageContent = /*#__PURE__*/(0, _react.forwardRef)(PageContent);
RefPageContent.displayName = 'Content';
RefPageContent.typeMark = 'Content';
var _default = RefPageContent;
exports["default"] = _default;