fix: add missing footer links
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user