fix: add missing footer links

This commit is contained in:
Arvid Norlin
2024-02-12 11:08:09 +01:00
parent c5a0f5f848
commit 7f37897502
3 changed files with 81 additions and 33 deletions

View File

@@ -1,17 +1,32 @@
import { FooterNavigationProps } from "@/types/components/current/footer" import {
import { InternalLink, ExternalLink } from "@/types/requests/footer" FooterNavigationProps,
FooterNavigationItemProps,
} from "@/types/components/current/footer"
import Link from "next/link"
function getLink(linkObject: InternalLink | ExternalLink) { function NavigationItem({ linkObject, lang }: FooterNavigationItemProps) {
if (linkObject.__typename === "FooterNavigationLinksInternalLink") { if (linkObject.__typename === "FooterNavigationLinksInternalLink") {
return { console.log({ foobar: JSON.stringify(linkObject) })
title: linkObject.internal_link.link_text, const href = `/${lang}${linkObject.internal_link.pageConnection.edges[0].node.url}`
href: linkObject.internal_link.pageConnection.edges[0].node.url, return (
} <li>
<Link href={href}>{linkObject.internal_link.link_text}</Link>
</li>
)
} }
return linkObject.external_link.link return (
<li>
<a href={linkObject.external_link.link.href}>
{linkObject.external_link.link.title}
</a>
</li>
)
} }
export default function Navigation({ linkGroups }: FooterNavigationProps) { export default function Navigation({
linkGroups,
lang,
}: FooterNavigationProps) {
return ( return (
<ul className="l-footer-sections global-footer__content__sections"> <ul className="l-footer-sections global-footer__content__sections">
{linkGroups.map((group) => { {linkGroups.map((group) => {
@@ -20,9 +35,12 @@ export default function Navigation({ linkGroups }: FooterNavigationProps) {
<div className="link-list"> <div className="link-list">
<h3 className="link-list-header">{group.title}</h3> <h3 className="link-list-header">{group.title}</h3>
<ul className="list-footer-pages"> <ul className="list-footer-pages">
{group.links.map((link) => { {group.links.map((link, idx) => {
const linkItem = getLink(link) console.log({ foobar: link })
return <li key={linkItem.title}>{linkItem.title}</li>
return (
<NavigationItem key={idx} linkObject={link} lang={lang} />
)
})} })}
</ul> </ul>
</div> </div>

View File

@@ -1,17 +1,17 @@
import { request } from "@/lib/request"; import { request } from "@/lib/request"
import type { LangParams } from "@/types/params"; import type { LangParams } from "@/types/params"
import { GetFooterData } from "@/types/requests/footer"; import { GetFooterData } from "@/types/requests/footer"
import { GetFooter } from "@/lib/graphql/Query/Footer.graphql"; import { GetFooter } from "@/lib/graphql/Query/Footer.graphql"
import Script from "next/script"; import Script from "next/script"
import Image from "next/image"; import Image from "next/image"
import Navigation from "./Navigation"; import Navigation from "./Navigation"
export default async function Footer({ lang }: LangParams) { export default async function Footer({ lang }: LangParams) {
const response = await request<GetFooterData>(GetFooter, { const response = await request<GetFooterData>(GetFooter, {
locale: lang, locale: lang,
}); })
const footerData = response.data.all_footer.items[0]; const footerData = response.data.all_footer.items[0]
return ( return (
<footer className="global-footer"> <footer className="global-footer">
@@ -38,8 +38,11 @@ export default async function Footer({ lang }: LangParams) {
})} })}
</ul> </ul>
<div data-js-collapsible="global-footer" className="collapsible-global-footer"> <div
<Navigation linkGroups={footerData.navigation} /> data-js-collapsible="global-footer"
className="collapsible-global-footer"
>
<Navigation lang={lang} linkGroups={footerData.navigation} />
<div className="global-footer__content__bottom"> <div className="global-footer__content__bottom">
<p className="newFooterTitle"> <p className="newFooterTitle">
@@ -74,10 +77,14 @@ export default async function Footer({ lang }: LangParams) {
> >
<Image <Image
alt={ alt={
footerData.app_downloads.app_store.imageConnection.edges[0].node.title footerData.app_downloads.app_store.imageConnection
.edges[0].node.title
} }
height={45} height={45}
src={footerData.app_downloads.app_store.imageConnection.edges[0].node.url} src={
footerData.app_downloads.app_store.imageConnection
.edges[0].node.url
}
unoptimized unoptimized
width={135} width={135}
/> />
@@ -98,11 +105,13 @@ export default async function Footer({ lang }: LangParams) {
> >
<Image <Image
alt={ alt={
footerData.app_downloads.google_play.imageConnection.edges[0].node.title footerData.app_downloads.google_play.imageConnection
.edges[0].node.title
} }
height={45} height={45}
src={ src={
footerData.app_downloads.google_play.imageConnection.edges[0].node.url footerData.app_downloads.google_play.imageConnection
.edges[0].node.url
} }
unoptimized unoptimized
width={135} width={135}
@@ -159,7 +168,9 @@ display: none;
</p> </p>
</div> </div>
<div className="global-footer__social-media" id="social-icons"> <div className="global-footer__social-media" id="social-icons">
<h3 className="heading-5 u-uppercase">{footerData.social_media.title}</h3> <h3 className="heading-5 u-uppercase">
{footerData.social_media.title}
</h3>
<a <a
href={footerData.social_media.facebook.href} href={footerData.social_media.facebook.href}
rel="noopener" rel="noopener"
@@ -174,7 +185,9 @@ display: none;
role="img" role="img"
aria-labelledby="social-icons facebook-icon" aria-labelledby="social-icons facebook-icon"
> >
<title id="facebook-icon">{footerData.social_media.facebook.title}</title> <title id="facebook-icon">
{footerData.social_media.facebook.title}
</title>
<use xlinkHref="/Static/img/icons/sprites.svg#icon-facebook"></use> <use xlinkHref="/Static/img/icons/sprites.svg#icon-facebook"></use>
</svg> </svg>
</a> </a>
@@ -192,7 +205,9 @@ display: none;
role="img" role="img"
aria-labelledby="social-icons twitter-icon" aria-labelledby="social-icons twitter-icon"
> >
<title id="twitter-icon">{footerData.social_media.twitter.title}</title> <title id="twitter-icon">
{footerData.social_media.twitter.title}
</title>
<use xlinkHref="/Static/img/icons/sprites.svg#icon-twitter"></use> <use xlinkHref="/Static/img/icons/sprites.svg#icon-twitter"></use>
</svg> </svg>
</a> </a>
@@ -210,13 +225,17 @@ display: none;
role="img" role="img"
aria-labelledby="social-icons instagram-icon" aria-labelledby="social-icons instagram-icon"
> >
<title id="instagram-icon">{footerData.social_media.instagram.title}</title> <title id="instagram-icon">
{footerData.social_media.instagram.title}
</title>
<use xlinkHref="/Static/img/icons/sprites.svg#icon-instagram"></use> <use xlinkHref="/Static/img/icons/sprites.svg#icon-instagram"></use>
</svg> </svg>
</a> </a>
</div> </div>
<div className="global-footer__trip-advisor"> <div className="global-footer__trip-advisor">
<h3 className="heading-5 u-uppercase">{footerData.trip_advisor.title}</h3> <h3 className="heading-5 u-uppercase">
{footerData.trip_advisor.title}
</h3>
<Image <Image
alt="Trip Advisor logotype" alt="Trip Advisor logotype"
height={24} height={24}

View File

@@ -1,5 +1,16 @@
import { NavigationItem } from "@/types/requests/footer" import { Lang } from "@/types/lang"
import {
ExternalLink,
InternalLink,
NavigationItem,
} from "@/types/requests/footer"
export type FooterNavigationProps = { export type FooterNavigationProps = {
linkGroups: NavigationItem[] linkGroups: NavigationItem[]
lang: Lang
}
export type FooterNavigationItemProps = {
linkObject: InternalLink | ExternalLink
lang: Lang
} }