Newer
Older
CrypticOreWallet / src / layout / AppLayout.tsx
@Drew Lemmy Drew Lemmy on 16 Feb 2021 2 KB feat: hide advanced wallet formats
import React, { useState } from "react";
import { Layout, Menu, Grid, AutoComplete, Input } from "antd";
import { SendOutlined, DownloadOutlined, MenuOutlined, SettingOutlined } from "@ant-design/icons";

import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";

import { Brand } from "./nav/Brand";
import { CymbalIndicator } from "./nav/CymbalIndicator";
import { Sidebar } from "./sidebar/Sidebar";
import { AppRouter } from "./AppRouter";

import "./AppLayout.less";

const { useBreakpoint } = Grid;

export function AppLayout(): JSX.Element {
  const { t } = useTranslation();
  const [sidebarCollapsed, setSidebarCollapsed] = useState(true);
  const bps = useBreakpoint();

  return <Layout>
    <Layout.Header className="site-header">
      {/* Sidebar toggle for mobile */}
      {!bps.md && (
        <Menu theme="dark" mode="horizontal" selectable={false} forceSubMenuRender={true} className="site-header-sidebar-toggle">
          <Menu.Item key="1" onClick={() => setSidebarCollapsed(!sidebarCollapsed)}>
            <MenuOutlined />
          </Menu.Item>
        </Menu>
      )}

      {/* Logo */}
      {bps.md && <Brand />}

      {/* Send and receive buttons */}
      {bps.md && <Menu theme="dark" mode="horizontal" selectable={false} forceSubMenuRender={true} className="site-header-nav">
        <Menu.Item key="1" icon={<SendOutlined />}>{t("nav.send")}</Menu.Item>
        <Menu.Item key="2" icon={<DownloadOutlined />}>{t("nav.request")}</Menu.Item>
      </Menu>}

      {/* Spacer to push search box to the right */}
      {bps.md && <div className="site-header-spacer" />}

      {/* Search box */}
      <div className="site-header-search-container">
        <AutoComplete className="site-header-search">
          <Input.Search placeholder={t("nav.search")} />
        </AutoComplete>
      </div>

      {/* Cymbal indicator */}
      <CymbalIndicator />

      {/* Settings button */}
      <Menu theme="dark" mode="horizontal" selectable={false} forceSubMenuRender={true} className="site-header-settings">
        <Menu.Item key="1" icon={<SettingOutlined />} title={t("nav.settings")}>
          <Link to="/settings"></Link>
        </Menu.Item>
      </Menu>
    </Layout.Header>

    <Layout>
      <Sidebar collapsed={!bps.md && sidebarCollapsed} />

      {/* Fade out the background when the sidebar is open on mobile */}
      {!bps.md && <div
        className={"site-sidebar-backdrop " + (sidebarCollapsed ? "collapsed" : "")}
        onClick={() => setSidebarCollapsed(true)}
      />}

      <Layout className={"site-layout " + (!bps.md ? "site-layout-mobile" : "")}>
        <AppRouter />
      </Layout>
    </Layout>
  </Layout>;
}