From 6187e7c26d399c00e8e40b585d91f991a7524251 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Thu, 2 Jul 2026 10:35:38 +0330 Subject: [PATCH] update customer --- src/pages/customers/List.tsx | 286 ++++++++++---------- src/pages/customers/Update.tsx | 215 +++++++++++++++ src/pages/customers/hooks/useUsersData.ts | 18 +- src/pages/customers/service/UsersService.ts | 10 + src/pages/customers/types/Types.ts | 17 ++ src/router/Main.tsx | 2 + 6 files changed, 404 insertions(+), 144 deletions(-) create mode 100644 src/pages/customers/Update.tsx diff --git a/src/pages/customers/List.tsx b/src/pages/customers/List.tsx index e99fcc3..fc90dd8 100644 --- a/src/pages/customers/List.tsx +++ b/src/pages/customers/List.tsx @@ -1,158 +1,158 @@ -import Table from '@/components/Table' -import Filters, { type FieldType } from '@/components/Filters' -import Button from '@/components/Button' -import { type FC, useMemo, useState } from 'react' -import { useTranslation } from 'react-i18next' -import { DocumentDownload, DocumentUpload } from 'iconsax-react' -import { useGetUsers } from './hooks/useUsersData' -import { useCustomerFilters } from './hooks/useCustomerFilters' -import ImportCustomersModal from './components/ImportCustomersModal' -import { downloadCustomerImportSampleExcel } from './utils/downloadCustomerImportSampleExcel' -import type { CustomerListRow, UserRestaurant } from '@/pages/customers/types/Types' -import { formatOptionalDate, formatFaNumber } from '@/helpers/func' +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 ? 'فعال' : 'غیرفعال', - } -} + 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 [isImportModalOpen, setIsImportModalOpen] = useState(false) + const { t } = useTranslation("global"); + const navigate = useNavigate(); + const [isImportModalOpen, setIsImportModalOpen] = useState(false); - const { - filters, - currentPage, - apiParams, - handleFiltersChange, - handlePageChange, - } = useCustomerFilters() + const { filters, currentPage, apiParams, handleFiltersChange, handlePageChange } = useCustomerFilters(); - const { data: usersData, isLoading } = useGetUsers(apiParams) + const { data: usersData, isLoading } = useGetUsers(apiParams); - const filterFields = useMemo(() => [ - { - type: 'input', - name: 'search', - placeholder: 'نام یا شماره تماس', - }, - ], []) + const filterFields = useMemo( + () => [ + { + type: "input", + name: "search", + placeholder: "نام یا شماره تماس", + }, + ], + [], + ); - const userRestaurants = usersData?.data ?? [] - const tableData = useMemo( - () => userRestaurants.map(mapUserRestaurantToRow), - [userRestaurants], - ) + const userRestaurants = usersData?.data ?? []; + const tableData = useMemo(() => userRestaurants.map(mapUserRestaurantToRow), [userRestaurants]); - const totalPages = usersData?.meta?.totalPages || 1 + 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: 'جزئیات', - }, - ], []) + 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')}

-
- - -
+ return ( +
+
+

{t("customer.customer_list")}

+
+ +