aiao-io/aiao

View on GitHub
apps/dev-elements-react/src/app/menu/Menu.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import './Menu.scss';

import { link } from 'ionicons/icons';
import React, { useState } from 'react';
import { RouteComponentProps, withRouter } from 'react-router-dom';

import {
  IonButtons,
  IonContent,
  IonHeader,
  IonIcon,
  IonItem,
  IonLabel,
  IonList,
  IonMenu,
  IonMenuButton,
  IonMenuToggle,
  IonTitle,
  IonToolbar
} from '@ionic/react';

type MenuProps = RouteComponentProps;

interface IMenu {
  url: string;
  icon?: string;
  title: string;
}

const appPages: IMenu[] = [
  {
    title: 'Code Editor',
    url: '/code-editor',
    icon: link
  },
  {
    title: 'Elements Editor',
    url: '/elements-editor',
    icon: link
  },
  {
    title: 'Elements Preview',
    url: '/elements-preview',
    icon: link
  },
  {
    title: 'Text Editor',
    url: '/text-editor',
    icon: link
  }
];

const Menu: React.FunctionComponent<MenuProps> = ({ history }) => {
  const [selectedPage, setSelectedPage] = useState('');

  history.listen(d => {
    setSelectedPage(d.pathname);
  });

  return (
    <IonMenu contentId="main" type="overlay">
      <IonHeader>
        <IonToolbar>
          <IonButtons slot="start">
            <IonMenuButton />
          </IonButtons>
          <IonTitle>Elements React</IonTitle>
        </IonToolbar>
      </IonHeader>
      <IonContent>
        <IonList>
          {appPages.map((appPage, index) => {
            const selectClass = selectedPage === appPage.url ? 'selected' : '';
            return (
              <IonMenuToggle key={index} autoHide={false}>
                <IonItem className={selectClass} routerLink={appPage.url} routerDirection="none" detail={false}>
                  {appPage.icon && <IonIcon slot="start" icon={appPage.icon} />}
                  <IonLabel>{appPage.title}</IonLabel>
                </IonItem>
              </IonMenuToggle>
            );
          })}
        </IonList>
      </IonContent>
    </IonMenu>
  );
};

export default withRouter(Menu);