import { useState, Suspense, lazy, createContext, useContext, useEffect, } from "react"; import Breadcrumb from "../../components/common/Breadcrumb"; import { useFab } from "../../Context/FabContext"; import { useBucketList, useBuckets, useDeleteBucket, } from "../../hooks/useDirectory"; import ManageBucket1 from "../../components/Directory/ManageBucket1"; import ManageContact from "../../components/Directory/ManageContact"; import BucketList from "../../components/Directory/BucketList"; import { MainDirectoryPageSkeleton } from "../../components/Directory/DirectoryPageSkeleton"; import ContactProfile from "../../components/Directory/ContactProfile"; import GlobalModel from "../../components/common/GlobalModel"; import ConfirmModal from "../../components/common/ConfirmModal"; import { useSelectedProject } from "../../slices/apiDataManager"; import { exportToCSV, exportToExcel, exportToPDF, exportToPDF1, printTable, } from "../../utils/tableExportUtils"; const NotesPage = lazy(() => import("./NotesPage")); const ContactsPage = lazy(() => import("./ContactsPage")); export const DirectoryContext = createContext(); export const useDirectoryContext = () => { const context = useContext(DirectoryContext); if (!context) { return (

Your Action is out of context

); } return context; }; export default function DirectoryPage({ IsPage = true, projectId = null }) { const [searchContact, setsearchContact] = useState(""); const [searchNote, setSearchNote] = useState(""); const [activeTab, setActiveTab] = useState("notes"); const { setActions } = useFab(); const [gridView, setGridView] = useState(true); const [isOpenBucket, setOpenBucket] = useState(false); const [isManageContact, setManageContact] = useState({ isOpen: false, contactId: null, }); const [deleteBucket, setDeleteBucket] = useState({ isOpen: false, bucketId: null, }); const [showActive, setShowActive] = useState(true); const [contactOpen, setContactOpen] = useState({ contact: null, Open: false, }); const [notesData, setNotesData] = useState([]); const [ContactData, setContactData] = useState([]); const handleExport = (type) => { let exportData = activeTab === "notes" ? notesData : ContactData; if (!exportData?.length) return; switch (type) { case "csv": exportToCSV(exportData, activeTab === "notes" ? "Notes" : "Contacts"); break; case "excel": exportToExcel(exportData, activeTab === "notes" ? "Notes" : "Contacts"); break; case "pdf": if (activeTab === "notes") { exportToPDF1(exportData, "Notes"); } else { // Columns for Contacts PDF const columns = [ "Email", "Phone", "Organization", "Category", "Tags", ]; // Sanitize and trim long text to avoid PDF overflow const sanitizedData = exportData.map((item) => ({ Email: (item.Email || "").slice(0, 40), Phone: (item.Phone || "").slice(0, 20), Organization: (item.Organization || "").slice(0, 30), Category: (item.Category || "").slice(0, 20), Tags: (item.Tags || "").slice(0, 40), })); // Export with proper spacing exportToPDF(sanitizedData, "Contacts", columns, { columnWidths: [200, 120, 180, 120, 200], // Adjust widths per column fontSizeHeader: 12, fontSizeRow: 10, rowHeight: 25, }); } break; default: console.warn("Unsupported export type"); } }; const { data, isLoading, isError, error } = useBucketList(); const handleTabClick = (tab, e) => { e.preventDefault(); setActiveTab(tab); }; useEffect(() => { const actions = []; if (IsPage) { actions.push({ label: "Manage Bucket", icon: "fa-solid fa-bucket fs-5", color: "primary", onClick: () => setOpenBucket(true), }); } if (data?.length > 0) { actions.push({ label: "New Contact", icon: "bx bx-plus-circle", color: "warning", onClick: () => setManageContact({ isOpen: true, contactId: null }), }); } setActions(actions); return () => setActions([]); }, [IsPage, data]); const contextValues = { showActive, gridView, data, setManageContact, setContactOpen, setDeleteBucket, }; const { mutate: DeleteBucket, isPending: Deleting } = useDeleteBucket(() => { setDeleteBucket({ isOpen: false, bucketId: null }); }); const handleDelete = (bucketId) => { DeleteBucket(bucketId); }; if (isLoading) return ; if (isError) return
{error.message}
; return ( <>
{IsPage && ( )}
{activeTab === "notes" && ( setSearchNote(e.target.value)} /> )} {activeTab === "contacts" && (
setsearchContact(e.target.value)} />
{" "}
)}
    {activeTab === "contacts" && (
  • setShowActive(e.target.checked) } />
    {showActive ? "Active Contacts" : "Inactive Contacts"}
  • )}
  • setGridView(true)} > Card View
  • setGridView(false)} > List View
  • {/* Divider */} {activeTab === "contacts" && (

  • )}
}> {activeTab === "notes" && ( )} {activeTab === "contacts" && ( )}
{isOpenBucket && ( setOpenBucket(false)} > setOpenBucket(false)} /> )} {contactOpen.Open && ( setContactOpen({ contact: null, Open: false })} > )} {isManageContact.isOpen && ( setManageContact({ isOpen: false, contactId: null }) } > setManageContact({ isOpen: false, contactId: null }) } /> )} {deleteBucket.isOpen && ( setDeleteBucket({ isOpen: false, bucketId: null })} loading={Deleting} paramData={deleteBucket.bucketId} /> )}
); }