"use client" import { useCallback, useEffect, useState } from "react" import { cn } from "@/lib/utils" import { useIsMobile } from "@/hooks/use-mobile" 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" import { CONTACTS_SHELL_CLASS } from "@/lib/contacts-chrome-classes" export type ContactsPageView = | "contacts" | "frequent" | "other" | "merge" | "import" | "trash" | "detail" | "create" | "edit" | "label" export function ContactsAppShell() { const isMobile = useIsMobile() 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) const [sidebarOpen, setSidebarOpen] = useState(false) useEffect(() => { setSearchQuery("") }, [currentView, activeLabelId]) useEffect(() => { if (isMobile) { setSidebarOpen(false) } else { setSidebarOpen(true) } }, [isMobile]) const closeSidebar = useCallback(() => setSidebarOpen(false), []) const openSidebar = useCallback(() => setSidebarOpen(true), []) const toggleSidebar = useCallback(() => setSidebarOpen((open) => !open), []) 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 goToContactsList() { setActiveContactId(null) setActiveLabelId(null) setSearchQuery("") setCurrentView("contacts") if (isMobile) closeSidebar() } function handleNavigate(view: ContactsPageView) { if (view === "import") { setImportOpen(true) if (isMobile) closeSidebar() return } setCurrentView(view) if (isMobile) closeSidebar() } function handleSelectLabel(id: string) { setActiveLabelId(id) setCurrentView("label") if (isMobile) closeSidebar() } function handleCreateContact() { openCreate() if (isMobile) closeSidebar() } return (
{isMobile && sidebarOpen && (
) }