From fc0e5aed02e69f41649b510a3a27e519a6084429 Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Mon, 22 Apr 2024 09:54:24 +0200 Subject: [PATCH] feat: create blocks component for loyalty --- .../(live)/(public)/loyalty-page/page.tsx | 20 ++-- components/Loyalty/Blocks/index.tsx | 26 ++++ .../Loyalty/Sidebar/JoinLoyalty/index.tsx | 26 ++-- .../JoinLoyalty/joinLoyalty.module.css | 9 ++ .../Blocks/Overview/UpcomingStays/index.tsx | 2 +- .../MyPages/Blocks/Stays/Header/index.tsx | 2 +- .../Previous/EmptyPreviousStays/index.tsx | 2 +- .../Upcoming/EmptyUpcomingStays/index.tsx | 2 +- .../PageLink/AccountPageLink.graphql | 8 ++ .../PageLink/ContentPageLink.graphql | 8 ++ .../PageLink/CurrentContentPageLink.graphql | 8 ++ .../PageLink/LoyaltyPageLink.graphql | 8 ++ lib/graphql/Fragments/PageLinks.graphql | 35 ------ lib/graphql/Query/LoyaltyPage.graphql | 113 ++++++++---------- lib/graphql/Query/NavigationMyPages.graphql | 4 +- public/_static/icons/scandic-friends.png | Bin 0 -> 7252 bytes types/requests/loyaltyPage.ts | 69 +++++++---- 17 files changed, 193 insertions(+), 149 deletions(-) create mode 100644 components/Loyalty/Blocks/index.tsx create mode 100644 lib/graphql/Fragments/PageLink/AccountPageLink.graphql create mode 100644 lib/graphql/Fragments/PageLink/ContentPageLink.graphql create mode 100644 lib/graphql/Fragments/PageLink/CurrentContentPageLink.graphql create mode 100644 lib/graphql/Fragments/PageLink/LoyaltyPageLink.graphql delete mode 100644 lib/graphql/Fragments/PageLinks.graphql create mode 100644 public/_static/icons/scandic-friends.png diff --git a/app/[lang]/(live)/(public)/loyalty-page/page.tsx b/app/[lang]/(live)/(public)/loyalty-page/page.tsx index 7abe910d3..88fab0647 100644 --- a/app/[lang]/(live)/(public)/loyalty-page/page.tsx +++ b/app/[lang]/(live)/(public)/loyalty-page/page.tsx @@ -1,12 +1,13 @@ -import Title from "@/components/Title" -import MaxWidth from "@/components/MaxWidth" - -import { serverClient } from "@/lib/trpc/server" -import { LangParams, PageArgs, UriParams } from "@/types/params" import { notFound } from "next/navigation" +import { serverClient } from "@/lib/trpc/server" + +import MaxWidth from "@/components/MaxWidth" +import Sidebar from "@/components/Loyalty/Sidebar" +import { Blocks } from "@/components/Loyalty/Blocks" + +import type { LangParams, PageArgs, UriParams } from "@/types/params" import styles from "./page.module.css" -import Sidebar from "@/components/Loyalty/Sidebar" export default async function LoyaltyPage({ params, @@ -32,8 +33,7 @@ export default async function LoyaltyPage({ : null}
- {loyaltyPage.title} - +
) @@ -41,7 +41,3 @@ export default async function LoyaltyPage({ return notFound() } } - -function Content(content: any) { - return <> -} diff --git a/components/Loyalty/Blocks/index.tsx b/components/Loyalty/Blocks/index.tsx new file mode 100644 index 000000000..659a5e22d --- /dev/null +++ b/components/Loyalty/Blocks/index.tsx @@ -0,0 +1,26 @@ +import JsonToHtml from "@/components/JsonToHtml" + +import { + Blocks as BlocksType, + LoyaltyBlocksTypenameEnum, +} from "@/types/requests/loyaltyPage" + +export function Blocks({ blocks }: { blocks: BlocksType[] }) { + return blocks.map((block) => { + switch (block.__typename) { + case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksCardGrid: + return

Cards

+ case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksContent: + return ( + + ) + case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksDynamicContent: + return

Dynamic

+ default: + return null + } + }) +} diff --git a/components/Loyalty/Sidebar/JoinLoyalty/index.tsx b/components/Loyalty/Sidebar/JoinLoyalty/index.tsx index 25ef804e2..ec44c4df9 100644 --- a/components/Loyalty/Sidebar/JoinLoyalty/index.tsx +++ b/components/Loyalty/Sidebar/JoinLoyalty/index.tsx @@ -1,12 +1,13 @@ import Title from "@/components/Title" -import JsonToHtml from "@/components/JsonToHtml" +import Contact from "./Contact" import Button from "@/components/TempDesignSystem/Button" import Link from "@/components/TempDesignSystem/Link" - -import styles from "./joinLoyalty.module.css" +import Image from "@/components/Image" import type { JoinLoyaltyContact } from "@/types/requests/loyaltyPage" +import styles from "./joinLoyalty.module.css" + export default function JoinLoyaltyContact({ block, }: { @@ -15,10 +16,15 @@ export default function JoinLoyaltyContact({ return (
- {block.title}} + Scandic Friends + {block.preamble &&

{block.preamble}

} @@ -29,9 +35,11 @@ export default function JoinLoyaltyContact({
-
- Contact -
+ {block.contact + ? block.contact.map((contact, i) => ( + + )) + : null} ) } diff --git a/components/Loyalty/Sidebar/JoinLoyalty/joinLoyalty.module.css b/components/Loyalty/Sidebar/JoinLoyalty/joinLoyalty.module.css index cd22348e6..8c3b0ac84 100644 --- a/components/Loyalty/Sidebar/JoinLoyalty/joinLoyalty.module.css +++ b/components/Loyalty/Sidebar/JoinLoyalty/joinLoyalty.module.css @@ -13,6 +13,15 @@ padding: 4rem 2rem; } +.preamble { + font-family: var(--fira-sans); + font-size: 1.6rem; + font-weight: 400; + line-height: 2.4rem; + text-align: center; + margin: 0; +} + .logoutLink { text-decoration: none; color: var(--some-black-color, #2e2e2e); diff --git a/components/MyPages/Blocks/Overview/UpcomingStays/index.tsx b/components/MyPages/Blocks/Overview/UpcomingStays/index.tsx index 592276300..98786b46e 100644 --- a/components/MyPages/Blocks/Overview/UpcomingStays/index.tsx +++ b/components/MyPages/Blocks/Overview/UpcomingStays/index.tsx @@ -3,8 +3,8 @@ import { serverClient } from "@/lib/trpc/server" import StayCard from "@/components/MyPages/Blocks/Stays/StayCard" import EmptyUpcomingStaysBlock from "@/components/MyPages/Blocks/Stays/Upcoming/EmptyUpcomingStays" -import Title from "@/components/MyPages/Title" import Link from "@/components/TempDesignSystem/Link" +import Title from "@/components/Title" import styles from "./upcoming.module.css" diff --git a/components/MyPages/Blocks/Stays/Header/index.tsx b/components/MyPages/Blocks/Stays/Header/index.tsx index d4fbeee68..683817b20 100644 --- a/components/MyPages/Blocks/Stays/Header/index.tsx +++ b/components/MyPages/Blocks/Stays/Header/index.tsx @@ -1,4 +1,4 @@ -import Title from "@/components/MyPages/Title" +import Title from "@/components/Title" import styles from "./header.module.css" diff --git a/components/MyPages/Blocks/Stays/Previous/EmptyPreviousStays/index.tsx b/components/MyPages/Blocks/Stays/Previous/EmptyPreviousStays/index.tsx index 1d7675412..0c390e390 100644 --- a/components/MyPages/Blocks/Stays/Previous/EmptyPreviousStays/index.tsx +++ b/components/MyPages/Blocks/Stays/Previous/EmptyPreviousStays/index.tsx @@ -1,6 +1,6 @@ import { _ } from "@/lib/translation" -import Title from "@/components/MyPages/Title" +import Title from "@/components/Title" import styles from "./emptyPreviousStays.module.css" diff --git a/components/MyPages/Blocks/Stays/Upcoming/EmptyUpcomingStays/index.tsx b/components/MyPages/Blocks/Stays/Upcoming/EmptyUpcomingStays/index.tsx index ec6fe206d..08ce36f32 100644 --- a/components/MyPages/Blocks/Stays/Upcoming/EmptyUpcomingStays/index.tsx +++ b/components/MyPages/Blocks/Stays/Upcoming/EmptyUpcomingStays/index.tsx @@ -2,8 +2,8 @@ import Link from "next/link" import { _ } from "@/lib/translation" -import Title from "@/components/MyPages/Title" import Button from "@/components/TempDesignSystem/Button" +import Title from "@/components/Title" import styles from "./emptyUpcomingStays.module.css" diff --git a/lib/graphql/Fragments/PageLink/AccountPageLink.graphql b/lib/graphql/Fragments/PageLink/AccountPageLink.graphql new file mode 100644 index 000000000..dc5ed6667 --- /dev/null +++ b/lib/graphql/Fragments/PageLink/AccountPageLink.graphql @@ -0,0 +1,8 @@ +fragment AccountPageLink on AccountPage { + system { + locale + uid + } + title + url +} diff --git a/lib/graphql/Fragments/PageLink/ContentPageLink.graphql b/lib/graphql/Fragments/PageLink/ContentPageLink.graphql new file mode 100644 index 000000000..f6eb6474b --- /dev/null +++ b/lib/graphql/Fragments/PageLink/ContentPageLink.graphql @@ -0,0 +1,8 @@ +fragment ContentPageLink on ContentPage { + system { + locale + uid + } + url + title +} diff --git a/lib/graphql/Fragments/PageLink/CurrentContentPageLink.graphql b/lib/graphql/Fragments/PageLink/CurrentContentPageLink.graphql new file mode 100644 index 000000000..1b82b2a59 --- /dev/null +++ b/lib/graphql/Fragments/PageLink/CurrentContentPageLink.graphql @@ -0,0 +1,8 @@ +fragment CurrentBlocksPageLink on CurrentBlocksPage { + system { + locale + uid + } + title + url +} diff --git a/lib/graphql/Fragments/PageLink/LoyaltyPageLink.graphql b/lib/graphql/Fragments/PageLink/LoyaltyPageLink.graphql new file mode 100644 index 000000000..d0c6ac0a9 --- /dev/null +++ b/lib/graphql/Fragments/PageLink/LoyaltyPageLink.graphql @@ -0,0 +1,8 @@ +fragment LoyaltyPageLink on LoyaltyPage { + system { + locale + uid + } + title + url +} diff --git a/lib/graphql/Fragments/PageLinks.graphql b/lib/graphql/Fragments/PageLinks.graphql deleted file mode 100644 index 61f380efa..000000000 --- a/lib/graphql/Fragments/PageLinks.graphql +++ /dev/null @@ -1,35 +0,0 @@ -fragment CurrentBlocksPageLink on CurrentBlocksPage { - system { - locale - uid - } - title - url -} - -fragment AccountPageLink on AccountPage { - system { - locale - uid - } - title - url -} - -fragment LoyaltyPageLink on LoyaltyPage { - system { - locale - uid - } - title - url -} - -fragment ContentPageLink on ContentPage { - system { - locale - uid - } - url - title -} diff --git a/lib/graphql/Query/LoyaltyPage.graphql b/lib/graphql/Query/LoyaltyPage.graphql index 07eebacb6..c8c50b246 100644 --- a/lib/graphql/Query/LoyaltyPage.graphql +++ b/lib/graphql/Query/LoyaltyPage.graphql @@ -1,57 +1,71 @@ #import "../Fragments/Image.graphql" +#import "../Fragments/PageLink/AccountPageLink.graphql" +#import "../Fragments/PageLink/ContentPageLink.graphql" +#import "../Fragments/PageLink/LoyaltyPageLink.graphql" query GetLoyaltyPage($locale: String!, $url: String!) { all_loyalty_page(where: { url: $url, locale: $locale }) { items { - content { - ... on LoyaltyPageContentLoyaltyLevels { + blocks { + ... on LoyaltyPageBlocksDynamicContent { __typename - loyalty_levels { - heading - sub_heading - level_card { - loyalty_level + dynamic_content { + title + preamble + component + link { + text + pageConnection { + edges { + node { + ...ContentPageLink + ...LoyaltyPageLink + } + } + } } } } - ... on LoyaltyPageContentCardGrid { + ... on LoyaltyPageBlocksCardGrid { __typename card_grid { heading - subheading + preamble cards { referenceConnection { edges { node { - ... on LoyaltyPage { - system { - locale - uid - } - url - title - } - ... on ContentPage { - system { - locale - uid - } - url - title - } - ... on AccountPage { - system { - locale - uid - } - url - title - } + __typename + ...LoyaltyPageLink + ...ContentPageLink + ...AccountPageLink } } } heading - subheading + preamble + } + } + } + ... on LoyaltyPageBlocksContent { + __typename + content { + content { + json + embedded_itemsConnection { + edges { + node { + ... on SysAsset { + title + url + dimension { + width + height + } + } + } + } + } } } } @@ -62,6 +76,7 @@ query GetLoyaltyPage($locale: String!, $url: String!) { __typename join_loyalty_contact { title + preamble contact { ... on LoyaltyPageSidebarJoinLoyaltyContactBlockContactContact { __typename @@ -71,17 +86,6 @@ query GetLoyaltyPage($locale: String!, $url: String!) { } } login_button_text - body { - json - embedded_itemsConnection(limit: 30) { - edges { - node { - __typename - ...Image - } - } - } - } } } ... on LoyaltyPageSidebarContent { @@ -92,6 +96,7 @@ query GetLoyaltyPage($locale: String!, $url: String!) { embedded_itemsConnection { edges { node { + __typename ...Image } } @@ -108,24 +113,6 @@ query GetLoyaltyPage($locale: String!, $url: String!) { title } } - seo_metadata { - description - title - imageConnection { - edges { - node { - file_size - filename - dimension { - height - width - } - url - title - } - } - } - } } system { uid diff --git a/lib/graphql/Query/NavigationMyPages.graphql b/lib/graphql/Query/NavigationMyPages.graphql index 8968c61f4..a4663d6dd 100644 --- a/lib/graphql/Query/NavigationMyPages.graphql +++ b/lib/graphql/Query/NavigationMyPages.graphql @@ -1,4 +1,6 @@ -#import "../Fragments/PageLinks.graphql" +#import "../Fragments/PageLink/AccountPageLink.graphql" +#import "../Fragments/PageLink/ContentPageLink.graphql" +#import "../Fragments/PageLink/LoyaltyPageLink.graphql" query GetNavigationMyPages($locale: String!) { all_navigation_my_pages(locale: $locale) { diff --git a/public/_static/icons/scandic-friends.png b/public/_static/icons/scandic-friends.png new file mode 100644 index 0000000000000000000000000000000000000000..32234040946c620f842dd60d77eccbb056c3bbd5 GIT binary patch literal 7252 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 ih=Jemra0}A8~+cXq;~J$z#Ak00000 + export type JoinLoyaltyContact = { join_loyalty_contact: { - title: string - contact: Typename< - Contact, - "LoyaltyPageSidebarLoyaltyJoinContactBlockContactContact" - > + title?: string + preamble?: string + contact: JoinLoyaltyContactEnum[] login_button_text: string - body: { - embedded_itemsConnection: Edges - json: RTEDocument - } } } @@ -48,36 +51,52 @@ export type Sidebar = SidebarTypenameEnum.LoyaltyPageSidebarJoinLoyaltyContact > -enum ContentBlocks { - LoyaltyPageContentLoyaltyLevels = "LoyaltyPageContentLoyaltyLevels", - LoyaltyPageContentCardGrid = "LoyaltyPageContentCardGrid", +export enum LoyaltyBlocksTypenameEnum { + LoyaltyPageBlocksDynamicContent = "LoyaltyPageBlocksDynamicContent", + LoyaltyPageBlocksCardGrid = "LoyaltyPageBlocksCardGrid", + LoyaltyPageBlocksContent = "LoyaltyPageBlocksContent", } type CardGrid = { card_grid: { heading: string - subheading: string + preamble: string cards: { referenceConnection: Edges heading: string - subheading: string + preamble: string } } } -type LoyaltyLevels = { - loyalty_levels: { - heading: string - sub_heading?: string - level_card: { - loyalty_level: number - }[] +type Content = { + content: { + embedded_itemsConnection: Edges + json: RTEDocument } } -export type Content = - | Typename - | Typename +type LoyaltyComponent = "loyalty_levels" | "how_it_works" | "overview_table" + +type DynamicContent = { + dynamic_content: { + title: string + preamble?: string + component: LoyaltyComponent + link: { + text?: string + page: Edges + } + } +} + +export type Blocks = + | Typename + | Typename< + DynamicContent, + LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksDynamicContent + > + | Typename export type Breadcrumb = { href: string @@ -91,7 +110,7 @@ export type Breadcrumbs = { export type LoyaltyPage = { sidebar: Sidebar[] - content: Content[] + blocks: Blocks[] web: { breadcrumbs: Breadcrumbs }