Saltar al contenido principal

Mostrar un calendario compartido

iCloud, Outlook y Google Calendar pueden compartir un calendario como enlace, que normalmente empieza por webcal:// o termina en .ics. El hook useCalendarFeed lee uno y te da sus eventos, listos para cualquiera de las vistas de calendario de la biblioteca, como 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%"
/>
);
};

Igual que con useFetch, tu widget espera al calendario antes de dibujarse, así que data siempre está disponible. Un enlace que no lleva a un calendario muestra un error.

Deja que la persona que instala tu widget pegue el enlace de su calendario en una entrada Sensible. El enlace de un calendario privado permite leerlo a cualquiera que lo tenga, así que mantenlo oculto como si fuera una contraseña.

Qué obtienes​

Los eventos llegan en el orden en que empiezan, cada uno con su name, start y end, y con su description, location y allDay cuando los tiene. calendar contiene el nombre del calendario.

  • Los eventos periódicos aparecen todos los días en que se repiten, incluida cualquier ocurrencia suelta que se haya movido o cancelado.
  • Las horas se leen en la zona horaria que usa el calendario y se muestran en la del marco.
  • Los eventos de todo el día, como los cumpleaños, conservan sus fechas esté donde esté el marco.

Opciones​

const { data } = useCalendarFeed(url, { days: 7, timeZone: "Europe/London" });
OpciónTipoValor predeterminadoDescripción
daysnumber7Cuántos días de eventos leer, desde el comienzo de hoy.
timeZonestringLa zona del marcoLa zona horaria en la que leer los días.

Varios calendarios​

Lee cada enlace y junta los eventos. El calendar de cada evento indica de cuál procede:

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

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