@remkoj/optimizely-cms-nextjs 1.0.4 → 2.0.0-pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cms-page/data.d.ts +18 -19
- package/dist/cms-page/data.js +12 -13
- package/dist/cms-page/data.js.map +1 -1
- package/dist/cms-page/index.d.ts +1 -1
- package/dist/cms-page/layout.d.ts +6 -5
- package/dist/cms-page/layout.js +7 -10
- package/dist/cms-page/layout.js.map +1 -1
- package/dist/cms-page/page.d.ts +33 -18
- package/dist/cms-page/page.js +65 -29
- package/dist/cms-page/page.js.map +1 -1
- package/dist/cms-page/utils.d.ts +11 -2
- package/dist/cms-page/utils.js +14 -4
- package/dist/cms-page/utils.js.map +1 -1
- package/dist/components/on-page-edit.js +27 -18
- package/dist/components/on-page-edit.js.map +1 -1
- package/dist/metadata.d.ts +1 -1
- package/dist/metadata.js +11 -7
- package/dist/metadata.js.map +1 -1
- package/dist/ope/data.js +13 -13
- package/dist/ope/data.js.map +1 -1
- package/dist/ope/page.d.ts +1 -3
- package/dist/ope/page.js +90 -66
- package/dist/ope/page.js.map +1 -1
- package/dist/ope/types.d.ts +32 -25
- package/dist/publish/index.d.ts +25 -8
- package/dist/publish/index.js +38 -30
- package/dist/publish/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +24 -19
package/dist/cms-page/data.d.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
import { GraphQLClient } from "graphql-request";
|
|
2
|
-
export type GetContentByPathVariables = {
|
|
2
|
+
export type GetContentByPathVariables<LocaleType = string> = {
|
|
3
3
|
path: string;
|
|
4
|
-
locale?: Array<
|
|
4
|
+
locale?: Array<LocaleType | null> | LocaleType | null;
|
|
5
5
|
siteId?: string | null;
|
|
6
6
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
7
|
+
type MayBe<T> = T extends Array<infer R> ? Array<R | null> | null : T | null;
|
|
8
|
+
export type GetContentByPathResponse<LocaleType = string> = {
|
|
9
|
+
content?: MayBe<{
|
|
10
|
+
items?: MayBe<Array<{
|
|
11
|
+
_metadata?: MayBe<{
|
|
12
|
+
key?: MayBe<string>;
|
|
13
|
+
locale?: MayBe<LocaleType>;
|
|
14
|
+
types?: MayBe<Array<string>>;
|
|
15
|
+
displayName?: MayBe<string>;
|
|
16
|
+
version?: MayBe<string>;
|
|
17
|
+
}>;
|
|
18
|
+
_type?: MayBe<string>;
|
|
19
|
+
}>>;
|
|
20
|
+
}>;
|
|
22
21
|
};
|
|
23
22
|
export type GetMetaDataByPathResponse = {
|
|
24
23
|
getGenericMetaData?: {
|
|
@@ -32,8 +31,8 @@ export type GetMetaDataByPathResponse = {
|
|
|
32
31
|
} | null>;
|
|
33
32
|
};
|
|
34
33
|
};
|
|
35
|
-
export type GetContentByPathMethod = (client: GraphQLClient, variables: GetContentByPathVariables) => Promise<GetContentByPathResponse
|
|
36
|
-
export type GetMetaDataByPathMethod = (client: GraphQLClient, variables: GetContentByPathVariables) => Promise<GetMetaDataByPathResponse>;
|
|
34
|
+
export type GetContentByPathMethod<LocaleType = string> = (client: GraphQLClient, variables: GetContentByPathVariables<LocaleType>) => Promise<GetContentByPathResponse<LocaleType>>;
|
|
35
|
+
export type GetMetaDataByPathMethod<LocaleType = string> = (client: GraphQLClient, variables: GetContentByPathVariables<LocaleType>) => Promise<GetMetaDataByPathResponse>;
|
|
37
36
|
export declare const getMetaDataByPath: GetMetaDataByPathMethod;
|
|
38
37
|
export declare const getContentByPath: GetContentByPathMethod;
|
|
39
38
|
export default getContentByPath;
|
package/dist/cms-page/data.js
CHANGED
|
@@ -6,25 +6,24 @@ export const getContentByPath = (client, variables) => {
|
|
|
6
6
|
return client.request(contentQuery, variables);
|
|
7
7
|
};
|
|
8
8
|
export default getContentByPath;
|
|
9
|
-
const contentQuery = gql `query getContentByPathBase($path: String!, $
|
|
10
|
-
Content(
|
|
11
|
-
where: {
|
|
9
|
+
const contentQuery = gql `query getContentByPathBase($path: String!, $domain: String, $locale: [Locales]) {
|
|
10
|
+
content: Content(
|
|
11
|
+
where: { _metadata: { url: { hierarchical: { eq: $path }, base: { eq: $domain } } } }
|
|
12
12
|
locale: $locale
|
|
13
13
|
) {
|
|
14
|
+
total
|
|
14
15
|
items {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
locale: Language {
|
|
22
|
-
name: Name
|
|
16
|
+
_metadata {
|
|
17
|
+
key
|
|
18
|
+
locale
|
|
19
|
+
types
|
|
20
|
+
displayName
|
|
21
|
+
version
|
|
23
22
|
}
|
|
24
|
-
|
|
23
|
+
_type: __typename
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
|
-
}`;
|
|
26
|
+
}`;
|
|
28
27
|
const metadataQuery = gql `query getGenericMetaData($path: String!, $locale: [Locales], $siteId: String) {
|
|
29
28
|
getGenericMetaData: Content (
|
|
30
29
|
where: { RelativePath: { eq: $path }, SiteId: { eq: $siteId } }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/cms-page/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAiB,MAAM,iBAAiB,CAAA;AAyCpD,MAAM,CAAC,MAAM,iBAAiB,GAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;IAE5E,OAAO,MAAM,CAAC,OAAO,CAAsD,aAAa,EAAE,SAAS,CAAC,CAAA;AACxG,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;IAE1E,OAAO,MAAM,CAAC,OAAO,CAAqD,YAAY,EAAE,SAAS,CAAC,CAAA;AACtG,CAAC,CAAA;AAED,eAAe,gBAAgB,CAAA;AAE/B,MAAM,YAAY,GAAG,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/cms-page/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAiB,MAAM,iBAAiB,CAAA;AAyCpD,MAAM,CAAC,MAAM,iBAAiB,GAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;IAE5E,OAAO,MAAM,CAAC,OAAO,CAAsD,aAAa,EAAE,SAAS,CAAC,CAAA;AACxG,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;IAE1E,OAAO,MAAM,CAAC,OAAO,CAAqD,YAAY,EAAE,SAAS,CAAC,CAAA;AACtG,CAAC,CAAA;AAED,eAAe,gBAAgB,CAAA;AAE/B,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;IAiBpB,CAAA;AAEJ,MAAM,aAAa,GAAG,GAAG,CAAA;;;;;;;;;;;;;;EAcvB,CAAA"}
|
package/dist/cms-page/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { GetContentByPathMethod, GetMetaDataByPathMethod } from './data';
|
|
2
|
-
export type { CreatePageOptions,
|
|
2
|
+
export type { CreatePageOptions, DefaultCmsPageProps as CmsPageProps, DefaultCmsPageParams as CmsPageParams } from './page';
|
|
3
3
|
export type { CreateLayoutOptions } from './layout';
|
|
4
4
|
export { createPage } from './page';
|
|
5
5
|
export { createLayout } from './layout';
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { type PropsWithChildren, type ReactNode } from "react";
|
|
2
2
|
import { type Metadata, type ResolvingMetadata } from "next";
|
|
3
3
|
import type { ChannelDefinition, ClientFactory } from "@remkoj/optimizely-graph-client";
|
|
4
|
-
import type {
|
|
4
|
+
import type { DefaultCmsPageProps } from './page';
|
|
5
5
|
import { type GetMetaDataByPathMethod } from './data';
|
|
6
6
|
export type CmsPageLayout = {
|
|
7
|
-
generateMetadata: (props: Omit<
|
|
8
|
-
PageLayout: (props: PropsWithChildren<Omit<
|
|
7
|
+
generateMetadata: (props: Omit<DefaultCmsPageProps, 'searchParams'>, resolving: ResolvingMetadata) => Promise<Metadata>;
|
|
8
|
+
PageLayout: (props: PropsWithChildren<Omit<DefaultCmsPageProps, 'searchParams'>>) => JSX.Element | ReactNode;
|
|
9
9
|
};
|
|
10
10
|
export type CreateLayoutOptions = {
|
|
11
|
-
defaultLocale: string;
|
|
11
|
+
defaultLocale: string | null;
|
|
12
12
|
getMetaDataByPath: GetMetaDataByPathMethod;
|
|
13
13
|
client: ClientFactory;
|
|
14
|
+
channel?: ChannelDefinition;
|
|
14
15
|
};
|
|
15
|
-
export declare function createLayout(
|
|
16
|
+
export declare function createLayout(options?: Partial<CreateLayoutOptions>): CmsPageLayout;
|
|
16
17
|
export default createLayout;
|
package/dist/cms-page/layout.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { Utils } from "@remkoj/optimizely-cms-react";
|
|
2
2
|
import { getMetaDataByPath as getMetaDataByPathBase } from './data';
|
|
3
|
-
import { slugToLocale, slugToGraphLocale } from "./utils";
|
|
4
3
|
import { getServerClient } from "../client";
|
|
5
4
|
import { isDebug } from '@remkoj/optimizely-cms-react/rsc';
|
|
6
5
|
const defaultCreateLayoutOptions = {
|
|
7
|
-
defaultLocale:
|
|
6
|
+
defaultLocale: null,
|
|
8
7
|
getMetaDataByPath: getMetaDataByPathBase,
|
|
9
8
|
client: getServerClient
|
|
10
9
|
};
|
|
11
|
-
export function createLayout(
|
|
12
|
-
const { defaultLocale, getMetaDataByPath, client: clientFactory } = {
|
|
10
|
+
export function createLayout(options) {
|
|
11
|
+
const { defaultLocale, getMetaDataByPath, client: clientFactory, channel } = {
|
|
13
12
|
...defaultCreateLayoutOptions,
|
|
14
|
-
...{ defaultLocale:
|
|
13
|
+
...{ defaultLocale: null },
|
|
15
14
|
...options
|
|
16
15
|
};
|
|
17
16
|
const pageLayoutDefinition = {
|
|
@@ -23,13 +22,11 @@ export function createLayout(channel, options) {
|
|
|
23
22
|
* @returns The metadata that must be merged into the defaults
|
|
24
23
|
*/
|
|
25
24
|
generateMetadata: async ({ params }, resolving) => {
|
|
26
|
-
const
|
|
27
|
-
const relativePath = `/${params.lang}${params.path ? '/' + params.path.join('/') : ''}`;
|
|
25
|
+
const relativePath = `/${params.path ? '/' + params.path.join('/') : ''}`;
|
|
28
26
|
if (isDebug())
|
|
29
27
|
console.log(`⚪ [CmsPageLayout] Generating metadata for: ${relativePath}`);
|
|
30
28
|
const variables = {
|
|
31
|
-
path: relativePath
|
|
32
|
-
locale: slugToGraphLocale(channel, params.lang ?? '', defaultLocale)
|
|
29
|
+
path: relativePath
|
|
33
30
|
};
|
|
34
31
|
const client = clientFactory();
|
|
35
32
|
const response = await getMetaDataByPath(client, variables).catch(e => {
|
|
@@ -61,7 +58,7 @@ export function createLayout(channel, options) {
|
|
|
61
58
|
}
|
|
62
59
|
};
|
|
63
60
|
// Add alternative URLs
|
|
64
|
-
const alternates = (metadata?.alternatives || []).filter(Utils.isNotNullOrUndefined)
|
|
61
|
+
const alternates = (metadata?.alternatives || []).filter(Utils.isNotNullOrUndefined);
|
|
65
62
|
alternates.forEach(alt => {
|
|
66
63
|
if (pageMetadata.openGraph && Array.isArray(pageMetadata.openGraph.alternateLocale)) {
|
|
67
64
|
pageMetadata.openGraph.alternateLocale.push(alt.locale);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/cms-page/layout.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEpD,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAgC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/cms-page/layout.tsx"],"names":[],"mappings":"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"}
|
package/dist/cms-page/page.d.ts
CHANGED
|
@@ -1,28 +1,43 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import 'server-only';
|
|
3
3
|
import type { Metadata, ResolvingMetadata } from 'next';
|
|
4
|
-
import { type ClientFactory, type ChannelDefinition } from '@remkoj/optimizely-graph-client';
|
|
4
|
+
import { type Route, type ClientFactory, type ChannelDefinition } from '@remkoj/optimizely-graph-client';
|
|
5
5
|
import { type ComponentFactory } from '@remkoj/optimizely-cms-react/rsc';
|
|
6
6
|
import { type GetContentByPathMethod } from './data';
|
|
7
|
-
export type
|
|
8
|
-
path
|
|
9
|
-
lang
|
|
7
|
+
export type DefaultCmsPageParams = {
|
|
8
|
+
path?: string[];
|
|
9
|
+
lang?: string;
|
|
10
10
|
};
|
|
11
|
-
export type
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
export type DefaultCmsPageSearchParams = {};
|
|
12
|
+
export type DefaultCmsPageProps<TParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageParams, TSearchParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageSearchParams> = {
|
|
13
|
+
params: TParams;
|
|
14
|
+
searchParams: TSearchParams;
|
|
14
15
|
};
|
|
15
|
-
export type
|
|
16
|
-
|
|
16
|
+
export type OptiCmsNextJsPage<TParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageParams, TSearchParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageSearchParams> = {
|
|
17
|
+
generateStaticParams: () => Promise<TParams[]>;
|
|
18
|
+
generateMetadata: (props: DefaultCmsPageProps<TParams, TSearchParams>, resolving: ResolvingMetadata) => Promise<Metadata>;
|
|
19
|
+
CmsPage: (props: DefaultCmsPageProps<TParams, TSearchParams>) => Promise<JSX.Element>;
|
|
17
20
|
};
|
|
18
|
-
export
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
getContentByPath: GetContentByPathMethod;
|
|
21
|
+
export declare enum SystemLocales {
|
|
22
|
+
All = "ALL",
|
|
23
|
+
Neutral = "NEUTRAL"
|
|
24
|
+
}
|
|
25
|
+
export type CreatePageOptions<LocaleEnum = SystemLocales, TParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageParams, TSearchParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageSearchParams> = {
|
|
26
|
+
defaultLocale: LocaleEnum | null;
|
|
27
|
+
getContentByPath: GetContentByPathMethod<LocaleEnum>;
|
|
26
28
|
client: ClientFactory;
|
|
29
|
+
channel?: ChannelDefinition;
|
|
30
|
+
propsToCmsPath: (props: DefaultCmsPageProps<TParams, TSearchParams>) => string | null;
|
|
31
|
+
propsToCmsLocale: (props: DefaultCmsPageProps<TParams, TSearchParams>, locale: LocaleEnum | null) => LocaleEnum | null;
|
|
32
|
+
routeToParams: (route: Route) => TParams;
|
|
27
33
|
};
|
|
28
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Generate the React Server Side component and Next.JS functions needed to render an
|
|
36
|
+
* Optimizely CMS page. This component assumes that the routes are either defined as
|
|
37
|
+
* /[lang]/[[...path]] or /[[...path]]
|
|
38
|
+
*
|
|
39
|
+
* @param factory The component factory to use for this page
|
|
40
|
+
* @param options The page component generation options
|
|
41
|
+
* @returns The Optimizely CMS Page
|
|
42
|
+
*/
|
|
43
|
+
export declare function createPage<LocaleEnum = SystemLocales, TParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageParams, TSearchParams extends Record<string, string | Array<string> | undefined> = DefaultCmsPageSearchParams>(factory: ComponentFactory, options?: Partial<CreatePageOptions<LocaleEnum, TParams, TSearchParams>>): OptiCmsNextJsPage;
|
package/dist/cms-page/page.js
CHANGED
|
@@ -3,38 +3,52 @@ import 'server-only';
|
|
|
3
3
|
import deepmerge from 'deepmerge';
|
|
4
4
|
import { notFound } from 'next/navigation';
|
|
5
5
|
import { RouteResolver } from '@remkoj/optimizely-graph-client';
|
|
6
|
+
import { normalizeContentLinkWithLocale } from '@remkoj/optimizely-graph-client/utils';
|
|
6
7
|
import { CmsContent, isDebug, getServerContext } from '@remkoj/optimizely-cms-react/rsc';
|
|
7
8
|
import { Utils } from '@remkoj/optimizely-cms-react';
|
|
8
9
|
import { MetaDataResolver } from '../metadata';
|
|
9
10
|
import { urlToPath, localeToGraphLocale } from './utils';
|
|
10
11
|
import getContentByPathBase from './data';
|
|
11
12
|
import { getServerClient } from '../client';
|
|
13
|
+
export var SystemLocales;
|
|
14
|
+
(function (SystemLocales) {
|
|
15
|
+
SystemLocales["All"] = "ALL";
|
|
16
|
+
SystemLocales["Neutral"] = "NEUTRAL";
|
|
17
|
+
})(SystemLocales || (SystemLocales = {}));
|
|
12
18
|
const CreatePageOptionDefaults = {
|
|
13
|
-
defaultLocale:
|
|
19
|
+
defaultLocale: null,
|
|
14
20
|
getContentByPath: getContentByPathBase,
|
|
15
|
-
client: getServerClient
|
|
21
|
+
client: getServerClient,
|
|
22
|
+
propsToCmsPath: ({ params }) => buildRequestPath(params),
|
|
23
|
+
propsToCmsLocale: ({ params }, defaultLocale) => params?.lang ?? defaultLocale ?? null,
|
|
24
|
+
routeToParams: (route) => { return { path: urlToPath(route.url, route.locale), lang: route.locale }; }
|
|
16
25
|
};
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Generate the React Server Side component and Next.JS functions needed to render an
|
|
28
|
+
* Optimizely CMS page. This component assumes that the routes are either defined as
|
|
29
|
+
* /[lang]/[[...path]] or /[[...path]]
|
|
30
|
+
*
|
|
31
|
+
* @param factory The component factory to use for this page
|
|
32
|
+
* @param options The page component generation options
|
|
33
|
+
* @returns The Optimizely CMS Page
|
|
34
|
+
*/
|
|
35
|
+
export function createPage(factory, options) {
|
|
36
|
+
const { defaultLocale, getContentByPath, client: clientFactory, channel, propsToCmsLocale, propsToCmsPath, routeToParams } = {
|
|
19
37
|
...CreatePageOptionDefaults,
|
|
20
|
-
...{ defaultLocale: channel.defaultLocale },
|
|
21
38
|
...options
|
|
22
39
|
};
|
|
23
40
|
const pageDefintion = {
|
|
24
41
|
generateStaticParams: async () => {
|
|
25
42
|
const client = clientFactory();
|
|
26
43
|
const resolver = new RouteResolver(client);
|
|
27
|
-
return (await resolver.getRoutes()).map(r =>
|
|
28
|
-
return {
|
|
29
|
-
lang: channel.localeToSlug(r.language),
|
|
30
|
-
path: urlToPath(r.url, r.language)
|
|
31
|
-
};
|
|
32
|
-
});
|
|
44
|
+
return (await resolver.getRoutes()).map(r => routeToParams(r));
|
|
33
45
|
},
|
|
34
|
-
generateMetadata: async (
|
|
46
|
+
generateMetadata: async (props, resolving) => {
|
|
35
47
|
// Read variables from request
|
|
36
48
|
const client = clientFactory();
|
|
37
|
-
const requestPath =
|
|
49
|
+
const requestPath = propsToCmsPath(props);
|
|
50
|
+
if (!requestPath)
|
|
51
|
+
return Promise.resolve({});
|
|
38
52
|
const routeResolver = new RouteResolver(client);
|
|
39
53
|
const metaResolver = new MetaDataResolver(client);
|
|
40
54
|
// Resolve the route to a content link
|
|
@@ -42,12 +56,12 @@ export function createPage(factory, channel, options) {
|
|
|
42
56
|
if (!route)
|
|
43
57
|
return Promise.resolve({});
|
|
44
58
|
// Set context
|
|
45
|
-
getServerContext().setLocale(localeToGraphLocale(
|
|
59
|
+
getServerContext().setLocale(localeToGraphLocale(route.locale, channel));
|
|
46
60
|
getServerContext().setOptimizelyGraphClient(client);
|
|
47
61
|
// Prepare metadata fetching
|
|
48
62
|
const contentLink = routeResolver.routeToContentLink(route);
|
|
49
63
|
const contentType = route.contentType;
|
|
50
|
-
const graphLocale = localeToGraphLocale(
|
|
64
|
+
const graphLocale = channel ? localeToGraphLocale(route.locale, channel) : null;
|
|
51
65
|
// Fetch the metadata based upon the actual content type and resolve parent
|
|
52
66
|
const [pageMetadata, baseMetadata] = await Promise.all([
|
|
53
67
|
metaResolver.resolve(factory, contentLink, contentType, graphLocale),
|
|
@@ -66,21 +80,27 @@ export function createPage(factory, channel, options) {
|
|
|
66
80
|
}
|
|
67
81
|
return pageMetadata;
|
|
68
82
|
},
|
|
69
|
-
CmsPage: async (
|
|
70
|
-
if (!lang || lang.length == 0)
|
|
71
|
-
return notFound();
|
|
83
|
+
CmsPage: async (props) => {
|
|
72
84
|
// Prepare the context
|
|
73
85
|
const context = getServerContext();
|
|
74
86
|
const client = context.client ?? clientFactory();
|
|
75
87
|
if (!context.client)
|
|
76
88
|
context.setOptimizelyGraphClient(client);
|
|
77
89
|
context.setComponentFactory(factory);
|
|
78
|
-
//
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
// Analyze the Next.JS Request props
|
|
91
|
+
const requestLocale = propsToCmsLocale(props, defaultLocale);
|
|
92
|
+
const requestPath = propsToCmsPath(props);
|
|
93
|
+
if (isDebug())
|
|
94
|
+
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(props)} => Optimizely CMS route: ${JSON.stringify({ path: requestPath, locale: requestLocale })}`);
|
|
95
|
+
// Process the locale
|
|
96
|
+
const graphLocale = (requestLocale ? localeToGraphLocale(requestLocale, channel) : undefined);
|
|
97
|
+
if (requestLocale)
|
|
98
|
+
context.setLocale(requestLocale);
|
|
99
|
+
// Resolve the content based upon the path
|
|
100
|
+
if (!requestPath)
|
|
101
|
+
return notFound();
|
|
102
|
+
const response = await getContentByPath(client, { path: requestPath, locale: graphLocale });
|
|
103
|
+
const info = (response?.content?.items ?? [])[0];
|
|
84
104
|
if (!info) {
|
|
85
105
|
if (isDebug()) {
|
|
86
106
|
console.error(`🔴 [CmsPage] Unable to load content for ${requestPath}, data received: `, response);
|
|
@@ -88,8 +108,10 @@ export function createPage(factory, channel, options) {
|
|
|
88
108
|
return notFound();
|
|
89
109
|
}
|
|
90
110
|
// Extract the type & link
|
|
91
|
-
const contentType = Utils.normalizeContentType(info.
|
|
92
|
-
const contentLink =
|
|
111
|
+
const contentType = Utils.normalizeContentType(info._metadata?.types);
|
|
112
|
+
const contentLink = normalizeContentLinkWithLocale(info._metadata);
|
|
113
|
+
if (contentLink?.locale)
|
|
114
|
+
context.setLocale(contentLink?.locale);
|
|
93
115
|
if (!contentLink) {
|
|
94
116
|
console.error("🔴 [CmsPage] Unable to infer the contentLink from the retrieved content, this should not have happened!");
|
|
95
117
|
return notFound();
|
|
@@ -100,9 +122,23 @@ export function createPage(factory, channel, options) {
|
|
|
100
122
|
};
|
|
101
123
|
return pageDefintion;
|
|
102
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
*
|
|
127
|
+
*
|
|
128
|
+
* @param param0 The URL parameters
|
|
129
|
+
* @returns The request path as understood by Graph
|
|
130
|
+
*/
|
|
103
131
|
function buildRequestPath({ lang, path }) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
132
|
+
const slugs = [];
|
|
133
|
+
if (path)
|
|
134
|
+
slugs.push(...path.filter(x => x));
|
|
135
|
+
if (lang)
|
|
136
|
+
slugs.unshift(lang);
|
|
137
|
+
if (slugs.length == 0)
|
|
138
|
+
return '/';
|
|
139
|
+
const fullPath = '/' + slugs.filter(x => x && x.length > 0).join('/');
|
|
140
|
+
if (!slugs[slugs.length - 1].includes('.'))
|
|
141
|
+
return fullPath + '/';
|
|
142
|
+
return fullPath;
|
|
107
143
|
}
|
|
108
144
|
//# sourceMappingURL=page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":"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"}
|
package/dist/cms-page/utils.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { ChannelDefinition } from "@remkoj/optimizely-graph-client";
|
|
2
|
-
export declare function urlToPath(baseUrl: URL, language
|
|
3
|
-
|
|
2
|
+
export declare function urlToPath(baseUrl: URL, language?: string): string[];
|
|
3
|
+
/**
|
|
4
|
+
* Transform a locale to an Optimizely Graph locale, defaulting to the lookup
|
|
5
|
+
* table in the Channel definition, falling back to the programmatic approach
|
|
6
|
+
* after.
|
|
7
|
+
*
|
|
8
|
+
* @param locale
|
|
9
|
+
* @param channel
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function localeToGraphLocale(locale: string, channel?: ChannelDefinition): string;
|
|
4
13
|
export declare function slugToLocale<T extends string | undefined | null>(channel: ChannelDefinition, slug: string, defaultValue: T): string | T;
|
|
5
14
|
export declare function slugToGraphLocale<T extends string | undefined | null>(channel: ChannelDefinition, slug: string, defaultValue: T): string | T;
|
package/dist/cms-page/utils.js
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
import { localeToGraphLocale as coreLocaleToGraphLocale } from "@remkoj/optimizely-graph-client/utils";
|
|
1
2
|
// Extract the path as string array from a given URL
|
|
2
3
|
export function urlToPath(baseUrl, language) {
|
|
3
4
|
let slugs = baseUrl.pathname.split('/').filter(s => s);
|
|
4
|
-
if (slugs[0] == language)
|
|
5
|
-
slugs.
|
|
5
|
+
if (language && slugs[0] == language)
|
|
6
|
+
return slugs.slice(1);
|
|
6
7
|
return slugs;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Transform a locale to an Optimizely Graph locale, defaulting to the lookup
|
|
11
|
+
* table in the Channel definition, falling back to the programmatic approach
|
|
12
|
+
* after.
|
|
13
|
+
*
|
|
14
|
+
* @param locale
|
|
15
|
+
* @param channel
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export function localeToGraphLocale(locale, channel) {
|
|
19
|
+
return channel?.localeToGraphLocale(locale) ?? coreLocaleToGraphLocale(locale);
|
|
10
20
|
}
|
|
11
21
|
export function slugToLocale(channel, slug, defaultValue) {
|
|
12
22
|
const route = channel.locales.filter(x => x.slug == slug)[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cms-page/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cms-page/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,IAAI,uBAAuB,EAAE,MAAM,uCAAuC,CAAA;AAEtG,oDAAoD;AACpD,MAAM,UAAU,SAAS,CAAC,OAAY,EAAE,QAAiB;IACrD,IAAI,KAAK,GAAc,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjE,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACzB,OAAO,KAAK,CAAA;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAA2B;IAE3E,OAAO,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,YAAY,CAAsC,OAA0B,EAAE,IAAY,EAAE,YAAe;IAEvH,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,OAAO,KAAK,EAAE,IAAI,IAAI,YAAY,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAsC,OAA0B,EAAE,IAAY,EAAE,YAAe;IAE5H,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,OAAO,KAAK,EAAE,WAAW,IAAI,YAAY,EAAE,UAAU,CAAC,GAAG,EAAC,GAAG,CAAM,CAAA;AACvE,CAAC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
2
|
import { useState, useEffect } from 'react';
|
|
4
3
|
import { useRouter } from 'next/navigation';
|
|
5
|
-
const DEV = process.env.NODE_ENV == 'development';
|
|
6
4
|
export const OnPageEdit = ({ mode, children, className, timeout }) => {
|
|
7
5
|
const router = useRouter();
|
|
8
6
|
const [optiCmsReady, setOptiCmsReady] = useState(false);
|
|
@@ -37,41 +35,52 @@ export const OnPageEdit = ({ mode, children, className, timeout }) => {
|
|
|
37
35
|
// Define event handler
|
|
38
36
|
let maskTimer = false;
|
|
39
37
|
function onContentSaved(eventData) {
|
|
38
|
+
// If the effect has been undone, disable this handler
|
|
39
|
+
if (!handlerEnabled)
|
|
40
|
+
return;
|
|
40
41
|
setShowMask(true);
|
|
41
42
|
if (maskTimer != false)
|
|
42
43
|
clearTimeout(maskTimer);
|
|
43
|
-
console.log(`Delaying refresh with ${timeout}ms to allow Optimizely Graph to update
|
|
44
|
+
console.log(`Delaying refresh with ${timeout}ms to allow Optimizely Graph to update`, eventData);
|
|
44
45
|
maskTimer = setTimeout(() => {
|
|
45
46
|
const contentId = window.location.pathname.split(',,')[1];
|
|
46
|
-
const newContentId = eventData
|
|
47
|
-
if
|
|
48
|
-
|
|
49
|
-
router.refresh();
|
|
50
|
-
//setShowMask(false)
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
47
|
+
const newContentId = eventData?.contentLink;
|
|
48
|
+
// First: Use the updated preview URL if we have it
|
|
49
|
+
if (eventData?.previewUrl && previewUrl != eventData.previewUrl) {
|
|
53
50
|
const newUrl = new URL(eventData.previewUrl);
|
|
54
|
-
console.log(`Navigating to
|
|
51
|
+
console.log(`Navigating to provided preview path: ${newUrl.pathname}${newUrl.search}`);
|
|
52
|
+
router.push(newUrl.pathname + newUrl.search);
|
|
53
|
+
// Second: Use the provided Content ID to navigate to the new URL
|
|
54
|
+
}
|
|
55
|
+
else if (newContentId && contentId != newContentId) {
|
|
56
|
+
const newUrl = new URL(window.location.href);
|
|
57
|
+
const pathParts = newUrl.pathname.split(',,');
|
|
58
|
+
pathParts[1] = newContentId;
|
|
59
|
+
newUrl.pathname = pathParts.join(',,');
|
|
60
|
+
console.log(`Navigating to newly constructed URL to reflect ContentID change: ${newUrl.href}`);
|
|
55
61
|
router.push(newUrl.pathname + newUrl.search);
|
|
56
|
-
|
|
62
|
+
// Third: Refresh the page
|
|
57
63
|
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(`Refreshing preview: ${contentId}`);
|
|
66
|
+
router.refresh();
|
|
67
|
+
}
|
|
68
|
+
setShowMask(false);
|
|
58
69
|
}, timeout);
|
|
59
70
|
}
|
|
60
71
|
// Subscribe to event
|
|
61
72
|
console.log(`Subscribing to ContentSaved Event`);
|
|
62
73
|
const opti = tryGetCms();
|
|
63
|
-
opti?.subscribe('contentSaved',
|
|
64
|
-
if (!handlerEnabled)
|
|
65
|
-
return;
|
|
66
|
-
onContentSaved(eventData);
|
|
67
|
-
});
|
|
74
|
+
opti?.subscribe('contentSaved', onContentSaved);
|
|
68
75
|
// Unsubscribe when needed
|
|
69
76
|
return () => {
|
|
70
77
|
console.log(`Navigating away, disabling ContentSaved event handler`);
|
|
78
|
+
if (maskTimer != false)
|
|
79
|
+
clearTimeout(maskTimer);
|
|
71
80
|
handlerEnabled = false;
|
|
72
81
|
};
|
|
73
82
|
}, [optiCmsReady, router, timeout]);
|
|
74
|
-
return
|
|
83
|
+
return showMask ? children : null;
|
|
75
84
|
};
|
|
76
85
|
function tryGetCms() {
|
|
77
86
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-page-edit.js","sourceRoot":"","sources":["../../src/components/on-page-edit.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA
|
|
1
|
+
{"version":3,"file":"on-page-edit.js","sourceRoot":"","sources":["../../src/components/on-page-edit.tsx"],"names":[],"mappings":"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"}
|
package/dist/metadata.d.ts
CHANGED
|
@@ -13,6 +13,6 @@ export declare class MetaDataResolver {
|
|
|
13
13
|
* @param locale The locale to be used, in a ContentGraph locale format
|
|
14
14
|
* @returns A Promise for the metadata of the given content type & instance
|
|
15
15
|
*/
|
|
16
|
-
resolve(factory: ComponentFactory, contentLink: ContentLink, contentType: string[], locale
|
|
16
|
+
resolve(factory: ComponentFactory, contentLink: ContentLink, contentType: string[], locale?: string | null): Promise<Metadata>;
|
|
17
17
|
}
|
|
18
18
|
export default MetaDataResolver;
|