@remkoj/optimizely-cms-react 2.0.0-pre4 → 2.0.0-pre5

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.
@@ -0,0 +1,53 @@
1
+ export type StyleDefinition<TN extends string = string> = {
2
+ key: string;
3
+ displayName: string;
4
+ isDefault: boolean;
5
+ settings: Record<string, StyleSetting>;
6
+ } & (ElementStyleDefinition<TN> | BaseStyleDefinition<TN> | NodeStyleDefinition<TN>);
7
+ export type ElementStyleDefinition<TN extends string> = {
8
+ contentType: TN;
9
+ };
10
+ export type BaseStyleDefinition<TN extends string> = {
11
+ baseType: TN;
12
+ };
13
+ export type NodeStyleDefinition<TN extends string> = {
14
+ nodeType: TN;
15
+ };
16
+ export type StyleSetting = {
17
+ displayName: string;
18
+ sortOrder: number;
19
+ editor?: string;
20
+ choices: Record<string, {
21
+ displayName: string;
22
+ sortOrder: number;
23
+ }>;
24
+ };
25
+ export type LayoutProps<T extends StyleDefinition<string>> = {
26
+ type: T extends ElementStyleDefinition<infer TN> ? TN : (T extends BaseStyleDefinition<infer TN> ? TN : (T extends NodeStyleDefinition<infer TN> ? TN : null));
27
+ layoutType: string;
28
+ template: T['key'] | null;
29
+ settings: LayoutPropsSetting<T['settings']>[];
30
+ };
31
+ export type LayoutPropsSetting<T extends Record<string, StyleSetting>, K extends keyof T = keyof T> = LayoutPropsSettingChoices<T>[K];
32
+ export type LayoutPropsSettingChoices<T extends Record<string, StyleSetting>> = {
33
+ [K in keyof T]: {
34
+ key: K;
35
+ value: keyof T[K]['choices'];
36
+ };
37
+ };
38
+ export type LayoutPropsSettingKeys<CL extends LayoutProps<any>> = CL['settings'][number]['key'];
39
+ export type LayoutPropsSettingValues<CL extends LayoutProps<any>, K extends LayoutPropsSettingKeys<CL>> = Extract<CL['settings'][number], {
40
+ key: K;
41
+ }>['value'];
42
+ /**
43
+ * Read a configured layout setting from Style properties retrieved through Optimizely Graph
44
+ *
45
+ * @param from The Layout Settings as provided for Visual Builder rendered elements
46
+ * @param settingName The name of the setting to retrieve the value for
47
+ * @param defaultValue THe default value for when the setting is missing or not set
48
+ * @returns The setting value
49
+ */
50
+ export declare function readSetting<T extends LayoutProps<any>, F extends LayoutPropsSettingKeys<T>, DV extends LayoutPropsSettingValues<T, F> | undefined>(from: T | undefined, settingName: F, defaultValue?: DV): DV extends undefined ? (LayoutPropsSettingValues<T, F> | undefined) : Exclude<LayoutPropsSettingValues<T, F>, undefined>;
51
+ export declare function extractSettings<T extends LayoutProps<any>>(from: T | undefined): Partial<{
52
+ [K in LayoutPropsSettingKeys<T>]: LayoutPropsSettingValues<T, K>;
53
+ }>;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Read a configured layout setting from Style properties retrieved through Optimizely Graph
3
+ *
4
+ * @param from The Layout Settings as provided for Visual Builder rendered elements
5
+ * @param settingName The name of the setting to retrieve the value for
6
+ * @param defaultValue THe default value for when the setting is missing or not set
7
+ * @returns The setting value
8
+ */
9
+ export function readSetting(from, settingName, defaultValue) {
10
+ const rv = from?.settings?.filter(x => x.key == settingName)[0]?.value;
11
+ return (rv || defaultValue);
12
+ }
13
+ export function extractSettings(from) {
14
+ if (!from)
15
+ return {};
16
+ const extracted = {};
17
+ from?.settings?.map((itm) => {
18
+ extracted[itm.key] = itm.value;
19
+ });
20
+ return extracted;
21
+ }
22
+ //# sourceMappingURL=cms-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cms-styles.js","sourceRoot":"","sources":["../../src/components/cms-styles.tsx"],"names":[],"mappings":"AA0CA;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAIzB,IAAmB,EAAE,WAAc,EAAE,YAAiB;IAGpD,MAAM,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAA;IACtE,OAAO,CAAC,EAAE,IAAI,YAAY,CAAO,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAA6B,IAAmB;IAG3E,IAAI,CAAC,IAAI;QACL,OAAO,EAAQ,CAAA;IACnB,MAAM,SAAS,GAAiB,EAAE,CAAA;IAClC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACxB,SAAS,CAAC,GAAG,CAAC,GAAe,CAAC,GAAG,GAAG,CAAC,KAAqB,CAAA;IAC9D,CAAC,CAAC,CAAA;IACF,OAAO,SAAe,CAAA;AAC1B,CAAC"}
@@ -1 +1,2 @@
1
- export * from './rich-text/index.js';
1
+ export * from './rich-text.js';
2
+ export * from './cms-styles.js';
@@ -1,2 +1,3 @@
1
- export * from './rich-text/index.js';
1
+ export * from './rich-text.js';
2
+ export * from './cms-styles.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,72 @@
1
+ import { type ComponentFactory, type ComponentType, type ComponentTypeDictionary } from "@remkoj/optimizely-cms-react";
2
+ import { type FunctionComponent } from "react";
3
+ export type RichTextProps = {
4
+ /**
5
+ * The component factory used for this rich text content
6
+ */
7
+ factory?: ComponentFactory;
8
+ /**
9
+ * The rich text to render, provided as either a HTML string or JSON encoded
10
+ * structured data.
11
+ */
12
+ text: NodeInput | null | undefined;
13
+ /**
14
+ * The CSS Class to apply to the text container
15
+ */
16
+ className?: string;
17
+ /**
18
+ * Set the component type of the wrapper to use, defaults to a 'div'
19
+ * element when not defined
20
+ */
21
+ as?: ComponentType;
22
+ } & ({
23
+ /**
24
+ * The fieldname of this Rich Text, when it is used as part of a block
25
+ */
26
+ cmsFieldName?: never;
27
+ /**
28
+ * The Element ID if this is the sole output of a Visual Builder element
29
+ */
30
+ cmsId?: string | null;
31
+ } | {
32
+ /**
33
+ * The fieldname of this Rich Text, when it is used as part of a block
34
+ */
35
+ cmsFieldName?: string | null;
36
+ /**
37
+ * The Element ID if this is the sole output of a Visual Builder element
38
+ */
39
+ cmsId?: never;
40
+ });
41
+ export type Node = {};
42
+ export type TextNode = Node & {
43
+ text: string;
44
+ } & Record<string, string | number | boolean>;
45
+ export type RichTextNode = Node & {
46
+ type: "richText";
47
+ children: Array<Node>;
48
+ };
49
+ export type StringNode = Node & {
50
+ type: "string";
51
+ children: Array<Node>;
52
+ };
53
+ export type TypedNode = NodeWithChildren<Node & {
54
+ type: string;
55
+ } & Record<string, string | number | boolean>>;
56
+ export type NodeWithChildren<T extends Node> = T & {
57
+ children?: Array<Node>;
58
+ };
59
+ export type NodeInput = string | RichTextNode | StringNode;
60
+ export declare const Utils: {
61
+ isText(toTest: Node | null | undefined): toTest is TextNode;
62
+ isTypedNode(toTest: Node | null | undefined): toTest is TypedNode;
63
+ processNodeInput(input: NodeInput | null | undefined): RichTextNode | StringNode | undefined;
64
+ getRandomId(scope?: string): string;
65
+ };
66
+ export declare const RichText: FunctionComponent<RichTextProps>;
67
+ /**
68
+ * A default component dictionary that allows to serialize the structured HTML
69
+ * into React, using the component library shared across the react SDK.
70
+ */
71
+ export declare const DefaultComponents: ComponentTypeDictionary;
72
+ export default RichText;
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ //#endregion
3
+ //#region Utils & Supports
4
+ export const Utils = {
5
+ isText(toTest) {
6
+ return (typeof toTest == 'object' &&
7
+ toTest != null &&
8
+ (typeof toTest.text) == 'string' &&
9
+ toTest.text.length > 0);
10
+ },
11
+ isTypedNode(toTest) {
12
+ return (typeof toTest == 'object' &&
13
+ toTest != null &&
14
+ (typeof toTest.type) == 'string' &&
15
+ toTest.type.length > 0);
16
+ },
17
+ processNodeInput(input) {
18
+ if (!input)
19
+ return undefined;
20
+ const textObject = typeof input == "string" ? JSON.parse(input) : input;
21
+ if (textObject?.type != "richText" && textObject?.type != "string")
22
+ throw new Error('Structured rich text requires a "richText" root node');
23
+ return textObject;
24
+ },
25
+ getRandomId(scope = "richText") {
26
+ return `${scope}::${Math.round(Math.random() * 100000)}`;
27
+ }
28
+ };
29
+ //#endregion
30
+ export const RichText = ({ factory, text, className = 'rich-text', as: Wrapper = "div", ...props }) => {
31
+ const debug = process.env.NODE_ENV != 'production';
32
+ const id = Utils.getRandomId("rich-text");
33
+ try {
34
+ const data = Utils.processNodeInput(text);
35
+ return _jsx(Wrapper, { className: className, ...props, children: (data?.children || []).map((child, idx) => {
36
+ const elementId = id + '::' + idx;
37
+ return _jsx(RichTextElement, { factory: factory, node: child, idPrefix: elementId + '::' }, elementId);
38
+ }) });
39
+ }
40
+ catch {
41
+ if (debug)
42
+ console.warn('🟠 [Rich Text] Invalid rich text received: ', text);
43
+ return Object.getOwnPropertyNames(props).length > 0 ? _jsx("div", { className: className, ...props }) : null;
44
+ }
45
+ };
46
+ //#region Supportive React components
47
+ const RichTextElement = ({ factory, node, idPrefix }) => {
48
+ const debug = process.env.NODE_ENV != 'production';
49
+ if (Utils.isText(node)) {
50
+ const TextComponent = factory?.resolve(`RichText/text`) ?? DefaultTextNode;
51
+ return _jsx(TextComponent, { node: node });
52
+ }
53
+ if (!Utils.isTypedNode(node)) {
54
+ if (debug)
55
+ console.warn('🟠 [Rich Text] Invalid rich text element data received:', node);
56
+ return null;
57
+ }
58
+ const childData = node.children?.map((child, idx) => {
59
+ const elementId = idPrefix + idx;
60
+ return _jsx(RichTextElement, { factory: factory, node: child, idPrefix: elementId + '::' }, elementId);
61
+ });
62
+ if (!factory?.has(`RichText/${node.type}`)) {
63
+ console.warn('🟠 [Rich Text] No renderer for node type, falling back to "div":', `RichText/${node.type}`);
64
+ return _jsx("div", { children: childData });
65
+ }
66
+ const Component = factory?.resolve(`RichText/${node.type}`) ?? 'div';
67
+ return _jsx(Component, { node: node, children: childData });
68
+ };
69
+ const DefaultTextNode = ({ node }) => {
70
+ if (node.bold)
71
+ return _jsx("strong", { children: node.text });
72
+ const unsupportedProps = Object.getOwnPropertyNames(node).filter(x => x != 'text');
73
+ if (unsupportedProps.length > 0 && process.env.NODE_ENV != 'production')
74
+ console.warn('🟠 [Rich Text] Text node with unsupported additional properties:', unsupportedProps.join(', '));
75
+ return node.text?.replaceAll("&nbsp;", " ");
76
+ };
77
+ //#endregion
78
+ /**
79
+ * A default component dictionary that allows to serialize the structured HTML
80
+ * into React, using the component library shared across the react SDK.
81
+ */
82
+ export const DefaultComponents = [
83
+ { type: 'RichText/paragraph', component: ({ children, node, ...props }) => { return _jsx("p", { ...props, children: children }); } },
84
+ { type: 'RichText/text', component: DefaultTextNode }
85
+ ];
86
+ export default RichText;
87
+ //# sourceMappingURL=rich-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-text.js","sourceRoot":"","sources":["../../src/components/rich-text.tsx"],"names":[],"mappings":"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"}
package/dist/factory.js CHANGED
@@ -36,7 +36,7 @@ function processComponentTypeHandle(handle) {
36
36
  if (typeof (handle) == 'string')
37
37
  return handle == "" ? EmptyComponentHandle : handle;
38
38
  if (Array.isArray(handle) && handle.every(s => typeof (s) == 'string'))
39
- return handle.filter(s => s.toLowerCase() != 'content').map(s => s == "" ? EmptyComponentHandle : s).join(MERGE_SYMBOL);
39
+ return handle.map(s => s.startsWith("_") ? s.substring(1) : s).filter(s => s.toLowerCase() != 'content').map(s => s == "" ? EmptyComponentHandle : s).join(MERGE_SYMBOL);
40
40
  throw new Error(`Invalid component type handle: ${typeof (handle)}`);
41
41
  }
