Merged in fix/LOY-365-promo-campaign-layout (pull request #2879)

fix(LOY-365): cleanup promo campaign page layout

* fix(LOY-365): cleanup promo camppaign page layout

* fix(LOY-365): proper gap

* fix(LOY-365): expired campaign gap


Approved-by: Matilda Landström
This commit is contained in:
Chuma Mcphoy (We Ahead)
2025-09-29 09:40:07 +00:00
parent 94e5a06681
commit 7956a17a33
4 changed files with 114 additions and 51 deletions

View File

@@ -8,14 +8,22 @@
background: var(--Surface-Secondary-Default); background: var(--Surface-Secondary-Default);
} }
.content { .mainContent,
.info {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
gap: var(--Space-x4);
text-align: center; text-align: center;
} }
.mainContent {
gap: var(--Space-x3);
}
.info {
gap: var(--Space-x1);
}
.title, .title,
.description { .description {
color: var(--Text-Heading); color: var(--Text-Heading);

View File

@@ -16,7 +16,8 @@ export default async function ExpiredPromoCampaign() {
<div className={styles.container}> <div className={styles.container}>
<MagicWandIcon width={250} height={203} /> <MagicWandIcon width={250} height={203} />
<div className={styles.content}> <div className={styles.mainContent}>
<div className={styles.info}>
<Typography variant="Title/Subtitle/md" className={styles.title}> <Typography variant="Title/Subtitle/md" className={styles.title}>
<h3> <h3>
{intl.formatMessage({ {intl.formatMessage({
@@ -44,5 +45,6 @@ export default async function ExpiredPromoCampaign() {
})} })}
</ButtonLink> </ButtonLink>
</div> </div>
</div>
) )
} }

View File

@@ -1,3 +1,4 @@
import { cx } from "class-variance-authority"
import { notFound } from "next/navigation" import { notFound } from "next/navigation"
import { Suspense } from "react" import { Suspense } from "react"
@@ -13,6 +14,11 @@ import PromoCampaignPageSkeleton from "./PromoCampaignPageSkeleton"
import styles from "./promoCampaignPage.module.css" import styles from "./promoCampaignPage.module.css"
import type {
PromoCampaignPageData,
PromoHero,
} from "@scandic-hotels/trpc/types/promoCampaignPage"
export default async function PromoCampaignPage() { export default async function PromoCampaignPage() {
const pageData = await getPromoCampaignPage() const pageData = await getPromoCampaignPage()
if (!pageData) { if (!pageData) {
@@ -30,21 +36,45 @@ export default async function PromoCampaignPage() {
return ( return (
<> <>
<Suspense fallback={<PromoCampaignPageSkeleton />}> <Suspense fallback={<PromoCampaignPageSkeleton />}>
<div className={styles.pageContainer}>
{isCampaignExpired ? ( {isCampaignExpired ? (
<ExpiredPromoCampaign /> <ExpiredCampaignLayout heading={heading} />
) : ( ) : (
<PromoCampaignHero <ActiveCampaignLayout
heading={heading}
subheading={subheading}
promoHero={promo_hero} promoHero={promo_hero}
eligibleLevels={eligibleLevels} eligibleLevels={eligibleLevels}
/> />
)} )}
</Suspense>
<TrackingSDK pageData={tracking} />
</>
)
}
function ActiveCampaignLayout({
heading,
subheading,
promoHero,
eligibleLevels,
}: {
heading: PromoCampaignPageData["heading"]
subheading: PromoCampaignPageData["subheading"]
promoHero: PromoHero
eligibleLevels: PromoCampaignPageData["eligibleLevels"]
}) {
return (
<div className={cx(styles.pageContainer, styles.active)}>
<PromoCampaignHero
promoHero={promoHero}
eligibleLevels={eligibleLevels}
/>
<div className={styles.intro}> <div className={styles.intro}>
<div className={styles.headingWrapper}> <div className={styles.headingWrapper}>
<Typography variant="Title/lg"> <Typography variant="Title/lg">
<h1 className={styles.heading}>{heading}</h1> <h1 className={styles.heading}>{heading}</h1>
</Typography> </Typography>
{subheading && !isCampaignExpired ? ( {subheading ? (
<Typography variant="Title/Subtitle/lg"> <Typography variant="Title/Subtitle/lg">
<p>{subheading}</p> <p>{subheading}</p>
</Typography> </Typography>
@@ -52,8 +82,24 @@ export default async function PromoCampaignPage() {
</div> </div>
</div> </div>
</div> </div>
</Suspense> )
<TrackingSDK pageData={tracking} /> }
</>
function ExpiredCampaignLayout({
heading,
}: {
heading: PromoCampaignPageData["heading"]
}) {
return (
<div className={cx(styles.pageContainer, styles.expired)}>
<div className={styles.intro}>
<div className={styles.headingWrapper}>
<Typography variant="Title/lg">
<h1 className={styles.heading}>{heading}</h1>
</Typography>
</div>
</div>
<ExpiredPromoCampaign />
</div>
) )
} }

View File

@@ -1,11 +1,18 @@
.pageContainer { .pageContainer {
display: grid; display: grid;
gap: var(--Space-x6);
padding-bottom: var(--Space-x7); padding-bottom: var(--Space-x7);
width: var(--max-width-content); width: var(--max-width-content);
margin: 0 auto; margin: 0 auto;
} }
.pageContainer.active {
gap: var(--Space-x7);
}
.pageContainer.expired {
gap: var(--Space-x3);
}
.intro { .intro {
display: grid; display: grid;
gap: var(--Space-x5); gap: var(--Space-x5);
@@ -23,7 +30,7 @@
} }
@media screen and (min-width: 1367px) { @media screen and (min-width: 1367px) {
.pageContainer { .pageContainer.active {
gap: var(--Space-x9); gap: var(--Space-x9);
} }
} }