@remkoj/optimizely-cms-nextjs 2.0.0-pre4 → 2.0.0
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/page.d.ts +0 -1
- package/dist/cms-page/page.js +10 -8
- package/dist/cms-page/page.js.map +1 -1
- package/dist/components/on-page-edit.d.ts +0 -1
- package/dist/components/on-page-edit.js +14 -34
- package/dist/components/on-page-edit.js.map +1 -1
- package/dist/components/shared/CmsContentLink.d.ts +27 -0
- package/dist/components/shared/CmsContentLink.js +31 -0
- package/dist/components/shared/CmsContentLink.js.map +1 -0
- package/dist/components/shared/CmsImage.d.ts +1 -0
- package/dist/components/shared/CmsImage.js +2 -0
- package/dist/components/shared/CmsImage.js.map +1 -0
- package/dist/components/shared/CmsLink.d.ts +8 -0
- package/dist/components/shared/CmsLink.js +10 -0
- package/dist/components/shared/CmsLink.js.map +1 -0
- package/dist/components/shared/helpers.d.ts +13 -0
- package/dist/components/shared/helpers.js +81 -0
- package/dist/components/shared/helpers.js.map +1 -0
- package/dist/components/shared/index.d.ts +3 -0
- package/dist/components/shared/index.js +6 -0
- package/dist/components/shared/index.js.map +1 -0
- package/dist/components/shared/types.d.ts +28 -0
- package/dist/components/shared/types.js +2 -0
- package/dist/components/shared/types.js.map +1 -0
- package/dist/metadata.js +9 -3
- package/dist/metadata.js.map +1 -1
- package/dist/ope/data.js +1 -1
- package/dist/ope/data.js.map +1 -1
- package/dist/ope/page.js +14 -76
- package/dist/ope/page.js.map +1 -1
- package/dist/ope/tools.d.ts +5 -0
- package/dist/ope/tools.js +119 -0
- package/dist/ope/tools.js.map +1 -0
- package/dist/ope/types.d.ts +36 -18
- package/package.json +19 -16
package/dist/cms-page/page.d.ts
CHANGED
package/dist/cms-page/page.js
CHANGED
|
@@ -37,27 +37,29 @@ export function createPage(factory, options) {
|
|
|
37
37
|
...CreatePageOptionDefaults,
|
|
38
38
|
...options
|
|
39
39
|
};
|
|
40
|
+
const globalClient = clientFactory();
|
|
40
41
|
const pageDefintion = {
|
|
41
42
|
generateStaticParams: async () => {
|
|
42
|
-
const client = clientFactory()
|
|
43
|
-
const resolver = new RouteResolver(
|
|
43
|
+
//const client = clientFactory()
|
|
44
|
+
const resolver = new RouteResolver(globalClient);
|
|
44
45
|
return (await resolver.getRoutes()).map(r => routeToParams(r));
|
|
45
46
|
},
|
|
46
47
|
generateMetadata: async (props, resolving) => {
|
|
47
48
|
// Read variables from request
|
|
48
|
-
const client = clientFactory()
|
|
49
|
+
//const client = clientFactory()
|
|
49
50
|
const requestPath = propsToCmsPath(props);
|
|
50
51
|
if (!requestPath)
|
|
51
52
|
return Promise.resolve({});
|
|
52
|
-
const routeResolver = new RouteResolver(
|
|
53
|
-
const metaResolver = new MetaDataResolver(
|
|
53
|
+
const routeResolver = new RouteResolver(globalClient);
|
|
54
|
+
const metaResolver = new MetaDataResolver(globalClient);
|
|
54
55
|
// Resolve the route to a content link
|
|
55
56
|
const route = await routeResolver.getContentInfoByPath(requestPath);
|
|
56
57
|
if (!route)
|
|
57
58
|
return Promise.resolve({});
|
|
58
59
|
// Set context
|
|
59
|
-
getServerContext().setLocale(
|
|
60
|
-
getServerContext().setOptimizelyGraphClient(
|
|
60
|
+
getServerContext().setLocale(route.locale);
|
|
61
|
+
getServerContext().setOptimizelyGraphClient(globalClient);
|
|
62
|
+
getServerContext().setComponentFactory(factory);
|
|
61
63
|
// Prepare metadata fetching
|
|
62
64
|
const contentLink = routeResolver.routeToContentLink(route);
|
|
63
65
|
const contentType = route.contentType;
|
|
@@ -83,7 +85,7 @@ export function createPage(factory, options) {
|
|
|
83
85
|
CmsPage: async (props) => {
|
|
84
86
|
// Prepare the context
|
|
85
87
|
const context = getServerContext();
|
|
86
|
-
const client = context.client ??
|
|
88
|
+
const client = context.client ?? globalClient;
|
|
87
89
|
if (!context.client)
|
|
88
90
|
context.setOptimizelyGraphClient(client);
|
|
89
91
|
context.setComponentFactory(factory);
|
|
@@ -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,oBAAoB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAA0D,MAAM,iCAAiC,CAAA;AACvH,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAA;AACtF,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAyB,MAAM,kCAAkC,CAAA;AAC/G,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,oBAAqD,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAyB9C,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,4BAAW,CAAA;IACX,oCAAmB,CAAA;AACvB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAgBD,MAAM,wBAAwB,GAA+B;IACzD,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,oBAAoB;IACtC,MAAM,EAAE,eAAe;IACvB,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACxD,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,IAAI,aAAa,IAAI,IAAI;IACtF,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA,CAAA,CAAC;CACvG,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAKtB,OAAyB,EACzB,OAAwE;IAExE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,GAAE;QACxH,GAAG,wBAAwB;QAC3B,GAAG,OAAO;KACoB,CAAA;
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { useRouter } from 'next/navigation.js';
|
|
4
|
-
export const OnPageEdit = ({ mode, children, className
|
|
4
|
+
export const OnPageEdit = ({ mode, children, className }) => {
|
|
5
5
|
const router = useRouter();
|
|
6
6
|
const [optiCmsReady, setOptiCmsReady] = useState(false);
|
|
7
7
|
const [showMask, setShowMask] = useState(false);
|
|
8
|
-
timeout = timeout ?? 1500;
|
|
9
8
|
// Bind to the CMS & CMS Ready State
|
|
10
9
|
useEffect(() => {
|
|
11
10
|
console.log("Reading Opti CMS Context");
|
|
@@ -32,37 +31,20 @@ export const OnPageEdit = ({ mode, children, className, timeout }) => {
|
|
|
32
31
|
return;
|
|
33
32
|
const previewUrl = window.location.href;
|
|
34
33
|
// Define event handler
|
|
35
|
-
let maskTimer = false;
|
|
36
34
|
function onContentSaved(eventData) {
|
|
37
35
|
setShowMask(true);
|
|
38
|
-
if
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
else if (newContentId && contentId != newContentId) {
|
|
52
|
-
const newUrl = new URL(window.location.href);
|
|
53
|
-
const pathParts = newUrl.pathname.split(',,');
|
|
54
|
-
pathParts[1] = newContentId;
|
|
55
|
-
newUrl.pathname = pathParts.join(',,');
|
|
56
|
-
console.log(`Navigating to newly constructed URL to reflect ContentID change: ${newUrl.href}`);
|
|
57
|
-
router.push(newUrl.pathname + newUrl.search);
|
|
58
|
-
// Third: Refresh the page
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
console.log(`Refreshing preview: ${contentId}`);
|
|
62
|
-
router.refresh();
|
|
63
|
-
}
|
|
64
|
-
setShowMask(false);
|
|
65
|
-
}, timeout);
|
|
36
|
+
// First: Use the updated preview URL if we have it
|
|
37
|
+
if (eventData?.previewUrl && previewUrl != eventData.previewUrl) {
|
|
38
|
+
const newUrl = new URL(eventData.previewUrl);
|
|
39
|
+
console.log(`Navigating to provided preview path: ${newUrl.pathname}${newUrl.search}`);
|
|
40
|
+
router.push(newUrl.pathname + newUrl.search);
|
|
41
|
+
// Third: Refresh the page
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(`Refreshing preview: ${eventData.contentLink}`);
|
|
45
|
+
router.refresh();
|
|
46
|
+
}
|
|
47
|
+
setShowMask(false);
|
|
66
48
|
}
|
|
67
49
|
// Subscribe to event
|
|
68
50
|
console.log(`Subscribing to ContentSaved Event`);
|
|
@@ -71,11 +53,9 @@ export const OnPageEdit = ({ mode, children, className, timeout }) => {
|
|
|
71
53
|
// Unsubscribe when needed
|
|
72
54
|
return () => {
|
|
73
55
|
console.log(`Navigating away, disabling ContentSaved event handler`);
|
|
74
|
-
if (maskTimer != false)
|
|
75
|
-
clearTimeout(maskTimer);
|
|
76
56
|
disposer?.remove();
|
|
77
57
|
};
|
|
78
|
-
}, [optiCmsReady, router
|
|
58
|
+
}, [optiCmsReady, router]);
|
|
79
59
|
return showMask ? children : null;
|
|
80
60
|
};
|
|
81
61
|
function tryGetCms() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-page-edit.js","sourceRoot":"","sources":["../../src/components/on-page-edit.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkD,MAAM,OAAO,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"on-page-edit.js","sourceRoot":"","sources":["../../src/components/on-page-edit.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FunctionComponent, ComponentPropsWithRef, ForwardRefExoticComponent, AnchorHTMLAttributes, ReactNode, RefAttributes } from "react";
|
|
2
|
+
import { LinkProps } from 'next/link.js';
|
|
3
|
+
import { CmsContentLinkDataType } from './types.js';
|
|
4
|
+
type LinkType = ForwardRefExoticComponent<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof LinkProps> & LinkProps & {
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
} & RefAttributes<HTMLAnchorElement>>;
|
|
7
|
+
type LinkTypeProps = ComponentPropsWithRef<LinkType>;
|
|
8
|
+
export type CmsContentLinkProps = {
|
|
9
|
+
/**
|
|
10
|
+
* The Link target as retrieved from Optimizely Graph
|
|
11
|
+
*/
|
|
12
|
+
href?: CmsContentLinkDataType | null;
|
|
13
|
+
/**
|
|
14
|
+
* If set to a valid base URL, it will make all links targetting
|
|
15
|
+
* this base a same site link instead of an absolute link
|
|
16
|
+
*/
|
|
17
|
+
base?: string;
|
|
18
|
+
} & Omit<LinkTypeProps, 'href'>;
|
|
19
|
+
/**
|
|
20
|
+
* Create a Next.js Link based upon data retrieved from Optimizely Graph, using the default
|
|
21
|
+
* IContentData, IContentInfo or LinkData fragments.
|
|
22
|
+
*
|
|
23
|
+
* @param param0 The component properties
|
|
24
|
+
* @returns The fully configured Next.js Link property
|
|
25
|
+
*/
|
|
26
|
+
export declare const CmsContentLink: FunctionComponent<CmsContentLinkProps>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import LinkEl from 'next/link.js';
|
|
5
|
+
import { IsLinkItemData, isIContentData, isIContentInfo, isLinkData, iContentDataToHref, iContentInfoToHref, linkDataToHref, linkItemDataToHref } from './helpers.js';
|
|
6
|
+
const Link = LinkEl;
|
|
7
|
+
/**
|
|
8
|
+
* Create a Next.js Link based upon data retrieved from Optimizely Graph, using the default
|
|
9
|
+
* IContentData, IContentInfo or LinkData fragments.
|
|
10
|
+
*
|
|
11
|
+
* @param param0 The component properties
|
|
12
|
+
* @returns The fully configured Next.js Link property
|
|
13
|
+
*/
|
|
14
|
+
export const CmsContentLink = ({ href, base, children, ...props }) => {
|
|
15
|
+
const linkHref = useMemo(() => {
|
|
16
|
+
let urlValue = '#';
|
|
17
|
+
if (typeof (href) == 'string')
|
|
18
|
+
urlValue = href;
|
|
19
|
+
else if (isIContentData(href))
|
|
20
|
+
urlValue = iContentDataToHref(href, base);
|
|
21
|
+
else if (isIContentInfo(href))
|
|
22
|
+
urlValue = iContentInfoToHref(href, base);
|
|
23
|
+
else if (isLinkData(href))
|
|
24
|
+
urlValue = linkDataToHref(href, base);
|
|
25
|
+
else if (IsLinkItemData(href))
|
|
26
|
+
urlValue = linkItemDataToHref(href, base);
|
|
27
|
+
return urlValue;
|
|
28
|
+
}, [href]);
|
|
29
|
+
return _jsx(Link, { href: linkHref, ...props, children: children });
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=CmsContentLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmsContentLink.js","sourceRoot":"","sources":["../../../src/components/shared/CmsContentLink.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,MAAqB,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAMrK,MAAM,IAAI,GAAc,MAA6B,CAAA;AAerD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4C,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC1G,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,QAAQ,GAAG,GAAG,CAAA;QAClB,IAAI,OAAM,CAAC,IAAI,CAAC,IAAI,QAAQ;YACxB,QAAQ,GAAG,IAAI,CAAA;aACd,IAAI,cAAc,CAAC,IAAI,CAAC;YACzB,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACxC,IAAI,cAAc,CAAC,IAAI,CAAC;YACzB,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACxC,IAAI,UAAU,CAAC,IAAI,CAAC;YACrB,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACpC,IAAI,cAAc,CAAC,IAAI,CAAC;YACzB,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7C,OAAO,QAAQ,CAAA;IACnB,CAAC,EAAE,CAAE,IAAI,CAAE,CAAC,CAAA;IAEZ,OAAO,KAAC,IAAI,IAAC,IAAI,EAAG,QAAQ,KAAQ,KAAK,YAAK,QAAQ,GAAS,CAAA;AACnE,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmsImage.js","sourceRoot":"","sources":["../../../src/components/shared/CmsImage.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FunctionComponent } from "react";
|
|
2
|
+
import type { LinkItemData } from './types.js';
|
|
3
|
+
import { type CmsContentLinkProps } from "./CmsContentLink.js";
|
|
4
|
+
export type CmsLinkProps = {
|
|
5
|
+
href: LinkItemData;
|
|
6
|
+
} & Omit<CmsContentLinkProps, 'href' | 'children' | 'title' | 'target'>;
|
|
7
|
+
export declare const CmsLink: FunctionComponent<CmsLinkProps>;
|
|
8
|
+
export default CmsLink;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { CmsContentLink } from "./CmsContentLink.js";
|
|
3
|
+
export const CmsLink = ({ href, ...props }) => {
|
|
4
|
+
const linkText = href.text ?? "";
|
|
5
|
+
const linkTitle = href.title ?? undefined;
|
|
6
|
+
const linkTarget = href.target ?? undefined;
|
|
7
|
+
return _jsx(CmsContentLink, { href: href, title: linkTitle, target: linkTarget, ...props, children: linkText });
|
|
8
|
+
};
|
|
9
|
+
export default CmsLink;
|
|
10
|
+
//# sourceMappingURL=CmsLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmsLink.js","sourceRoot":"","sources":["../../../src/components/shared/CmsLink.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAM/E,MAAM,CAAC,MAAM,OAAO,GAAqC,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAA;IAC3C,OAAO,KAAC,cAAc,IAAC,IAAI,EAAG,IAAI,EAAG,KAAK,EAAG,SAAS,EAAG,MAAM,EAAG,UAAU,KAAQ,KAAK,YAAM,QAAQ,GAAmB,CAAA;AAC9H,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CmsContentLinkDataType, IContentData, IContentInfo, LinkData, LinkItemData } from "./types.js";
|
|
2
|
+
export declare function createListKey(item: CmsContentLinkDataType): string;
|
|
3
|
+
export declare function isIContentData(toTest: CmsContentLinkDataType | null | undefined): toTest is IContentData;
|
|
4
|
+
export declare function isIContentInfo(toTest: CmsContentLinkDataType | null | undefined): toTest is IContentInfo;
|
|
5
|
+
export declare function isLinkData(toTest: CmsContentLinkDataType | null | undefined): toTest is LinkData;
|
|
6
|
+
export declare function IsLinkItemData(toTest: CmsContentLinkDataType | null | undefined): toTest is LinkItemData;
|
|
7
|
+
export declare function getLinkData(item: LinkItemData): LinkData | null;
|
|
8
|
+
export declare function linkDataToUrl(item: LinkData | null | undefined): URL | undefined;
|
|
9
|
+
export declare function linkToUrl(item: LinkItemData): URL | undefined;
|
|
10
|
+
export declare function iContentDataToHref(contentData: IContentData, base?: string): string;
|
|
11
|
+
export declare function iContentInfoToHref(contentInfo: IContentInfo, base?: string): string;
|
|
12
|
+
export declare function linkItemDataToHref(linkItemData: LinkItemData, base?: string): string;
|
|
13
|
+
export declare function linkDataToHref(linkData: LinkData, base?: string): string;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export function createListKey(item) {
|
|
2
|
+
if (isIContentData(item))
|
|
3
|
+
return iContentDataToHref(item);
|
|
4
|
+
else if (isIContentInfo(item))
|
|
5
|
+
return iContentInfoToHref(item);
|
|
6
|
+
else if (isLinkData(item))
|
|
7
|
+
return linkDataToHref(item);
|
|
8
|
+
else if (IsLinkItemData(item)) {
|
|
9
|
+
const link = getLinkData(item);
|
|
10
|
+
return link && link.default ? link.default : (item.text ?? '-');
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return item;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function isIContentData(toTest) {
|
|
17
|
+
// ToTest must be an Object
|
|
18
|
+
if (typeof (toTest) != 'object' || toTest == null)
|
|
19
|
+
return false;
|
|
20
|
+
// ToTest is considered IContentData if it has metadata
|
|
21
|
+
return isIContentInfo(toTest._metadata);
|
|
22
|
+
}
|
|
23
|
+
export function isIContentInfo(toTest) {
|
|
24
|
+
// ToTest must be an Object
|
|
25
|
+
if (typeof (toTest) != 'object' || toTest == null)
|
|
26
|
+
return false;
|
|
27
|
+
// Valid IContentInfo has a non-empty key or null value (for Inline content)
|
|
28
|
+
return ((typeof (toTest.key) == 'string' && (toTest.key ?? '').length > 0) || toTest.key == null);
|
|
29
|
+
}
|
|
30
|
+
export function isLinkData(toTest) {
|
|
31
|
+
// ToTest must be an Object
|
|
32
|
+
if (typeof (toTest) != 'object' || toTest == null)
|
|
33
|
+
return false;
|
|
34
|
+
if (toTest.__typename == "ContentUrl")
|
|
35
|
+
return true;
|
|
36
|
+
return typeof (toTest.default) == 'string' || toTest.default == null;
|
|
37
|
+
}
|
|
38
|
+
export function IsLinkItemData(toTest) {
|
|
39
|
+
// ToTest must be an Object
|
|
40
|
+
if (typeof (toTest) != 'object' || toTest == null)
|
|
41
|
+
return false;
|
|
42
|
+
if (toTest.__typename == "Link")
|
|
43
|
+
return true;
|
|
44
|
+
return toTest.url == null || isLinkData(toTest.url);
|
|
45
|
+
}
|
|
46
|
+
export function getLinkData(item) {
|
|
47
|
+
const url = item.url;
|
|
48
|
+
return url && url.default ? url : null;
|
|
49
|
+
}
|
|
50
|
+
export function linkDataToUrl(item) {
|
|
51
|
+
try {
|
|
52
|
+
return new URL(item?.default ?? '/', item?.base ?? undefined);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function linkToUrl(item) {
|
|
59
|
+
return linkDataToUrl(getLinkData(item));
|
|
60
|
+
}
|
|
61
|
+
export function iContentDataToHref(contentData, base) {
|
|
62
|
+
if (!contentData._metadata)
|
|
63
|
+
return '#';
|
|
64
|
+
return iContentInfoToHref(contentData._metadata, base);
|
|
65
|
+
}
|
|
66
|
+
export function iContentInfoToHref(contentInfo, base) {
|
|
67
|
+
if (!contentInfo.url)
|
|
68
|
+
return '#';
|
|
69
|
+
return linkDataToHref(contentInfo.url, base);
|
|
70
|
+
}
|
|
71
|
+
export function linkItemDataToHref(linkItemData, base) {
|
|
72
|
+
if (!linkItemData.url)
|
|
73
|
+
return '#';
|
|
74
|
+
return linkDataToHref(linkItemData.url);
|
|
75
|
+
}
|
|
76
|
+
export function linkDataToHref(linkData, base) {
|
|
77
|
+
if (base && linkData.base == base)
|
|
78
|
+
return linkData.default ?? '#';
|
|
79
|
+
return linkData.base ? (new URL(linkData.default ?? '/#', linkData.base)).href : linkData.default ?? '#';
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/shared/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,IAA4B;IAEtD,IAAI,cAAc,CAAC,IAAI,CAAC;QACpB,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;SAC9B,IAAI,cAAc,CAAC,IAAI,CAAC;QACzB,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;SAC9B,IAAI,UAAU,CAAC,IAAI,CAAC;QACrB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;SAC1B,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAA;IACnE,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiD;IAE5E,2BAA2B;IAC3B,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAEhB,uDAAuD;IACvD,OAAO,cAAc,CAAE,MAAuB,CAAC,SAAS,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiD;IAE5E,2BAA2B;IAC3B,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAEhB,4EAA4E;IAC5E,OAAO,CAAC,CAAC,OAAM,CAAE,MAAuB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAE,MAAuB,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAK,MAAuB,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;AAC1J,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiD;IAExE,2BAA2B;IAC3B,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAEhB,IAAI,MAAM,CAAC,UAAU,IAAI,YAAY;QACjC,OAAO,IAAI,CAAA;IAEf,OAAO,OAAM,CAAE,MAAmB,CAAC,OAAO,CAAC,IAAI,QAAQ,IAAK,MAAmB,CAAC,OAAO,IAAI,IAAI,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiD;IAE5E,2BAA2B;IAC3B,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAEhB,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM;QAC3B,OAAO,IAAI,CAAA;IAEf,OAAQ,MAAuB,CAAC,GAAG,IAAI,IAAI,IAAI,UAAU,CAAE,MAAuB,CAAC,GAAG,CAAC,CAAA;AAC3F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAkB;IAE1C,MAAM,GAAG,GAAiC,IAAI,CAAC,GAAG,CAAA;IAClD,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAiC;IAE3D,IAAI,CAAC;QACD,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC,CAAA;IACjE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAkB;IAExC,OAAO,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAyB,EAAE,IAAa;IAEvE,IAAI,CAAC,WAAW,CAAC,SAAS;QACtB,OAAO,GAAG,CAAA;IACd,OAAO,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAyB,EAAE,IAAa;IAEvE,IAAI,CAAC,WAAW,CAAC,GAAG;QAChB,OAAO,GAAG,CAAA;IACd,OAAO,cAAc,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAA0B,EAAE,IAAa;IAExE,IAAI,CAAC,YAAY,CAAC,GAAG;QACjB,OAAO,GAAG,CAAA;IACd,OAAO,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,IAAa;IAC5D,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI;QAC7B,OAAO,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAA;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAA;AAC5G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/shared/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,cAAc,cAAc,CAAA;AAE5B,6BAA6B;AAC7B,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type CmsContentLinkDataType = IContentData | IContentInfo | LinkData | LinkItemData | string;
|
|
2
|
+
export type IContentData<LT = string> = {
|
|
3
|
+
__typename?: string | null;
|
|
4
|
+
_type?: string | null;
|
|
5
|
+
_metadata?: IContentInfo<LT> | null;
|
|
6
|
+
};
|
|
7
|
+
export type IContentInfo<LT = string> = {
|
|
8
|
+
__typename?: string | null;
|
|
9
|
+
key?: string | null;
|
|
10
|
+
locale?: LT | null;
|
|
11
|
+
types?: Array<string | null> | null;
|
|
12
|
+
displayName?: string | null;
|
|
13
|
+
version?: string | null;
|
|
14
|
+
url?: LinkData | null;
|
|
15
|
+
};
|
|
16
|
+
export type LinkData = {
|
|
17
|
+
__typename?: "ContentUrl";
|
|
18
|
+
base?: string | null;
|
|
19
|
+
hierarchical?: string | null;
|
|
20
|
+
default?: string | null;
|
|
21
|
+
};
|
|
22
|
+
export type LinkItemData = {
|
|
23
|
+
__typename?: "Link";
|
|
24
|
+
title?: string | null;
|
|
25
|
+
text?: string | null;
|
|
26
|
+
target?: string | null;
|
|
27
|
+
url?: LinkData | null;
|
|
28
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/shared/types.ts"],"names":[],"mappings":""}
|
package/dist/metadata.js
CHANGED
|
@@ -19,10 +19,16 @@ export class MetaDataResolver {
|
|
|
19
19
|
if (locale && locale.includes("-"))
|
|
20
20
|
throw new Error("🟠 [MetaDataResolver] Invalid character detected within the locale");
|
|
21
21
|
const Component = factory.resolve(contentType);
|
|
22
|
-
if (!Component)
|
|
22
|
+
if (!Component) {
|
|
23
|
+
if (this._cgClient.debug)
|
|
24
|
+
console.log(`🟠 [MetaDataResolver] No component found for ${contentType.join('/')}`);
|
|
23
25
|
return {};
|
|
26
|
+
}
|
|
27
|
+
if (this._cgClient.debug)
|
|
28
|
+
console.log(`⚪ [MetaDataResolver] Using component ${Component.displayName ?? 'Unnamed component'}`);
|
|
24
29
|
if (isOptimizelyNextPageWithMetaData(Component) && Component.getMetaData) {
|
|
25
|
-
|
|
30
|
+
if (this._cgClient.debug)
|
|
31
|
+
console.log("⚪ [MetaDataResolver] Component for content type has 'getMetaData, invoking...");
|
|
26
32
|
const meta = await Component.getMetaData(contentLink, locale, this._cgClient);
|
|
27
33
|
if (this._cgClient.debug)
|
|
28
34
|
console.log(`⚪ [MetaDataResolver] Resolved metadata to: ${JSON.stringify(meta)}`);
|
|
@@ -30,7 +36,7 @@ export class MetaDataResolver {
|
|
|
30
36
|
}
|
|
31
37
|
else {
|
|
32
38
|
if (this._cgClient.debug)
|
|
33
|
-
console.warn(`🟠 [MetaDataResolver] Resolved component for ${
|
|
39
|
+
console.warn(`🟠 [MetaDataResolver] Resolved component for ${contentType.join('/')} does not provide additional metadata`);
|
|
34
40
|
}
|
|
35
41
|
return {};
|
|
36
42
|
}
|
package/dist/metadata.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,EAAE,EAAE,oBAAoB,EAAqD,MAAM,iCAAiC,CAAA;AAEvI,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,EAAE,EAAE,oBAAoB,EAAqD,MAAM,iCAAiC,CAAA;AAEvI,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAA;AAG5D,MAAM,OAAO,gBAAgB;IAIzB,YAAmB,cAAyD;QAExE,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;IACzG,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,OAAO,CAAC,OAAyB,EAAE,WAAwB,EAAE,WAAqB,EAAE,MAAsB;QAEnH,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,OAAO,CAAC,GAAG,CAAC,gDAAiD,IAAI,CAAC,SAAS,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAC,CAAC,EAAE,CAAC,CAAA;QAEtH,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QAEzF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAA2B,CAAA;QACxE,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,gDAAiD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAE,EAAE,CAAC,CAAA;YAC1F,OAAO,EAAE,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,OAAO,CAAC,GAAG,CAAC,wCAAyC,SAAS,CAAC,WAAW,IAAI,mBAAoB,EAAE,CAAC,CAAA;QAEzG,IAAI,gCAAgC,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YACvE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;YAChG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7E,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,GAAG,CAAC,8CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAE,CAAC,CAAA;YACvF,OAAO,IAAI,CAAA;QACf,CAAC;aAAM,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,OAAO,CAAC,IAAI,CAAC,gDAAiD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAE,uCAAuC,CAAC,CAAA;QACpI,CAAC;QACD,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AAED,eAAe,gBAAgB,CAAA"}
|
package/dist/ope/data.js
CHANGED
|
@@ -3,7 +3,7 @@ export const getContentById = async (client, variables) => {
|
|
|
3
3
|
return await client.request(gqlQuery, variables);
|
|
4
4
|
};
|
|
5
5
|
const gqlQuery = gql `query getContentByIdBase($key: String!, $version: String, $locale: [Locales!], $path: String, $domain: String) {
|
|
6
|
-
content:
|
|
6
|
+
content: _Content(
|
|
7
7
|
where: {
|
|
8
8
|
_or: [
|
|
9
9
|
{ _metadata: { key: { eq: $key }, version: { eq: $version } } }
|
package/dist/ope/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ope/data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ope/data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAA0B,KAAK,EAAuB,MAAqB,EAAE,SAAwC,EAAE,EAAE;IAEhJ,OAAO,MAAM,MAAM,CAAC,OAAO,CAAgE,QAAQ,EAAE,SAAS,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;EAsBlB,CAAA"}
|
package/dist/ope/page.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import 'server-only';
|
|
3
|
-
import { AuthMode } from '@remkoj/optimizely-graph-client';
|
|
4
3
|
import { contentLinkToString } from '@remkoj/optimizely-graph-client/utils';
|
|
5
4
|
import { Utils } from '@remkoj/optimizely-cms-react';
|
|
6
5
|
import { CmsContent, getServerContext } from '@remkoj/optimizely-cms-react/rsc';
|
|
@@ -10,67 +9,14 @@ import { getAuthorizedServerClient } from '../client.js';
|
|
|
10
9
|
import React from 'react';
|
|
11
10
|
import Script from 'next/script.js';
|
|
12
11
|
import { getContentById } from './data.js';
|
|
13
|
-
|
|
14
|
-
try {
|
|
15
|
-
const stringValue = process?.env ? process.env[variableName] : undefined;
|
|
16
|
-
return stringValue || defaultValue;
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return defaultValue;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function readValueAsInt(variableName, defaultValue) {
|
|
23
|
-
const stringValue = readValue(variableName);
|
|
24
|
-
if (!stringValue)
|
|
25
|
-
return defaultValue;
|
|
26
|
-
try {
|
|
27
|
-
return parseInt(stringValue);
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return defaultValue;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
12
|
+
import { getContentRequest, isValidRequest } from './tools.js';
|
|
33
13
|
const defaultOptions = {
|
|
34
|
-
refreshDelay: 2000,
|
|
35
14
|
refreshNotice: () => _jsx("div", { className: 'optly-refresh-notice', children: "Updating preview, please wait...." }),
|
|
36
|
-
errorNotice: props => _jsxs("div", { className: 'optly-error-notice', children: [_jsx("div", { className: 'optly-error-title', children: props.title }), _jsx("div", { className: 'optly-error-message', children: props.message })] }),
|
|
37
15
|
layout: props => _jsx(_Fragment, { children: props.children }),
|
|
38
16
|
loader: getContentById,
|
|
39
17
|
clientFactory: (token) => getAuthorizedServerClient(token),
|
|
40
18
|
communicationInjectorPath: '/util/javascript/communicationinjector.js'
|
|
41
19
|
};
|
|
42
|
-
// Helper function to read the ContentID & WorkID
|
|
43
|
-
function getContentRequest(path = "", searchParams) {
|
|
44
|
-
try {
|
|
45
|
-
if (searchParams.preview_token == AuthMode.HMAC || searchParams.preview_token == AuthMode.Basic) {
|
|
46
|
-
console.error("🦺 [OnPageEdit] Edit mode requested with developer tokens, falling back to URL parsing to determine content");
|
|
47
|
-
const fullPath = Array.isArray(path) ? path.map(p => decodeURIComponent(p)).join('/') : decodeURI(path);
|
|
48
|
-
const [cmsPath, contentString] = fullPath.split(',,', 3);
|
|
49
|
-
const [contentKey, contentVersion] = (contentString ?? '').split('_', 3);
|
|
50
|
-
const contentPath = (cmsPath.startsWith('/') ? cmsPath.substring(1) : cmsPath).replace(/^(ui\/){0,1}(CMS\/){0,1}(Content\/){0,1}/gi, "");
|
|
51
|
-
const firstSlug = contentPath.split('/')[0];
|
|
52
|
-
const contentLocale = firstSlug?.length == 2 || firstSlug?.length == 5 ? firstSlug : undefined;
|
|
53
|
-
return {
|
|
54
|
-
key: contentKey,
|
|
55
|
-
version: contentVersion,
|
|
56
|
-
locale: contentLocale,
|
|
57
|
-
path: '/' + contentPath + (contentPath.endsWith('/') || contentPath == '' ? '' : '/')
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
const tokenInfo = JSON.parse(atob(searchParams.preview_token.split('.')[1]));
|
|
62
|
-
return {
|
|
63
|
-
key: tokenInfo.key,
|
|
64
|
-
version: tokenInfo.ver,
|
|
65
|
-
locale: tokenInfo.loc,
|
|
66
|
-
path: ''
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
20
|
/**
|
|
75
21
|
* Create the EditPage component needed by Next.JS to render the "On Page
|
|
76
22
|
* Editing" variant of the content item selected by the editor.
|
|
@@ -82,40 +28,32 @@ function getContentRequest(path = "", searchParams) {
|
|
|
82
28
|
* @returns The React Component that can be used by Next.JS to render the page
|
|
83
29
|
*/
|
|
84
30
|
export function createEditPageComponent(factory, options) {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
async function EditPage({ params: { path }, searchParams }) {
|
|
31
|
+
const { layout: PageLayout, refreshNotice: RefreshNotice, loader: getContentById, clientFactory, communicationInjectorPath } = { ...defaultOptions, ...options };
|
|
32
|
+
async function EditPage(props) {
|
|
88
33
|
// Create context
|
|
89
34
|
const context = getServerContext();
|
|
90
35
|
// Validate the search parameters
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
console.error("🔴 [OnPageEdit] Edit mode requested without valid EpiEditMode, refused to render the page. Mode set:", searchParams.epieditmode);
|
|
36
|
+
if (!isValidRequest(props, false, context.isDevelopment)) {
|
|
37
|
+
console.error("🔴 [OnPageEdit] Invalid edit mode request");
|
|
94
38
|
return notFound();
|
|
95
39
|
}
|
|
96
|
-
//
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
console.error("🔴 [OnPageEdit] Edit mode requested without valid Preview Token, refused to render the page");
|
|
40
|
+
// Get the requested content item
|
|
41
|
+
const contentRequestInfo = getContentRequest(props);
|
|
42
|
+
if (!contentRequestInfo) {
|
|
43
|
+
console.error("🔴 [OnPageEdit] Unable to resolve requested content");
|
|
101
44
|
return notFound();
|
|
102
45
|
}
|
|
103
|
-
|
|
104
|
-
console.log(`⚪ [OnPageEdit] Valid edit mode request: EpiEditMode=${searchParams.epieditmode}`);
|
|
46
|
+
const { token, ctx, ...contentRequest } = contentRequestInfo;
|
|
105
47
|
// Build context
|
|
106
48
|
const client = clientFactory(token);
|
|
107
49
|
context.setOptimizelyGraphClient(client);
|
|
108
50
|
context.setComponentFactory(factory);
|
|
109
51
|
context.setInEditMode(true);
|
|
110
52
|
// Get information from the Request URI
|
|
111
|
-
const contentRequest = getContentRequest(path, searchParams);
|
|
112
|
-
if (!contentRequest) {
|
|
113
|
-
console.error("🔴 [OnPageEdit] Unable to resolve requested content");
|
|
114
|
-
return notFound();
|
|
115
|
-
}
|
|
116
53
|
if (context.isDebug) {
|
|
54
|
+
console.log("⚪ [OnPageEdit] Request context:", ctx);
|
|
55
|
+
console.log("⚪ [OnPageEdit] Request token:", token);
|
|
117
56
|
console.log("⚪ [OnPageEdit] Requested content:", JSON.stringify(contentRequest));
|
|
118
|
-
console.log("⚪ [OnPageEdit] Creating GraphQL Client:", token);
|
|
119
57
|
}
|
|
120
58
|
try {
|
|
121
59
|
const contentInfo = await getContentById(client, contentRequest);
|
|
@@ -151,7 +89,7 @@ export function createEditPageComponent(factory, options) {
|
|
|
151
89
|
// Render the content, with edit mode context
|
|
152
90
|
const isPage = contentType.some(x => x?.toLowerCase() == "page") ?? false;
|
|
153
91
|
const Layout = isPage ? PageLayout : React.Fragment;
|
|
154
|
-
const output = _jsxs(_Fragment, { children: [_jsx(Script, { src: new URL(communicationInjectorPath, client.siteInfo.cmsURL).href, strategy: 'afterInteractive' }), _jsxs(Layout, { locale: contentItem.locale?.name ?? '', children: [_jsx(OnPageEdit, {
|
|
92
|
+
const output = _jsxs(_Fragment, { children: [_jsx(Script, { src: new URL(communicationInjectorPath, client.siteInfo.cmsURL).href, strategy: 'afterInteractive' }), _jsxs(Layout, { locale: contentItem.locale?.name ?? '', children: [_jsx(OnPageEdit, { mode: context.inEditMode ? 'edit' : 'preview', children: _jsx(RefreshNotice, {}) }), _jsx(CmsContent, { contentType: contentType, contentLink: contentLink, fragmentData: contentItem })] }), _jsxs("div", { className: 'optly-contentLink', children: ["ContentItem: ", contentLink ? contentLinkToString(contentLink) : "Invalid content link returned from Optimizely Graph"] })] });
|
|
155
93
|
return output;
|
|
156
94
|
}
|
|
157
95
|
catch (e) {
|
package/dist/ope/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ope/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ope/page.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { EditPageProps, ValidatedEditPageProps, ContentRequest } from './types.js';
|
|
2
|
+
export declare function isValidRequest(toTest: EditPageProps, throwOnInvalid?: boolean, isDevelopment?: boolean): toTest is ValidatedEditPageProps;
|
|
3
|
+
export declare function getContentRequest({ params: { path, lang }, searchParams: { preview_token: token, ...searchParams } }: ValidatedEditPageProps): ContentRequest | undefined;
|
|
4
|
+
export declare function readValue<T extends string | undefined>(variableName: string, defaultValue?: T): T extends string ? string : string | undefined;
|
|
5
|
+
export declare function readValueAsInt<T extends number | undefined>(variableName: string, defaultValue?: T): T extends number ? number : number | undefined;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { AuthMode } from '@remkoj/optimizely-graph-client';
|
|
2
|
+
export function isValidRequest(toTest, throwOnInvalid = false, isDevelopment = false) {
|
|
3
|
+
// Validate Route Params
|
|
4
|
+
if (Object.getOwnPropertyNames(toTest.params).some(x => x != 'path' && x != 'lang')) {
|
|
5
|
+
if (throwOnInvalid)
|
|
6
|
+
throw new Error("🔴 An Optimizely CMS NextJS edit page may only have 'path' and 'lang' route parameters");
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
if (toTest.params.lang && typeof (toTest.params.lang) != 'string') {
|
|
10
|
+
if (throwOnInvalid)
|
|
11
|
+
throw new Error("🔴 The 'lang' route parameter must be a string");
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (toTest.params.path && (!Array.isArray(toTest.params.path) || !toTest.params.path.every(x => typeof (x) == 'string'))) {
|
|
15
|
+
if (throwOnInvalid)
|
|
16
|
+
throw new Error("🔴 The 'path' route parameter must be an array of strings");
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
// Validate URL Params
|
|
20
|
+
const token = toTest.searchParams.preview_token ?? "";
|
|
21
|
+
const validDevToken = isDevelopment && (token == AuthMode.HMAC || token == AuthMode.Basic);
|
|
22
|
+
if (token.length < 20 && !validDevToken) {
|
|
23
|
+
if (throwOnInvalid)
|
|
24
|
+
throw new Error("🔴 The search paramater \"preview_token\" is invalid or missing");
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
// Validate CTX
|
|
28
|
+
if (!(toTest.searchParams.ctx == undefined || toTest.searchParams.ctx == 'edit' || toTest.searchParams.ctx == 'preview')) {
|
|
29
|
+
if (throwOnInvalid)
|
|
30
|
+
throw new Error("The 'ctx' search parameter must be omitted or 'edit' or 'preview'");
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// Validate EpiEditMode
|
|
34
|
+
if (!(toTest.searchParams.epieditmode == undefined || toTest.searchParams.epieditmode.toLowerCase() == 'true' || toTest.searchParams.epieditmode.toLowerCase() == 'false')) {
|
|
35
|
+
if (throwOnInvalid)
|
|
36
|
+
throw new Error("The 'epieditmode' search parameter must be omitted or 'true' or 'false'");
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (toTest.searchParams.ctx && toTest.searchParams.epieditmode) {
|
|
40
|
+
if (throwOnInvalid)
|
|
41
|
+
throw new Error("The 'epieditmode' and 'ctx' search parameters cannot be both defined");
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
if (!toTest.searchParams.ctx && !toTest.searchParams.epieditmode) {
|
|
45
|
+
if (throwOnInvalid)
|
|
46
|
+
throw new Error("Either 'epieditmode' and 'ctx' search parameters must be defined");
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
// Helper function to read the ContentID & WorkID
|
|
52
|
+
export function getContentRequest({ params: { path, lang }, searchParams: { preview_token: token, ...searchParams } }) {
|
|
53
|
+
try {
|
|
54
|
+
// First try to use the new style parameters
|
|
55
|
+
if (searchParams.key) {
|
|
56
|
+
return {
|
|
57
|
+
token,
|
|
58
|
+
ctx: searchParams.ctx,
|
|
59
|
+
key: searchParams.key,
|
|
60
|
+
locale: searchParams.loc,
|
|
61
|
+
version: searchParams.ver,
|
|
62
|
+
path: null
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Then fall back to old-mode URL parsing for developer URLs
|
|
66
|
+
if (token == AuthMode.HMAC || token == AuthMode.Basic) {
|
|
67
|
+
console.error("🦺 [OnPageEdit] Edit mode requested with developer tokens, falling back to URL parsing to determine content");
|
|
68
|
+
// Determine the contentPath
|
|
69
|
+
const fullPath = Array.isArray(path) ? path.map(p => decodeURIComponent(p)).join('/') : decodeURIComponent(path ?? '');
|
|
70
|
+
const [cmsPath, contentString] = fullPath.split(',,', 3);
|
|
71
|
+
const contentPath = (cmsPath.startsWith('/') ? cmsPath.substring(1) : cmsPath).replace(/^(ui\/){0,1}(CMS\/){0,1}(Content\/){0,1}/gi, "");
|
|
72
|
+
const [contentKey, contentVersion] = (contentString ?? '').split('_', 3);
|
|
73
|
+
const firstSlug = contentPath.split('/')[0];
|
|
74
|
+
const contentLocale = firstSlug?.length == 2 || firstSlug?.length == 5 ? firstSlug : lang;
|
|
75
|
+
return {
|
|
76
|
+
token,
|
|
77
|
+
ctx: searchParams.epieditmode?.toLowerCase() == 'true' ? 'edit' : 'preview',
|
|
78
|
+
key: contentKey,
|
|
79
|
+
version: contentVersion,
|
|
80
|
+
locale: contentLocale,
|
|
81
|
+
path: '/' + contentPath + (contentPath.endsWith('/') || contentPath == '' ? '' : '/')
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Finally parse the token, this is a last-restort, as it might change at any given time
|
|
85
|
+
const tokenInfo = JSON.parse(atob(token.split('.')[1]));
|
|
86
|
+
return {
|
|
87
|
+
token,
|
|
88
|
+
ctx: searchParams.epieditmode?.toLowerCase() == 'true' ? 'edit' : 'preview',
|
|
89
|
+
key: tokenInfo.key,
|
|
90
|
+
version: tokenInfo.ver,
|
|
91
|
+
locale: tokenInfo.loc,
|
|
92
|
+
path: null
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function readValue(variableName, defaultValue) {
|
|
100
|
+
try {
|
|
101
|
+
const stringValue = process?.env ? process.env[variableName] : undefined;
|
|
102
|
+
return stringValue || defaultValue;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return defaultValue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function readValueAsInt(variableName, defaultValue) {
|
|
109
|
+
const stringValue = readValue(variableName);
|
|
110
|
+
if (!stringValue)
|
|
111
|
+
return defaultValue;
|
|
112
|
+
try {
|
|
113
|
+
return parseInt(stringValue);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return defaultValue;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/ope/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/ope/types.d.ts
CHANGED
|
@@ -2,7 +2,11 @@ import { type ComponentType, type PropsWithChildren } from 'react';
|
|
|
2
2
|
import { type ClientFactory } from '@remkoj/optimizely-graph-client';
|
|
3
3
|
import { type GraphQLClient } from 'graphql-request';
|
|
4
4
|
import { type ContentQueryProps } from '@remkoj/optimizely-cms-react';
|
|
5
|
-
export
|
|
5
|
+
export type ContentRequest = (Omit<ContentQueryProps<string>, 'path'> & {
|
|
6
|
+
path: string | null;
|
|
7
|
+
token: string;
|
|
8
|
+
ctx: 'edit' | 'preview';
|
|
9
|
+
});
|
|
6
10
|
type ServerPageProps = {
|
|
7
11
|
params: Record<string, string | Array<string>>;
|
|
8
12
|
searchParams: Record<string, string>;
|
|
@@ -10,32 +14,45 @@ type ServerPageProps = {
|
|
|
10
14
|
export type EditPageComponent<T extends ServerPageProps = EditPageProps> = ({ params, searchParams }: T) => Promise<JSX.Element>;
|
|
11
15
|
export type EditPageProps = {
|
|
12
16
|
params: {
|
|
13
|
-
path
|
|
17
|
+
path?: string[] | string;
|
|
18
|
+
lang?: string;
|
|
14
19
|
};
|
|
15
|
-
searchParams:
|
|
16
|
-
epieditmode: string;
|
|
20
|
+
searchParams: {
|
|
17
21
|
preview_token: string;
|
|
18
|
-
|
|
22
|
+
key?: string;
|
|
23
|
+
ver?: string;
|
|
24
|
+
loc?: string;
|
|
25
|
+
ctx?: 'edit' | 'preview';
|
|
26
|
+
epieditmode?: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export type ValidatedEditPageProps = {
|
|
30
|
+
params: {
|
|
31
|
+
path?: string[] | string;
|
|
32
|
+
lang?: string;
|
|
33
|
+
};
|
|
34
|
+
searchParams: {
|
|
35
|
+
preview_token: string;
|
|
36
|
+
} & ({
|
|
37
|
+
key: string;
|
|
38
|
+
ver: string;
|
|
39
|
+
loc: string;
|
|
40
|
+
ctx: 'edit' | 'preview';
|
|
41
|
+
epieditmode: undefined;
|
|
42
|
+
} | {
|
|
43
|
+
key: undefined;
|
|
44
|
+
ver: undefined;
|
|
45
|
+
loc: undefined;
|
|
46
|
+
ctx: undefined;
|
|
47
|
+
epieditmode: 'true' | 'false';
|
|
48
|
+
});
|
|
19
49
|
};
|
|
20
50
|
export type EditViewOptions = {
|
|
21
|
-
/**
|
|
22
|
-
* The number of miliseconds to wait between receiving the 'dataSaved'
|
|
23
|
-
* event from the Optimizely CMS and actually refreshing the preview.
|
|
24
|
-
*/
|
|
25
|
-
refreshDelay: number;
|
|
26
51
|
/**
|
|
27
52
|
* The message to show to the editor when awaiting the data to be updated
|
|
28
53
|
* in ContentGraph
|
|
29
54
|
*/
|
|
30
55
|
refreshNotice: ComponentType<{}>;
|
|
31
|
-
/**
|
|
32
|
-
* The message to show to the editor when an error occured in rendering the
|
|
33
|
-
* on page editing mode
|
|
34
|
-
*/
|
|
35
|
-
errorNotice: ComponentType<{
|
|
36
|
-
title: string;
|
|
37
|
-
message: string;
|
|
38
|
-
}>;
|
|
39
56
|
/**
|
|
40
57
|
* The layout to use when rendering a page component
|
|
41
58
|
*/
|
|
@@ -78,3 +95,4 @@ export type GetContentByIdData<LocaleType = string> = {
|
|
|
78
95
|
};
|
|
79
96
|
};
|
|
80
97
|
export type GetContentByIdMethod = <LocaleType = string>(client: GraphQLClient, variables: ContentQueryProps<LocaleType>) => Promise<GetContentByIdData<LocaleType>>;
|
|
98
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remkoj/optimizely-cms-nextjs",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "2.0.0
|
|
4
|
+
"version": "2.0.0",
|
|
5
5
|
"packageManager": "yarn@4.1.1",
|
|
6
6
|
"repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
|
|
7
7
|
"author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
".": "./dist/index.js",
|
|
17
17
|
"./rsc": "./dist/client.js",
|
|
18
18
|
"./publish": "./dist/publish/index.js",
|
|
19
|
-
"./types": "./dist/types.js"
|
|
19
|
+
"./types": "./dist/types.js",
|
|
20
|
+
"./components": "./dist/components/shared/index.js"
|
|
20
21
|
},
|
|
21
22
|
"typesVersions": {
|
|
22
23
|
"*": {
|
|
@@ -28,40 +29,42 @@
|
|
|
28
29
|
],
|
|
29
30
|
"types": [
|
|
30
31
|
"dist/types.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"components": [
|
|
34
|
+
"dist/components/shared/index.js"
|
|
31
35
|
]
|
|
32
36
|
}
|
|
33
37
|
},
|
|
34
38
|
"devDependencies": {
|
|
35
|
-
"@remkoj/optimizely-cms-react": "2.0.0
|
|
36
|
-
"@remkoj/optimizely-graph-client": "2.0.0
|
|
37
|
-
"@types/node": "^20.
|
|
39
|
+
"@remkoj/optimizely-cms-react": "2.0.0",
|
|
40
|
+
"@remkoj/optimizely-graph-client": "2.0.0",
|
|
41
|
+
"@types/node": "^20.14.7",
|
|
38
42
|
"@types/react": "^18.3.3",
|
|
39
43
|
"@types/react-dom": "18.3.0",
|
|
40
|
-
"graphql": "^16.8.
|
|
44
|
+
"graphql": "^16.8.2",
|
|
41
45
|
"graphql-request": "^6.1.0",
|
|
42
|
-
"next": "^14.2.
|
|
46
|
+
"next": "^14.2.4",
|
|
43
47
|
"prop-types": "^15.8.1",
|
|
44
48
|
"react": "^18.3.1",
|
|
45
49
|
"react-dom": "^18.3.1",
|
|
46
50
|
"scheduler": "^0.23.2",
|
|
47
|
-
"typescript": "^5.
|
|
51
|
+
"typescript": "^5.5.2"
|
|
48
52
|
},
|
|
49
53
|
"dependencies": {
|
|
50
54
|
"deepmerge": "^4.3.1"
|
|
51
55
|
},
|
|
52
56
|
"peerDependencies": {
|
|
53
|
-
"@remkoj/optimizely-cms-react": "2.0.0
|
|
54
|
-
"@remkoj/optimizely-graph-client": "2.0.0
|
|
55
|
-
"graphql": "^16
|
|
56
|
-
"graphql-request": "^6
|
|
57
|
-
"next": "^14
|
|
58
|
-
"react": "^18
|
|
57
|
+
"@remkoj/optimizely-cms-react": "2.0.0",
|
|
58
|
+
"@remkoj/optimizely-graph-client": "2.0.0",
|
|
59
|
+
"graphql": "^16",
|
|
60
|
+
"graphql-request": "^6",
|
|
61
|
+
"next": "^14",
|
|
62
|
+
"react": "^18"
|
|
59
63
|
},
|
|
60
64
|
"scripts": {
|
|
61
65
|
"clean": "yarn tsc --build --clean",
|
|
62
66
|
"prepare": "yarn tsc --build",
|
|
63
67
|
"watch": "yarn tsc --watch",
|
|
64
68
|
"recompile": "yarn tsc --build --clean && yarn tsc --build --force"
|
|
65
|
-
}
|
|
66
|
-
"stableVersion": "1.0.4"
|
|
69
|
+
}
|
|
67
70
|
}
|