42
42
  const _static = {};
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,MAAM,YAAY,GAAG,GAAG,CAAA;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAI,cAAc,CAAA;AAEnD;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAIhC;QAHQ,aAAQ,GAA2C,EAAE,CAAA;QAKzD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAA;IAClD,CAAC;IAED,QAAQ,CAAC,IAAyB,EAAE,SAAwB;QAExD,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,sCAAuC,IAAK,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IACnC,CAAC;IAED,WAAW,CAAC,UAAmC;QAE3C,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED,GAAG,CAAC,IAAyB;QAEzB,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,6CAA8C,IAAK,EAAE,CAAC,CAAA;QAChF,OAAO,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACnE,CAAC;IAED,OAAO,CAAC,IAAyB;QAE7B,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,yCAA0C,IAAK,EAAE,CAAC,CAAA;QAC5E,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,SAAS,CAAA;IACpB,CAAC;CACJ;AAED,SAAS,0BAA0B,CAAC,MAA2B;IAE3D,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ;QAC1B,OAAO,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAA;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACjE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3H,MAAM,IAAI,KAAK,CAAC,kCAAmC,OAAM,CAAC,MAAM,CAAE,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,OAAO,GAAqC,EAAE,CAAA;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAA4B,GAAG,EAAE;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAA;IAC/C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;QAC3E,OAAO,CAAC,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAA;IACnD,CAAC;SAAM,CAAC;QACJ,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAA;AAC1B,CAAC,CAAA;AACD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAA4C,CAAC,UAA4B,EAAE,EAAE;IAChG,OAAO,CAAC,OAAO,GAAG,UAAU,CAAA;AAChC,CAAC,CAAA;AACD,eAAe,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import 'server-only';
2
+ import { type ComponentProps, type ComponentType as ReactComponentType, type ExoticComponent as ReactExoticComponent } from 'react';
3
+ export type EditableComponentType = (ReactComponentType<any>) | (ReactExoticComponent<any>) | (keyof JSX.IntrinsicElements);
4
+ export type EditableComponentProps<FT extends EditableComponentType> = FT extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[FT] : ComponentProps<FT>;
5
+ export type CmsEditableProps<FT extends EditableComponentType> = {
6
+ as?: FT;
7
+ } & ({
8
+ cmsId?: string | null;
9
+ cmsFieldName?: never;
10
+ } | {
11
+ cmsId?: never;
12
+ cmsFieldName?: string | null;
13
+ }) & EditableComponentProps<FT>;
14
+ /**
15
+ * Server side wrapper to create HTML elements that include the needed
16
+ * data-epi- properties to render the edit mode markers
17
+ *
18
+ * @param param0 The HTML element with the simple properties
19
+ * @returns
20
+ */
21
+ export declare const CmsEditable: <CT extends EditableComponentType = "div">({ as: DefaultElement, cmsId, cmsFieldName, children, key, ...props }: CmsEditableProps<CT>) => import("react/jsx-runtime").JSX.Element;
22
+ export default CmsEditable;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import 'server-only';
3
+ import { getServerContext } from '@remkoj/optimizely-cms-react/rsc';
4
+ /**
5
+ * Server side wrapper to create HTML elements that include the needed
6
+ * data-epi- properties to render the edit mode markers
7
+ *
8
+ * @param param0 The HTML element with the simple properties
9
+ * @returns
10
+ */
11
+ //@ts-expect-error TypeScript just doesn't understand....
12
+ export const CmsEditable = ({ as: DefaultElement, cmsId, cmsFieldName, children, key, ...props }) => {
13
+ const HtmlElement = DefaultElement ?? 'div';
14
+ const { inEditMode } = getServerContext();
15
+ return _jsx(HtmlElement, { ...props, "data-epi-block-id": inEditMode ? cmsId ?? undefined : undefined, "data-epi-property-name": inEditMode ? cmsFieldName ?? undefined : undefined, children: children });
16
+ };
17
+ export default CmsEditable;
18
+ //# sourceMappingURL=cms-editable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cms-editable.js","sourceRoot":"","sources":["../../../src/server/components/cms-editable.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAenE;;;;;;GAMG;AACH,yDAAyD;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,CAA2C,EAAE,EAAE,EAAG,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,EAAwB,EAAE,EAAE;IAEjK,MAAM,WAAW,GAAG,cAAc,IAAI,KAAW,CAAA;IACjD,MAAM,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAA;IACzC,OAAO,KAAC,WAAW,OAAK,KAAK,uBAAsB,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,4BAA4B,UAAU,CAAC,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,YAAK,QAAQ,GAAgB,CAAA;AAC7M,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -22,33 +22,28 @@ export async function getContentType(link, gqlClient) {
22
22
  const items = gqlResponse.Content?.items;
