@sitecore-feaas/clientside 0.3.11-alpha.0 → 0.3.11-alpha.1

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.
@@ -124,7 +124,7 @@ export default class FEAASExternal extends FEAASElement<FEAASExternalProps, Reac
124
124
  update() {
125
125
  const { dataExternalId: id } = this.props
126
126
  const Component = FEAASExternal.registered[id]?.component
127
- if (!Component && this.childNodes.length > 0) return
127
+ if (!Component && this.getAttribute('hydrate') == 'false') return
128
128
  return super.update()
129
129
  }
130
130
 
@@ -132,7 +132,7 @@ export default class FEAASExternal extends FEAASElement<FEAASExternalProps, Reac
132
132
  const { dataExternalId: id } = props
133
133
  const Component = FEAASExternal.registered[id]?.component
134
134
  if (!Component) {
135
- console.warn('FEAASExternal: The component you requested is not registered')
135
+ console.warn(`FEAASExternal: \`${id}\` is not registered`)
136
136
  }
137
137
  return <>{Component && <Component {...props} />}</>
138
138
  }
@@ -278,6 +278,10 @@ declare global {
278
278
  dangerouslySetInnerHTML?: { __html: string }
279
279
  [key: string]: any
280
280
  }
281
+ 'feaas-registration': {
282
+ suppressHydrationWarning?: boolean
283
+ components: string
284
+ }
281
285
  }
282
286
  }
283
287
  }
package/src/ui/react.tsx CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  import React from 'react'
11
11
  import { renderHTMLContent, HTMLNode, parseHTMLContent } from '../dom/html.js'
12
12
  import { DataSettings } from '../utils/settings.js'
13
- import { FEAASExternalPropsObject, getComponent, objectKeysToKebabCase } from './FEAASExternal.js'
13
+ import { External, FEAASExternalPropsObject, getComponent, objectKeysToKebabCase } from './FEAASExternal.js'
14
14
  import { reverseKebabCase } from '../utils/string.js'
15
15
  export { renderHTMLContent }
16
16
  export { External, linkComponents, registerComponent, getComponent, FEAASExternalPropsObject } from './FEAASExternal.js'
@@ -58,7 +58,7 @@ export function FEAASReactComponent({ data, ...props }: FEAASReactComponentProps
58
58
  const key = prop == 'data-external-id' ? 'componentName' : reverseKebabCase(prop)
59
59
  camelized[key] = attributes[prop]
60
60
  }
61
- return [NextDynamicFunction ? FEAASNextExternalComponent : FEAASReactExternalComponent, camelized]
61
+ return [FEAASExternalComponent, camelized]
62
62
  }
63
63
  },
64
64
  index
@@ -94,7 +94,12 @@ export function FEAASReactComponent({ data, ...props }: FEAASReactComponentProps
94
94
  export function FEAASReactExternalComponent(props: FEAASReactExternalComponentProps) {
95
95
  const { componentName, fallback, ...attributes } = props
96
96
  const Component = getComponent(componentName)?.component
97
- if (!Component && fallback) return fallback
97
+ if ((!Component && fallback) || !componentName)
98
+ return (
99
+ <feaas-external data-external-id={componentName} suppressHydrationWarning hydrate={'false'}>
100
+ {fallback}
101
+ </feaas-external>
102
+ )
98
103
  const parsed = FEAASExternalPropsObject(componentName, attributes)
99
104
  delete parsed['suppressHydrationWarning']
100
105
  // execute component as a function to supress hydration errors inside
@@ -104,7 +109,7 @@ export function FEAASReactExternalComponent(props: FEAASReactExternalComponentPr
104
109
  {...objectKeysToKebabCase(parsed)}
105
110
  data-external-id={componentName}
106
111
  suppressHydrationWarning
107
- hydrate={Component ? 'false' : null}
112
+ hydrate={'false'}
108
113
  >
109
114
  {Component == null ? null : <Component {...parsed} />}
110
115
  </feaas-external>
@@ -176,7 +181,19 @@ export function enableNextClientsideComponents(dynamic: any, component: any) {
176
181
  return component
177
182
  }
178
183
 
179
- export const ExternalComponent = FEAASReactExternalComponent
184
+ export function FEAASExternalComponent(props: FEAASReactExternalComponentProps) {
185
+ if (Object.keys(props).length == 0) {
186
+ // Serializing server-side registrations to clientside
187
+ return (
188
+ <feaas-registration components={JSON.stringify(Object.values(External.registered))} suppressHydrationWarning />
189
+ )
190
+ }
191
+ if (NextDynamicFunction) return FEAASNextExternalComponent(props)
192
+ return FEAASReactExternalComponent(props)
193
+ }
194
+
195
+ export const ExternalComponent = FEAASExternalComponent
196
+ export const ReactExternalComponent = FEAASReactExternalComponent
180
197
  export const NextExternalComponent = FEAASNextExternalComponent
181
198
  export const Component = FEAASReactComponent
182
199
  export const ServerComponent = FEAASReactServerComponent
@@ -101,6 +101,10 @@ declare global {
101
101
  };
102
102
  [key: string]: any;
103
103
  };
104
+ 'feaas-registration': {
105
+ suppressHydrationWarning?: boolean;
106
+ components: string;
107
+ };
104
108
  }
105
109
  }
