@sitecore-feaas/clientside 0.5.9 → 0.5.11
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/build/components/FEAASElement.js +1 -1
- package/build/components/FEAASElement.js.map +1 -1
- package/build/dom/html.js +3 -0
- package/build/dom/html.js.map +1 -1
- package/build/ui/FEAASExternal.js +11 -0
- package/build/ui/FEAASExternal.js.map +1 -1
- package/build/ui/react.js +1 -1
- package/build/ui/react.js.map +1 -1
- package/dist/browser/headless.cjs +7 -7
- package/dist/browser/headless.cjs.map +2 -2
- package/dist/browser/headless.esm.js +6 -6
- package/dist/browser/headless.esm.js.map +1 -1
- package/dist/browser/index.cjs +5 -5
- package/dist/browser/index.cjs.map +2 -2
- package/dist/browser/index.esm.js +4 -4
- package/dist/browser/index.esm.js.map +1 -1
- package/dist/browser/react.cjs +5 -5
- package/dist/browser/react.cjs.map +3 -3
- package/dist/browser/react.esm.js +6 -6
- package/dist/browser/react.esm.js.map +1 -1
- package/dist/node/headless.cjs +2 -2
- package/dist/node/headless.cjs.map +2 -2
- package/dist/node/headless.esm.js +2 -2
- package/dist/node/headless.esm.js.map +2 -2
- package/dist/node/index.cjs +4 -4
- package/dist/node/index.cjs.map +2 -2
- package/dist/node/index.esm.js +3 -3
- package/dist/node/index.esm.js.map +2 -2
- package/dist/node/react.cjs +4 -4
- package/dist/node/react.cjs.map +3 -3
- package/dist/node/react.esm.js +5 -5
- package/dist/node/react.esm.js.map +3 -3
- package/headless.cjs +2 -2
- package/headless.cjs.map +2 -2
- package/headless.js +2 -2
- package/headless.js.map +2 -2
- package/package.json +1 -1
- package/react.cjs +5 -5
- package/react.cjs.map +3 -3
- package/react.js +5 -5
- package/react.js.map +3 -3
- package/src/components/FEAASElement.tsx +1 -1
- package/src/dom/html.ts +3 -0
- package/src/ui/FEAASExternal.tsx +14 -0
- package/src/ui/react.tsx +1 -1
- package/test/FEAASComponent.react.test.tsx +63 -1
- package/types/dom/html.d.ts +1 -0
- package/types/dom/html.d.ts.map +1 -1
- package/types/ui/FEAASExternal.d.ts +2 -0
- package/types/ui/FEAASExternal.d.ts.map +1 -1
|
@@ -339,7 +339,7 @@ export class FEAASElement<Props = any, Payload = any> extends WebComponent {
|
|
|
339
339
|
const { React, ReactDOM, ReactDOMClient } = (this.payload as ReactPayload) || {}
|
|
340
340
|
if (!React) throw new Error(`${this.tagName}: React is not present in payload`)
|
|
341
341
|
if (!ReactDOM) throw new Error(`${this.tagName}: ReactDOM is not present in payload`)
|
|
342
|
-
if (this.getAttribute('hydrate') == 'false') return
|
|
342
|
+
if (this.getAttribute('hydrate') == 'false' && this.firstElementChild) return
|
|
343
343
|
if (!this.refs.topReact && !this.forceUpdateReact) {
|
|
344
344
|
if (ReactDOMClient) {
|
|
345
345
|
this.reactRoot ||= ReactDOMClient.createRoot(this.getReactRootElement())
|
package/src/dom/html.ts
CHANGED
package/src/ui/FEAASExternal.tsx
CHANGED
|
@@ -24,6 +24,20 @@ export default class FEAASExternal extends FEAASElement<FEAASExternalProps, Reac
|
|
|
24
24
|
return Promise.resolve({ React, ReactDOM })
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
// observe all arttribute changes
|
|
28
|
+
_setAttribute: typeof HTMLElement.prototype.setAttribute
|
|
29
|
+
connectedCallback() {
|
|
30
|
+
if (!this._setAttribute) {
|
|
31
|
+
this._setAttribute = this.setAttribute
|
|
32
|
+
this.setAttribute = function (name, value) {
|
|
33
|
+
const old = this.getAttribute(value)
|
|
34
|
+
this._setAttribute(name, value)
|
|
35
|
+
this.attributeChangedCallback(name, old, value)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
super.connectedCallback()
|
|
39
|
+
}
|
|
40
|
+
|
|
27
41
|
update() {
|
|
28
42
|
const Component = BYOC.getComponent(this.getComponentName())?.component
|
|
29
43
|
if (!Component && this.getAttribute('hydrate') == 'false') return
|
package/src/ui/react.tsx
CHANGED
|
@@ -114,7 +114,7 @@ export function FEAASReactComponent({
|
|
|
114
114
|
props = { ...parseComponentSource(props.src), ...props }
|
|
115
115
|
}
|
|
116
116
|
const fetch = normalizeFetchAttribute(props.fetch)
|
|
117
|
-
const embeddedData = fetch.includes('data') ? data : fetch.includes('template') ? fetchedData : null
|
|
117
|
+
const embeddedData = fetch.includes('data') ? data : fetch.includes('template') ? fetchedData || data : null
|
|
118
118
|
return (
|
|
119
119
|
<>
|
|
120
120
|
{'preload' in props && preload === true && 'src' in props && (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useContext } from 'react'
|
|
2
2
|
import ReactDOM from 'react-dom'
|
|
3
|
-
import { describe, expect, it } from 'vitest'
|
|
3
|
+
import { describe, expect, it, spy } from 'vitest'
|
|
4
4
|
import { Component, registerComponent, ExternalComponent } from '../src/ui/react.js'
|
|
5
5
|
|
|
6
6
|
function Hello(props: { firstName: string; telephone: string }) {
|
|
@@ -80,6 +80,11 @@ export async function validate(react: any, html: string) {
|
|
|
80
80
|
const DataContext = React.createContext('DEFAULT')
|
|
81
81
|
|
|
82
82
|
describe('React', () => {
|
|
83
|
+
beforeEach(() => {
|
|
84
|
+
document.open()
|
|
85
|
+
document.write('<html><head></head><body></body></html>')
|
|
86
|
+
document.close()
|
|
87
|
+
})
|
|
83
88
|
it('render react component', async () => {
|
|
84
89
|
await validate(
|
|
85
90
|
<section>
|
|
@@ -232,6 +237,63 @@ Typeof superobject object, {"a":1,"b":2})</div></feaas-external></feaas-componen
|
|
|
232
237
|
'And context value is INHERITED</div></feaas-external></feaas-component></section>'
|
|
233
238
|
)
|
|
234
239
|
})
|
|
240
|
+
it('render wrapped external component with context provider and data mapping asyncronously', async () => {
|
|
241
|
+
registerComponent(Hello, helloSchema)
|
|
242
|
+
validate(
|
|
243
|
+
<DataContext.Provider value='INHERITED'>
|
|
244
|
+
<section>
|
|
245
|
+
<Component
|
|
246
|
+
template={
|
|
247
|
+
'<feaas-external data-path-attributes="$" first-name="Yarik" data-path-attributes="$" data-external-id="MyTestComponent"></feaas-external>'
|
|
248
|
+
}
|
|
249
|
+
data={{ telephone: 321 }}
|
|
250
|
+
></Component>
|
|
251
|
+
</section>
|
|
252
|
+
</DataContext.Provider>,
|
|
253
|
+
'<section><feaas-component class="-feaas" data="{"telephone":321}"><feaas-external data-external-id="MyTestComponent" telephone="321" data-path-attributes="$" first-name="Yarik" data-attributes-keys="telephone" datasources="{"_":{"telephone":321}}" hydrate="false"><div>\n' +
|
|
254
|
+
'Hello my name is Yarik (string) and my tel is 321 (number).\n' +
|
|
255
|
+
'And context value is INHERITED</div></feaas-external></feaas-component></section>'
|
|
256
|
+
)
|
|
257
|
+
})
|
|
258
|
+
it('render external component after resetting of a template', async () => {
|
|
259
|
+
registerComponent(HelloData, helloDataSchema)
|
|
260
|
+
const now = new Date()
|
|
261
|
+
const spy = vi.spyOn(global, 'fetch')
|
|
262
|
+
spy.mockImplementation(async (url: string, options: Parameters<typeof fetch>[1] = {}) => {
|
|
263
|
+
return new Response(
|
|
264
|
+
'<feaas-external data-external-id="MyTestDataComponent" first-name="Yarik" data-path-attributes="_"></feaas-external>',
|
|
265
|
+
{
|
|
266
|
+
headers: {
|
|
267
|
+
date: now.toUTCString(),
|
|
268
|
+
'last-modified': now.toUTCString()
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
)
|
|
272
|
+
})
|
|
273
|
+
validate(
|
|
274
|
+
<DataContext.Provider value='INHERITED'>
|
|
275
|
+
<section>
|
|
276
|
+
<Component
|
|
277
|
+
src='a/b'
|
|
278
|
+
data={{ _: { telephone: 321, superobject: { '1': 2 } } }}
|
|
279
|
+
fetch={['template']}
|
|
280
|
+
></Component>
|
|
281
|
+
</section>
|
|
282
|
+
</DataContext.Provider>,
|
|
283
|
+
'<section><feaas-component class="-feaas" library="a" component="b" src="a/b" fetch="template" data="{"_":{"telephone":321,"superobject":{"1":2}}}"></feaas-component></section>'
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
await document.querySelector('feaas-component')?.whenRendered
|
|
287
|
+
await document.querySelector('feaas-external')?.whenRendered
|
|
288
|
+
|
|
289
|
+
expect(document.querySelector('feaas-component').outerHTML).toEqual(
|
|
290
|
+
'<feaas-component class="-feaas" library="a" component="b" src="a/b" fetch="template" data="{"_":{"telephone":321,"superobject":{"1":2}}}"><feaas-external data-external-id="MyTestDataComponent" first-name="Yarik" data-path-attributes="_" telephone="321" superobject="{"1":2}" data-attributes-keys="telephone,superobject" datasources="{"_":{"telephone":321,"superobject":{"1":2}}}"><div>\n' +
|
|
291
|
+
'Hello my name is Yarik (string) and my tel is 321 (number).\n' +
|
|
292
|
+
'And context value is DEFAULT.\n' +
|
|
293
|
+
'Typeof datasources: object with keys _)\n' +
|
|
294
|
+
'Typeof superobject object, {"1":2})</div></feaas-external></feaas-component>'
|
|
295
|
+
)
|
|
296
|
+
})
|
|
235
297
|
it('render not map attributes of external component with given array', async () => {
|
|
236
298
|
registerComponent(Hello, helloSchema)
|
|
237
299
|
validate(
|
package/types/dom/html.d.ts
CHANGED
package/types/dom/html.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dom/html.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAoB,MAAM,gBAAgB,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D,qBAAa,QAAQ;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAA;gBAET,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,WAAW,CAAC,EAAE,MAAM;IAQxE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IASxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9C,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,IAAI;IAY9D,eAAe,CAAC,QAAQ,EAAE,MAAM;IAOhC,WAAW,CAAC,OAAO,EAAE,QAAQ;IAK7B,IAAI,OAAO,WAEV;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,SAAS,IAGO,MAAM,CADzB;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;IACD,IAAI,SAAS,WAEZ;IACD,IAAI,QAAQ,eAEX;IAED,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAc1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAwB9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAIzC,OAAO,CAAC,WAAW;IAgBnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAQtC,IAAI,eAAe,IAAI,QAAQ,GAAG,IAAI,CAErC;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,CAEjC;IAED,IAAI,sBAAsB,IAAI,QAAQ,GAAG,IAAI,CAE5C;IAED,IAAI,kBAAkB,IAAI,QAAQ,GAAG,IAAI,CAExC;IACD,SAAS,CAAC,IAAI,GAAE,OAAe,GAAG,QAAQ;IAiB1C,IAAI,aAAa,aAEhB;IAED,aAAa;4BACS,MAAM,GAAG,QAAQ;
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dom/html.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAoB,MAAM,gBAAgB,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D,qBAAa,QAAQ;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAA;gBAET,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,WAAW,CAAC,EAAE,MAAM;IAQxE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IASxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9C,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,IAAI;IAY9D,eAAe,CAAC,QAAQ,EAAE,MAAM;IAOhC,WAAW,CAAC,OAAO,EAAE,QAAQ;IAK7B,IAAI,OAAO,WAEV;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,SAAS,IAGO,MAAM,CADzB;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;IACD,IAAI,SAAS,WAEZ;IACD,IAAI,QAAQ,eAEX;IAED,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAc1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAwB9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAIzC,OAAO,CAAC,WAAW;IAgBnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAQtC,IAAI,eAAe,IAAI,QAAQ,GAAG,IAAI,CAErC;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,CAEjC;IAED,IAAI,sBAAsB,IAAI,QAAQ,GAAG,IAAI,CAE5C;IAED,IAAI,kBAAkB,IAAI,QAAQ,GAAG,IAAI,CAExC;IACD,SAAS,CAAC,IAAI,GAAE,OAAe,GAAG,QAAQ;IAiB1C,IAAI,aAAa,aAEhB;IAED,aAAa;4BACS,MAAM,GAAG,QAAQ;kCAGX,QAAQ;MAGnC;CACF;AA+CD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgDlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmBvD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,UAElG;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,cAMjG"}
|
|
@@ -15,6 +15,8 @@ export default class FEAASExternal extends FEAASElement<FEAASExternalProps, Reac
|
|
|
15
15
|
React: typeof React;
|
|
16
16
|
ReactDOM: typeof ReactDOM;
|
|
17
17
|
}>;
|
|
18
|
+
_setAttribute: typeof HTMLElement.prototype.setAttribute;
|
|
19
|
+
connectedCallback(): void;
|
|
18
20
|
update(): any;
|
|
19
21
|
render(props: FEAASExternalProps, { React }: ReactModules): ReactJSX;
|
|
20
22
|
getComponentName(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FEAASExternal.d.ts","sourceRoot":"","sources":["../../src/ui/FEAASExternal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAA;AACtC,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;AAC3E,OAAO,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAE3D,eAAO,MAAM,wBAAwB,0CAAoC,CAAA;AAEzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,kBAAkB,CAQ5E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAA;AAE9E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC;IACvF,IAAI;;;;
|
|
1
|
+
{"version":3,"file":"FEAASExternal.d.ts","sourceRoot":"","sources":["../../src/ui/FEAASExternal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAA;AACtC,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;AAC3E,OAAO,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAE3D,eAAO,MAAM,wBAAwB,0CAAoC,CAAA;AAEzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,kBAAkB,CAQ5E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAA;AAE9E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC;IACvF,IAAI;;;;IAKJ,aAAa,EAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,CAAA;IACxD,iBAAiB;IAYjB,MAAM;IAMN,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,YAAY,GAAG,QAAQ;IAQpE,gBAAgB;IAIhB,QAAQ;IAIR,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,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAkB;IAC9D,MAAM,CAAC,iBAAiB,gCAAyB;IACjD,MAAM,CAAC,uBAAuB,sCAA+B;IAC7D,MAAM,CAAC,YAAY,2BAAoB;CACxC;AAID,eAAO,MAAQ,YAAY,4BAAE,cAAc,uCAAE,iBAAiB,+BAAkB,CAAA;AAChF,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,CAAA"}
|