import { useIntl, defMsg, Link, IntlShape, IntlHelper, Msg, } from '@tutorbook/intl'; import { Query, Aspect, Callback } from '@tutorbook/model'; import { useUser } from '@tutorbook/account'; import React from 'react'; import Avatar from '@tutorbook/avatar'; import FilterForm from '@tutorbook/filter-form'; import PopOver from './pop-over'; import Tabs, { TabsProps } from './tabs'; import styles from './header.module.scss'; const tabLabels: Record = defMsg({ mentoring: { id: 'header.tabs.mentoring', defaultMessage: 'Mentors', }, tutoring: { id: 'header.tabs.tutoring', defaultMessage: 'Tutors', }, }); function DesktopTabs({ aspect, onChange, }: { aspect: Aspect; onChange: Callback; }): JSX.Element { const intl: IntlShape = useIntl(); const msg: IntlHelper = (message: Msg) => intl.formatMessage(message); return ( onChange('mentoring'), }, { label: msg(tabLabels.tutoring), active: aspect === 'tutoring', onClick: () => onChange('tutoring'), }, ]} /> ); } function DesktopTabLinks(): JSX.Element { const intl: IntlShape = useIntl(); const msg: IntlHelper = (message: Msg) => intl.formatMessage(message); return ( /* eslint-disable jsx-a11y/anchor-is-valid */
{msg(tabLabels.mentoring)} {msg(tabLabels.tutoring)}
/* eslint-enable jsx-a11y/anchor-is-valid */ ); } function Logo(): JSX.Element { const { user } = useUser(); return ( /* eslint-disable jsx-a11y/anchor-is-valid */ TB /* eslint-enable jsx-a11y/anchor-is-valid */ ); } function MobileNav(): JSX.Element { const { user } = useUser(); const [active, setActive] = React.useState(false); const toggleMobileMenu = () => { const menuActive = !active; if (menuActive) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } setActive(menuActive); }; return ( /* eslint-disable jsx-a11y/anchor-is-valid */ <>
/* eslint-enable jsx-a11y/anchor-is-valid */ ); } function DesktopNav(): JSX.Element { const { user } = useUser(); const [open, setOpen] = React.useState(false); return ( /* eslint-disable jsx-a11y/anchor-is-valid */
{!user.id && ( Signup )} {!!user.id && ( setOpen(false)}> )}
/* eslint-enable jsx-a11y/anchor-is-valid */ ); } export function TabHeader(props: TabsProps): JSX.Element { return (
); } interface LinkHeaderProps { formWidth?: boolean; } export function LinkHeader({ formWidth }: LinkHeaderProps): JSX.Element { return (
); } interface AspectHeaderProps extends LinkHeaderProps { aspect: Aspect; onChange: Callback; } export function AspectHeader({ aspect, onChange, formWidth, }: AspectHeaderProps): JSX.Element { return (
); } interface QueryHeaderProps extends LinkHeaderProps { query: Query; onChange: Callback; } export function QueryHeader({ query, onChange, formWidth, }: QueryHeaderProps): JSX.Element { return (
onChange(new Query({ ...query, aspect })) } />
); }