Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 38 additions & 18 deletions examples/basic-nextjs/src/app/[site]/[locale]/[[...path]]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
import { isDesignLibraryPreviewData } from '@sitecore-content-sdk/nextjs/editing';
import { notFound } from 'next/navigation';
import { draftMode } from 'next/headers';
import { SiteInfo } from '@sitecore-content-sdk/nextjs';
import sites from '.sitecore/sites.json';
import { routing } from 'src/i18n/routing';
import scConfig from 'sitecore.config';
import client from 'src/lib/sitecore-client';
import Layout, { RouteFields } from 'src/Layout';
import components from '.sitecore/component-map';
import Providers from 'src/Providers';
import { NextIntlClientProvider } from 'next-intl';
import { setRequestLocale } from 'next-intl/server';
import { isDesignLibraryPreviewData } from "@sitecore-content-sdk/nextjs/editing";
import { notFound } from "next/navigation";
import { draftMode } from "next/headers";
import { SiteInfo } from "@sitecore-content-sdk/nextjs";
import sites from ".sitecore/sites.json";
import { routing } from "src/i18n/routing";
import scConfig from "sitecore.config";
import client from "src/lib/sitecore-client";
import Layout, { RouteFields } from "src/Layout";
import components from ".sitecore/component-map";
import Providers from "src/Providers";
import { NextIntlClientProvider } from "next-intl";
import { setRequestLocale } from "next-intl/server";

type PageProps = {
params: Promise<{ site: string; locale: string; path?: string[]; [key: string]: string | string[] | undefined }>;
params: Promise<{
site: string;
locale: string;
path?: string[];
[key: string]: string | string[] | undefined;
}>;
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
};

Expand Down Expand Up @@ -43,7 +48,11 @@ export default async function Page({ params, searchParams }: PageProps) {
}

// Fetch the component data from Sitecore (Likely will be deprecated)
const componentProps = await client.getComponentData(page.layout, {}, components);
const componentProps = await client.getComponentData(
page.layout,
{},
components
);

