W n8n attention vm

This commit is contained in:
alma 2025-05-24 20:55:12 +02:00
parent 67d79233ad
commit e37edbce19

View File

@ -51,6 +51,24 @@ interface Group {
type GuardienRole = 'temps' | 'parole' | 'memoire'; type GuardienRole = 'temps' | 'parole' | 'memoire';
type UserRole = GuardienRole | 'volontaire'; type UserRole = GuardienRole | 'volontaire';
interface MissionData {
name?: string;
logo?: {
data: string;
name: string;
type: string;
};
oddScope?: string[];
niveau?: string;
intention?: string;
missionType?: string;
donneurDOrdre?: string;
projection?: string;
services?: string[];
profils?: string[];
participation?: string;
}
export function MissionsAdminPanel() { export function MissionsAdminPanel() {
const router = useRouter(); const router = useRouter();
const [selectedServices, setSelectedServices] = useState<string[]>([]); const [selectedServices, setSelectedServices] = useState<string[]>([]);
@ -66,19 +84,7 @@ export function MissionsAdminPanel() {
const [isSubmitting, setIsSubmitting] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false);
const [selectedLogoFile, setSelectedLogoFile] = useState<File | null>(null); const [selectedLogoFile, setSelectedLogoFile] = useState<File | null>(null);
const [selectedAttachments, setSelectedAttachments] = useState<File[]>([]); const [selectedAttachments, setSelectedAttachments] = useState<File[]>([]);
const [missionData, setMissionData] = useState<{ const [missionData, setMissionData] = useState<MissionData>({});
name?: string;
logo?: string;
oddScope?: string[];
niveau?: string;
intention?: string;
missionType?: string;
donneurDOrdre?: string;
projection?: string;
services?: string[];
participation?: string;
profils?: string[];
}>({});
// State for storing fetched data // State for storing fetched data
const [users, setUsers] = useState<User[]>([]); const [users, setUsers] = useState<User[]>([]);
@ -399,63 +405,31 @@ export function MissionsAdminPanel() {
setIsSubmitting(true); setIsSubmitting(true);
try { try {
// First, upload the logo if it exists // Prepare the mission data
let logoPath = null; const guardians = {
if (missionData.logo) { "gardien-temps": gardienDuTemps,
try { "gardien-parole": gardienDeLaParole,
const formData = new FormData(); "gardien-memoire": gardienDeLaMemoire
formData.append('type', 'logo');
formData.append('file', missionData.logo);
const uploadResponse = await fetch('/api/missions/upload', {
method: 'POST',
body: formData
});
if (!uploadResponse.ok) {
throw new Error('Failed to upload logo');
}
const uploadData = await uploadResponse.json();
logoPath = uploadData.filePath;
} catch (error) {
console.error('Error uploading logo:', error);
toast({
title: "Warning",
description: "Failed to upload logo. Mission will be created without logo.",
variant: "destructive",
});
}
}
// Prepare the mission data with logo path
const formattedData = {
name: missionData.name || '',
oddScope: (Array.isArray(missionData.oddScope) ? missionData.oddScope : [missionData.oddScope]).filter(Boolean) as string[],
niveau: missionData.niveau,
intention: missionData.intention,
missionType: missionData.missionType,
donneurDOrdre: missionData.donneurDOrdre,
projection: missionData.projection,
services: (selectedServices || []).filter(Boolean) as string[],
participation: missionData.participation,
profils: (selectedProfils || []).filter(Boolean) as string[],
guardians: {
'gardien-temps': gardienDuTemps || '',
'gardien-parole': gardienDeLaParole || '',
'gardien-memoire': gardienDeLaMemoire || ''
},
volunteers: (volontaires || []).filter(Boolean) as string[],
logo: logoPath
}; };
const missionSubmitData = {
...missionData,
services: selectedServices,
profils: selectedProfils,
guardians,
volunteers: volontaires,
logo: missionData.logo // This will now include the full logo data object
};
console.log('Submitting mission data:', JSON.stringify(missionSubmitData, null, 2));
// Send to API // Send to API
const response = await fetch('/api/missions', { const response = await fetch('/api/missions', {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
body: JSON.stringify(formattedData), body: JSON.stringify(missionSubmitData),
}); });
if (!response.ok) { if (!response.ok) {
@ -522,15 +496,13 @@ export function MissionsAdminPanel() {
<label className="block text-sm font-medium mb-1 text-gray-700">Logo</label> <label className="block text-sm font-medium mb-1 text-gray-700">Logo</label>
<FileUpload <FileUpload
type="logo" type="logo"
missionId={draftMissionId} isNewMission={true}
isNewMission={false} onFileSelect={(fileData) => {
onUploadComplete={(data) => { setMissionData(prev => ({
if (data?.filePath) { ...prev,
setUploadedLogoPath(data.filePath); logo: fileData
setMissionData(prev => ({ ...prev, logo: data.filePath })); }));
}
}} }}
onFileSelect={undefined}
/> />
</div> </div>