Skip to content

Commit 67c2d5a

Browse files
Migrate remaining Firebase references
1 parent d3c117b commit 67c2d5a

9 files changed

Lines changed: 611 additions & 422 deletions

src/hooks/useCampaignData.ts

Lines changed: 2 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,111 +1,2 @@
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';
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import { useState, useEffect } from 'react';
2+
import { supabase } from '@/integrations/supabase/client';
3+
import { Campaign } from '@/types';
4+
5+
export const useCampaignDataSupabase = (userId: string | null, authLoading: boolean) => {
6+
const [campaigns, setCampaigns] = useState<Campaign[]>([]);
7+
const [loading, setLoading] = useState(true);
8+
9+
useEffect(() => {
10+
console.log('🎯 useCampaignDataSupabase - Effect triggered');
11+
console.log('🎯 authLoading:', authLoading, 'user:', !!userId);
12+
13+
if (authLoading) {
14+
console.log('🎯 Auth en cours de chargement...');
15+
return;
16+
}
17+
18+
if (!userId) {
19+
console.log('🎯 Pas d\'utilisateur connecté');
20+
setCampaigns([]);
21+
setLoading(false);
22+
return;
23+
}
24+
25+
console.log('🎯 Auth OK, démarrage requête Supabase pour user:', userId);
26+
27+
const fetchCampaigns = async () => {
28+
try {
29+
const { data, error } = await supabase
30+
.from('campaigns')
31+
.select('*')
32+
.eq('user_id', userId)
33+
.order('created_at', { ascending: false });
34+
35+
if (error) {
36+
console.error('❌ Erreur Supabase:', error);
37+
setCampaigns([]);
38+
setLoading(false);
39+
return;
40+
}
41+
42+
console.log('🎯 Supabase data reçue, campaigns:', data?.length || 0);
43+
44+
const campaignData = (data || []).map(row => {
45+
const campaign = {
46+
id: row.id,
47+
name: row.name,
48+
description: row.description,
49+
targetUrl: row.target_url,
50+
isActive: row.is_active,
51+
isDraft: row.is_draft,
52+
paymentConfigured: row.payment_configured,
53+
defaultCommissionRate: row.default_commission_rate,
54+
userId: row.user_id,
55+
stripeCustomerId: row.stripe_customer_id,
56+
stripePaymentMethodId: row.stripe_payment_method_id,
57+
stripeSetupIntentId: row.stripe_setup_intent_id,
58+
trackingScript: row.tracking_script,
59+
createdAt: new Date(row.created_at),
60+
updatedAt: new Date(row.updated_at),
61+
} as Campaign;
62+
63+
console.log('🎯 Campaign data:', {
64+
id: campaign.id,
65+
name: campaign.name,
66+
isDraft: campaign.isDraft,
67+
paymentConfigured: campaign.paymentConfigured,
68+
stripePaymentMethodId: campaign.stripePaymentMethodId,
69+
isActive: campaign.isActive,
70+
userId: campaign.userId
71+
});
72+
73+
return campaign;
74+
});
75+
76+
console.log('🎯 AVANT FILTRAGE - Total campaigns:', campaignData.length);
77+
78+
// DÉBOGAGE : Afficher TOUTES les campagnes avant filtrage
79+
campaignData.forEach((campaign, index) => {
80+
console.log(`🎯 Campaign ${index + 1}:`, {
81+
id: campaign.id,
82+
name: campaign.name,
83+
isDraft: campaign.isDraft,
84+
paymentConfigured: campaign.paymentConfigured,
85+
hasStripePaymentMethod: Boolean(campaign.stripePaymentMethodId),
86+
isActive: campaign.isActive,
87+
willBeVisible: Boolean(campaign.stripePaymentMethodId)
88+
});
89+
});
90+
91+
// Afficher les campagnes qui ont une méthode de paiement
92+
const visibleCampaigns = campaignData.filter(campaign => {
93+
return Boolean(campaign.stripePaymentMethodId);
94+
});
95+
96+
console.log('🎯 APRÈS FILTRAGE - Campagnes visibles:', visibleCampaigns.length);
97+
console.log('🎯 Campagnes finales à afficher:', visibleCampaigns.map(c => ({
98+
id: c.id,
99+
name: c.name,
100+
isDraft: c.isDraft,
101+
paymentConfigured: c.paymentConfigured,
102+
hasStripePaymentMethod: Boolean(c.stripePaymentMethodId)
103+
})));
104+
105+
setCampaigns(visibleCampaigns);
106+
setLoading(false);
107+
} catch (error) {
108+
console.error('❌ Erreur lors de la récupération des campagnes:', error);
109+
setCampaigns([]);
110+
setLoading(false);
111+
}
112+
};
113+
114+
fetchCampaigns();
115+
}, [userId, authLoading]);
116+
117+
return { campaigns, loading };
118+
};

0 commit comments

Comments
 (0)