11'use client' ;
22
3- import { Suspense , useEffect , useState } from 'react' ;
3+ import { Suspense , useEffect , useLayoutEffect , useState } from 'react' ;
44import { useAuth } from '@/contexts/AuthContext' ;
5+ import { getFavoriteContentIds } from '@/lib/favorites' ;
56import { FavoriteContentList } from './FavoriteContentList' ;
67
78interface Props {
@@ -16,9 +17,11 @@ export function ListWithFavoriteSidebar({
1617 maxItemsMobile = 2 ,
1718} : Props ) {
1819 const { user, loading } = useAuth ( ) ;
19- const [ isLargeScreen , setIsLargeScreen ] = useState ( true ) ;
20+ const [ isLargeScreen , setIsLargeScreen ] = useState ( false ) ;
21+ const [ hasFavorites , setHasFavorites ] = useState ( false ) ;
22+ const [ isFavoritesLoading , setIsFavoritesLoading ] = useState ( true ) ;
2023
21- useEffect ( ( ) => {
24+ useLayoutEffect ( ( ) => {
2225 const mediaQuery = window . matchMedia ( '(min-width: 1024px)' ) ;
2326 setIsLargeScreen ( mediaQuery . matches ) ;
2427
@@ -27,8 +30,45 @@ export function ListWithFavoriteSidebar({
2730 return ( ) => mediaQuery . removeEventListener ( 'change' , handler ) ;
2831 } , [ ] ) ;
2932
30- // Show full width when not authenticated
31- if ( ! user && ! loading ) {
33+ // Check if user has favorites
34+ useLayoutEffect ( ( ) => {
35+ if ( ! user || loading ) {
36+ setIsFavoritesLoading ( true ) ;
37+ setHasFavorites ( false ) ;
38+ return ( ) => { } ;
39+ }
40+
41+ let cancelled = false ;
42+
43+ setIsFavoritesLoading ( true ) ;
44+ getFavoriteContentIds ( user . uid )
45+ . then ( ( ids ) => {
46+ if ( ! cancelled ) {
47+ setHasFavorites ( ids . length > 0 ) ;
48+ }
49+ } )
50+ . catch ( ( ) => {
51+ if ( ! cancelled ) {
52+ setHasFavorites ( false ) ;
53+ }
54+ } )
55+ . finally ( ( ) => {
56+ if ( ! cancelled ) {
57+ setIsFavoritesLoading ( false ) ;
58+ }
59+ } ) ;
60+
61+ return ( ) => {
62+ cancelled = true ;
63+ } ;
64+ } , [ user , loading ] ) ;
65+
66+ // Show full width while loading or when authenticated but no favorites exist
67+ if ( loading || isFavoritesLoading ) {
68+ return < > { children } </ > ;
69+ }
70+
71+ if ( ! user || ! hasFavorites ) {
3272 return < > { children } </ > ;
3373 }
3474
0 commit comments