Using feature flag

This commit is contained in:
Linus Flood
2024-09-19 13:28:51 +02:00
parent 730f66d79a
commit 69359da126
12 changed files with 56 additions and 53 deletions

View File

@@ -48,3 +48,5 @@ GOOGLE_STATIC_MAP_KEY=""
GOOGLE_STATIC_MAP_SIGNATURE_SECRET="" GOOGLE_STATIC_MAP_SIGNATURE_SECRET=""
GOOGLE_STATIC_MAP_ID="" GOOGLE_STATIC_MAP_ID=""
GOOGLE_DYNAMIC_MAP_ID="" GOOGLE_DYNAMIC_MAP_ID=""
HIDE_FOR_NEXT_RELEASE="true"

View File

@@ -41,3 +41,4 @@ GOOGLE_STATIC_MAP_KEY="test"
GOOGLE_STATIC_MAP_SIGNATURE_SECRET="test" GOOGLE_STATIC_MAP_SIGNATURE_SECRET="test"
GOOGLE_STATIC_MAP_ID="test" GOOGLE_STATIC_MAP_ID="test"
GOOGLE_DYNAMIC_MAP_ID="test" GOOGLE_DYNAMIC_MAP_ID="test"
HIDE_FOR_NEXT_RELEASE="test

View File

