import React, { useRef } from 'react' import { Code, Info, MessageCircle } from 'react-feather' import { Link } from 'react-router-dom' import styled, { css } from 'styled-components' import { ReactComponent as MenuIcon } from '../../assets/images/menu.svg' import { useOnClickOutside } from '../../hooks/useOnClickOutside' import { ApplicationModal } from '../../state/application/actions' import { useModalOpen, useToggleModal } from '../../state/application/hooks' import { ExternalLink } from '../../theme' export enum FlyoutAlignment { LEFT = 'LEFT', RIGHT = 'RIGHT', } const StyledMenuIcon = styled(MenuIcon)` path { stroke: ${({ theme }) => theme.text1}; } ` const StyledMenuButton = styled.button` width: 100%; height: 100%; border: none; background-color: transparent; margin: 0; padding: 0; height: 35px; background-color: ${({ theme }) => theme.bg2}; padding: 0.15rem 0.5rem; border-radius: 0.5rem; :hover, :focus { cursor: pointer; outline: none; background-color: ${({ theme }) => theme.bg3}; } svg { margin-top: 2px; } ` const StyledMenu = styled.div` margin-left: 0.5rem; display: flex; justify-content: center; align-items: center; position: relative; border: none; text-align: left; ` const MenuFlyout = styled.span<{ flyoutAlignment?: FlyoutAlignment }>` min-width: 8.125rem; background-color: ${({ theme }) => theme.bg2}; box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04), 0px 24px 32px rgba(0, 0, 0, 0.01); border-radius: 12px; padding: 0.5rem; display: flex; flex-direction: column; font-size: 1rem; position: absolute; top: 3rem; z-index: 100; ${({ flyoutAlignment = FlyoutAlignment.RIGHT }) => flyoutAlignment === FlyoutAlignment.RIGHT ? css` right: 0rem; ` : css` left: 0rem; `}; ${({ theme }) => theme.mediaWidth.upToMedium` top: -17.25rem; `}; ` const MenuItem = styled(ExternalLink)` display: flex; flex: 1; flex-direction: row; align-items: center; padding: 0.5rem 0.5rem; color: ${({ theme }) => theme.text2}; :hover { color: ${({ theme }) => theme.text1}; cursor: pointer; text-decoration: none; } > svg { margin-right: 8px; } ` const InternalMenuItem = styled(Link)` flex: 1; padding: 0.5rem 0.5rem; color: ${({ theme }) => theme.text2}; :hover { color: ${({ theme }) => theme.text1}; cursor: pointer; text-decoration: none; } > svg { margin-right: 8px; } ` const CODE_LINK = 'https://github.com/gelatodigital/sorbet-finance-v3' export default function Menu() { const node = useRef() const open = useModalOpen(ApplicationModal.MENU) const toggle = useToggleModal(ApplicationModal.MENU) useOnClickOutside(node, open ? toggle : undefined) return ( // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 {open && (
About
Code
Discord
Telegram
)}
) } interface NewMenuProps { flyoutAlignment?: FlyoutAlignment ToggleUI?: React.FunctionComponent menuItems: { content: any link: string external: boolean }[] } const NewMenuFlyout = styled(MenuFlyout)` top: 3rem !important; ` const NewMenuItem = styled(InternalMenuItem)` width: max-content; text-decoration: none; ` const ExternalMenuItem = styled(MenuItem)` width: max-content; text-decoration: none; ` export const NewMenu = ({ flyoutAlignment = FlyoutAlignment.RIGHT, ToggleUI, menuItems, ...rest }: NewMenuProps) => { const node = useRef() const open = useModalOpen(ApplicationModal.POOL_OVERVIEW_OPTIONS) const toggle = useToggleModal(ApplicationModal.POOL_OVERVIEW_OPTIONS) useOnClickOutside(node, open ? toggle : undefined) const ToggleElement = ToggleUI || StyledMenuIcon return ( {open && ( {menuItems.map(({ content, link, external }, i) => external ? ( {content} ) : ( {content} ) )} )} ) }