@@ -28,6 +28,12 @@ import "chrome://browser/content/shopping/recommended-ad.mjs";
2828// top of the sidebar to show the header box shadow.
2929const HEADER_SCROLL_PIXEL_OFFSET = 8 ;
3030
31+ const SIDEBAR_CLOSED_COUNT_PREF =
32+ "browser.shopping.experience2023.sidebarClosedCount" ;
33+ const SHOW_KEEP_SIDEBAR_CLOSED_MESSAGE_PREF =
34+ "browser.shopping.experience2023.showKeepSidebarClosedMessage" ;
35+ const SHOPPING_SIDEBAR_ACTIVE_PREF = "browser.shopping.experience2023.active" ;
36+
3137export class ShoppingContainer extends MozLitElement {
3238 static properties = {
3339 data : { type : Object } ,
@@ -44,6 +50,7 @@ export class ShoppingContainer extends MozLitElement {
4450 isOverflow : { type : Boolean } ,
4551 autoOpenEnabled : { type : Boolean } ,
4652 autoOpenEnabledByUser : { type : Boolean } ,
53+ showingKeepClosedMessage : { type : Boolean } ,
4754 } ;
4855
4956 static get queries ( ) {
@@ -58,6 +65,7 @@ export class ShoppingContainer extends MozLitElement {
5865 recommendedAdEl : "recommended-ad" ,
5966 loadingEl : "#loading-wrapper" ,
6067 closeButtonEl : "#close-button" ,
68+ keepClosedMessageBarEl : "#keep-closed-message-bar" ,
6169 } ;
6270 }
6371
@@ -77,6 +85,8 @@ export class ShoppingContainer extends MozLitElement {
7785 window . document . addEventListener ( "UpdateRecommendations" , this ) ;
7886 window . document . addEventListener ( "UpdateAnalysisProgress" , this ) ;
7987 window . document . addEventListener ( "autoOpenEnabledByUserChanged" , this ) ;
88+ window . document . addEventListener ( "ShowKeepClosedMessage" , this ) ;
89+ window . document . addEventListener ( "HideKeepClosedMessage" , this ) ;
8090
8191 window . dispatchEvent (
8292 new CustomEvent ( "ContentReady" , {
@@ -175,6 +185,12 @@ export class ShoppingContainer extends MozLitElement {
175185 case "autoOpenEnabledByUserChanged" :
176186 this . autoOpenEnabledByUser = event . detail ?. autoOpenEnabledByUser ;
177187 break ;
188+ case "ShowKeepClosedMessage" :
189+ this . showingKeepClosedMessage = true ;
190+ break ;
191+ case "HideKeepClosedMessage" :
192+ this . showingKeepClosedMessage = false ;
193+ break ;
178194 }
179195 }
180196
@@ -358,12 +374,13 @@ export class ShoppingContainer extends MozLitElement {
358374 id ="close-button "
359375 class ="ghost-button shopping-button "
360376 data-l10n-id ="shopping-close-button "
361- @click =${ this . handleClick }
377+ @click =${ this . handleCloseButtonClick }
362378 > </ button >
363379 </ div >
364380 < div id ="content " aria-live ="polite " aria-busy =${ ! this . data } >
365381 < slot name ="multi-stage-message-slot "> </ slot >
366- ${ sidebarContent } ${ ! hideFooter ? this . getFooterTemplate ( ) : null }
382+ ${ this . keepClosedMessageTemplate ( ) } ${ sidebarContent }
383+ ${ ! hideFooter ? this . getFooterTemplate ( ) : null }
367384 </ div >
368385 </ div > ` ;
369386 }
@@ -385,6 +402,21 @@ export class ShoppingContainer extends MozLitElement {
385402 ` ;
386403 }
387404
405+ keepClosedMessageTemplate ( ) {
406+ if (
407+ this . autoOpenEnabled &&
408+ this . autoOpenEnabledByUser &&
409+ this . showingKeepClosedMessage &&
410+ RPMGetBoolPref ( SHOW_KEEP_SIDEBAR_CLOSED_MESSAGE_PREF , true )
411+ ) {
412+ return html `< shopping-message-bar
413+ id ="keep-closed-message-bar "
414+ type ="keep-closed "
415+ > </ shopping-message-bar > ` ;
416+ }
417+ return null ;
418+ }
419+
388420 render ( ) {
389421 let content ;
390422 let hideFooter ;
@@ -410,8 +442,28 @@ export class ShoppingContainer extends MozLitElement {
410442 return this . renderContainer ( content , hideFooter ) ;
411443 }
412444
413- handleClick ( ) {
414- RPMSetPref ( "browser.shopping.experience2023.active" , false ) ;
445+ handleCloseButtonClick ( ) {
446+ if ( this . autoOpenEnabled && this . autoOpenEnabledByUser ) {
447+ let sidebarClosedCount = RPMGetIntPref ( SIDEBAR_CLOSED_COUNT_PREF , 0 ) ;
448+ if (
449+ ! this . showingKeepClosedMessage &&
450+ sidebarClosedCount >= 4 &&
451+ RPMGetBoolPref ( SHOW_KEEP_SIDEBAR_CLOSED_MESSAGE_PREF , true )
452+ ) {
453+ this . showingKeepClosedMessage = true ;
454+ return ;
455+ }
456+
457+ this . showingKeepClosedMessage = false ;
458+
459+ if ( sidebarClosedCount >= 6 ) {
460+ RPMSetPref ( SHOW_KEEP_SIDEBAR_CLOSED_MESSAGE_PREF , false ) ;
461+ }
462+
463+ RPMSetPref ( SIDEBAR_CLOSED_COUNT_PREF , sidebarClosedCount + 1 ) ;
464+ }
465+
466+ RPMSetPref ( SHOPPING_SIDEBAR_ACTIVE_PREF , false ) ;
415467 Glean . shopping . surfaceClosed . record ( { source : "closeButton" } ) ;
416468 }
417469}
0 commit comments