@@ -1,5 +1,7 @@
import { notFound } from "next/navigation" import { notFound } from "next/navigation"
import { env } from "@/env/server"
import ContentPage from "@/components/ContentType/ContentPage" import ContentPage from "@/components/ContentType/ContentPage"
import HotelPage from "@/components/ContentType/HotelPage" import HotelPage from "@/components/ContentType/HotelPage"
import LoyaltyPage from "@/components/ContentType/LoyaltyPage" import LoyaltyPage from "@/components/ContentType/LoyaltyPage"
@@ -25,6 +27,9 @@ export default async function ContentTypePage({
case "loyalty-page": case "loyalty-page":
return <LoyaltyPage /> return <LoyaltyPage />
case "hotel-page": case "hotel-page":
if (env.HIDE_FOR_NEXT_RELEASE) {
return notFound()
}
return <HotelPage /> return <HotelPage />
default: default:
const type: never = params.contentType const type: never = params.contentType

View File

@@ -1,3 +1,6 @@
import { env } from "@/env/server"
import CurrentHeader from "@/components/Current/Header"
import Header from "@/components/Header" import Header from "@/components/Header"
import { setLang } from "@/i18n/serverContext" import { setLang } from "@/i18n/serverContext"
@@ -6,5 +9,9 @@ import { LangParams, PageArgs } from "@/types/params"
export default async function HeaderPage({ params }: PageArgs<LangParams>) { export default async function HeaderPage({ params }: PageArgs<LangParams>) {
setLang(params.lang) setLang(params.lang)
if (env.HIDE_FOR_NEXT_RELEASE) {
return <CurrentHeader />
}
return <Header /> return <Header />
} }

View File

@@ -3,10 +3,12 @@ import "@scandic-hotels/design-system/style.css"
import Script from "next/script" import Script from "next/script"
import { env } from "@/env/server"
import TrpcProvider from "@/lib/trpc/Provider" import TrpcProvider from "@/lib/trpc/Provider"
import TokenRefresher from "@/components/Auth/TokenRefresher" import TokenRefresher from "@/components/Auth/TokenRefresher"
import AdobeSDKScript from "@/components/Current/AdobeSDKScript" import AdobeSDKScript from "@/components/Current/AdobeSDKScript"
import CurrentFooter from "@/components/Current/Footer"
import VwoScript from "@/components/Current/VwoScript" import VwoScript from "@/components/Current/VwoScript"
import Footer from "@/components/Footer" import Footer from "@/components/Footer"
import { ToastHandler } from "@/components/TempDesignSystem/Toasts" import { ToastHandler } from "@/components/TempDesignSystem/Toasts"
@@ -54,10 +56,10 @@ export default async function RootLayout({
<ServerIntlProvider intl={{ defaultLocale, locale, messages }}> <ServerIntlProvider intl={{ defaultLocale, locale, messages }}>
<TrpcProvider> <TrpcProvider>
{header} {header}
{bookingwidget} {!env.HIDE_FOR_NEXT_RELEASE && <>{bookingwidget}</>}
{children} {children}
<ToastHandler /> <ToastHandler />
<Footer /> {env.HIDE_FOR_NEXT_RELEASE ? <CurrentFooter /> : <Footer />}
<TokenRefresher /> <TokenRefresher />
</TrpcProvider> </TrpcProvider>
</ServerIntlProvider> </ServerIntlProvider>

View File

@@ -0,0 +1,10 @@
import Header from "@/components/Current/Header"
import { setLang } from "@/i18n/serverContext"
import { LangParams, PageArgs } from "@/types/params"
export default async function HeaderPage({ params }: PageArgs<LangParams>) {
setLang(params.lang)
return <Header />
}

View File

@@ -0,0 +1,5 @@
"use client"
export default function Error() {
return null
}

View File

@@ -1,18 +0,0 @@
import { serverClient } from "@/lib/trpc/server"
import LanguageSwitcher from "@/components/Current/Header/LanguageSwitcher"
import { setLang } from "@/i18n/serverContext"
import { LangParams, PageArgs } from "@/types/params"
export default async function LanguageSwitcherRoute({
params,
}: PageArgs<LangParams>) {
setLang(params.lang)
const data = await serverClient().contentstack.languageSwitcher.get()
if (!data) {
return null
}
return <LanguageSwitcher urls={data.urls} />
}

View File

@@ -1,9 +0,0 @@
"use client"
import { baseUrls } from "@/constants/routes/baseUrls"
import LanguageSwitcher from "@/components/Current/Header/LanguageSwitcher"
export default function Error() {
return <LanguageSwitcher urls={baseUrls} />
}

View File

@@ -27,12 +27,9 @@ export const metadata: Metadata = {
export default async function RootLayout({ export default async function RootLayout({
children, children,
params, params,
languageSwitcher, header,
myPagesMobileDropdown,
}: React.PropsWithChildren< }: React.PropsWithChildren<
LayoutArgs<LangParams> & { languageSwitcher: React.ReactNode } & { LayoutArgs<LangParams> & { header: React.ReactNode }
myPagesMobileDropdown: React.ReactNode
}
>) { >) {
setLang(params.lang) setLang(params.lang)
const { defaultLocale, locale, messages } = await getIntl() const { defaultLocale, locale, messages } = await getIntl()
@@ -68,10 +65,7 @@ export default async function RootLayout({
<LangPopup /> <LangPopup />
<SkipToMainContent /> <SkipToMainContent />
<ServerIntlProvider intl={{ defaultLocale, locale, messages }}> <ServerIntlProvider intl={{ defaultLocale, locale, messages }}>
<Header {header}
myPagesMobileDropdown={myPagesMobileDropdown}
languageSwitcher={languageSwitcher}
/>
<BookingWidget /> <BookingWidget />
{children} {children}
<Footer /> <Footer />

View File

@@ -4,25 +4,25 @@ import { serverClient } from "@/lib/trpc/server"
import { getLang } from "@/i18n/serverContext" import { getLang } from "@/i18n/serverContext"
import LanguageSwitcher from "./LanguageSwitcher"
import { MainMenu } from "./MainMenu" import { MainMenu } from "./MainMenu"
import MyPagesMobileDropdown from "./MyPagesMobileDropdown"
import OfflineBanner from "./OfflineBanner" import OfflineBanner from "./OfflineBanner"
import TopMenu from "./TopMenu" import TopMenu from "./TopMenu"
import styles from "./header.module.css" import styles from "./header.module.css"
export default async function Header({ export default async function Header() {
languageSwitcher, const [data, user, languages, navigation] = await Promise.all([
myPagesMobileDropdown, serverClient().contentstack.base.currentHeader({
}: { lang: getLang(),
languageSwitcher: React.ReactNode }),
myPagesMobileDropdown: React.ReactNode serverClient().user.name(),
}) { serverClient().contentstack.languageSwitcher.get(),
const data = await serverClient().contentstack.base.currentHeader({ serverClient().contentstack.myPages.navigation.get(),
lang: getLang(), ])
})
const user = await serverClient().user.name()
if (!data) { if (!navigation || !languages || !data) {
return null return null
} }
@@ -40,7 +40,7 @@ export default async function Header({
frontpageLinkText={frontpage_link_text} frontpageLinkText={frontpage_link_text}
homeHref={homeHref} homeHref={homeHref}
links={top_menu.links} links={top_menu.links}
languageSwitcher={languageSwitcher} languageSwitcher={<LanguageSwitcher urls={languages.urls} />}
/> />
<MainMenu <MainMenu
frontpageLinkText={frontpage_link_text} frontpageLinkText={frontpage_link_text}
@@ -48,8 +48,10 @@ export default async function Header({
links={menu.links} links={menu.links}
logo={logo} logo={logo}
topMenuMobileLinks={topMenuMobileLinks} topMenuMobileLinks={topMenuMobileLinks}
languageSwitcher={languageSwitcher} languageSwitcher={<LanguageSwitcher urls={languages.urls} />}
myPagesMobileDropdown={myPagesMobileDropdown} myPagesMobileDropdown={
<MyPagesMobileDropdown navigation={navigation} />
}
bookingHref={homeHref} bookingHref={homeHref}
user={user} user={user}
/> />

2
env/server.ts vendored
View File

@@ -65,6 +65,7 @@ export const env = createEnv({
GOOGLE_STATIC_MAP_SIGNATURE_SECRET: z.string(), GOOGLE_STATIC_MAP_SIGNATURE_SECRET: z.string(),
GOOGLE_DYNAMIC_MAP_ID: z.string(), GOOGLE_DYNAMIC_MAP_ID: z.string(),
GOOGLE_STATIC_MAP_ID: z.string(), GOOGLE_STATIC_MAP_ID: z.string(),
HIDE_FOR_NEXT_RELEASE: z.string(),
}, },
emptyStringAsUndefined: true, emptyStringAsUndefined: true,
runtimeEnv: { runtimeEnv: {
@@ -117,5 +118,6 @@ export const env = createEnv({
process.env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET, process.env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET,
GOOGLE_STATIC_MAP_ID: process.env.GOOGLE_STATIC_MAP_ID, GOOGLE_STATIC_MAP_ID: process.env.GOOGLE_STATIC_MAP_ID,
GOOGLE_DYNAMIC_MAP_ID: process.env.GOOGLE_DYNAMIC_MAP_ID, GOOGLE_DYNAMIC_MAP_ID: process.env.GOOGLE_DYNAMIC_MAP_ID,
HIDE_FOR_NEXT_RELEASE: process.env.HIDE_FOR_NEXT_RELEASE,
}, },
}) })