@@ -11,7 +11,10 @@ const {
1111 solid : { onCleanup } ,
1212} = shelter ;
1313
14+ const CLEANUP_LISTENER_ID = "shelter-bsf-cleanup" ;
15+
1416let originalPremiumType = null ;
17+ let layoutToggleActive = false ;
1518
1619function patchNiterState ( ) {
1720 const user = UserStore . getCurrentUser ( ) ;
@@ -31,34 +34,70 @@ function restoreNiterState() {
3134 originalPremiumType = null ;
3235}
3336
34- function CleanupListener ( ) {
37+ function hasCleanupListener ( node ) {
38+ return node ?. querySelector ?. ( `#${ CLEANUP_LISTENER_ID } ` ) !== null ;
39+ }
40+
41+ function CleanupListener ( props ) {
3542 onCleanup ( ( ) => {
43+ if ( ! props ?. isLayoutToggle && layoutToggleActive ) {
44+ return ;
45+ }
46+ if ( props ?. isLayoutToggle ) {
47+ layoutToggleActive = false ;
48+ }
49+ props ?. onCleanup ?. ( ) ;
3650 restoreNiterState ( ) ;
3751 } ) ;
3852
39- return < div style = { { display : "none" } } /> ;
53+ props ?. onMount ?. ( ) ;
54+
55+ return < div id = { CLEANUP_LISTENER_ID } style = { { display : "none" } } /> ;
56+ }
57+
58+ function injectCleanupListener ( node , props = { } ) {
59+ if ( hasCleanupListener ( node ) ) {
60+ return false ;
61+ }
62+ node . append (
63+ < ReactiveRoot >
64+ < CleanupListener { ...props } />
65+ </ ReactiveRoot > ,
66+ ) ;
67+ return true ;
4068}
4169
4270export function onLoad ( ) {
4371 subscribe ( "TRACK" , ( e ) => {
44- if (
45- e . event === "impression_go_live_modal" ||
46- ( e . event == "open_modal" && e . properties . type == "Go Live Modal" ) ||
47- e . event === "impression_call_tile_context_menu"
48- ) {
49- const searchQuery =
50- e . event == "impression_call_tile_context_menu" ? "#stream-context" : "[class*='focusLock'] > div" ;
51- patchNiterState ( ) ;
72+ const callButtonClicked = e . event === "call_button_clicked" ;
73+ const callMenuItemClicked = e . event === "call_menu_item_interacted" ;
74+ const streamButtonClicked = callButtonClicked && e . properties . button_name === "Stream" ;
75+ const streamSettingsButtonClicked = callButtonClicked && e . properties . button_name === "Stream Settings" ;
76+ const changeStreamButtonClicked = callMenuItemClicked && e . properties . menu_name === "ManageStreamsButton" ;
77+ const videoLayoutToggled = e . event === "video_layout_toggled" ;
78+
79+ if ( streamButtonClicked || streamSettingsButtonClicked || changeStreamButtonClicked ) {
80+ const searchQuery = streamSettingsButtonClicked ? "#manage-streams" : "[class*='scrim']" ;
5281 const stopObserving = observeDom ( searchQuery , ( node ) => {
5382 stopObserving ( ) ;
54- node . parentNode . append (
55- < ReactiveRoot >
56- < CleanupListener />
57- </ ReactiveRoot > ,
58- ) ;
83+ if ( injectCleanupListener ( node ) ) {
84+ patchNiterState ( ) ;
85+ }
5986 } ) ;
6087 setTimeout ( stopObserving , 500 ) ;
6188 }
89+
90+ if ( videoLayoutToggled ) {
91+ const callContainer = document . querySelector ( "[class*='callContainer']" ) ;
92+ if ( ! callContainer ) {
93+ return ;
94+ }
95+
96+ layoutToggleActive = true ;
97+ if ( injectCleanupListener ( callContainer , { isLayoutToggle : true } ) ) {
98+ patchNiterState ( ) ;
99+ }
100+ }
62101 } ) ;
63102}
64103
0 commit comments