"use client"; import { useState, useTransition } from "react"; import { Button } from "@/components/ui/button"; import { disconnectCalendarAction, listAvailableCalendarsAction, selectCalendarAction, syncNowAction, } from "../actions/calendar"; import type { RemoteCalendarInfo } from "@/services/calendar/types"; export interface ConnectionState { connected: boolean; accountEmail?: string; selectedCalendarName?: string; lastSyncAt?: string; lastSyncError?: string | null; } export function CalendarConnectionPanel({ initial, configured }: { initial: ConnectionState; configured: boolean }) { const [state, setState] = useState(initial); const [isPending, startTransition] = useTransition(); const [message, setMessage] = useState(null); const [calendars, setCalendars] = useState(null); const sync = () => { setMessage(null); startTransition(async () => { const result = await syncNowAction(); setMessage(result.success ? "Sync complete." : (result.error ?? "Sync failed.")); }); }; const disconnect = () => { setMessage(null); startTransition(async () => { await disconnectCalendarAction(); setState({ connected: false }); setMessage("Disconnected. Existing calendar events were left as they are."); }); }; const loadCalendars = () => { setMessage(null); startTransition(async () => { const result = await listAvailableCalendarsAction(); if (!result.success) { setMessage(result.error ?? "Couldn't load calendars."); return; } setCalendars(result.calendars ?? []); }); }; const chooseCalendar = (calendar: RemoteCalendarInfo) => { startTransition(async () => { const result = await selectCalendarAction(calendar.id, calendar.name); if (result.success) { setState((prev) => ({ ...prev, selectedCalendarName: calendar.name })); setCalendars(null); setMessage(`Now syncing to "${calendar.name}".`); } }); }; if (!state.connected) { return (

Google Calendar

Sync your confirmed appointments to your own Google Calendar. This connects a Google account separately from sign-in — you can use a different one if you like.

{message &&

{message}

} {configured ? ( ) : (

Google Calendar sync is not configured on this deployment yet.

)}
); } return (

Google Calendar

Connected as {state.accountEmail}

Syncing to “{state.selectedCalendarName}”

{state.lastSyncAt &&

Last synced {new Date(state.lastSyncAt).toLocaleString()}

} {state.lastSyncError &&

Last sync error: {state.lastSyncError}

}
{message &&

{message}

} {calendars ? (
    {calendars.map((calendar) => (
  • ))}
) : null}
); }