'use client'; import { useEffect, useState, useCallback } from 'react'; import { useSearchParams } from 'next/navigation'; import { getIntegrations, disconnectIntegration, deleteAccount, logout } from '@/lib/api'; import type { Integration } from '@oo/shared-types'; import { Suspense } from 'react'; function ConnectPageInner() { const searchParams = useSearchParams(); const [integrations, setIntegrations] = useState([]); const [loading, setLoading] = useState(true); const [disconnecting, setDisconnecting] = useState(null); const [deleting, setDeleting] = useState(false); const load = useCallback(async () => { const { integrations: list } = await getIntegrations(); setIntegrations(list); setLoading(false); }, []); useEffect(() => { load(); }, [load]); // Show banner if just connected const justConnected = searchParams.get('connected'); const isConnected = (provider: string) => integrations.some((i) => i.provider === provider && i.status === 'connected'); const handleDeleteAccount = async () => { if (!confirm('Delete your account? This cannot be undone.')) return; setDeleting(true); await deleteAccount(); await logout(); window.location.href = '/sign-in'; }; const handleDisconnect = async (provider: string) => { setDisconnecting(provider); await disconnectIntegration(provider); await load(); setDisconnecting(null); }; if (loading) { return (
Loading…
); } const todoistConnected = isConnected('todoist'); const googleHealthConnected = isConnected('google-health'); const anyConnected = todoistConnected || googleHealthConnected; return (

Connect your apps

oO reads what you need, when you need it.

{justConnected && (
{justConnected} connected.
)} {/* Todoist card */}
Todoist
{todoistConnected ? 'Connected' : 'Tasks & to-dos'}
{todoistConnected ? ( ) : ( Connect )}
{/* Google Health card */}
Google Health
{googleHealthConnected ? 'Connected' : 'Steps, sleep & activity'}
{googleHealthConnected ? ( ) : ( Connect )}
{anyConnected && (
See my tip →
)}
); } export default function ConnectPage() { return ( ); }