Merged in feat/LOY-615-cleanup-env-prof-consent (pull request #3537)

feat(LOY-615): cleanup profiling consent env var

* feat(LOY-615): cleanup profiling consent env var


Approved-by: Anton Gunnarsson
This commit is contained in:
Matilda Landström
2026-02-04 16:51:06 +00:00
parent 989b18527e
commit 549265cd34
8 changed files with 40 additions and 113 deletions

View File

@@ -1,12 +1,7 @@
import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK" import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK"
import { import { getEurobonusMembership } from "@scandic-hotels/trpc/routers/user/helpers"
getEurobonusMembership,
scandicMembershipTypes,
} from "@scandic-hotels/trpc/routers/user/helpers"
import { env } from "@/env/server"
import { import {
getBasicProfileSafely,
getProfileSafely, getProfileSafely,
getProfilingConsent, getProfilingConsent,
} from "@/lib/trpc/memoizedRequests" } from "@/lib/trpc/memoizedRequests"
@@ -26,15 +21,7 @@ type MyPagesLayoutProps = React.PropsWithChildren<{
breadcrumbs: React.ReactNode breadcrumbs: React.ReactNode
}> }>
export default async function MyPagesLayout(props: MyPagesLayoutProps) { export default async function MyPagesLayout({
if (env.ENABLE_PROFILE_CONSENT) {
return <MyPagesLayoutWithConsent {...props} />
}
return <MyPagesLayoutBase {...props} />
}
async function MyPagesLayoutWithConsent({
breadcrumbs, breadcrumbs,
children, children,
}: MyPagesLayoutProps) { }: MyPagesLayoutProps) {
@@ -84,25 +71,3 @@ async function MyPagesLayoutWithConsent({
</ProfilingConsentAlertProvider> </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>
)
}

View File

@@ -1,24 +1,13 @@
import { redirect } from "next/navigation"
import { profile } from "@scandic-hotels/common/constants/routes/myPages"
import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK" import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK"
import { env } from "@/env/server"
import { getProfile } from "@/lib/trpc/memoizedRequests" import { getProfile } from "@/lib/trpc/memoizedRequests"
import { serverClient } from "@/lib/trpc/server" import { serverClient } from "@/lib/trpc/server"
import { ProfilingConsent } from "@/components/Forms/ProfilingConsent" import { ProfilingConsent } from "@/components/Forms/ProfilingConsent"
import { getLang } from "@/i18n/serverContext"
import styles from "./page.module.css" import styles from "./page.module.css"
export default async function ProfilingConsentSlot() { export default async function ProfilingConsentSlot() {
const lang = await getLang()
if (!env.ENABLE_PROFILE_CONSENT) {
redirect(profile[lang])
}
const caller = await serverClient() const caller = await serverClient()
const accountPage = await caller.contentstack.accountPage.get() const accountPage = await caller.contentstack.accountPage.get()
const user = await getProfile() const user = await getProfile()

View File

@@ -1,5 +1,3 @@
import { env } from "@/env/server"
import SignupForm from "@/components/Forms/Signup" import SignupForm from "@/components/Forms/Signup"
import type { SignupFormWrapperProps } from "@/types/components/blocks/dynamicContent" import type { SignupFormWrapperProps } from "@/types/components/blocks/dynamicContent"
@@ -7,10 +5,5 @@ import type { SignupFormWrapperProps } from "@/types/components/blocks/dynamicCo
export default async function SignupFormWrapper({ export default async function SignupFormWrapper({
dynamic_content, dynamic_content,
}: SignupFormWrapperProps) { }: SignupFormWrapperProps) {
return ( return <SignupForm {...dynamic_content} />
<SignupForm
{...dynamic_content}
enableProfileConsent={env.ENABLE_PROFILE_CONSENT}
/>
)
} }

View File

@@ -48,14 +48,9 @@ import styles from "./form.module.css"
interface SignUpFormProps { interface SignUpFormProps {
title: string title: string
enableProfileConsent?: boolean
} }
export default function SignupForm({ export default function SignupForm({ title }: SignUpFormProps) {
title,
// Handled as a prop rather than a client env var due to limits in Netlify env var size.
enableProfileConsent = false,
}: SignUpFormProps) {
const intl = useIntl() const intl = useIntl()
const router = useRouter() const router = useRouter()
const lang = useLang() const lang = useLang()
@@ -140,7 +135,7 @@ export default function SignupForm({
return ( return (
<div className={styles.formWrapper}> <div className={styles.formWrapper}>
{enableProfileConsent && <ProfilingConsentModalReadOnly />} <ProfilingConsentModalReadOnly />
{title ? ( {title ? (
<Typography variant="Title/md"> <Typography variant="Title/md">
<h2>{title}</h2> <h2>{title}</h2>
@@ -293,7 +288,6 @@ export default function SignupForm({
/> />
</section> </section>
{enableProfileConsent && (
<section className={styles.personalization}> <section className={styles.personalization}>
<header> <header>
<Typography variant="Title/Subtitle/md"> <Typography variant="Title/Subtitle/md">
@@ -327,7 +321,6 @@ export default function SignupForm({
})} })}
</TextLinkButton> </TextLinkButton>
</section> </section>
)}
<section className={styles.terms}> <section className={styles.terms}>
<header> <header>

View File

@@ -1,5 +1,3 @@
import { env } from "@/env/server"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
import { Section } from "../Section" import { Section } from "../Section"
@@ -17,7 +15,7 @@ export async function CommunicationSettings() {
})} })}
> >
<EmailSlot /> <EmailSlot />
{env.ENABLE_PROFILE_CONSENT && <PersonalizationSlot />} <PersonalizationSlot />
</Section> </Section>
) )
} }

View File

@@ -1,6 +1,5 @@
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { env } from "@/env/server"
import { getProfile, getProfilingConsent } from "@/lib/trpc/memoizedRequests" import { getProfile, getProfilingConsent } from "@/lib/trpc/memoizedRequests"
import { GetMainIconByCSIdentifier, userHasConsent } from "../utils" import { GetMainIconByCSIdentifier, userHasConsent } from "../utils"
@@ -9,8 +8,6 @@ import { BannerButton } from "./Button"
import styles from "./profilingConsentBanner.module.css" import styles from "./profilingConsentBanner.module.css"
export async function ProfilingConsentBanner() { export async function ProfilingConsentBanner() {
if (!env.ENABLE_PROFILE_CONSENT) return null
const user = await getProfile() const user = await getProfile()
if (!user || userHasConsent(user?.profilingConsent)) return null if (!user || userHasConsent(user?.profilingConsent)) return null

View File

@@ -1,6 +1,6 @@
# Profiling Consent # Profiling Consent
Profiling consent allows users to opt in/out of personalized experiences. The feature is controlled by the `ENABLE_PROFILE_CONSENT` environment variable. Profiling consent allows users to opt in/out of personalized experiences.
## User Journey ## User Journey
@@ -121,11 +121,9 @@ Replace `<memberKey>` with the actual `membershipNumber` or `profileId`.
Required content for the feature: Required content for the feature:
1. **Profiling Consent (config)** 1. **Profiling Consent (config)**
- Config needs to be created and published in each language - Config needs to be created and published in each language
2. **/consent (account page)** 2. **/consent (account page)**
- Page needs to be created and published in each language - Page needs to be created and published in each language
3. **/overview (account page)** 3. **/overview (account page)**

View File

@@ -96,11 +96,6 @@ export const env = createEnv({
.refine((s) => s === "1" || s === "0") .refine((s) => s === "1" || s === "0")
.transform((s) => s === "1") .transform((s) => s === "1")
.default("0"), .default("0"),
ENABLE_PROFILE_CONSENT: z
.string()
.refine((s) => s === "true" || s === "false")
.transform((s) => s === "true")
.default("false"),
RELEASE_TAG: z RELEASE_TAG: z
.string() .string()
.optional() .optional()
@@ -160,7 +155,6 @@ export const env = createEnv({
DTMC_ENTRA_ID_SECRET: process.env.DTMC_ENTRA_ID_SECRET, DTMC_ENTRA_ID_SECRET: process.env.DTMC_ENTRA_ID_SECRET,
CHATBOT_LIVE_LANGS: process.env.CHATBOT_LIVE_LANGS, CHATBOT_LIVE_LANGS: process.env.CHATBOT_LIVE_LANGS,
SEO_INERT: process.env.SEO_INERT, SEO_INERT: process.env.SEO_INERT,
ENABLE_PROFILE_CONSENT: process.env.ENABLE_PROFILE_CONSENT,
RELEASE_TAG: process.env.NEXT_PUBLIC_RELEASE_TAG, RELEASE_TAG: process.env.NEXT_PUBLIC_RELEASE_TAG,
}, },
}) })