feat(SW-3614): use new loyalty prop in basicProfile * feat(SW-3614): use new loyalty prop in basicProfile * PR fixes Approved-by: Matilda Landström
109 lines
3.1 KiB
TypeScript
109 lines
3.1 KiB
TypeScript
import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK"
|
|
import {
|
|
getEurobonusMembership,
|
|
scandicMembershipTypes,
|
|
} from "@scandic-hotels/trpc/routers/user/helpers"
|
|
|
|
import { env } from "@/env/server"
|
|
import {
|
|
getBasicProfileSafely,
|
|
getProfileSafely,
|
|
getProfilingConsent,
|
|
} from "@/lib/trpc/memoizedRequests"
|
|
|
|
import ProfilingConsentAlert from "@/components/MyPages/ProfilingConsent/Alert"
|
|
import { ProfilingConsentAlertProvider } from "@/components/MyPages/ProfilingConsent/Alert/AlertContext"
|
|
import ProfilingConsentModal from "@/components/MyPages/ProfilingConsent/Modal"
|
|
import { userHasConsent } from "@/components/MyPages/ProfilingConsent/utils"
|
|
import { SASLevelUpgradeCheck } from "@/components/MyPages/SASLevelUpgradeCheck"
|
|
import Surprises from "@/components/MyPages/Surprises"
|
|
import { getLang } from "@/i18n/serverContext"
|
|
import { ModalTracking } from "@/utils/tracking/profilingConsent"
|
|
|
|
import styles from "./layout.module.css"
|
|
|
|
type MyPagesLayoutProps = React.PropsWithChildren<{
|
|
breadcrumbs: React.ReactNode
|
|
}>
|
|
|
|
export default async function MyPagesLayout(props: MyPagesLayoutProps) {
|
|
if (env.ENABLE_PROFILE_CONSENT) {
|
|
return <MyPagesLayoutWithConsent {...props} />
|
|
}
|
|
|
|
return <MyPagesLayoutBase {...props} />
|
|
}
|
|
|
|
async function MyPagesLayoutWithConsent({
|
|
breadcrumbs,
|
|
children,
|
|
}: MyPagesLayoutProps) {
|
|
const profile = await getProfileSafely()
|
|
const eurobonusMembership = profile?.loyalty
|
|
? getEurobonusMembership(profile.loyalty)
|
|
: null
|
|
|
|
const memberKey =
|
|
profile?.membership?.membershipNumber || profile?.profileId || ""
|
|
|
|
const profilingConsentData = await getProfilingConsent()
|
|
const profilingConsent = profilingConsentData?.profiling_consent
|
|
const hasConsent = userHasConsent(profile?.profilingConsent)
|
|
|
|
const lang = await getLang()
|
|
|
|
const showConsentModal = memberKey && profilingConsent && !hasConsent
|
|
|
|
return (
|
|
<ProfilingConsentAlertProvider>
|
|
<div className={styles.container}>
|
|
<div className={styles.layout}>
|
|
{breadcrumbs}
|
|
|
|
<div className={styles.content}>
|
|
<ProfilingConsentAlert />
|
|
{children}
|
|
</div>
|
|
</div>
|
|
|
|
{eurobonusMembership && <SASLevelUpgradeCheck />}
|
|
<Surprises />
|
|
{showConsentModal && (
|
|
<>
|
|
<ProfilingConsentModal
|
|
memberKey={memberKey}
|
|
content={profilingConsent.modal}
|
|
iconIdentifier={profilingConsent.icon}
|
|
/>
|
|
<TrackingSDK
|
|
pageData={{ domainLanguage: lang, ...ModalTracking }}
|
|
/>
|
|
</>
|
|
)}
|
|
</div>
|
|
</ProfilingConsentAlertProvider>
|
|
)
|
|
}
|
|
|
|
async function MyPagesLayoutBase({
|
|
breadcrumbs,
|
|
children,
|
|
}: MyPagesLayoutProps) {
|
|
const profile = await getBasicProfileSafely()
|
|
const eurobonusMembership = profile?.loyalty?.memberships?.find(
|
|
(m) => m.membershipType === scandicMembershipTypes.SAS_EB
|
|
)
|
|
|
|
return (
|
|
<div className={styles.container}>
|
|
<div className={styles.layout}>
|
|
{breadcrumbs}
|
|
<div className={styles.content}>{children}</div>
|
|
</div>
|
|
|
|
{eurobonusMembership && <SASLevelUpgradeCheck />}
|
|
<Surprises />
|
|
</div>
|
|
)
|
|
}
|