diff --git a/app/[lang]/(live)/@bookingwidget/page.tsx b/app/[lang]/(live)/@bookingwidget/page.tsx index 9b83da1b8..bb5f646b6 100644 --- a/app/[lang]/(live)/@bookingwidget/page.tsx +++ b/app/[lang]/(live)/@bookingwidget/page.tsx @@ -1,7 +1,9 @@ +import { Suspense } from "react" + import { serverClient } from "@/lib/trpc/server" import BookingWidget from "@/components/BookingWidget" -import { getLang } from "@/i18n/serverContext" +import LoadingSpinner from "@/components/LoadingSpinner" export default async function BookingWidgetPage() { // Get the booking widget show/hide status based on page specific settings @@ -9,10 +11,10 @@ export default async function BookingWidgetPage() { await serverClient().contentstack.bookingwidget.getToggle() return ( - <> + }> {bookingWidgetToggle && bookingWidgetToggle.hideBookingWidget ? null : ( )} - + ) } diff --git a/app/[lang]/(live)/@languageSwitcher/[...paths]/page.tsx b/app/[lang]/(live)/@languageSwitcher/[...paths]/page.tsx new file mode 100644 index 000000000..03a82e5f5 --- /dev/null +++ b/app/[lang]/(live)/@languageSwitcher/[...paths]/page.tsx @@ -0,0 +1 @@ +export { default } from "../page" diff --git a/app/[lang]/(live)/@languageSwitcher/[contentType]/[uid]/page.tsx b/app/[lang]/(live)/@languageSwitcher/[contentType]/[uid]/page.tsx new file mode 100644 index 000000000..2ebaca014 --- /dev/null +++ b/app/[lang]/(live)/@languageSwitcher/[contentType]/[uid]/page.tsx @@ -0,0 +1 @@ +export { default } from "../../page" diff --git a/app/[lang]/(live)/@languageSwitcher/default.tsx b/app/[lang]/(live)/@languageSwitcher/default.tsx new file mode 100644 index 000000000..83ec2818e --- /dev/null +++ b/app/[lang]/(live)/@languageSwitcher/default.tsx @@ -0,0 +1 @@ +export { default } from "./page" diff --git a/app/[lang]/(live)/@languageSwitcher/my-pages/[...path]/page.tsx b/app/[lang]/(live)/@languageSwitcher/my-pages/[...path]/page.tsx new file mode 100644 index 000000000..2ebaca014 --- /dev/null +++ b/app/[lang]/(live)/@languageSwitcher/my-pages/[...path]/page.tsx @@ -0,0 +1 @@ +export { default } from "../../page" diff --git a/app/[lang]/(live)/@languageSwitcher/page.tsx b/app/[lang]/(live)/@languageSwitcher/page.tsx new file mode 100644 index 000000000..95a426c48 --- /dev/null +++ b/app/[lang]/(live)/@languageSwitcher/page.tsx @@ -0,0 +1,21 @@ +import { Suspense } from "react" + +import { serverClient } from "@/lib/trpc/server" + +import LanguageSwitcher from "@/components/LanguageSwitcher" +import { setLang } from "@/i18n/serverContext" + +import { LangParams, PageArgs } from "@/types/params" + +export default async function HeaderPage({ params }: PageArgs) { + setLang(params.lang) + const languages = await serverClient().contentstack.languageSwitcher.get() + if (!languages) { + return null + } + return ( + + + + ) +} diff --git a/app/[lang]/(live)/layout.tsx b/app/[lang]/(live)/layout.tsx index 15312b9b4..fdd881160 100644 --- a/app/[lang]/(live)/layout.tsx +++ b/app/[lang]/(live)/layout.tsx @@ -21,9 +21,11 @@ import type { LangParams, LayoutArgs } from "@/types/params" export default async function RootLayout({ children, params, + languageSwitcher, bookingwidget, }: React.PropsWithChildren< LayoutArgs & { + languageSwitcher: React.ReactNode bookingwidget: React.ReactNode } >) { @@ -52,7 +54,7 @@ export default async function RootLayout({ -
+
{bookingwidget} {children} diff --git a/app/[lang]/(live)/(public)/loading.tsx b/app/[lang]/(live)/loading.tsx similarity index 100% rename from app/[lang]/(live)/(public)/loading.tsx rename to app/[lang]/(live)/loading.tsx diff --git a/components/BookingWidget/index.tsx b/components/BookingWidget/index.tsx index d169f7dd3..91df73b73 100644 --- a/components/BookingWidget/index.tsx +++ b/components/BookingWidget/index.tsx @@ -1,11 +1,17 @@ +import { Suspense } from "react" + import Form from "@/components/Forms/BookingWidget" +import LoadingSpinner from "../LoadingSpinner" + import styles from "./bookingWidget.module.css" export default async function BookingWidget() { return (
-
+ }> + +
) } diff --git a/components/Header/MainMenu/index.tsx b/components/Header/MainMenu/index.tsx index 23c49c532..00b407827 100644 --- a/components/Header/MainMenu/index.tsx +++ b/components/Header/MainMenu/index.tsx @@ -23,13 +23,14 @@ export default async function MainMenu({ menuItems, topLink, }: MainMenuProps) { - const intl = await getIntl() const lang = getLang() - const myPagesNavigation = - await serverClient().contentstack.myPages.navigation.get() - const user = await serverClient().user.name() - const membership = await serverClient().user.safeMembershipLevel() + const [intl, myPagesNavigation, user, membership] = await Promise.all([ + getIntl(), + serverClient().contentstack.myPages.navigation.get(), + serverClient().user.name(), + serverClient().user.safeMembershipLevel(), + ]) return (
diff --git a/components/Header/TopMenu/index.tsx b/components/Header/TopMenu/index.tsx index 69669861f..0c2d87c3d 100644 --- a/components/Header/TopMenu/index.tsx +++ b/components/Header/TopMenu/index.tsx @@ -1,3 +1,5 @@ +import { Suspense } from "react" + import { GiftIcon, SearchIcon } from "@/components/Icons" import LanguageSwitcher from "@/components/LanguageSwitcher" import { getIntl } from "@/i18n" @@ -8,7 +10,10 @@ import styles from "./topMenu.module.css" import type { TopMenuProps } from "@/types/components/header/topMenu" -export default async function TopMenu({ languageUrls, topLink }: TopMenuProps) { +export default async function TopMenu({ + languageSwitcher, + topLink, +}: TopMenuProps) { const intl = await getIntl() return ( @@ -21,7 +26,7 @@ export default async function TopMenu({ languageUrls, topLink }: TopMenuProps) { ) : null}
- + {languageSwitcher} {intl.formatMessage({ id: "Find booking" })} diff --git a/components/Header/index.tsx b/components/Header/index.tsx index 6be9a911b..32dfb1bf5 100644 --- a/components/Header/index.tsx +++ b/components/Header/index.tsx @@ -8,9 +8,15 @@ import TopMenu from "./TopMenu" import styles from "./header.module.css" -export default async function Header() { - const languages = await serverClient().contentstack.languageSwitcher.get() - const headerData = await serverClient().contentstack.base.header() +export interface HeaderProps { + languageSwitcher: React.ReactNode +} + +export default async function Header({ languageSwitcher }: HeaderProps) { + const [languages, headerData] = await Promise.all([ + serverClient().contentstack.languageSwitcher.get(), + serverClient().contentstack.base.header(), + ]) if (!languages || !headerData) { return null @@ -19,7 +25,10 @@ export default async function Header() { return (
}> - +
    - {homeBreadcrumb ? ( -
  • - - - -
  • - ) : null} + + {homeBreadcrumb ? ( +
  • + + + +
  • + ) : null} + + {breadcrumbs.map((breadcrumb) => { + if (breadcrumb.href) { + return ( +
  • + + {breadcrumb.title} + +
  • + ) + } - {breadcrumbs.map((breadcrumb) => { - if (breadcrumb.href) { return (
  • - + {breadcrumb.title} - -
  • ) - } - - return ( -
  • - - {breadcrumb.title} - -
  • - ) - })} + })} +
) diff --git a/components/MyPages/Sidebar/index.tsx b/components/MyPages/Sidebar/index.tsx index efead6f34..65c4b22b7 100644 --- a/components/MyPages/Sidebar/index.tsx +++ b/components/MyPages/Sidebar/index.tsx @@ -1,4 +1,4 @@ -import { Fragment } from "react" +import { Fragment, Suspense } from "react" import { logout } from "@/constants/routes/handleAuth" import { serverClient } from "@/lib/trpc/server" @@ -14,46 +14,49 @@ import styles from "./sidebar.module.css" export default async function SidebarMyPages() { const navigation = await serverClient().contentstack.myPages.navigation.get() const { formatMessage } = await getIntl() - if (!navigation) { - return null - } + return ( ) diff --git a/types/components/header/topMenu.ts b/types/components/header/topMenu.ts index 0c2eb4243..5c4426b81 100644 --- a/types/components/header/topMenu.ts +++ b/types/components/header/topMenu.ts @@ -2,6 +2,6 @@ import type { Header } from "@/types/header" import type { LanguageSwitcherData } from "@/types/requests/languageSwitcher" export interface TopMenuProps { - languageUrls: LanguageSwitcherData + languageSwitcher: React.ReactNode topLink: Header["topLink"] }