Passa al contenuto principale

Mostrare un calendario condiviso

iCloud, Outlook e Google Calendar possono condividere un calendario sotto forma di link, che di solito inizia con webcal:// o finisce con .ics. L’hook useCalendarFeed legge uno di questi link e ti restituisce i suoi eventi, pronti per qualsiasi vista calendario della libreria, come 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%"
/>
);
};

Come con useFetch, il tuo widget attende il calendario prima di essere disegnato, quindi data c’è sempre. Un link che non porta a un calendario mostra un errore.

Fai incollare a chi installa il tuo widget il link del suo calendario in un input Sensibile. Il link di un calendario privato permette a chiunque lo abbia di leggere il calendario, quindi tienilo nascosto come una password.

Che cosa ottieni​

Gli eventi arrivano nell’ordine in cui iniziano, ciascuno con name, start ed end, e con description, location e allDay quando li ha. calendar contiene il nome del calendario.

  • Gli eventi ricorrenti compaiono in ogni giorno in cui si ripetono, comprese le singole occorrenze spostate o annullate.
  • Gli orari vengono letti nel fuso orario del calendario e mostrati in quello della cornice.
  • Gli eventi che durano tutto il giorno, come i compleanni, mantengono le loro date ovunque si trovi la cornice.

Opzioni​

const { data } = useCalendarFeed(url, { days: 7, timeZone: "Europe/London" });
OpzioneTipoPredefinitoDescrizione
daysnumber7Quanti giorni di eventi leggere, a partire dall’inizio di oggi.
timeZonestringIl fuso orario della corniceIl fuso orario in cui leggere i giorni.

Più calendari​

Leggi ogni link e unisci gli eventi. Il campo calendar di ogni evento indica da quale calendario proviene:

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

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