1-
2- import { useState , useEffect } from 'react' ;
3- import { onSnapshot , query , where , collection } from 'firebase/firestore' ;
4- import { db } from '@/lib/firebase' ;
5- import { Campaign } from '@/types' ;
6-
7- export const useCampaignData = ( userId : string | null , authLoading : boolean ) => {
8- const [ campaigns , setCampaigns ] = useState < Campaign [ ] > ( [ ] ) ;
9- const [ loading , setLoading ] = useState ( true ) ;
10-
11- useEffect ( ( ) => {
12- console . log ( '🎯 useCampaignData - Effect triggered' ) ;
13- console . log ( '🎯 authLoading:' , authLoading , 'user:' , ! ! userId ) ;
14-
15- if ( authLoading ) {
16- console . log ( '🎯 Auth en cours de chargement...' ) ;
17- return ;
18- }
19-
20- if ( ! userId ) {
21- console . log ( '🎯 Pas d\'utilisateur connecté' ) ;
22- setCampaigns ( [ ] ) ;
23- setLoading ( false ) ;
24- return ;
25- }
26-
27- console . log ( '🎯 Auth OK, démarrage requête Firestore pour user:' , userId ) ;
28-
29- // Requête simplifiée sans orderBy pour éviter l'erreur d'index
30- const q = query (
31- collection ( db , 'campaigns' ) ,
32- where ( 'userId' , '==' , userId )
33- ) ;
34-
35- const unsubscribe = onSnapshot ( q ,
36- ( snapshot ) => {
37- console . log ( '🎯 Firestore snapshot reçu, docs:' , snapshot . docs . length ) ;
38-
39- const campaignData = snapshot . docs . map ( doc => {
40- const data = doc . data ( ) ;
41- const campaign = {
42- id : doc . id ,
43- ...data ,
44- createdAt : data . createdAt ?. toDate ( ) || new Date ( ) ,
45- updatedAt : data . updatedAt ?. toDate ( ) || new Date ( ) ,
46- } as Campaign ;
47-
48- console . log ( '🎯 RAW Campaign data:' , {
49- id : campaign . id ,
50- name : campaign . name ,
51- isDraft : campaign . isDraft ,
52- paymentConfigured : campaign . paymentConfigured ,
53- stripePaymentMethodId : campaign . stripePaymentMethodId ,
54- isActive : campaign . isActive ,
55- userId : campaign . userId
56- } ) ;
57-
58- return campaign ;
59- } ) ;
60-
61- // Trier localement par date de création (le plus récent en premier)
62- const sortedCampaigns = campaignData . sort ( ( a , b ) => {
63- return new Date ( b . createdAt ) . getTime ( ) - new Date ( a . createdAt ) . getTime ( ) ;
64- } ) ;
65-
66- console . log ( '🎯 AVANT FILTRAGE - Total campaigns:' , sortedCampaigns . length ) ;
67-
68- // DÉBOGAGE : Afficher TOUTES les campagnes avant filtrage
69- sortedCampaigns . forEach ( ( campaign , index ) => {
70- console . log ( `🎯 Campaign ${ index + 1 } :` , {
71- id : campaign . id ,
72- name : campaign . name ,
73- isDraft : campaign . isDraft ,
74- paymentConfigured : campaign . paymentConfigured ,
75- hasStripePaymentMethod : Boolean ( campaign . stripePaymentMethodId ) ,
76- isActive : campaign . isActive ,
77- willBeVisible : Boolean ( campaign . stripePaymentMethodId ) // NOUVEAU CRITÈRE
78- } ) ;
79- } ) ;
80-
81- // 🔧 CORRECTION : Afficher les campagnes qui ont une méthode de paiement
82- // Peu importe si elles sont en draft ou pas
83- const visibleCampaigns = sortedCampaigns . filter ( campaign => {
84- // Une campagne est visible si elle a une méthode de paiement Stripe
85- return Boolean ( campaign . stripePaymentMethodId ) ;
86- } ) ;
87-
88- console . log ( '🎯 APRÈS FILTRAGE - Campagnes visibles:' , visibleCampaigns . length ) ;
89- console . log ( '🎯 Campagnes finales à afficher:' , visibleCampaigns . map ( c => ( {
90- id : c . id ,
91- name : c . name ,
92- isDraft : c . isDraft ,
93- paymentConfigured : c . paymentConfigured ,
94- hasStripePaymentMethod : Boolean ( c . stripePaymentMethodId )
95- } ) ) ) ;
96-
97- setCampaigns ( visibleCampaigns ) ;
98- setLoading ( false ) ;
99- } ,
100- ( error ) => {
101- console . error ( '❌ Erreur Firestore:' , error ) ;
102- setCampaigns ( [ ] ) ;
103- setLoading ( false ) ;
104- }
105- ) ;
106-
107- return ( ) => unsubscribe ( ) ;
108- } , [ userId , authLoading ] ) ;
109-
110- return { campaigns, loading } ;
111- } ;
1+ // Migration complète vers Supabase terminée
2+ export { useCampaignDataSupabase as useCampaignData } from './useCampaignDataSupabase' ;
0 commit comments