diff --git a/packages/next/src/data/server/__tests__/addHookData.ts b/packages/next/src/data/server/__tests__/addHookData.ts index e5b49cbe2..fc6e402eb 100644 --- a/packages/next/src/data/server/__tests__/addHookData.ts +++ b/packages/next/src/data/server/__tests__/addHookData.ts @@ -65,6 +65,7 @@ describe('addHookData', () => { pageInfo: { ...samplePageInfo }, }, isMainQuery: true, + hostOrSlug: 'mainsite', }, { key: 'second-key', @@ -74,10 +75,12 @@ describe('addHookData', () => { pageInfo: { ...samplePageInfo }, }, isMainQuery: false, + hostOrSlug: 'site2', }, ]; expect(addHookData(hookStates, {})).toStrictEqual({ props: { + __headstartwp_site: 'mainsite', fallback: { 'first-key': { result: { @@ -120,6 +123,7 @@ describe('addHookData', () => { pageInfo: samplePageInfo, }, isMainQuery: false, + hostOrSlug: 'site2', }, ]; @@ -135,6 +139,7 @@ describe('addHookData', () => { expect(addHookData(hookStates, {})).toStrictEqual({ props: { + __headstartwp_site: 'site2', fallback: { 'first-key': { queriedObject: {}, diff --git a/packages/next/src/data/server/__tests__/getSiteFromContext.ts b/packages/next/src/data/server/__tests__/getSiteFromContext.ts new file mode 100644 index 000000000..5464174d6 --- /dev/null +++ b/packages/next/src/data/server/__tests__/getSiteFromContext.ts @@ -0,0 +1,26 @@ +import { setHeadstartWPConfig } from '@headstartwp/core'; +import { getSiteFromContext } from '../getSiteFromContext'; + +describe('getSiteFromContext', () => { + it('returns settings if no site is provided', () => { + const ctx = { params: { site: 'site2' } }; + setHeadstartWPConfig({ + useWordPressPlugin: true, + sites: [ + { + slug: 'site1', + hostUrl: 'http://site1.localhost:3001', + sourceUrl: 'http://sourceUrl1.com', + redirectStrategy: '404', + }, + { + slug: 'site2', + hostUrl: 'http://site2.localhost:3001', + sourceUrl: 'http://sourceUrl2.com', + redirectStrategy: '404', + }, + ], + }); + expect(getSiteFromContext(ctx).slug).toBe('site2'); + }); +}); diff --git a/packages/next/src/data/server/__tests__/withSiteContext.ts b/packages/next/src/data/server/__tests__/withSiteContext.ts new file mode 100644 index 000000000..f0495492d --- /dev/null +++ b/packages/next/src/data/server/__tests__/withSiteContext.ts @@ -0,0 +1,12 @@ +import { withSiteContext } from '../withSiteContext'; + +describe('withSiteContext', () => { + it('adds site to params', () => { + expect(withSiteContext({ params: { id: 1 } }, 'site1')).toEqual({ + params: { id: 1, site: 'site1' }, + }); + expect(withSiteContext({ params: { id: 1, site: 'site2' } }, 'site1')).toEqual({ + params: { id: 1, site: 'site1' }, + }); + }); +}); diff --git a/packages/next/src/data/server/getSiteFromContext.ts b/packages/next/src/data/server/getSiteFromContext.ts index 1c3e48989..b2dc28222 100644 --- a/packages/next/src/data/server/getSiteFromContext.ts +++ b/packages/next/src/data/server/getSiteFromContext.ts @@ -1,4 +1,4 @@ -import { getHeadlessConfig, getSite, getSiteByHost } from '@headstartwp/core'; +import { getHeadstartWPConfig, getSite, getSiteByHost } from '@headstartwp/core'; import { GetServerSidePropsContext, GetStaticPropsContext } from 'next'; /** @@ -9,7 +9,7 @@ import { GetServerSidePropsContext, GetStaticPropsContext } from 'next'; */ export function getSiteFromContext(ctx: GetServerSidePropsContext | GetStaticPropsContext) { const currentSite = ctx?.params?.site; - const settings = getHeadlessConfig(); + const settings = getHeadstartWPConfig(); if (currentSite && typeof currentSite === 'string') { const site = getSiteByHost(currentSite); diff --git a/packages/next/src/data/server/index.ts b/packages/next/src/data/server/index.ts index 520c039ea..d6141707b 100644 --- a/packages/next/src/data/server/index.ts +++ b/packages/next/src/data/server/index.ts @@ -3,3 +3,4 @@ export * from '../convertToPath'; export * from './fetchHookData'; export * from './getSiteFromContext'; export * from './handleError'; +export * from './withSiteContext'; diff --git a/packages/next/src/data/server/withSiteContext.ts b/packages/next/src/data/server/withSiteContext.ts new file mode 100644 index 000000000..70429f2ce --- /dev/null +++ b/packages/next/src/data/server/withSiteContext.ts @@ -0,0 +1,15 @@ +import { GetServerSidePropsContext, GetStaticPropsContext } from 'next'; +import { PreviewData } from '../../handlers/types'; + +export function withSiteContext( + ctx: GetServerSidePropsContext | GetStaticPropsContext, + site: string, +) { + return { + ...ctx, + params: { + ...(ctx.params ?? {}), + site, + }, + }; +} diff --git a/projects/wp-multisite-nextjs/src/pages/_sites/site1/index.js b/projects/wp-multisite-nextjs/src/pages/_sites/site1/index.js index 3d6063ae4..fc1c940d2 100644 --- a/projects/wp-multisite-nextjs/src/pages/_sites/site1/index.js +++ b/projects/wp-multisite-nextjs/src/pages/_sites/site1/index.js @@ -4,18 +4,20 @@ import { handleError, useAppSettings, usePost, + withSiteContext, } from '@headstartwp/next'; +import { useSettings } from '@headstartwp/core/react'; import { indexParams } from '../../../params'; const Site1Homepage = () => { - return
Site 1 Homepage
; + const settings = useSettings(); + return
{settings.slug} Homepage
; }; export default Site1Homepage; -export async function getStaticProps(context) { - // TODO: create a utlity function to decorate context for a specific site - context.params = { site: 'site1' }; +export async function getStaticProps(_context) { + const context = withSiteContext(_context, 'site1'); let appSettings; let slug;