Skip to content

Commit 6faada2

Browse files
Refine integration status display
Integrate connection status into the "Integration" section header to accurately reflect the campaign's connection method, avoiding redundant "not connected to plugin" messages when another integration is active.
1 parent cce983f commit 6faada2

File tree

5 files changed

+184
-158
lines changed

5 files changed

+184
-158
lines changed

src/components/CampaignIntegrationSettings.tsx

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,92 @@
11

2-
import { useState } from 'react';
2+
import { useState, useEffect } from 'react';
33
import { Campaign } from '@/types';
44
import { useAuth } from '@/hooks/useAuth';
55
import { IntegrationTypeSelector } from './campaign-integration/IntegrationTypeSelector';
66
import { CodeIntegration } from './campaign-integration/CodeIntegration';
77
import { PluginIntegration } from './campaign-integration/PluginIntegration';
8-
import { IntegrationStatusCard } from './campaign-integration/IntegrationStatusCard';
98
import { TabsContent } from '@/components/ui/tabs';
9+
import { collection, query, where, getDocs } from 'firebase/firestore';
10+
import { db } from '@/lib/firebase';
11+
12+
interface IntegrationStatus {
13+
hasCodeIntegration: boolean;
14+
hasPluginIntegration: boolean;
15+
pluginConfigs: Array<{
16+
id: string;
17+
type: 'wordpress' | 'shopify';
18+
domain: string;
19+
active: boolean;
20+
}>;
21+
activeIntegrationType: 'code' | 'plugin';
22+
}
1023

1124
interface CampaignIntegrationSettingsProps {
1225
campaign: Campaign;
26+
onIntegrationStatusChange?: (status: IntegrationStatus) => void;
1327
}
1428

15-
export const CampaignIntegrationSettings = ({ campaign }: CampaignIntegrationSettingsProps) => {
29+
export const CampaignIntegrationSettings = ({ campaign, onIntegrationStatusChange }: CampaignIntegrationSettingsProps) => {
1630
const { user } = useAuth();
1731
const [integrationType, setIntegrationType] = useState<'code' | 'plugin'>('code');
32+
const [integrationStatus, setIntegrationStatus] = useState<IntegrationStatus>({
33+
hasCodeIntegration: true,
34+
hasPluginIntegration: false,
35+
pluginConfigs: [],
36+
activeIntegrationType: 'code'
37+
});
38+
39+
useEffect(() => {
40+
const loadIntegrationStatus = async () => {
41+
try {
42+
const pluginQuery = query(
43+
collection(db, 'plugin_configs'),
44+
where('campaignId', '==', campaign.id)
45+
);
46+
47+
const pluginSnapshot = await getDocs(pluginQuery);
48+
const plugins = pluginSnapshot.docs.map(doc => ({
49+
id: doc.id,
50+
...doc.data()
51+
})) as Array<{
52+
id: string;
53+
type: 'wordpress' | 'shopify';
54+
domain: string;
55+
active: boolean;
56+
}>;
57+
58+
const newStatus: IntegrationStatus = {
59+
hasCodeIntegration: true,
60+
hasPluginIntegration: plugins.length > 0,
61+
pluginConfigs: plugins,
62+
activeIntegrationType: integrationType
63+
};
64+
65+
setIntegrationStatus(newStatus);
66+
onIntegrationStatusChange?.(newStatus);
67+
} catch (error) {
68+
console.error('Erreur lors du chargement du statut:', error);
69+
}
70+
};
71+
72+
loadIntegrationStatus();
73+
}, [campaign.id, integrationType, onIntegrationStatusChange]);
74+
75+
const handleTypeChange = (type: 'code' | 'plugin') => {
76+
setIntegrationType(type);
77+
const updatedStatus = {
78+
...integrationStatus,
79+
activeIntegrationType: type
80+
};
81+
setIntegrationStatus(updatedStatus);
82+
onIntegrationStatusChange?.(updatedStatus);
83+
};
1884

1985
return (
2086
<div className="space-y-6">
21-
<IntegrationStatusCard
22-
campaignId={campaign.id}
23-
activeIntegrationType={integrationType}
24-
/>
25-
2687
<IntegrationTypeSelector
2788
activeType={integrationType}
28-
onTypeChange={setIntegrationType}
89+
onTypeChange={handleTypeChange}
2990
>
3091
<TabsContent value="code">
3192
<CodeIntegration campaign={campaign} />

src/components/CampaignSettingsDialog.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
import { useState } from 'react';
23
import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog';
34
import { Button } from '@/components/ui/button';
45
import { Settings } from 'lucide-react';
@@ -9,11 +10,25 @@ import { CampaignSettingsHeader } from '@/components/campaign-settings/CampaignS
910
import { CampaignSettingsTabContent } from '@/components/campaign-settings/CampaignSettingsTabContent';
1011
import { useCampaignSettingsDialog } from '@/hooks/useCampaignSettingsDialog';
1112

13+
interface IntegrationStatus {
14+
hasCodeIntegration: boolean;
15+
hasPluginIntegration: boolean;
16+
pluginConfigs: Array<{
17+
id: string;
18+
type: 'wordpress' | 'shopify';
19+
domain: string;
20+
active: boolean;
21+
}>;
22+
activeIntegrationType: 'code' | 'plugin';
23+
}
24+
1225
interface CampaignSettingsDialogProps {
1326
campaign: Campaign;
1427
}
1528

1629
export const CampaignSettingsDialog = ({ campaign }: CampaignSettingsDialogProps) => {
30+
const [integrationStatus, setIntegrationStatus] = useState<IntegrationStatus | undefined>();
31+
1732
const {
1833
open,
1934
setOpen,
@@ -31,6 +46,10 @@ export const CampaignSettingsDialog = ({ campaign }: CampaignSettingsDialogProps
3146
handlePaymentMethodChange,
3247
} = useCampaignSettingsDialog(campaign);
3348

49+
const handleIntegrationStatusChange = (status: IntegrationStatus) => {
50+
setIntegrationStatus(status);
51+
};
52+
3453
return (
3554
<>
3655
<Dialog open={open} onOpenChange={setOpen}>
@@ -53,7 +72,10 @@ export const CampaignSettingsDialog = ({ campaign }: CampaignSettingsDialogProps
5372
{/* CONTENU DROITE - FLEX */}
5473
<div className="flex-1 h-full flex flex-col min-w-0 overflow-hidden">
5574
<div className="flex-shrink-0">
56-
<CampaignSettingsHeader activeTab={activeTab} />
75+
<CampaignSettingsHeader
76+
activeTab={activeTab}
77+
integrationStatus={integrationStatus}
78+
/>
5779
</div>
5880

5981
<div className="flex-1 overflow-auto min-w-0 w-full max-w-full">
@@ -70,6 +92,7 @@ export const CampaignSettingsDialog = ({ campaign }: CampaignSettingsDialogProps
7092
onCancel={() => setOpen(false)}
7193
onDeleteClick={handleDeleteClick}
7294
onPaymentMethodChange={handlePaymentMethodChange}
95+
onIntegrationStatusChange={handleIntegrationStatusChange}
7396
/>
7497
</div>
7598
</div>

src/components/campaign-integration/IntegrationStatusCard.tsx

Lines changed: 0 additions & 145 deletions
This file was deleted.

0 commit comments

Comments
 (0)