"use client"; import { ExclamationIcon, PencilSquareIcon, TrashIcon } from "@/assets/icons"; import EmptyListWrapper from "@/components/HOC/EmptyListWrapper"; import { Building } from "@/components/Layouts/sidebar/icons"; import ConfirmationModal from "@/components/ui/ConfirmationModal"; import ListHeader from "@/components/ui/ListHeader"; import Modal from "@/components/ui/modal"; import Pagination from "@/components/ui/pagination"; import Status from "@/components/ui/Status"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import TableSkeleton from "@/components/ui/TableSkeleton"; import { _TooltipDefaultParams } from "@/constants/tooltip"; import { unixToDate } from "@/utils/shared"; import { toast } from "react-toastify"; import { Tooltip } from "react-tooltip"; import AssignToCompanyModalContent from "./AssignToCompanyModalContent"; import CustomerListFilters from "./CustomerListFilters"; import useCustomerListPresenter from "./useCustomerListPresenter"; const CustomersTable = () => { const { isPending, pathName, router, columns, allCustomers, metadata, isModalOpen, assignSelectedCompanies, selectedCompanies, currentCustomer, setSelectedCompanies, setIsModalOpen, onConfirmDelete, setCurrentCustomer, isAssignCompanyModalOpen, setIsAssignCompanyModalOpen, isFilterModalOpen, setIsFilterModalOpen, filterRegister, handleFilterSubmit, search, watch, setFilterValue, isMutating, setParams, } = useCustomerListPresenter(); return (
setIsFilterModalOpen(true)} createButtonText="Create Customer" /> {columns.map((columns) => ( {columns} ))} {isPending && } {allCustomers?.map((customer, index) => ( {index + 1} {customer?.full_name} {customer?.email} {unixToDate({ unix: customer?.created_at, hasTime: true })} {customer?.type} {customer?.status} {customer?.companies?.length ? ( customer?.companies.map((c) => ( {c.name}, )) ) : ( None )} {customer?.role ?? "-"}
))}
{ setParams((currentParams) => ({ ...currentParams, offset: e.selected * (metadata?.limit ?? 10), limit: metadata?.limit ?? 10, })); }} /> setIsFilterModalOpen(false)} classNames="w-full xl:w-1/2" showButtons={false} >
{ if (!selectedCompanies || !currentCustomer) { toast.error("Invalid credentials"); return; } assignSelectedCompanies({ credentials: selectedCompanies, id: currentCustomer?.id ?? "", }); }} isOpen={isAssignCompanyModalOpen} onClose={() => setIsAssignCompanyModalOpen(false)} >
{isModalOpen && ( { onConfirmDelete(); }} onCancel={() => setIsModalOpen(false)} /> )}
); }; export default CustomersTable;