Merged in feat/SW-1199-subpage-breadcrumbs (pull request #1254)
feat(SW-1199): Added breadcrumbs to subpages * feat(SW-1199): Added breadcrumbs to subpages Approved-by: Fredrik Thorsson Approved-by: Matilda Landström
This commit is contained in:
@@ -7,12 +7,17 @@ import type { BreadcrumbsProps } from "@/components/TempDesignSystem/Breadcrumbs
|
|||||||
|
|
||||||
export default async function Breadcrumbs({
|
export default async function Breadcrumbs({
|
||||||
variant,
|
variant,
|
||||||
}: Pick<BreadcrumbsProps, "variant">) {
|
subpageTitle,
|
||||||
|
}: Pick<BreadcrumbsProps, "variant" | "subpageTitle">) {
|
||||||
const breadcrumbs = await serverClient().contentstack.breadcrumbs.get()
|
const breadcrumbs = await serverClient().contentstack.breadcrumbs.get()
|
||||||
|
|
||||||
if (!breadcrumbs?.length) {
|
if (!breadcrumbs?.length) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (subpageTitle) {
|
||||||
|
breadcrumbs.push({ title: subpageTitle, uid: subpageTitle, href: "" })
|
||||||
|
}
|
||||||
|
|
||||||
const jsonSchema = generateBreadcrumbsSchema(breadcrumbs)
|
const jsonSchema = generateBreadcrumbsSchema(breadcrumbs)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -48,7 +48,10 @@ export default async function HotelSubpage({
|
|||||||
<section className={styles.hotelSubpage}>
|
<section className={styles.hotelSubpage}>
|
||||||
<div className={styles.header}>
|
<div className={styles.header}>
|
||||||
<Suspense fallback={<BreadcrumbsSkeleton />}>
|
<Suspense fallback={<BreadcrumbsSkeleton />}>
|
||||||
<Breadcrumbs variant="hotelSubpage" />
|
<Breadcrumbs
|
||||||
|
variant="hotelSubpage"
|
||||||
|
subpageTitle={pageData.heading}
|
||||||
|
/>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
{pageData.heroImage && (
|
{pageData.heroImage && (
|
||||||
<div className={styles.heroWrapper}>
|
<div className={styles.heroWrapper}>
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ type Breadcrumb = {
|
|||||||
|
|
||||||
export interface BreadcrumbsProps
|
export interface BreadcrumbsProps
|
||||||
extends VariantProps<typeof breadcrumbsVariants> {
|
extends VariantProps<typeof breadcrumbsVariants> {
|
||||||
|
subpageTitle?: string
|
||||||
breadcrumbs: Breadcrumb[]
|
breadcrumbs: Breadcrumb[]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ export default function Breadcrumbs({
|
|||||||
</li>
|
</li>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
{breadcrumbs.map((breadcrumb) => {
|
{breadcrumbs.map((breadcrumb, index) => {
|
||||||
if (breadcrumb.href) {
|
if (breadcrumb.href && index < breadcrumbs.length - 1) {
|
||||||
return (
|
return (
|
||||||
<li key={breadcrumb.uid} className={styles.listItem}>
|
<li key={breadcrumb.uid} className={styles.listItem}>
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetMyPagesBreadcrumbs($locale: String!, $uid: String!) {
|
query GetMyPagesBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
account_page(locale: $locale, uid: $uid) {
|
account_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetCollectionPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetCollectionPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
collection_page(locale: $locale, uid: $uid) {
|
collection_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetContentPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetContentPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
content_page(locale: $locale, uid: $uid) {
|
content_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetDestinationCityPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetDestinationCityPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
destination_city_page(locale: $locale, uid: $uid) {
|
destination_city_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetDestinationCountryPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetDestinationCountryPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
destination_country_page(locale: $locale, uid: $uid) {
|
destination_country_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetDestinationOverviewPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetDestinationOverviewPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
destination_overview_page(locale: $locale, uid: $uid) {
|
destination_overview_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetHotelPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetHotelPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
hotel_page(locale: $locale, uid: $uid) {
|
hotel_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
query GetLoyaltyPageBreadcrumbs($locale: String!, $uid: String!) {
|
query GetLoyaltyPageBreadcrumbs($locale: String!, $uid: String!) {
|
||||||
loyalty_page(locale: $locale, uid: $uid) {
|
loyalty_page(locale: $locale, uid: $uid) {
|
||||||
|
url
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
...Breadcrumbs
|
...Breadcrumbs
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ export const breadcrumbsRefsSchema = z.object({
|
|||||||
})
|
})
|
||||||
|
|
||||||
export const rawBreadcrumbsDataSchema = z.object({
|
export const rawBreadcrumbsDataSchema = z.object({
|
||||||
|
url: z.string(),
|
||||||
web: z.object({
|
web: z.object({
|
||||||
breadcrumbs: z.object({
|
breadcrumbs: z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
@@ -66,7 +67,7 @@ export const breadcrumbsSchema = rawBreadcrumbsDataSchema.transform((data) => {
|
|||||||
const pageBreadcrumb = {
|
const pageBreadcrumb = {
|
||||||
title,
|
title,
|
||||||
uid: data.system.uid,
|
uid: data.system.uid,
|
||||||
href: undefined,
|
href: removeMultipleSlashes(`/${data.system.locale}/${data.url}`),
|
||||||
}
|
}
|
||||||
const homeBreadcrumb = homeBreadcrumbs[data.system.locale]
|
const homeBreadcrumb = homeBreadcrumbs[data.system.locale]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user