44 sendPropsToReact
55} from "./prop-bridge" ;
66
7- const getCustomElementFromReactComponent = RComponent => {
7+ const getCustomElementFromReactComponent = ( RComponent , mode ) => {
88 return class ReactAsCustomElement extends HTMLElement {
9- shadow = null ;
9+ targetNode = null ;
1010 propBridgeRef = null ;
1111 props = { } ;
1212 observer = null ;
@@ -15,8 +15,20 @@ const getCustomElementFromReactComponent = RComponent => {
1515 super ( ) ;
1616 this . props = getPropsFromNode ( this ) ;
1717 this . observer = new MutationObserver ( this . _onMutation ) ;
18- this . shadow = this . attachShadow ( { mode : "closed" } ) ;
19- renderReact2Node ( RComponent , this . props , this . shadow , this . _onReactMount ) ;
18+
19+ switch ( mode ) {
20+ case 'open' :
21+ this . targetNode = this . attachShadow ( { mode : 'open' } ) ;
22+ break ;
23+ case 'element' :
24+ this . targetNode = this ;
25+ break ;
26+ default :
27+ this . targetNode = this . attachShadow ( { mode : 'closed' } ) ;
28+ break ;
29+ }
30+
31+ renderReact2Node ( RComponent , this . props , this . targetNode , this . _onReactMount ) ;
2032 }
2133
2234 setProps = newProps => {
@@ -56,7 +68,15 @@ const getCustomElementFromReactComponent = RComponent => {
5668 } ;
5769} ;
5870
59- export const registerAsWebComponent = ( component , customElementName ) => {
60- const ReactCustomElement = getCustomElementFromReactComponent ( component ) ;
71+ /* mode options:
72+ - no option (default) - closed shadow DOM
73+ - "open" - open shadow DOM
74+ - "element" - no shadow DOM
75+ */
76+ export const registerAsWebComponent = ( component , customElementName , mode ) => {
77+ const ReactCustomElement = getCustomElementFromReactComponent (
78+ component ,
79+ mode
80+ ) ;
6181 customElements . define ( customElementName , ReactCustomElement ) ;
6282} ;
0 commit comments