You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.9 KiB
152 lines
3.9 KiB
/* eslint react/prop-types: 0 */
|
|
import { useState } from 'react';
|
|
import { Collapse, Nav, NavItem, Button } from 'reactstrap';
|
|
import Link from 'next/link';
|
|
import Image from 'next/image';
|
|
import { useTranslation } from 'next-i18next';
|
|
import { useAppContext } from '@services/context';
|
|
import LanguageSelector from './LanguageSelector';
|
|
import openMenuIcon from '../../public/open-menu-icon.svg';
|
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
import { faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
import {
|
|
CONTACT_MAIL,
|
|
MAJORITY_JUDGMENT_LINK,
|
|
NEWS_LINK,
|
|
PAYPAL,
|
|
WHO_WE_ARE_LINK,
|
|
} from '@services/constants';
|
|
import ShareRow from '@components/Share';
|
|
import { getUrl, RouteTypes } from '@services/routes';
|
|
import { useRouter } from 'next/router';
|
|
import Logo from '@components/Logo';
|
|
|
|
const Header = () => {
|
|
const [isOpen, setOpen] = useState(false);
|
|
const router = useRouter();
|
|
const { t } = useTranslation();
|
|
const [app, _] = useAppContext();
|
|
|
|
const toggle = () => setOpen(!isOpen);
|
|
|
|
if (app.fullPage) {
|
|
return null;
|
|
}
|
|
|
|
const menu = [
|
|
{
|
|
component: (
|
|
<a
|
|
href={MAJORITY_JUDGMENT_LINK}
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="navbar-my-link nav-link"
|
|
>
|
|
{t('menu.majority-judgment')}
|
|
</a>
|
|
),
|
|
},
|
|
{
|
|
component: (
|
|
<a
|
|
href={WHO_WE_ARE_LINK}
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="navbar-my-link nav-link"
|
|
>
|
|
{t('menu.whoarewe')}
|
|
</a>
|
|
),
|
|
},
|
|
{
|
|
component: (
|
|
<Link
|
|
href={getUrl(RouteTypes.FAQ, router)}
|
|
className="navbar-my-link nav-link"
|
|
>
|
|
{t('menu.faq')}
|
|
</Link>
|
|
),
|
|
},
|
|
{
|
|
component: (
|
|
<a
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
href={NEWS_LINK}
|
|
className="navbar-my-link nav-link"
|
|
>
|
|
{t('menu.news')}
|
|
</a>
|
|
),
|
|
},
|
|
{
|
|
component: (
|
|
<a
|
|
href="mailto:app@mieuxvoter.fr?subject=[HELP]"
|
|
className="navbar-my-link nav-link"
|
|
>
|
|
{t('menu.contact-us')}
|
|
</a>
|
|
),
|
|
},
|
|
{
|
|
component: <LanguageSelector selectedSize={24} />,
|
|
},
|
|
];
|
|
|
|
return (
|
|
<>
|
|
<Image
|
|
onClick={toggle}
|
|
role="button"
|
|
className="btn_menu d-md-none"
|
|
src={openMenuIcon}
|
|
alt="open menu icon"
|
|
height="50"
|
|
width="50"
|
|
/>
|
|
|
|
<Collapse isOpen={isOpen} navbar>
|
|
<Nav className="navbar-nav-scroll" navbar>
|
|
<div className="d-flex flex-column min-vh-100 justify-content-between">
|
|
<div>
|
|
<div className="d-flex flex-row justify-content-between align-items-center nav-logo">
|
|
<Link href="/" className="navbar-brand navbar-brand-mobile">
|
|
<img src="/logos/logo.svg" alt="logo" height="80" />
|
|
</Link>
|
|
|
|
<FontAwesomeIcon
|
|
icon={faXmark}
|
|
onClick={toggle}
|
|
size="2x"
|
|
role="button"
|
|
className="navbar-toggle navbar-close-button"
|
|
/>
|
|
</div>
|
|
<div>
|
|
{menu.map((item, i) => (
|
|
<NavItem key={i}>{item.component}</NavItem>
|
|
))}
|
|
</div>
|
|
|
|
<hr className="my-3" />
|
|
</div>
|
|
<NavItem className="d-flex w-100 align-items-center flex-column">
|
|
<a href={PAYPAL} target="_blank" rel="noreferrer noopener">
|
|
<Button color="primary" className="text-white">
|
|
{t('common.support-us')}
|
|
</Button>
|
|
</a>
|
|
|
|
<ShareRow />
|
|
</NavItem>
|
|
</div>
|
|
</Nav>
|
|
</Collapse>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default Header;
|