minor : fix copy effect
This commit is contained in:
@@ -25,6 +25,7 @@ function AdminPageContent() {
|
||||
const [showDeleteModal, setShowDeleteModal] = useState(false);
|
||||
const [selectedCampaign, setSelectedCampaign] = useState<Campaign | null>(null);
|
||||
const [searchTerm, setSearchTerm] = useState('');
|
||||
const [copiedCampaignId, setCopiedCampaignId] = useState<string | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
loadCampaigns();
|
||||
@@ -83,6 +84,29 @@ function AdminPageContent() {
|
||||
return tiers.split(',').map(tier => `${tier.trim()}€`).join(', ');
|
||||
};
|
||||
|
||||
const copyToClipboard = async (text: string, campaignId: string) => {
|
||||
try {
|
||||
await navigator.clipboard.writeText(text);
|
||||
setCopiedCampaignId(campaignId);
|
||||
setTimeout(() => setCopiedCampaignId(null), 2000);
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la copie:', error);
|
||||
// Fallback pour les navigateurs qui ne supportent pas l'API Clipboard
|
||||
const textArea = document.createElement('textarea');
|
||||
textArea.value = text;
|
||||
document.body.appendChild(textArea);
|
||||
textArea.select();
|
||||
try {
|
||||
document.execCommand('copy');
|
||||
setCopiedCampaignId(campaignId);
|
||||
setTimeout(() => setCopiedCampaignId(null), 2000);
|
||||
} catch (fallbackError) {
|
||||
console.error('Erreur avec la méthode de fallback:', fallbackError);
|
||||
}
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
};
|
||||
|
||||
const filteredCampaigns = campaigns.filter(campaign =>
|
||||
campaign.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
campaign.description.toLowerCase().includes(searchTerm.toLowerCase())
|
||||
@@ -304,14 +328,14 @@ function AdminPageContent() {
|
||||
className="flex-1 text-sm bg-white dark:bg-slate-800 border-blue-300 dark:border-blue-600 text-blue-700 dark:text-blue-300 font-mono"
|
||||
/>
|
||||
<Button
|
||||
variant="outline"
|
||||
variant={copiedCampaignId === campaign.id ? "default" : "outline"}
|
||||
size="sm"
|
||||
onClick={() => {
|
||||
navigator.clipboard.writeText(`${window.location.origin}/campaigns/${campaign.id}/propose`);
|
||||
copyToClipboard(`${window.location.origin}/campaigns/${campaign.id}/propose`, campaign.id);
|
||||
}}
|
||||
className="text-xs"
|
||||
>
|
||||
Copier
|
||||
{copiedCampaignId === campaign.id ? '✓ Copié !' : 'Copier'}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user