UNPKG

@cainiaofe/cn-ui-m

Version:
49 lines (48 loc) 2.1 kB
import * as React from 'react'; import classNames from 'classnames'; import { getComponentName } from '@cainiaofe/cn-ui-common'; import { CnPageFooter } from "../cn-page-footer"; import { withNativeProps } from "../../utils/with-native-props"; import { getWindowData } from "../../utils/get-window-data"; import Div100vh from './height'; import { CnPageHeader } from './view/cn-page-header'; function autoAddPageLayout() { try { document.documentElement.classList.add('cn-ui-m-page-layout'); } catch (e) { console.error(e); } } /** * @category 组件 * 页面容器 */ export var CnPage = function (props) { autoAddPageLayout(); var children = props.children, noPadding = props.noPadding, _a = props.footer, footerProps = _a === void 0 ? null : _a; var footer = React.useMemo(function () { if (!footerProps) return null; if (getComponentName(footerProps) === 'CnPageFooter') return footerProps; return React.createElement(CnPageFooter, null, footerProps); }, [footerProps]); var hasCnTab = React.useMemo(function () { return React.Children.toArray(children).some(function (child) { return getComponentName(child) === 'CnTab'; }); }, [children]); // @ts-ignore 忽略 data 属性校验,内部使用 var hideHeader = props['data-hideHeader']; return (React.createElement(Div100vh, { className: classNames(CN_UI_HASH_CLASS_NAME, 'cn-ui-m-page') }, props.header, withNativeProps(props, React.createElement("div", { className: "cn-ui-m-page-body", "data-testid": "cn-page-body" }, hideHeader ? null : getWindowData('__CNUI_shellHeader') || null, React.createElement(CnPageHeader, { action: props.action }), React.createElement("div", { className: classNames('cn-ui-m-page-content', { 'cn-ui-m-page-content-with-padding': !noPadding && !hasCnTab, }) }, children))), footer, React.createElement("div", { className: "cn-ui-m-page-footer-placeholder" }))); };