Using feature flag
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 />
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
}
|
||||||
5
app/[lang]/(live-current)/@header/error.tsx
Normal file
5
app/[lang]/(live-current)/@header/error.tsx
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
export default function Error() {
|
||||||
|
return null
|
||||||
|
}
|
||||||
@@ -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} />
|
|
||||||
}
|
|
||||||
@@ -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} />
|
|
||||||
}
|
|
||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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
2
env/server.ts
vendored
@@ -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,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user