"use client" import { useEffect, useState } from "react" import { ContactsSidebar } from "./contacts-sidebar" import { ContactsHeader } from "./contacts-header" import { ContactsTable } from "./contacts-table" import { ContactDetailPage } from "./contact-detail-page" import { ContactCreatePage } from "./contact-create-page" import { MergeDuplicatesView } from "./merge-duplicates-view" import { TrashView } from "./trash-view" import { BulkCreateDialog } from "./bulk-create-dialog" import { ImportDialog } from "./import-dialog" export type ContactsPageView = | "contacts" | "frequent" | "other" | "merge" | "import" | "trash" | "detail" | "create" | "edit" | "label" export function ContactsAppShell() { const [currentView, setCurrentView] = useState("contacts") const [activeContactId, setActiveContactId] = useState(null) const [activeLabelId, setActiveLabelId] = useState(null) const [searchQuery, setSearchQuery] = useState("") const [importOpen, setImportOpen] = useState(false) const [bulkCreateOpen, setBulkCreateOpen] = useState(false) useEffect(() => { setSearchQuery("") }, [currentView, activeLabelId]) function openContact(id: string) { setActiveContactId(id) setCurrentView("detail") } function openCreate() { setActiveContactId(null) setCurrentView("create") } function openEdit(id: string) { setActiveContactId(id) setCurrentView("edit") } function goBack() { setActiveContactId(null) setCurrentView("contacts") } function handleNavigate(view: ContactsPageView) { if (view === "import") { setImportOpen(true) return } setCurrentView(view) } return (
setBulkCreateOpen(true)} onSelectLabel={(id) => { setActiveLabelId(id); setCurrentView("label") }} />
{(currentView === "contacts" || currentView === "frequent" || currentView === "other" || currentView === "label") && ( )} {currentView === "detail" && activeContactId && ( )} {currentView === "create" && ( openContact(id)} /> )} {currentView === "edit" && activeContactId && ( openContact(activeContactId)} onSaved={(id) => openContact(id)} /> )} {currentView === "merge" && } {currentView === "trash" && }
setImportOpen(true)} />
) }