diff --git a/components/missions/missions-admin-panel.tsx b/components/missions/missions-admin-panel.tsx index 4c002c17..a9574e54 100644 --- a/components/missions/missions-admin-panel.tsx +++ b/components/missions/missions-admin-panel.tsx @@ -27,6 +27,7 @@ import { } from "../ui/dropdown-menu"; import { FileUpload } from "./file-upload"; import { AttachmentsList } from "./attachments-list"; +import { useRouter } from "next/navigation"; // Define interfaces for user and group data interface User { @@ -51,6 +52,7 @@ type GuardienRole = 'temps' | 'parole' | 'memoire'; type UserRole = GuardienRole | 'volontaire'; export function MissionsAdminPanel() { + const router = useRouter(); const [selectedServices, setSelectedServices] = useState([]); const [selectedProfils, setSelectedProfils] = useState([]); const [searchTerm, setSearchTerm] = useState(""); @@ -61,6 +63,7 @@ export function MissionsAdminPanel() { const [volontaires, setVolontaires] = useState([]); const [missionId, setMissionId] = useState(""); const [activeTab, setActiveTab] = useState("general"); + const [isSubmitting, setIsSubmitting] = useState(false); const [missionData, setMissionData] = useState<{ name?: string; logo?: string; @@ -316,6 +319,105 @@ export function MissionsAdminPanel() { return activeTab === "general"; }; + // Validate all required fields + const validateMission = () => { + const requiredFields = { + name: !!missionData.name, + oddScope: Array.isArray(missionData.oddScope) && missionData.oddScope.length > 0, + niveau: !!missionData.niveau, + intention: !!missionData.intention, + missionType: !!missionData.missionType, + donneurDOrdre: !!missionData.donneurDOrdre, + projection: !!missionData.projection, + participation: !!missionData.participation, + gardiens: gardienDuTemps !== null && gardienDeLaParole !== null && gardienDeLaMemoire !== null + }; + + const isValid = Object.values(requiredFields).every(field => field === true); + + if (!isValid) { + const missingFields = Object.entries(requiredFields) + .filter(([_, value]) => value === false) + .map(([key, _]) => key); + + toast({ + title: "Champs obligatoires manquants", + description: `Veuillez remplir tous les champs obligatoires: ${missingFields.join(", ")}`, + variant: "destructive", + }); + } + + return isValid; + }; + + // Handle mission submission + const handleSubmitMission = async () => { + if (!validateMission()) { + return; + } + + setIsSubmitting(true); + + try { + // Prepare the mission data + const guardians = { + "gardien-temps": gardienDuTemps, + "gardien-parole": gardienDeLaParole, + "gardien-memoire": gardienDeLaMemoire + }; + + const missionSubmitData = { + ...missionData, + services: selectedServices, + profils: selectedProfils, + guardians, + volunteers: volontaires + }; + + // Send to API + const response = await fetch('/api/missions', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(missionSubmitData), + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to create mission'); + } + + const data = await response.json(); + + toast({ + title: "Mission créée avec succès", + description: "Tous les gardiens ont été assignés et la mission a été enregistrée.", + }); + + // Redirect to missions list + router.push('/missions'); + + } catch (error) { + console.error('Error creating mission:', error); + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue lors de la création de la mission", + variant: "destructive", + }); + } finally { + setIsSubmitting(false); + } + }; + + // Function to handle input changes + const handleInputChange = (field: string, value: any) => { + setMissionData(prev => ({ + ...prev, + [field]: value + })); + }; + return (
@@ -332,8 +434,13 @@ export function MissionsAdminPanel() {
- - + + handleInputChange('name', e.target.value)} + />
@@ -355,8 +462,8 @@ export function MissionsAdminPanel() {
- - handleInputChange('oddScope', [value])}> @@ -383,8 +490,8 @@ export function MissionsAdminPanel() {
- - handleInputChange('niveau', value)}> @@ -399,7 +506,7 @@ export function MissionsAdminPanel() {
- +
Paragraphe @@ -411,7 +518,11 @@ export function MissionsAdminPanel() {
-