@@ -29,6 +29,13 @@ import useIsMobile from '../hooks/useIsMobile';
2929import Banner from '../components/Banner' ;
3030import { P5VersionProvider } from '../hooks/useP5Version' ;
3131
32+ const BANNER_DISMISS_KEY = 'bannerLastDismissedAt' ;
33+ const BANNER_COOLDOWN_MINUTES = 30 ;
34+
35+ function minutesSince ( timestamp ) {
36+ return ( Date . now ( ) - timestamp ) / ( 1000 * 60 ) ;
37+ }
38+
3239function getTitle ( project ) {
3340 const { id } = project ;
3441 return id ? `p5.js Web Editor | ${ project . name } ` : 'p5.js Web Editor' ;
@@ -106,7 +113,7 @@ const IDEView = () => {
106113 const [ sidebarSize , setSidebarSize ] = useState ( 160 ) ;
107114 const [ isOverlayVisible , setIsOverlayVisible ] = useState ( false ) ;
108115 const [ MaxSize , setMaxSize ] = useState ( window . innerWidth ) ;
109- const [ displayBanner , setDisplayBanner ] = useState ( false ) ;
116+ const [ displayBanner , setDisplayBanner ] = useState ( true ) ;
110117
111118 const cmRef = useRef ( { } ) ;
112119
@@ -151,6 +158,7 @@ const IDEView = () => {
151158 }
152159 } ;
153160 } , [ shouldAutosave , dispatch ] ) ;
161+
154162 useEffect ( ( ) => {
155163 const updateInnerWidth = ( e ) => {
156164 setMaxSize ( e . target . innerWidth ) ;
@@ -163,6 +171,29 @@ const IDEView = () => {
163171 } ;
164172 } , [ setMaxSize ] ) ;
165173
174+ // checks how long banner has been closed for to hide banner
175+ useEffect ( ( ) => {
176+ const stored = window . localStorage . getItem ( BANNER_DISMISS_KEY ) ;
177+ const lastClosedAt = stored ? Number ( stored ) : null ;
178+
179+ if ( ! lastClosedAt ) {
180+ setDisplayBanner ( true ) ;
181+ return ;
182+ }
183+
184+ if ( minutesSince ( lastClosedAt ) >= BANNER_COOLDOWN_MINUTES ) {
185+ setDisplayBanner ( true ) ;
186+ } else {
187+ setDisplayBanner ( false ) ;
188+ }
189+ } , [ ] ) ;
190+
191+ const handleBannerClose = ( ) => {
192+ setDisplayBanner ( false ) ;
193+
194+ window . localStorage . setItem ( BANNER_DISMISS_KEY , String ( Date . now ( ) ) ) ;
195+ } ;
196+
166197 const consoleCollapsedSize = 29 ;
167198 const currentConsoleSize = ide . consoleIsExpanded
168199 ? consoleSize
@@ -173,7 +204,7 @@ const IDEView = () => {
173204 < Helmet >
174205 < title > { getTitle ( project ) } </ title >
175206 </ Helmet >
176- { displayBanner && < Banner onClose = { ( ) => setDisplayBanner ( false ) } /> }
207+ { displayBanner && < Banner onClose = { handleBannerClose } /> }
177208 < IDEKeyHandlers getContent = { ( ) => cmRef . current ?. getContent ( ) } />
178209 < WarnIfUnsavedChanges />
179210 < Toast />
0 commit comments