return (
<NextIntlClientProvider>
Expand All @@ -57,9 +66,17 @@ export default async function Page({ params, searchParams }: PageProps) {
// This function gets called at build and export time to determine
// pages for SSG ("paths", as tokenized array).
export const generateStaticParams = async () => {
if (process.env.NODE_ENV !== 'development' && scConfig.generateStaticPaths) {
if (process.env.NODE_ENV !== "development" && scConfig.generateStaticPaths) {
// Filter sites to only include the sites this starter is designed to serve.
// This prevents cross-site build errors when multiple starters share the same XM Cloud instance.
const defaultSite = scConfig.defaultSite;
const allowedSites = defaultSite
? sites
.filter((site: SiteInfo) => site.name === defaultSite)
.map((site: SiteInfo) => site.name)
: sites.map((site: SiteInfo) => site.name);
return await client.getAppRouterStaticParams(
sites.map((site: SiteInfo) => site.name),
allowedSites,
routing.locales.slice()
);
}
Expand All @@ -73,6 +90,9 @@ export const generateMetadata = async ({ params }: PageProps) => {
// The same call as for rendering the page. Should be cached by default react behavior
const page = await client.getPage(path ?? [], { site, locale });
return {
title: (page?.layout.sitecore.route?.fields as RouteFields)?.Title?.value?.toString() || 'Page',
title:
(
page?.layout.sitecore.route?.fields as RouteFields
)?.Title?.value?.toString() || "Page",
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,16 @@ export default async function Page({ params, searchParams }: PageProps) {
// pages for SSG ("paths", as tokenized array).
export const generateStaticParams = async () => {
if (process.env.NODE_ENV !== 'development' && scConfig.generateStaticPaths) {
// Filter sites to only include the sites this starter is designed to serve.
// This prevents cross-site build errors when multiple starters share the same XM Cloud instance.
const defaultSite = scConfig.defaultSite;
const allowedSites = defaultSite
? sites
.filter((site: SiteInfo) => site.name === defaultSite)
.map((site: SiteInfo) => site.name)
: sites.map((site: SiteInfo) => site.name);
return await client.getAppRouterStaticParams(
sites.map((site: SiteInfo) => site.name),
allowedSites,
routing.locales.slice(),
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,17 @@ export const dynamic = 'force-dynamic';
// pages for SSG ("paths", as tokenized array).
export const generateStaticParams = async () => {
if (process.env.NODE_ENV !== 'development' && scConfig.generateStaticPaths) {
// Filter sites to only include the sites this starter is designed to serve.
// This prevents cross-site build errors when multiple starters share the same XM Cloud instance.
const defaultSite = scConfig.defaultSite;
const allowedSites = defaultSite
? sites
.filter((site: SiteInfo) => site.name === defaultSite)
.map((site: SiteInfo) => site.name)
: sites.map((site: SiteInfo) => site.name);
return await client.getAppRouterStaticParams(
sites.map((site: SiteInfo) => site.name),
routing.locales.slice()
allowedSites,
routing.locales.slice(),
);
}
return [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,16 @@ export default async function Page({ params, searchParams }: PageProps) {
// pages for SSG ("paths", as tokenized array).
export const generateStaticParams = async () => {
if (process.env.NODE_ENV !== 'development' && scConfig.generateStaticPaths) {
return await client.getAppRouterStaticParams(
sites.map((site: SiteInfo) => site.name),
routing.locales.slice()
);
// Filter sites to only include the sites this starter is designed to serve.
// This prevents cross-site build errors when multiple starters share the same XM Cloud instance.
const defaultSite = scConfig.defaultSite;
const allowedSites = defaultSite
? sites
.filter((site: SiteInfo) => site.name === defaultSite)
.map((site: SiteInfo) => site.name)
: sites.map((site: SiteInfo) => site.name);

return await client.getAppRouterStaticParams(allowedSites, routing.locales.slice());
}
return [];
};
Expand Down Expand Up @@ -102,7 +108,5 @@ export const generateMetadata = async ({ params }: PageProps) => {
ogImageSrc ||
'https://edge.sitecorecloud.io/sitecoresaa60dc-chahcontentabf6-maina179-91b6/media/Feature/JSS-Experience-Accelerator/Basic-Site/banner-image.jpg?h=2001&iar=0&w=3000',
},

};
};

Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
import { isDesignLibraryPreviewData } from '@sitecore-content-sdk/nextjs/editing';
import { notFound } from 'next/navigation';
import { draftMode } from 'next/headers';
import { SiteInfo } from '@sitecore-content-sdk/nextjs';
import sites from '.sitecore/sites.json';
import { routing } from 'src/i18n/routing';
import scConfig from 'sitecore.config';
import client from 'src/lib/sitecore-client';
import Layout, { RouteFields } from 'src/Layout';
import components from '.sitecore/component-map';
import Providers from 'src/Providers';
import { NextIntlClientProvider } from 'next-intl';
import { setRequestLocale } from 'next-intl/server';
import { isDesignLibraryPreviewData } from "@sitecore-content-sdk/nextjs/editing";
import { notFound } from "next/navigation";
import { draftMode } from "next/headers";
import { SiteInfo } from "@sitecore-content-sdk/nextjs";
import sites from ".sitecore/sites.json";
import { routing } from "src/i18n/routing";
import scConfig from "sitecore.config";
import client from "src/lib/sitecore-client";
import Layout, { RouteFields } from "src/Layout";
import components from ".sitecore/component-map";
import Providers from "src/Providers";
import { NextIntlClientProvider } from "next-intl";
import { setRequestLocale } from "next-intl/server";

type PageProps = {
params: Promise<{ site: string; locale: string; path?: string[]; [key: string]: string | string[] | undefined }>;
params: Promise<{
site: string;
locale: string;
path?: string[];
[key: string]: string | string[] | undefined;
}>;
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
};

Expand Down Expand Up @@ -43,7 +48,11 @@ export default async function Page({ params, searchParams }: PageProps) {
}

// Fetch the component data from Sitecore (Likely will be deprecated)
const componentProps = await client.getComponentData(page.layout, {}, components);
const componentProps = await client.getComponentData(
page.layout,
{},
components
);

return (
<NextIntlClientProvider>
Expand All @@ -57,9 +66,18 @@ export default async function Page({ params, searchParams }: PageProps) {
// This function gets called at build and export time to determine
// pages for SSG ("paths", as tokenized array).
export const generateStaticParams = async () => {
if (process.env.NODE_ENV !== 'development' && scConfig.generateStaticPaths) {
if (process.env.NODE_ENV !== "development" && scConfig.generateStaticPaths) {
// Filter sites to only include the sites this starter is designed to serve.
// This prevents cross-site build errors when multiple starters share the same XM Cloud instance.
const defaultSite = scConfig.defaultSite;
const allowedSites = defaultSite
? sites
.filter((site: SiteInfo) => site.name === defaultSite)
.map((site: SiteInfo) => site.name)
: sites.map((site: SiteInfo) => site.name);

return await client.getAppRouterStaticParams(
sites.map((site: SiteInfo) => site.name),
allowedSites,
routing.locales.slice()
);
}
Expand All @@ -73,6 +91,9 @@ export const generateMetadata = async ({ params }: PageProps) => {
// The same call as for rendering the page. Should be cached by default react behavior
const page = await client.getPage(path ?? [], { site, locale });
return {
title: (page?.layout.sitecore.route?.fields as RouteFields)?.Title?.value?.toString() || 'Page',
title:
(
page?.layout.sitecore.route?.fields as RouteFields
)?.Title?.value?.toString() || "Page",
};
};
Loading