import { Link, VARIATION_NAMES } from './Header'; import { t, languageMatches } from '../i18n'; export enum LinkIdentifier { LOGIN = 'login', LOGOUT = 'logout', } export interface DefaultLink extends Link { identifier?: LinkIdentifier; } export interface DefaultMenuLinkOptions { deConsumer?: boolean; subpath?: string; primaryDomain?: string; switchLocaleLink?: string; hideLoginLink?: boolean; hideLogoutLink?: boolean; hideLanguageSwitch?: boolean; customLinksPassedIn?: boolean; loginLinkClassName?: string; languageLinkClassName?: string; } export interface DefaultMenuLinksObject { [VARIATION_NAMES.LOGGED_OUT]: Array; [VARIATION_NAMES.LOGGED_IN]: Array; } /** * Default menu links for each header variation. * Apps can import this method into their app if they need to * extend the existing default list of menu links. */ export function defaultMenuLinks(options: DefaultMenuLinkOptions = {}): DefaultMenuLinksObject { const { deConsumer, subpath = '', primaryDomain = '', switchLocaleLink, hideLoginLink, hideLogoutLink, hideLanguageSwitch, customLinksPassedIn, loginLinkClassName, languageLinkClassName, } = options; const isSpanish = languageMatches('es'); // NOTE: order matters here and links will be displayed in order added to the arrays const loggedOut: Array = []; const loggedIn: Array = []; // Links other than the ones inside this if should need to be explicitly hidden for their // respective variations. This means the language and login will show even if a custom set // of links is passed in. if (!customLinksPassedIn) { const ffmLocalePath = isSpanish ? 'es_MX' : 'en_US'; loggedIn.push({ label: t('header.myApplicationsAndCoverage'), href: `${primaryDomain}/marketplace/auth/global/${ffmLocalePath}/myProfile#landingPage`, }); loggedIn.push({ label: t('header.myProfile'), href: `${primaryDomain}/marketplace/auth/global/${ffmLocalePath}/myProfile#settings`, }); } if (!hideLanguageSwitch) { const defaultLocaleLink = isSpanish ? `https://www.healthcare.gov/${subpath}` : `https://www.cuidadodesalud.gov/es/${subpath}`; const locLink = { label: isSpanish ? t('header.english') : t('header.espaƱol'), ariaLabel: t('header.langAriaLabel'), href: switchLocaleLink ?? defaultLocaleLink, className: languageLinkClassName, }; loggedOut.push(locLink); loggedIn.push(locLink); } if (!hideLoginLink) { loggedOut.push({ identifier: LinkIdentifier.LOGIN, label: t('header.login'), href: deConsumer ? `${primaryDomain}/login?check_de=1` : `${primaryDomain}/login`, className: loginLinkClassName, }); } if (!hideLogoutLink) { loggedIn.push({ identifier: LinkIdentifier.LOGOUT, label: t('header.logout'), href: `${primaryDomain || ''}/logout`, }); } const links: DefaultMenuLinksObject = { [VARIATION_NAMES.LOGGED_OUT]: loggedOut, [VARIATION_NAMES.LOGGED_IN]: loggedIn, }; return links; } export default defaultMenuLinks;