106
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FEAASExternal.d.ts","sourceRoot":"","sources":["../../src/ui/FEAASExternal.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAE3E,OAAO,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAA;AAiB5G,oDAAoD;AACpD,eAAO,MAAM,qBAAqB;;;;CAI1B,CAAA;AAoCR,yGAAyG;AACzG,eAAO,MAAM,UAAU,aAAc,MAAM,SAAS,MAAM,cAAc,UAAU,CAAC,YAAY,CAAC,QAyB/F,CAAA;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,GAAG,CAK7D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAUvF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAChC,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnG,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC;IACvF,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAK;IAC5C,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAA;IAC3C,IAAI;;;;IAIJ,MAAM;IAON,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,YAAY,GAAG,QAAQ;IASpE,QAAQ;IAIR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkDG;IACH,MAAM,CAAC,iBAAiB,CACtB,SAAS,EAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAClF,OAAO,EAAE,wBAAwB;IAsBnC,MAAM,CAAC,uBAAuB;IAsC9B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAMzE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG;IAI5D,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM;CAG/B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,MAAM,CAAA;gBAC1B,QAAQ,CAAC,EAAE,GAAG,CAAA;gBACd,uBAAuB,CAAC,EAAE;oBAAE,MAAM,EAAE,MAAM,CAAA;iBAAE,CAAA;gBAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;aACnB,CAAA;SACF;KACF;CACF;AAKD,eAAO,MAAQ,YAAY,qCAAE,cAAc,uCAAE,iBAAiB,wCAAkB,CAAA;AAChF,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"FEAASExternal.d.ts","sourceRoot":"","sources":["../../src/ui/FEAASExternal.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAE3E,OAAO,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAA;AAiB5G,oDAAoD;AACpD,eAAO,MAAM,qBAAqB;;;;CAI1B,CAAA;AAoCR,yGAAyG;AACzG,eAAO,MAAM,UAAU,aAAc,MAAM,SAAS,MAAM,cAAc,UAAU,CAAC,YAAY,CAAC,QAyB/F,CAAA;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,GAAG,CAK7D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAUvF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAChC,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnG,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC;IACvF,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAK;IAC5C,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAA;IAC3C,IAAI;;;;IAIJ,MAAM;IAON,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,YAAY,GAAG,QAAQ;IASpE,QAAQ;IAIR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkDG;IACH,MAAM,CAAC,iBAAiB,CACtB,SAAS,EAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAClF,OAAO,EAAE,wBAAwB;IAsBnC,MAAM,CAAC,uBAAuB;IAsC9B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAMzE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG;IAI5D,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM;CAG/B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,MAAM,CAAA;gBAC1B,QAAQ,CAAC,EAAE,GAAG,CAAA;gBACd,uBAAuB,CAAC,EAAE;oBAAE,MAAM,EAAE,MAAM,CAAA;iBAAE,CAAA;gBAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;aACnB,CAAA;YACD,oBAAoB,EAAE;gBACpB,wBAAwB,CAAC,EAAE,OAAO,CAAA;gBAClC,UAAU,EAAE,MAAM,CAAA;aACnB,CAAA;SACF;KACF;CACF;AAKD,eAAO,MAAQ,YAAY,qCAAE,cAAc,uCAAE,iBAAiB,wCAAkB,CAAA;AAChF,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,CAAA"}
@@ -17,12 +17,14 @@ export type FEAASReactComponentProps = FEAASComponentProps & {
17
17
  export declare const FEAASReactStylesheet: (props: FEAASStylesheetProps) => JSX.Element;
18
18
  export declare const FEAASReactServerComponent: ({ ...props }: FEAASReactComponentProps) => Promise<JSX.Element>;
19
19
  export declare function FEAASReactComponent({ data, ...props }: FEAASReactComponentProps): JSX.Element;
20
- export declare function FEAASReactExternalComponent(props: FEAASReactExternalComponentProps): any;
20
+ export declare function FEAASReactExternalComponent(props: FEAASReactExternalComponentProps): JSX.Element;
21
21
  /** Turn HTMLNode into React tree. It accepts callback to customize the behavior */
22
22
  export declare function HTMLNodeToReact(node: HTMLNode, callback?: (node: HTMLNode, attributes: Record<string, any>) => [tagName: any, attributes: Record<string, any>], key?: any): React.ReactNode;
23
23
  export declare function FEAASNextExternalComponent(props: FEAASReactExternalComponentProps): JSX.Element;
24
24
  export declare function enableNextClientsideComponents(dynamic: any, component: any): any;
25
- export declare const ExternalComponent: typeof FEAASReactExternalComponent;
25
+ export declare function FEAASExternalComponent(props: FEAASReactExternalComponentProps): JSX.Element;
26
+ export declare const ExternalComponent: typeof FEAASExternalComponent;
27
+ export declare const ReactExternalComponent: typeof FEAASReactExternalComponent;
26
28
  export declare const NextExternalComponent: typeof FEAASNextExternalComponent;
27
29
  export declare const Component: typeof FEAASReactComponent;
28
30
  export declare const ServerComponent: ({ ...props }: FEAASReactComponentProps) => Promise<JSX.Element>;
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/ui/react.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAMnB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAoB,MAAM,gBAAgB,CAAA;AAI9E,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AACxH,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAE9B,MAAM,MAAM,gCAAgC,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAA;AAE7G,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,oBAAoB,UAAW,oBAAoB,gBAE/D,CAAA;AAED,eAAO,MAAM,yBAAyB,iBAAwB,wBAAwB,yBAarF,CAAA;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,eA8C/E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,OAmBlF;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAC/G,GAAG,CAAC,EAAE,GAAG,GACR,KAAK,CAAC,SAAS,CA+BjB;AAKD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,gCAAgC,eAgBjF;AACD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAI1E;AAED,eAAO,MAAM,iBAAiB,oCAA8B,CAAA;AAC5D,eAAO,MAAM,qBAAqB,mCAA6B,CAAA;AAC/D,eAAO,MAAM,SAAS,4BAAsB,CAAA;AAC5C,eAAO,MAAM,eAAe,iBAvJkC,wBAAwB,yBAuJ9B,CAAA;AACxD,eAAO,MAAM,UAAU,UA5JqB,oBAAoB,gBA4JlB,CAAA"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/ui/react.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAMnB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAoB,MAAM,gBAAgB,CAAA;AAI9E,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AACxH,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAE9B,MAAM,MAAM,gCAAgC,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAA;AAE7G,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,oBAAoB,UAAW,oBAAoB,gBAE/D,CAAA;AAED,eAAO,MAAM,yBAAyB,iBAAwB,wBAAwB,yBAarF,CAAA;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,eA8C/E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,eAwBlF;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAC/G,GAAG,CAAC,EAAE,GAAG,GACR,KAAK,CAAC,SAAS,CA+BjB;AAKD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,gCAAgC,eAgBjF;AACD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAI1E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gCAAgC,eAS7E;AAED,eAAO,MAAM,iBAAiB,+BAAyB,CAAA;AACvD,eAAO,MAAM,sBAAsB,oCAA8B,CAAA;AACjE,eAAO,MAAM,qBAAqB,mCAA6B,CAAA;AAC/D,eAAO,MAAM,SAAS,4BAAsB,CAAA;AAC5C,eAAO,MAAM,eAAe,iBAxKkC,wBAAwB,yBAwK9B,CAAA;AACxD,eAAO,MAAM,UAAU,UA7KqB,oBAAoB,gBA6KlB,CAAA"}