diff --git a/apps/web/src/app/settings/integrations/page.tsx b/apps/web/src/app/settings/integrations/page.tsx index b178b4bad8..a24e1491bf 100644 --- a/apps/web/src/app/settings/integrations/page.tsx +++ b/apps/web/src/app/settings/integrations/page.tsx @@ -12,9 +12,9 @@ import { SelectValue, } from '@/components/ui/select'; import { Skeleton } from '@/components/ui/skeleton'; -import { ArrowLeft, Cable, Plug2, Loader2, ExternalLink, AlertCircle, Package, Clock } from 'lucide-react'; +import { ArrowLeft, Cable, Calendar, Plug2, Loader2, AlertCircle, Package, Clock, CheckCircle2 } from 'lucide-react'; import { toast } from 'sonner'; -import { useProviders, useUserConnections, useAvailableBuiltins } from '@/hooks/useIntegrations'; +import { useProviders, useUserConnections, useAvailableBuiltins, useGoogleCalendarStatus } from '@/hooks/useIntegrations'; import { IntegrationStatusBadge } from '@/components/integrations/IntegrationStatusBadge'; import { ConnectIntegrationDialog } from '@/components/integrations/ConnectIntegrationDialog'; import { DisconnectWithAgentCount } from '@/components/integrations/DisconnectConfirmDialog'; @@ -34,6 +34,7 @@ export default function IntegrationsSettingsPage() { const { connections, isLoading: loadingConnections, error: connectionsError, mutate: mutateConnections } = useUserConnections(); const { builtins, isLoading: loadingBuiltins, error: builtinsError, mutate: mutateBuiltins } = useAvailableBuiltins(); + const { connected: gcalConnected, connection: gcalConnection, error: gcalError, isLoading: gcalLoading } = useGoogleCalendarStatus(); const [connectProvider, setConnectProvider] = useState(null); const [disconnectConnection, setDisconnectConnection] = useState(null); @@ -103,13 +104,6 @@ export default function IntegrationsSettingsPage() { const isLoading = loadingProviders || loadingConnections; - const getProviderDetailHref = (connection: SafeConnection) => { - if (connection.provider?.slug === 'google-calendar') { - return '/settings/integrations/google-calendar'; - } - return null; - }; - return (
@@ -129,6 +123,66 @@ export default function IntegrationsSettingsPage() {
+ {/* Google Calendar */} + + + + + Google Calendar + + + Sync events with Google Calendar. + + + + {gcalLoading ? ( + + ) : gcalError ? ( +
+ + Failed to load Google Calendar status +
+ ) : gcalConnected && gcalConnection ? ( +
+
+ +
+ Connected +

+ {gcalConnection.googleEmail} +

+
+
+ +
+ ) : ( +
+
+ +
+ Not connected +

+ Connect your Google Calendar to sync events. +

+
+
+ +
+ )} +
+
+ {/* Connected Integrations */} @@ -161,10 +215,8 @@ export default function IntegrationsSettingsPage() { handleVisibilityChange(connection.id, v)} - onDetail={(href) => router.push(href)} onDisconnect={() => setDisconnectConnection(connection)} /> ))} @@ -334,17 +386,13 @@ function formatRelativeTime(dateStr: string): string { function ConnectionRow({ connection, - detailHref, updatingVisibility, onVisibilityChange, - onDetail, onDisconnect, }: { connection: SafeConnection; - detailHref: string | null; updatingVisibility: boolean; onVisibilityChange: (visibility: string) => void; - onDetail: (href: string) => void; onDisconnect: () => void; }) { const accountInfo = connection.accountMetadata; @@ -400,16 +448,6 @@ function ConnectionRow({ )} - {detailHref && ( - - )}