From 4c8ca8a7b48d8a783946baaa5fb3f0398059746c Mon Sep 17 00:00:00 2001 From: Brieuc Dubois <git@bhasher.com> Date: Wed, 9 Oct 2024 22:14:35 +0300 Subject: [PATCH] Improve booking logic #113 --- docs/cal.com.md | 7 ++----- frontend/src/lang/fr.json | 4 +++- frontend/src/routes/+page.svelte | 26 +++++++++++++++++++------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/docs/cal.com.md b/docs/cal.com.md index 915fdca4..e77616c3 100644 --- a/docs/cal.com.md +++ b/docs/cal.com.md @@ -2,8 +2,5 @@ LanguageLab utilise le site https://cal.com pour programmer les séances entre l Afin que l'intégration soit réussie, il est nécessaire de suivre les étapes suivantes: - Créer un compte sur https://cal.com. - - Créer un nouveau type d'événement de 60 mins (https://app.cal.com/event-types -> [+ Nouveau]). - - Créer un webhook (onglet "Webhooks") avec l'URL https://languagelab.sipr.ucl.ac.be/api/v1/webhooks/sessions comme Lien de l'abonné. Tous les "Déclencheurs d'évènement" (triggers) peuvent être laissés tels quel. "Secret" peut être laissé vide. [Créer un webhook] -  - - Copier le lien vers l'évènement [🔗], p.ex. https://cal.com/username/eventtype - - Coller le lien dans https://languagelab.sipr.ucl.ac.be/tutor/timeslots. + - Créer un nouveau type d'événement de 60 mins (https://app.cal.com/event-types -> [+ Nouveau]) avec un nom cohérent, par exemple `languagelab-tutorat` + - Indiquer le lien de l'évenement dans https://languagelab.sipr.ucl.ac.be/tutor/timeslots. Example: `username/languagelab-tutorat` diff --git a/frontend/src/lang/fr.json b/frontend/src/lang/fr.json index fcd432fa..ee50fe12 100644 --- a/frontend/src/lang/fr.json +++ b/frontend/src/lang/fr.json @@ -40,7 +40,9 @@ "currentSessions": "Sessions en cours", "plannedSessions": "Sessions planifiées", "pastSessions": "Sessions terminées", - "newContact": "Ajouter un contact" + "newContact": "Ajouter un contact", + "bookingSuccessful": "Session réservée avec succès", + "bookingFailed": "Erreur lors de la réservation de la session" }, "login": { "email": "E-mail", diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 5b3bd918..5acdde5d 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -17,7 +17,8 @@ getUserContactSessionsAPI } from '$lib/api/users'; import { createSessionFromCalComAPI } from '$lib/api/sessions'; - import { toastAlert, toastWarning } from '$lib/utils/toasts'; + import { toastAlert, toastSuccess, toastWarning } from '$lib/utils/toasts'; + import { get } from 'svelte/store'; let ready = false; $: contacts = [] as User[]; @@ -82,16 +83,27 @@ // @ts-ignore Cal('on', { action: 'bookingSuccessful', - callback: (e: any) => { + callback: async (e: any) => { if (!contact || !$user || !e.detail.data) { - toastAlert('Automatic session creation failed'); + toastAlert(get(t)('home.bookingFailed')); return; } - let date = new Date(e.detail.data.date); - let duration = e.detail.data.duration; - let end = new Date(date.getTime() + duration * 60000); - createSessionFromCalComAPI($user.id, contact.id, date, end); + const date = new Date(e.detail.data.date); + const duration = e.detail.data.duration; + const end = new Date(date.getTime() + duration * 60000); + const sess_id: number | null = await createSessionFromCalComAPI( + $user.id, + contact.id, + date, + end + ); + if (!sess_id) { + toastAlert(get(t)('home.bookingFailed')); + return; + } + toastSuccess(get(t)('home.bookingSuccessful')); + contactSessions = Session.parseAll(await getUserContactSessionsAPI($user!.id, contact.id)); } }); }); -- GitLab