"use client"; // Force dynamic rendering to avoid prerendering issues with client components export const dynamic = "force-dynamic"; import { useState } from "react"; import { DashboardLayout } from "@/components/layout/sidebar"; import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Calendar as CalendarIcon, LayoutGrid } from "lucide-react"; import { CalendarProvider, useCalendar, CalendarAuth, EventList, CalendarSelector, CalendarControls, CalendarGrid, EventDetailModal, CalendarViewSwitcher, TaskCalendarIntegration, type CalendarView, } from "@/components/calendar"; import { GoogleOAuthProvider } from "@react-oauth/google"; import { format } from "date-fns"; import { siteUrls } from "@/lib/config/sites"; // Google OAuth Client ID - should be from environment variable const GOOGLE_CLIENT_ID = process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID || ""; interface CalendarEvent { id: string; summary: string; description?: string; start: { dateTime?: string; date?: string; }; end: { dateTime?: string; date?: string; }; location?: string; calendarId: string; calendarName: string; htmlLink?: string; } function CalendarContent() { const { isAuthenticated, selectedCalendars, calendars, events } = useCalendar(); const [currentView, setCurrentView] = useState("month"); const [selectedEvent, setSelectedEvent] = useState(null); const today = format(new Date(), "EEEE, MMMM d, yyyy"); // Calculate today's stats const todayEvents = events.filter((event) => { const eventDate = event.start.dateTime || event.start.date; if (!eventDate) return false; const date = new Date(eventDate); const now = new Date(); return ( date.getDate() === now.getDate() && date.getMonth() === now.getMonth() && date.getFullYear() === now.getFullYear() ); }); const upcomingEvents = events.filter((event) => { const eventDate = event.start.dateTime || event.start.date; if (!eventDate) return false; return new Date(eventDate) > new Date(); }); return (
{!isAuthenticated ? (
) : ( <>
setCurrentView(view)} />
{/* Main Content - Calendar Grid or List */}
{currentView === "month" ? ( ) : ( <>

Upcoming Events

)}
{/* Sidebar */}
{/* Today's Summary */} Today's Summary
Events Today {todayEvents.length}
Upcoming {upcomingEvents.length}
Calendars {selectedCalendars.length} / {calendars.length}
{/* Calendar Selector */} {/* Task-Calendar Integration */} {/* Quick Actions */} Quick Links Open Google Calendar → Calendar Settings → Open Gantt Board →
)} {/* Event Detail Modal */} setSelectedEvent(null)} />
); } export default function CalendarPage() { // If no Google Client ID is configured, show a message if (!GOOGLE_CLIENT_ID) { return (
Google Calendar Not Configured

To use Google Calendar integration, please set up a Google OAuth Client ID and add it to your environment variables as NEXT_PUBLIC_GOOGLE_CLIENT_ID.

); } return ( ); }