@@ -3,16 +3,22 @@ import LiveSocket from "phoenix_live_view/live_socket"
33
44let container = ( num ) => global . document . getElementById ( `container${ num } ` )
55
6- let prepareLiveViewDOM = ( document ) => {
6+ let createRootViewDiv = ( containerNum , cssClass ) => {
77 const div = document . createElement ( "div" )
8- div . setAttribute ( "data-phx-session" , "abc123" )
9- div . setAttribute ( "data-phx-root-id" , "container1" )
10- div . setAttribute ( "id" , "container1" )
8+ div . setAttribute ( "data-phx-session" , `abc-${ containerNum } ` )
9+ div . setAttribute ( "data-phx-root-id" , `container${ containerNum } ` )
10+ div . setAttribute ( "id" , `container${ containerNum } ` )
11+ if ( cssClass ) div . classList . add ( cssClass ) ;
1112 div . innerHTML = `
1213 <label for="plus">Plus</label>
1314 <input id="plus" value="1" />
1415 <button phx-click="inc_temperature">Inc Temperature</button>
1516 `
17+ return div
18+ }
19+
20+ let prepareLiveViewDOM = ( document ) => {
21+ const div = createRootViewDiv ( 1 , "main" )
1622 const button = div . querySelector ( "button" )
1723 const input = div . querySelector ( "input" )
1824 button . addEventListener ( "click" , ( ) => {
@@ -21,6 +27,8 @@ let prepareLiveViewDOM = (document) => {
2127 } , 200 )
2228 } )
2329 document . body . appendChild ( div )
30+
31+ document . body . appendChild ( createRootViewDiv ( 2 , "extra" ) )
2432}
2533
2634describe ( "LiveSocket" , ( ) => {
@@ -156,6 +164,19 @@ describe("LiveSocket", () => {
156164 liveSocket . owner ( btn , ( view ) => expect ( view . id ) . toBe ( _view . id ) )
157165 } )
158166
167+ test ( "owner with rootViewSelector option" , async ( ) => {
168+ let liveSocket = new LiveSocket ( "/live" , Socket , { rootViewSelector : ".main" } )
169+ liveSocket . connect ( )
170+
171+ let _view = liveSocket . getViewByEl ( container ( 1 ) )
172+
173+ let btn = document . querySelector ( ".main button" )
174+ liveSocket . owner ( btn , ( view ) => expect ( view . id ) . toBe ( _view . id ) )
175+
176+ let btnExtra = document . querySelector ( ".extra button" )
177+ liveSocket . owner ( btnExtra , ( view ) => expect ( view ) . toBe ( null ) )
178+ } )
179+
159180 test ( "getActiveElement default before LiveSocket activeElement is set" , async ( ) => {
160181 let liveSocket = new LiveSocket ( "/live" , Socket )
161182
0 commit comments