diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json new file mode 100644 index 0000000..6fa71c1 --- /dev/null +++ b/public/locales/en/translation.json @@ -0,0 +1,12 @@ +{ + "app": { + "title": "NoteFlow" + }, + "common": { + "loading": "Loading...", + "error": "An error occurred", + "save": "Save", + "cancel": "Cancel", + "delete": "Delete" + } +} \ No newline at end of file diff --git a/public/locales/fr-FR/translation.json b/public/locales/fr-FR/translation.json new file mode 100644 index 0000000..6c2a6fe --- /dev/null +++ b/public/locales/fr-FR/translation.json @@ -0,0 +1,12 @@ +{ + "app": { + "title": "NoteFlow" + }, + "common": { + "loading": "Chargement...", + "error": "Une erreur est survenue", + "save": "Enregistrer", + "cancel": "Annuler", + "delete": "Supprimer" + } +} \ No newline at end of file diff --git a/src/pages/mobile/CalendarPage.tsx b/src/pages/mobile/CalendarPage.tsx index ebc3b74..bf58c20 100644 --- a/src/pages/mobile/CalendarPage.tsx +++ b/src/pages/mobile/CalendarPage.tsx @@ -19,6 +19,13 @@ export default function CalendarPage() { const [editEventModal, setEditEventModal] = useState<{ open: boolean; event?: CalendarEvent }>({ open: false }); const [loading, setLoading] = useState(false); + // Form states + const [newEventTitle, setNewEventTitle] = useState(""); + const [newEventDescription, setNewEventDescription] = useState(""); + const [newEventLocation, setNewEventLocation] = useState(""); + const [newEventStart, setNewEventStart] = useState(""); + const [newEventEnd, setNewEventEnd] = useState(""); + const loadEvents = async () => { try { const data = await CalendarService.getEvents(100); @@ -46,6 +53,92 @@ export default function CalendarPage() { } }; + const resetForm = () => { + setNewEventTitle(""); + setNewEventDescription(""); + setNewEventLocation(""); + // Default start time: next hour + const now = new Date(); + now.setMinutes(0, 0, 0); + now.setHours(now.getHours() + 1); + const end = new Date(now); + end.setHours(end.getHours() + 1); + + // Format for datetime-local input (YYYY-MM-DDTHH:mm) + const formatDateTime = (date: Date) => { + const pad = (n: number) => n.toString().padStart(2, '0'); + return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`; + }; + + setNewEventStart(formatDateTime(now)); + setNewEventEnd(formatDateTime(end)); + }; + + useEffect(() => { + if (addEventModal) { + resetForm(); + } + }, [addEventModal]); + + useEffect(() => { + if (editEventModal.open && editEventModal.event) { + const event = editEventModal.event; + setNewEventTitle(event.title); + setNewEventDescription(event.description || ""); + setNewEventLocation(event.location || ""); + + const formatDateTime = (dateStr: string) => { + const date = new Date(dateStr); + const pad = (n: number) => n.toString().padStart(2, '0'); + return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`; + }; + + setNewEventStart(formatDateTime(event.start_time)); + setNewEventEnd(formatDateTime(event.end_time)); + } + }, [editEventModal.open]); + + const handleCreateEvent = async () => { + if (!newEventTitle || !newEventStart || !newEventEnd) { + showError("Veuillez remplir les champs obligatoires"); + return; + } + + try { + await CalendarService.createEvent({ + title: newEventTitle, + description: newEventDescription, + location: newEventLocation, + startDateTime: new Date(newEventStart).toISOString(), + endDateTime: new Date(newEventEnd).toISOString(), + }); + showSuccess("Événement créé avec succès"); + setAddEventModal(false); + loadEvents(); + } catch (error) { + showError("Erreur lors de la création de l'événement"); + } + }; + + const handleUpdateEvent = async () => { + if (!editEventModal.event || !newEventTitle || !newEventStart || !newEventEnd) return; + + try { + await CalendarService.updateEvent(editEventModal.event.id, { + title: newEventTitle, + description: newEventDescription, + location: newEventLocation, + startDateTime: new Date(newEventStart).toISOString(), + endDateTime: new Date(newEventEnd).toISOString(), + }); + showSuccess("Événement modifié avec succès"); + setEditEventModal({ open: false }); + loadEvents(); + } catch (error) { + showError("Erreur lors de la modification de l'événement"); + } + }; + const totalPages = Math.ceil(events.length / EVENTS_PER_PAGE); const paginatedEvents = events.slice(page * EVENTS_PER_PAGE, (page + 1) * EVENTS_PER_PAGE); @@ -79,10 +172,9 @@ export default function CalendarPage() { return (
setAddEventModal(true)} label="Ajouter un événement" /> - {/* Add Event Modal - Placeholder for now */} + {/* Add Event Modal */} Nouvel événement - - Cette fonctionnalité sera disponible prochainement - +
+
+ + setNewEventTitle(e.target.value)} + /> +
+
+
+ + setNewEventStart(e.target.value)} + /> +
+
+ + setNewEventEnd(e.target.value)} + /> +
+
+
+ + setNewEventLocation(e.target.value)} + /> +
+
+ + setNewEventDescription(e.target.value)} + /> +
+ +
- {/* Edit Event Modal - Placeholder for now */} + {/* Edit Event Modal */} setEditEventModal({ open })}> Modifier l'événement - - Cette fonctionnalité sera disponible prochainement - +
+
+ + setNewEventTitle(e.target.value)} + /> +
+
+
+ + setNewEventStart(e.target.value)} + /> +
+
+ + setNewEventEnd(e.target.value)} + /> +
+
+
+ + setNewEventLocation(e.target.value)} + /> +
+
+ + setNewEventDescription(e.target.value)} + /> +
+ +