| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| import React, { useState } from 'react'; |
| import { |
| Layout, Drawer, |
| } from 'antd'; |
| import { css } from '@emotion/core'; |
| import { MenuOutlined } from '@ant-design/icons'; |
| |
| import Footer from './footer'; |
| import SEO from './seo'; |
| import DoczMenu from './DoczMenu'; |
| |
| import { getCurrentPath, mq } from '../utils'; |
| import MainMenu from './MainMenu'; |
| import 'antd/dist/antd.css'; |
| import './layout.scss'; |
| |
| const { Sider } = Layout; |
| |
| const leftPaneWidth = 350; |
| |
| const layoutStyles = css` |
| font-family: Inter; |
| .ant-layout { |
| background-color: white !important; |
| } |
| Button { |
| background: #20a7c9; |
| border-color: #20a7c9; |
| border-radius: 4px; |
| } |
| `; |
| |
| const centerLayoutStyle = css` |
| padding: 25px; |
| min-height: 60vw; |
| overflow: auto; |
| padding-right: 250px; |
| ${[mq[3]]} { |
| padding-right: 25px; |
| } |
| .doc-hamburger { |
| display: none; |
| ${[mq[2]]} { |
| display: block; |
| } |
| text-align: left; |
| } |
| `; |
| |
| const sidebarStyle = css` |
| background-color: #fff; |
| position: fixed; |
| top: 64px; |
| bottom: 0px; |
| left: 0px; |
| border-right: 1px solid #bfbfbf; |
| `; |
| |
| const doczLayoutStyle = css` |
| margin-top: 3px; |
| background-color: white; |
| img { |
| max-width: 100%; |
| margin-bottom: 15px; |
| } |
| blockquote { |
| color: rgb(132, 146, 166); |
| padding: 10px 30px; |
| margin: 30px 0px; |
| border-radius: 3px; |
| border-left: 4px solid rgb(56, 211, 236); |
| background: rgb(239, 242, 247); |
| } |
| pre { |
| border: solid #00000033 1px; |
| padding: 5px 10px; |
| background-color: #82ef8217; |
| border-radius: 3px; |
| max-width: 800px; |
| width: 100%; |
| overflow: auto; |
| } |
| p { |
| font-size: 16px; |
| } |
| ul { |
| font-size: 16px; |
| } |
| h2, h3 { |
| padding-top: 64px; |
| margin-top: -64px; |
| } |
| `; |
| |
| const contentLayoutDocsStyle = css` |
| margin-top: 64px; |
| padding-left: ${leftPaneWidth}px; |
| overflow: visible; |
| ${[mq[2]]} { |
| padding-left: 0px; |
| margin-top: 64px; |
| } |
| aside { |
| ${[mq[2]]} { |
| display: none; |
| } |
| overflow: auto; |
| } |
| `; |
| const footerHeight = 185; |
| const baseLayoutStyle = css` |
| min-height: 100vh; |
| position: relative; |
| .layout-footer { |
| position: absolute; |
| bottom: 0; |
| width: 100%; |
| height: ${footerHeight}px; |
| overflow: auto; // sorry about this :/ |
| background-color: #323232; |
| } |
| .content-wrap { |
| padding-bottom: ${footerHeight}px; |
| } |
| `; |
| |
| interface Props { |
| children: React.ReactNode; |
| } |
| |
| const AppLayout = ({ children }: Props) => { |
| const [showDrawer, setDrawer] = useState(false); |
| const isOnDocsPage = getCurrentPath().indexOf('docs') > -1; |
| return ( |
| <Layout css={layoutStyles}> |
| <SEO title="Welcome" /> |
| <MainMenu /> |
| {isOnDocsPage ? ( |
| <> |
| <Drawer |
| title="Documentation" |
| placement="left" |
| closable={false} |
| onClose={() => setDrawer(false)} |
| visible={showDrawer} |
| getContainer={false} |
| style={{ position: 'absolute' }} |
| > |
| <DoczMenu /> |
| </Drawer> |
| <Layout css={contentLayoutDocsStyle}> |
| <Sider width={leftPaneWidth} css={sidebarStyle}> |
| <DoczMenu /> |
| </Sider> |
| <Layout css={doczLayoutStyle}> |
| <div css={centerLayoutStyle}> |
| <h1 className="doc-hamburger" onClick={() => setDrawer(true)}> |
| <MenuOutlined |
| className="menu" |
| /> |
| {' '} |
| Documentation |
| </h1> |
| {children} |
| </div> |
| </Layout> |
| </Layout> |
| </> |
| ) : ( |
| <Layout css={baseLayoutStyle}> |
| <div className="content-wrap"> |
| {children} |
| </div> |
| <div className="layout-footer"> |
| <Footer /> |
| </div> |
| </Layout> |
| )} |
| </Layout> |
| ); |
| }; |
| |
| export default AppLayout; |