import Button from "@/components/Button"; import Filters, { type FieldType } from "@/components/Filters"; import Table from "@/components/Table"; import { Pages } from "@/config/Pages"; import { formatFaNumber, formatOptionalDate } from "@/helpers/func"; import type { CustomerListRow, UserRestaurant } from "@/pages/customers/types/Types"; import { DocumentDownload, DocumentUpload, Edit } from "iconsax-react"; import { type FC, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import ImportCustomersModal from "./components/ImportCustomersModal"; import { useCustomerFilters } from "./hooks/useCustomerFilters"; import { useGetUsers } from "./hooks/useUsersData"; import { downloadCustomerImportSampleExcel } from "./utils/downloadCustomerImportSampleExcel"; const mapUserRestaurantToRow = (userRestaurant: UserRestaurant): CustomerListRow => { const { user, orderCount, totalOrderAmount } = userRestaurant; const fullName = [user.firstName, user.lastName].filter(Boolean).join(" ").trim(); return { id: user.id, fullName: fullName || "بدون نام", phone: user.phone || "-", birthDate: formatOptionalDate(user.birthDate), marriageDate: formatOptionalDate(user.marriageDate), orderCount: formatFaNumber(orderCount), totalOrderAmount: formatFaNumber(totalOrderAmount), status: user.isActive !== false ? "فعال" : "غیرفعال", firstName: user.firstName, lastName: user.lastName, birthDateRaw: user.birthDate, marriageDateRaw: user.marriageDate, gender: user.gender, avatarUrl: user.avatarUrl, }; }; const CustomersList: FC = () => { const { t } = useTranslation("global"); const navigate = useNavigate(); const [isImportModalOpen, setIsImportModalOpen] = useState(false); const { filters, currentPage, apiParams, handleFiltersChange, handlePageChange } = useCustomerFilters(); const { data: usersData, isLoading } = useGetUsers(apiParams); const filterFields = useMemo( () => [ { type: "input", name: "search", placeholder: "نام یا شماره تماس", }, ], [], ); const userRestaurants = usersData?.data ?? []; const tableData = useMemo(() => userRestaurants.map(mapUserRestaurantToRow), [userRestaurants]); const totalPages = usersData?.meta?.totalPages || 1; const columns = useMemo( () => [ { key: "fullName", title: "نام و نام خانوادگی", }, { key: "phone", title: "شماره تماس", }, { key: "birthDate", title: "تاریخ تولد", }, { key: "marriageDate", title: "تاریخ ازدواج", }, { key: "orderCount", title: "تعداد سفارش", }, { key: "totalOrderAmount", title: "مجموع سفارش (تومان)", }, { key: "status", title: "وضعیت", render: (item: CustomerListRow) => ( {item.status} ), }, { key: "details", title: "عملیات", render: (item: CustomerListRow) => ( ), }, ], [navigate], ); return (

{t("customer.customer_list")}

setIsImportModalOpen(false)} /> ); }; export default CustomersList;