UNPKG

@talend/react-components

Version:
128 lines (126 loc) 4.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _designSystem = require("@talend/design-system"); var _Inject = _interopRequireDefault(require("../Inject")); var _TabBar = _interopRequireDefault(require("../TabBar")); var _OneColumn = _interopRequireDefault(require("./OneColumn")); var _TwoColumns = _interopRequireDefault(require("./TwoColumns")); var _SkipLinks = _interopRequireDefault(require("./SkipLinks")); var _LayoutModule = _interopRequireDefault(require("./Layout.module.scss")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const DISPLAY_MODES = { ONE_COLUMN: 'OneColumn', TWO_COLUMNS: 'TwoColumns' }; const TALEND_T7_THEME_APPS = ['portal', 'tdc', 'tdp', 'tds', 'tfd', 'tmc', 'mdm']; const TALEND_T7_THEME_CLASSNAME = 't7'; /** * The Layout component is a container * that should follow the body of your App. * If the Layout is not after the body you have to * add some CSS * @example body > div { display: flex; width: 100vw; max-height: 100vh; overflow: hidden; } * @param {object} props react props * @example <Layout mode="TwoColumns" one={one} two={two}></Layout> */ function Layout({ id, header, subHeader, content, footer, mode, drawers, tabs, hasTheme, theme, children, getComponent, ...rest }) { const appCSS = (0, _classnames.default)('tc-layout', _LayoutModule.default.layout, hasTheme && TALEND_T7_THEME_CLASSNAME); const headerCSS = (0, _classnames.default)('tc-layout-header', _LayoutModule.default.header); const footerCSS = (0, _classnames.default)('tc-layout-footer', _LayoutModule.default.footer); let Component; let skipLinkNavigationId; switch (mode) { case DISPLAY_MODES.ONE_COLUMN: Component = _OneColumn.default; break; case DISPLAY_MODES.TWO_COLUMNS: Component = _TwoColumns.default; skipLinkNavigationId = '#tc-layout-side-menu'; break; default: Component = _OneColumn.default; } const safeDrawers = _Inject.default.getReactElement(getComponent, drawers); const safeHeader = _Inject.default.getReactElement(getComponent, header); const safeSubHeader = _Inject.default.getReactElement(getComponent, subHeader); const safeContent = _Inject.default.getReactElement(getComponent, content); const safeFooter = _Inject.default.getReactElement(getComponent, footer); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_designSystem.ThemeProvider, { theme: theme, children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", { id: id, className: appCSS, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: _LayoutModule.default['skip-links'], children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SkipLinks.default, { navigationId: skipLinkNavigationId, mainId: "#tc-layout-main" }) }), safeHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)("header", { role: "banner", className: headerCSS, children: safeHeader }, "banner"), safeSubHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: "subheader", children: safeSubHeader }, "subheader"), /*#__PURE__*/(0, _jsxRuntime.jsxs)(Component, { drawers: safeDrawers, tabs: tabs, getComponent: getComponent, ...rest, children: [safeContent, children] }, "main"), safeFooter && /*#__PURE__*/(0, _jsxRuntime.jsx)("footer", { role: "contentinfo", className: footerCSS, children: safeFooter }, "footer")] }) }); } Layout.displayName = 'Layout'; Layout.propTypes = { id: _propTypes.default.string, header: _Inject.default.getReactElement.propTypes, content: _Inject.default.getReactElement.propTypes, footer: _Inject.default.getReactElement.propTypes, subHeader: _Inject.default.getReactElement.propTypes, mode: _propTypes.default.oneOf([DISPLAY_MODES.ONE_COLUMN, DISPLAY_MODES.TWO_COLUMNS]), drawers: _propTypes.default.arrayOf(_propTypes.default.element), tabs: _propTypes.default.shape(_TabBar.default.propTypes), hasTheme: _propTypes.default.bool, theme: _propTypes.default.string, children: _propTypes.default.node, getComponent: _propTypes.default.func }; Layout.DISPLAY_MODES = DISPLAY_MODES; Layout.TALEND_T7_THEME_APPS = TALEND_T7_THEME_APPS; Layout.TALEND_T7_THEME_CLASSNAME = TALEND_T7_THEME_CLASSNAME; var _default = exports.default = Layout; //# sourceMappingURL=Layout.component.js.map