Aller au contenu principal

Afficher un calendrier partagé

iCloud, Outlook et Google Agenda permettent tous de partager un calendrier sous forme de lien, qui commence en général par webcal:// ou se termine par .ics. Le hook useCalendarFeed lit un tel lien et vous donne ses événements, prêts pour n’importe quelle vue de calendrier de la bibliothèque, comme AgendaCalendar.

import { useCalendarFeed } from "~lib/calendar";
import { AgendaCalendar } from "~lib/calendar/agenda-calendar";
import { useInputs } from "~lib/use-inputs";
import { useScheduledDate } from "~lib/use-scheduled-date";

export const Widget = () => {
const { CALENDAR_LINK } = useInputs();
const { data: events } = useCalendarFeed(CALENDAR_LINK, { days: 3 });
const today = useScheduledDate();

return (
<AgendaCalendar
events={events}
startDate={today}
days={3}
width="100%"
height="100%"
/>
);
};

Comme avec useFetch, votre widget attend le calendrier avant d’être dessiné : data est donc toujours là. Un lien qui ne mène pas à un calendrier affiche une erreur.

Laissez la personne qui installe votre widget coller le lien de son calendrier dans une entrée Sensible. Le lien d’un calendrier privé permet à quiconque le possède de lire ce calendrier : gardez-le donc caché, comme un mot de passe.

Ce que vous obtenez​

Les événements arrivent dans l’ordre de leur début, chacun avec son name, son start et son end, ainsi que sa description, son location et son allDay lorsqu’il en a. calendar contient le nom du calendrier.

  • Les événements récurrents apparaissent chaque jour où ils se répètent, y compris une occurrence isolée qui a été déplacée ou annulée.
  • Les heures sont lues dans le fuseau horaire du calendrier et affichées dans celui du cadre.
  • Les événements sur toute la journée, comme les anniversaires, gardent leurs dates où que se trouve le cadre.

Options​

const { data } = useCalendarFeed(url, { days: 7, timeZone: "Europe/London" });
OptionTypePar défautDescription
daysnumber7Le nombre de jours d’événements à lire, à partir du début de la journée.
timeZonestringLe fuseau du cadreLe fuseau horaire dans lequel lire les jours.

Plusieurs calendriers​

Lisez chaque lien et réunissez les événements. Le calendar de chaque événement indique de quel calendrier il vient :

const { data: work } = useCalendarFeed(WORK_LINK);
const { data: family } = useCalendarFeed(FAMILY_LINK);

return <ScheduleCalendar events={[...work, ...family]} />;