Files
web/components/Sidebar/index.tsx
2024-10-21 14:35:07 +02:00

76 lines
2.5 KiB
TypeScript

import JsonToHtml from "@/components/JsonToHtml"
import ShortcutsList from "../Blocks/ShortcutsList"
import Card from "../TempDesignSystem/Card"
import TeaserCard from "../TempDesignSystem/TeaserCard"
import JoinLoyaltyContact from "./JoinLoyalty"
import MyPagesNavigation from "./MyPagesNavigation"
import styles from "./sidebar.module.css"
import type { SidebarProps } from "@/types/components/sidebar"
import { DynamicContentEnum } from "@/types/enums/dynamicContent"
import { SidebarEnums } from "@/types/enums/sidebar"
export default function Sidebar({ blocks }: SidebarProps) {
return (
<aside className={styles.aside}>
{blocks.map((block, idx) => {
switch (block.typename) {
case SidebarEnums.blocks.Content:
return (
<section
className={styles.content}
key={`${block.typename}-${idx}`}
>
<JsonToHtml
embeds={block.content.embedded_itemsConnection.edges}
nodes={block.content.json.children}
/>
</section>
)
case SidebarEnums.blocks.ContentCard:
return (
<TeaserCard
{...block.content_card}
title={block.content_card.heading}
description={block.content_card.body_text}
style={block.content_card.theme}
/>
)
case SidebarEnums.blocks.DynamicContent:
switch (block.dynamic_content.component) {
case DynamicContentEnum.Sidebar.components.my_pages_navigation:
return <MyPagesNavigation key={`${block.typename}-${idx}`} />
default:
return null
}
case SidebarEnums.blocks.JoinLoyaltyContact:
return (
<JoinLoyaltyContact
block={block.join_loyalty_contact}
key={`${block.typename}-${idx}`}
/>
)
case SidebarEnums.blocks.ScriptedCard:
return (
<Card
{...block.scripted_card}
bodyText={block.scripted_card.body_text}
scriptedTopTitle={block.scripted_card.scripted_top_title}
theme={block.scripted_card.theme ?? "image"}
/>
)
case SidebarEnums.blocks.QuickLinks:
return <ShortcutsList {...block.shortcuts} />
default:
return null
}
})}
</aside>
)
}