23
23
  if (!items || items.length == 0)
24
24
  throw new Error("The content item could not be found!");
25
- const contentType = Utils.normalizeContentType(items[0]?.ContentType);
25
+ const contentType = Utils.normalizeContentType(items[0]?._metadata?.types);
26
26
  if (!contentType)
27
27
  throw new Error("The item did not contain type information");
28
28
  return contentType;
29
29
  }
30
30
  export default getContentType;
31
- export const getContentTypeQuery = gql `query getContentType($id: Int, $workId: Int, $guidValue: String, $locale: [Locales])
31
+ export const getContentTypeQuery = gql `query getContentType($key: String!, $version: String, $locale: [Locales])
32
32
  {
33
- Content(
33
+ _Content(
34
34
  where: {
35
- ContentLink: {
36
- GuidValue: {
37
- eq: $guidValue
38
- }
39
- Id: {
40
- eq: $id
41
- },
42
- WorkId: {
43
- eq: $workId
44
- }
35
+ _metadata: {
36
+ key: { eq: $key }
37
+ version: { eq: $version }
45
38
  }
46
39
  },
47
40
  locale: $locale
48
41
  limit: 1
49
42
  ) {
50
43
  items {
51
- ContentType
44
+ _metadata {
45
+ types
46
+ }
52
47
  },
53
48
  total
54
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-content-type.js","sourceRoot":"","sources":["../../../src/server/components/get-content-type.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAErE,MAAM,KAAK,GAAG,KAAK,CAAA;AAEnB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA2B,EAAE,SAA2B;IAEzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;IACvF,MAAM,YAAY,GAAG,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAO,CAAyB,mBAAmB,EAAE,YAAY,CAAC,CAAA;IACtG,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAClC,IAAI,KAAK;YACL,OAAO,CAAC,KAAK,CAAC,uDAAwD,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAE,YAAY,EAAE,YAAY,CAAC,CAAA;QACrI,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAA;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IACrE,IAAI,CAAC,WAAW;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAEhE,OAAO,WAAW,CAAA;AACtB,CAAC;AAED,eAAe,cAAc,CAAA;AAW7B,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;EAwBpC,CAAA"}
1
+ {"version":3,"file":"get-content-type.js","sourceRoot":"","sources":["../../../src/server/components/get-content-type.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAErE,MAAM,KAAK,GAAG,KAAK,CAAA;AAEnB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA2B,EAAE,SAA2B;IAEzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;IACvF,MAAM,YAAY,GAAG,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAO,CAAyB,mBAAmB,EAAE,YAAY,CAAC,CAAA;IACtG,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAClC,IAAI,KAAK;YACL,OAAO,CAAC,KAAK,CAAC,uDAAwD,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAE,YAAY,EAAE,YAAY,CAAC,CAAA;QACrI,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAA;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAC1E,IAAI,CAAC,WAAW;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAEhE,OAAO,WAAW,CAAA;AACtB,CAAC;AAED,eAAe,cAAc,CAAA;AAa7B,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;EAmBpC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './cms-content.js';
2
2
  export * from './cms-content-area.js';
3
+ export * from './cms-editable.js';
3
4
  export * from './visual-builder/index.js';
@@ -1,4 +1,5 @@
1
1
  export * from './cms-content.js';
2
2
  export * from './cms-content-area.js';
3
+ export * from './cms-editable.js';
3
4
  export * from './visual-builder/index.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA"}
@@ -54,8 +54,10 @@ export async function OptimizelyComposition({ node, leafPropsFactory = defaultPr
54
54
  const { factory, isDebug } = getServerContext();
55
55
  if (!factory)
56
56
  throw new Error("OptimizelyComposition requires the factory be defined within the serverContext");
57
- const children = await Promise.all((node.nodes ?? []).map((child, idx) => {
58
- const childKey = `vb::node::${child.key}::${child.name}`;
57
+ const children = await Promise.all((node.nodes ?? []).map((child) => {
58
+ const childKey = child.key ? child.key : `vb::${JSON.stringify(child)}`;
59
+ if (isDebug)
60
+ console.log(`⚪ [VisualBuilder] Generated child key: ${childKey}`);
59
61
  return OptimizelyComposition({
60
62
  key: childKey,
61
63
  node: child,
@@ -1 +1 @@
1
- {"version":3,"file":"Composition.js","sourceRoot":"","sources":["../../../../src/server/components/visual-builder/Composition.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Composition.js","sourceRoot":"","sources":["../../../../src/server/components/visual-builder/Composition.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAyB,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAE3G,OAAO,gBAAgB,MAAM,kBAAkB,CAAA;AAE/C,SAAS,aAAa,CAAC,MAAW;IAE9B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,mBAAmB,GAAsB,CAA8C,IAAgC,EAAE,EAAE;IAC7H,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAA;IAClD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IAEzE,MAAM,WAAW,GAAwC;QACrD,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,SAAS;QAC1D,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;QACzC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM;KAC1C,CAAA;IACD,IAAI,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IAEzE,MAAM,UAAU,GAAG;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KAC1B,CAAA;IAED,OAAO,CAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAE,CAAA;AACjE,CAAC,CAAA;AAED,SAAS,OAAO,CAAC,KAAa;IAE1B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,uBAAuB,GAAsB,CAA8C,IAA8B,EAAE,EAAE;IAC/H,MAAM,cAAc,GAAG;QACnB,CAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAa;QACpI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAa,CAAC,CAAC,CAAC,IAAI;QAC3J,CAAC,MAAM,EAAC,WAAW,EAAC,SAAS,CAAC;KACjC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAyB,CAAA;IACxC,MAAM,WAAW,GAA+B,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAA;IACvE,MAAM,aAAa,GAAQ,EAAQ,CAAA;IACnC,MAAM,UAAU,GAAG;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KAC1B,CAAA;IAED,IAAI,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IAEzE,OAAO,CAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,CAAE,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,gBAAgB,GAAG,uBAAuB,EAA6B;IAE/J,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,CAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACtF,OAAO,UAAU,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAA;IAC/C,IAAI,CAAC,OAAO;QACR,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;IAErG,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAG,EAAE;QAEjE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAQ,IAAI,CAAC,SAAS,CAAE,KAAK,CAAE,EAAE,CAAA;QAC1E,IAAI,OAAO;YACP,OAAO,CAAC,GAAG,CAAC,0CAA2C,QAAS,EAAE,CAAC,CAAA;QACvE,OAAO,qBAAqB,CAAC;YACzB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,KAAK;YACX,gBAAgB;YAChB,gBAAgB;SACnB,CAAC,CAAA;IACN,CAAC,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACvF,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,CAAC,OAAO,IAAI,OAAO;YACnB,OAAO,CAAC,GAAG,CAAC,mCAAoC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAE,2BAA2B,CAAC,CAAA;QACnG,OAAO,OAAO,CAAA;IAClB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,MAAM,WAAW,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAA;IACnD,IAAI,CAAC,WAAW;QACZ,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;IAEtG,OAAO,UAAU,CAAC;QACd,WAAW;QACX,WAAW;QACX,YAAY;QACZ,QAAQ;QACR,WAAW;KACd,CAAC,CAAA;AACN,CAAC;AAED,eAAe,qBAAqB,CAAA"}
package/dist/types.d.ts CHANGED
@@ -5,7 +5,7 @@ import type { IOptiGraphClient } from "@remkoj/optimizely-graph-client";
5
5
  import type { ContentLink, ContentLinkWithLocale, InlineContentLinkWithLocale } from "@remkoj/optimizely-graph-client";
6
6
  export type ContentType = string[];
7
7
  export type { ContentLink, ContentLinkWithLocale } from "@remkoj/optimizely-graph-client";
8
- export type CmsComponentProps<T> = PropsWithChildren<{
8
+ export type CmsComponentProps<T, L extends Record<string, any> = Record<string, any>> = PropsWithChildren<{
9
9
  /**
10
10
  * The identifier of the content item
11
11
  */
@@ -21,7 +21,7 @@ export type CmsComponentProps<T> = PropsWithChildren<{
21
21
  /**
22
22
  * Contextual layout data, if any
23
23
  */
24
- layoutProps?: Record<string, any>;
24
+ layoutProps?: L;
25
25
  }>;
26
26
  export type ContentQueryProps<LocaleType = string> = ContentLink & {
27
27
  locale?: Array<LocaleType> | LocaleType | null;
@@ -43,17 +43,17 @@ export type WithGqlFragment<BaseComponent, DataType> = BaseComponent & {
43
43
  export type WithGqlQuery<B, T> = B & {
44
44
  getDataQuery: GetDataQuery<T>;
45
45
  };
46
- export type BaseCmsComponent<T = {}> = T extends never | TypedDocumentNode | DocumentNode ? DynamicCmsComponent<T> : ReactComponentType<CmsComponentProps<T>>;
47
- export type DynamicCmsComponent<T extends TypedDocumentNode | DocumentNode = DocumentNode> = ReactComponentType<CmsComponentProps<ResponseDataType<T>>>;
46
+ export type BaseCmsComponent<T = {}, L extends Record<string, any> = Record<string, any>> = T extends never | TypedDocumentNode | DocumentNode ? DynamicCmsComponent<T> : ReactComponentType<CmsComponentProps<T, L>>;
47
+ export type DynamicCmsComponent<T extends TypedDocumentNode | DocumentNode = DocumentNode, L extends Record<string, any> = Record<string, any>> = ReactComponentType<CmsComponentProps<ResponseDataType<T>, L>>;
48
48
  export type GraphQLFragmentBase = {
49
49
  ' $fragmentName'?: string;
50
50
  };
51
51
  export type GraphQLQueryBase = {
52
52
  __typename?: 'Query';
53
53
  };
54
- export type CmsComponentWithFragment<T = DocumentNode> = BaseCmsComponent<T> & WithGqlFragment<{}, T>;
55
- export type CmsComponentWithQuery<T = DocumentNode> = BaseCmsComponent<T> & WithGqlQuery<{}, T>;
56
- export type CmsComponentWithOptionalQuery<T = DocumentNode> = BaseCmsComponent<T> & Partial<WithGqlQuery<{}, T>>;
54
+ export type CmsComponentWithFragment<T = DocumentNode, L extends Record<string, any> = Record<string, any>> = BaseCmsComponent<T, L> & WithGqlFragment<{}, T>;
55
+ export type CmsComponentWithQuery<T = DocumentNode, L extends Record<string, any> = Record<string, any>> = BaseCmsComponent<T, L> & WithGqlQuery<{}, T>;
56
+ export type CmsComponentWithOptionalQuery<T = DocumentNode, L extends Record<string, any> = Record<string, any>> = BaseCmsComponent<T, L> & Partial<WithGqlQuery<{}, T>>;
57
57
  /**
58
58
  * A generic Optimizely CMS Component that will change the static surface based upon the
59
59
  * provided data type for the component. It will detect automatically whether the component
@@ -63,10 +63,10 @@ export type CmsComponentWithOptionalQuery<T = DocumentNode> = BaseCmsComponent<T
63
63
  * When a type is provided that cannot be resolved to either the output of a Query or a Fragment,
64
64
  * it will assume an optional getDataQuery method.
65
65
  */
66
- export type CmsComponent<T = DocumentNode> = T extends TypedDocumentNode<infer R, any> ? CmsComponentWithQuery<R> : T extends DocumentNode ? CmsComponentWithQuery<{
66
+ export type CmsComponent<T = DocumentNode, L extends Record<string, any> = Record<string, any>> = T extends TypedDocumentNode<infer R, any> ? CmsComponentWithQuery<R, L> : T extends DocumentNode ? CmsComponentWithQuery<{
67
67
  [key: string]: any;
68
- }> : T extends GraphQLFragmentBase ? CmsComponentWithFragment<T> : T extends GraphQLQueryBase ? CmsComponentWithQuery<T> : CmsComponentWithOptionalQuery<T>;
69
- export type CmsLayoutComponent<T = never> = ReactComponentType<CmsComponentProps<T>>;
68
+ }, L> : T extends GraphQLFragmentBase ? CmsComponentWithFragment<T, L> : T extends GraphQLQueryBase ? CmsComponentWithQuery<T, L> : CmsComponentWithOptionalQuery<T, L>;
69
+ export type CmsLayoutComponent<L extends Record<string, any> = Record<string, any>, T = never> = ReactComponentType<CmsComponentProps<T, L>>;
70
70
  export type ComponentType = (ReactComponentType<any>) | (ReactExoticComponent<any>) | (keyof JSX.IntrinsicElements);
71
71
  export type ComponentTypeHandle = string | string[];
72
72
  export type ComponentTypeDictionary = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remkoj/optimizely-cms-react",
3
3
  "license": "Apache-2.0",
4
- "version": "2.0.0-pre4",
4
+ "version": "2.0.0-pre5",
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>",
@@ -40,9 +40,9 @@
40
40
  }
41
41
  },
42
42
  "devDependencies": {
43
- "@remkoj/optimizely-graph-client": "2.0.0-pre4",
43
+ "@remkoj/optimizely-graph-client": "2.0.0-pre5",
44
44
  "@types/crypto-js": "^4.2.2",
45
- "@types/node": "^20.12.12",
45
+ "@types/node": "^20.14.2",
46
46
  "@types/react": "^18.3.3",
47
47
  "@types/react-dom": "18.3.0",
48
48
  "graphql": "^16.8.1",
@@ -58,7 +58,7 @@
58
58
  "crypto-js": "^4.2.0"
59
59
  },
60
60
  "peerDependencies": {
61
- "@remkoj/optimizely-graph-client": "2.0.0-pre4",
61
+ "@remkoj/optimizely-graph-client": "2.0.0-pre5",
62
62
  "graphql": "^16.8.1",
63
63
  "graphql-request": "^6.1.0",
64
64
  "react": "*",
@@ -1,32 +0,0 @@
1
- /// <reference types="react" />
2
- import { type ComponentFactory } from "../../types.js";
3
- export type RichTextProps = {
4
- /**
5
- * The component factory used for this rich text content
6
- */
7
- factory: ComponentFactory;
8
- /**
9
- * The rich text to render, provided as either a HTML string or JSON encoded
10
- * structured data.
11
- */
12
- text: string | null | undefined;
13
- /**
14
- * The value for the "data-epi-edit" marker on the top level element
15
- */
16
- editId?: string | null;
17
- /**
18
- * The CSS Class to apply to the text container
19
- */
20
- className?: string;
21
- };
22
- export type RichTextTextNode = {
23
- text: string;
24
- };
25
- export type RichTextData = {
26
- type: string;
27
- children?: Array<RichTextData | RichTextTextNode>;
28
- };
29
- export declare function isRichTextData(toTest: any): toTest is RichTextData;
30
- export declare function isRichTextText(toTest: any): toTest is RichTextTextNode;
31
- export declare const RichText: (props: RichTextProps) => JSX.Element;
32
- export default RichText;
@@ -1,43 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- export function isRichTextData(toTest) {
3
- if (typeof (toTest) != 'object' || toTest == null)
4
- return false;
5
- return typeof toTest.type == 'string' && toTest.type.length > 0;
6
- }
7
- export function isRichTextText(toTest) {
8
- if (typeof (toTest) != 'object' || toTest == null)
9
- return false;
10
- return typeof toTest.text == 'string' && toTest.text.length > 0;
11
- }
12
- export const RichText = ({ factory, text, editId, className }) => {
13
- const debug = process.env.NODE_ENV != 'production';
14
- let data = undefined;
15
- try {
16
- data = JSON.parse(text ?? 'undefined');
17
- }
18
- catch (e) { /* Ignore any error as we'll fall-back to HTML injection */ }
19
- if (!data)
20
- return _jsx("div", { dangerouslySetInnerHTML: { __html: text ?? '' }, className: className, "data-epi-edit": editId });
21
- if (!isRichTextData(data)) {
22
- if (debug)
23
- console.warn(`[Rich Text] Invalid rich text data received: ${text}`);
24
- return _jsx("div", { className: className, "data-epi-edit": editId });
25
- }
26
- return _jsx("div", { className: className, "data-epi-edit": editId, children: _jsx(RichTextElement, { factory: factory, ...data }) });
27
- };
28
- const RichTextElement = ({ type, children, text, factory, ...props }) => {
29
- const debug = process.env.NODE_ENV != 'production';
30
- if (!type && text)
31
- return _jsx(_Fragment, { children: text });
32
- if (!type) {
33
- if (debug)
34
- console.warn(`[Rich Text] Invalid rich text element data received: ${{ type, children, text, ...props }}`);
35
- return _jsx(_Fragment, {});
36
- }
37
- const DivElement = 'div';
38
- const Component = factory.resolve(type) ?? DivElement;
39
- const uid = Math.round(Math.random() * 10000);
40
- return _jsx(Component, { ...props, children: children?.map(child => _jsx(RichTextElement, { factory: factory, ...child }, `${uid}::${child.type ?? 'text'}`)) });
41
- };
42
- export default RichText;
43
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/rich-text/index.tsx"],"names":[],"mappings":";AAiCA,MAAM,UAAU,cAAc,CAAC,MAAW;IAEtC,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAChB,OAAO,OAAQ,MAAuB,CAAC,IAAI,IAAI,QAAQ,IAAK,MAAuB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACvG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAW;IAEtC,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI;QAC5C,OAAO,KAAK,CAAA;IAChB,OAAO,OAAQ,MAA2B,CAAC,IAAI,IAAI,QAAQ,IAAK,MAA2B,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AAC/G,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAA2C,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IAErG,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAA;IAClD,IAAI,IAAI,GAA8B,SAAS,CAAA;IAC/C,IAAI,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,CAAA;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAC,2DAA2D,CAAA,CAAC;IAE1E,IAAI,CAAC,IAAI;QACL,OAAO,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,SAAS,EAAG,SAAS,mBAAmB,MAAM,GAAS,CAAA;IAExH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,gDAAiD,IAAK,EAAE,CAAC,CAAA;QACjF,OAAO,cAAK,SAAS,EAAG,SAAS,mBAAmB,MAAM,GAAS,CAAA;IACvE,CAAC;IAED,OAAO,cAAK,SAAS,EAAG,SAAS,mBAAmB,MAAM,YAAG,KAAC,eAAe,IAAC,OAAO,EAAG,OAAO,KAAQ,IAAI,GAAK,GAAM,CAAA;AAC1H,CAAC,CAAA;AAED,MAAM,eAAe,GAA+G,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAEhL,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAA;IAClD,IAAI,CAAC,IAAI,IAAI,IAAI;QACb,OAAO,4BAAI,IAAI,GAAK,CAAA;IAExB,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,wDAAyD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,EAAG,EAAE,CAAC,CAAA;QACnH,OAAO,mBAAK,CAAA;IACpB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAA;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAA;IAC7C,OAAO,KAAC,SAAS,OAAM,KAAK,YACtB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAC,eAAe,IAA8D,OAAO,EAAG,OAAO,KAAO,KAAK,IAApF,GAAG,GAAG,KAAO,KAAsB,CAAC,IAAI,IAAI,MAAO,EAAE,CAAmC,CAAC,GACjI,CAAA;AAChB,CAAC,CAAA;AAED,eAAe,QAAQ,CAAA"}
@@ -1,10 +0,0 @@
1
- import type { ContentType, ContentLinkWithLocale } from "../../types";
2
- import type { IOptiGraphClient } from "@remkoj/optimizely-graph-client";
3
- /**
4
- * Resolve the ContentType of an Optimizely CMS Component, identified by its content link
5
- *
6
- * @param link The ContentLink of the content item
7
- * @param gqlClient The GraphQL client to use
8
- * @returns The ContentType, or undefined if it cannot be resolved
9
- */
10
- export declare function getContentType(link: ContentLinkWithLocale, gqlClient: IOptiGraphClient): Promise<ContentType | undefined>;
@@ -1,28 +0,0 @@
1
- import * as Utils from "../../utilities";
2
- import * as Queries from "./queries";
3
- const DEBUG = false;
4
- /**
5
- * Resolve the ContentType of an Optimizely CMS Component, identified by its content link
6
- *
7
- * @param link The ContentLink of the content item
8
- * @param gqlClient The GraphQL client to use
9
- * @returns The ContentType, or undefined if it cannot be resolved
10
- */
11
- export async function getContentType(link, gqlClient) {
12
- if ((!link.id || link.id < 1) && (!link.guidValue || link.guidValue == ""))
13
- throw new Error("Cannot dynamically determine the content type of an inline block");
14
- const gqlQueryVars = Utils.contentLinkToRequestVariables(link);
15
- const gqlResponse = await gqlClient.request(Queries.getContentTypeQuery, gqlQueryVars);
16
- if (gqlResponse.Content?.total != 1) {
17
- if (DEBUG)
18
- console.error(`getContentType: Expected exactly one type, received ${gqlResponse.Content?.total ?? 0} types for`, gqlQueryVars);
19
- return undefined;
20
- }
21
- const items = gqlResponse.Content?.items;
22
- if (!items || items.length == 0)
23
- throw new Error("The content item could not be found!");
24
- const contentType = Utils.normalizeContentType(items[0]?.ContentType);
25
- if (!contentType)
26
- throw new Error("The item did not contain type information");
27
- return contentType;
28
- }