From ebe65cea3b992d94ef46f2b3d9fd8c36d4eae500 Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Fri, 13 Mar 2026 10:06:48 -0500 Subject: [PATCH 1/2] fix: restore Google Calendar to settings and integrations pages Google Calendar uses its own standalone DB table and OAuth flow, not the generic integrations provider system. Commit 4f882963 replaced its dedicated settings entry with a generic "Service Connections" entry, making it unreachable from the UI. Re-add Google Calendar entry to settings page, add a status card to the integrations hub using a new useGoogleCalendarStatus hook (reuses existing API endpoint), and remove dead code that tried to link Google Calendar from the generic connections list. Co-Authored-By: Claude Opus 4.6 --- .../src/app/settings/integrations/page.tsx | 83 +++++++++++++------ apps/web/src/app/settings/page.tsx | 9 +- apps/web/src/hooks/useIntegrations.ts | 23 +++++ 3 files changed, 89 insertions(+), 26 deletions(-) diff --git a/apps/web/src/app/settings/integrations/page.tsx b/apps/web/src/app/settings/integrations/page.tsx index b178b4bad8..b0d455305a 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, 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,61 @@ export default function IntegrationsSettingsPage() {
+ {/* Google Calendar */} + + + + + Google Calendar + + + Sync events with Google Calendar. + + + + {gcalLoading ? ( + + ) : gcalConnected && gcalConnection ? ( +
+
+ +
+ Connected +

+ {gcalConnection.googleEmail} +

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

+ Connect your Google Calendar to sync events. +

+
+
+ +
+ )} +
+
+ {/* Connected Integrations */} @@ -161,10 +210,8 @@ export default function IntegrationsSettingsPage() { handleVisibilityChange(connection.id, v)} - onDetail={(href) => router.push(href)} onDisconnect={() => setDisconnectConnection(connection)} /> ))} @@ -334,17 +381,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 +443,6 @@ function ConnectionRow({ )} - {detailHref && ( - - )}