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" && (
)}
}>
{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}
/>
)}
>
);
}