diff --git a/src/components/CreateCampaignModal.tsx b/src/components/CreateCampaignModal.tsx
index 0d3c4f6..4373872 100644
--- a/src/components/CreateCampaignModal.tsx
+++ b/src/components/CreateCampaignModal.tsx
@@ -47,13 +47,79 @@ export default function CreateCampaignModal({ isOpen, onClose, onSuccess }: Crea
}
};
+ const generateOptimalTiers = (budget: number): string => {
+ if (budget <= 0) return "0";
+
+ // Cas spéciaux pour des budgets courants
+ if (budget === 10000) {
+ return "0, 500, 1000, 2000, 3000, 5000, 7500, 10000";
+ }
+ if (budget === 8000) {
+ return "0, 500, 1000, 2000, 3000, 4000, 6000, 8000";
+ }
+
+ const tiers = [0];
+
+ // Déterminer les paliers "ronds" selon la taille du budget
+ let roundValues: number[] = [];
+
+ if (budget <= 100) {
+ // Petits budgets : multiples de 5, 10, 25
+ roundValues = [5, 10, 25, 50, 75, 100];
+ } else if (budget <= 500) {
+ // Budgets moyens : multiples de 25, 50, 100
+ roundValues = [25, 50, 75, 100, 150, 200, 250, 300, 400, 500];
+ } else if (budget <= 2000) {
+ // Budgets moyens-grands : multiples de 100, 250, 500
+ roundValues = [100, 250, 500, 750, 1000, 1250, 1500, 1750, 2000];
+ } else if (budget <= 10000) {
+ // Gros budgets : multiples de 500, 1000, 2000
+ roundValues = [500, 1000, 1500, 2000, 2500, 3000, 4000, 5000, 6000, 7500, 10000];
+ } else {
+ // Très gros budgets : multiples de 1000, 2000, 5000
+ roundValues = [1000, 2000, 3000, 5000, 7500, 10000, 15000, 20000, 25000, 50000];
+ }
+
+ // Sélectionner les paliers qui sont inférieurs ou égaux au budget
+ const validTiers = roundValues.filter(tier => tier <= budget);
+
+ // Prendre 6-8 paliers intermédiaires + 0 et le budget final
+ const targetCount = Math.min(8, Math.max(6, validTiers.length));
+ const step = Math.max(1, Math.floor(validTiers.length / targetCount));
+
+ for (let i = 0; i < validTiers.length && tiers.length < targetCount + 1; i += step) {
+ if (!tiers.includes(validTiers[i])) {
+ tiers.push(validTiers[i]);
+ }
+ }
+
+ // Ajouter le budget final s'il n'est pas déjà présent
+ if (!tiers.includes(budget)) {
+ tiers.push(budget);
+ }
+
+ // Trier et retourner
+ return tiers.sort((a, b) => a - b).join(', ');
+ };
+
const handleChange = (e: React.ChangeEvent) => {
+ const { name, value } = e.target;
setFormData(prev => ({
...prev,
- [e.target.name]: e.target.value
+ [name]: value
}));
};
+ const handleBudgetBlur = (e: React.FocusEvent) => {
+ const budget = parseInt(e.target.value);
+ if (!isNaN(budget) && budget > 0 && !formData.spending_tiers) {
+ setFormData(prev => ({
+ ...prev,
+ spending_tiers: generateOptimalTiers(budget)
+ }));
+ }
+ };
+
const handleClose = () => {
setFormData({
title: '',
@@ -108,13 +174,14 @@ export default function CreateCampaignModal({ isOpen, onClose, onSuccess }: Crea
-
+
Séparez les montants par des virgules (ex: 0, 10, 25, 50, 100)
+ {formData.budget_per_user && !formData.spending_tiers && (
+
+ 💡 Les paliers seront générés automatiquement après avoir saisi le budget
+
+ )}