From e322b18b5add4c35208e81d6325066aebc5f390a Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Thu, 2 Jul 2026 09:46:08 +0330 Subject: [PATCH] back --- src/components/Filters.tsx | 1 - src/hooks/useUrlPagination.ts | 4 ++-- src/pages/admin/hooks/useAdminFilters.ts | 9 +++------ src/pages/comments/List.tsx | 9 +++------ src/pages/coupon/hooks/useCouponFilters.ts | 9 +++------ src/pages/customers/List.tsx | 5 +++-- src/pages/notifications/hooks/useNotificationFilters.ts | 9 +++------ src/pages/orders/List.tsx | 5 +++-- src/pages/pager/hooks/usePagerFilters.ts | 9 +++------ .../paymentMethods/hooks/usePaymentMethodFilters.ts | 9 +++------ src/pages/product/hooks/useProductFilters.ts | 9 +++------ src/pages/report/hooks/useReportFilters.ts | 9 +++------ src/pages/review/hooks/useReviewFilters.ts | 9 +++------ src/pages/roles/hooks/useRolesFilters.ts | 9 +++------ src/pages/schedule/hooks/useScheduleFilters.ts | 9 +++------ .../shipmentMethod/hooks/useShipmentMethodFilters.ts | 9 +++------ 16 files changed, 44 insertions(+), 79 deletions(-) diff --git a/src/components/Filters.tsx b/src/components/Filters.tsx index e1381ab..a3835ef 100644 --- a/src/components/Filters.tsx +++ b/src/components/Filters.tsx @@ -108,7 +108,6 @@ const Filters: FC = ({ setFilters(defaultValues); setInputValues(defaultInputs); setMultiSelectValues(defaultMultiSelects); - onChange(defaultValues); } } }, [fields, initialValues, onChange]); diff --git a/src/hooks/useUrlPagination.ts b/src/hooks/useUrlPagination.ts index db7be56..dc7b335 100644 --- a/src/hooks/useUrlPagination.ts +++ b/src/hooks/useUrlPagination.ts @@ -12,7 +12,7 @@ export const useUrlPagination = (defaultPage = 1) => { }, [searchParams, defaultPage]); const handlePageChange = useCallback( - (page: number) => { + (page: number, options?: { replace?: boolean }) => { setSearchParams( (prev) => { const next = new URLSearchParams(prev); @@ -23,7 +23,7 @@ export const useUrlPagination = (defaultPage = 1) => { } return next; }, - { replace: false }, + { replace: options?.replace ?? false }, ); }, [setSearchParams, defaultPage], diff --git a/src/pages/admin/hooks/useAdminFilters.ts b/src/pages/admin/hooks/useAdminFilters.ts index e85f3a1..2646604 100644 --- a/src/pages/admin/hooks/useAdminFilters.ts +++ b/src/pages/admin/hooks/useAdminFilters.ts @@ -1,5 +1,6 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; import type { GetAdminsParams } from "../types/Types"; const DEFAULT_PAGE = 1; @@ -7,7 +8,7 @@ const DEFAULT_LIMIT = 10; export const useAdminFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -25,11 +26,7 @@ export const useAdminFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/comments/List.tsx b/src/pages/comments/List.tsx index d9209af..695302d 100644 --- a/src/pages/comments/List.tsx +++ b/src/pages/comments/List.tsx @@ -1,4 +1,4 @@ -import { type FC, useState } from 'react' +import { type FC } from 'react' import Table from '@/components/Table' import Filters from '@/components/Filters' import Switch from '@/components/Switch' @@ -8,6 +8,7 @@ import type { FilterValues } from '@/components/Filters' import { Link } from 'react-router-dom' import { Pages } from '@/config/Pages' import { formatOptionalDate } from '@/helpers/func' +import { useUrlPagination } from '@/hooks/useUrlPagination' interface CommentData extends RowDataType { id: number @@ -21,13 +22,9 @@ interface CommentData extends RowDataType { } const CommentsList: FC = () => { - const [currentPage, setCurrentPage] = useState(1) + const { currentPage, handlePageChange } = useUrlPagination() const totalPages = 2 - const handlePageChange = (page: number) => { - setCurrentPage(page) - } - const handleFiltersChange = (newFilters: FilterValues) => { console.log('فیلترها:', newFilters) } diff --git a/src/pages/coupon/hooks/useCouponFilters.ts b/src/pages/coupon/hooks/useCouponFilters.ts index 73a1f57..885d5a8 100644 --- a/src/pages/coupon/hooks/useCouponFilters.ts +++ b/src/pages/coupon/hooks/useCouponFilters.ts @@ -1,21 +1,18 @@ import { useState } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; const DEFAULT_PAGE = 1; const DEFAULT_LIMIT = 10; export const useCouponFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/customers/List.tsx b/src/pages/customers/List.tsx index 8857334..f7af92b 100644 --- a/src/pages/customers/List.tsx +++ b/src/pages/customers/List.tsx @@ -71,10 +71,11 @@ const CustomersList: FC = () => { const effectivePage = Math.min(currentPage, totalPages) useEffect(() => { + if (isLoading) return if (currentPage > totalPages) { - handlePageChange(totalPages) + handlePageChange(totalPages, { replace: true }) } - }, [currentPage, totalPages, handlePageChange]) + }, [currentPage, totalPages, handlePageChange, isLoading]) const paginatedCustomers = useMemo(() => { const startIndex = (effectivePage - 1) * limit diff --git a/src/pages/notifications/hooks/useNotificationFilters.ts b/src/pages/notifications/hooks/useNotificationFilters.ts index 65b9371..3dae13f 100644 --- a/src/pages/notifications/hooks/useNotificationFilters.ts +++ b/src/pages/notifications/hooks/useNotificationFilters.ts @@ -1,12 +1,13 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; const DEFAULT_PAGE = 1; const DEFAULT_LIMIT = 10; export const useNotificationFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -28,11 +29,7 @@ export const useNotificationFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/orders/List.tsx b/src/pages/orders/List.tsx index cf40fb2..5a5a646 100644 --- a/src/pages/orders/List.tsx +++ b/src/pages/orders/List.tsx @@ -29,10 +29,11 @@ const OrdersList: FC = () => { const effectivePage = Math.min(currentPage, totalPages) useEffect(() => { + if (isLoading || !ordersData) return if (currentPage > totalPages) { - handlePageChange(totalPages) + handlePageChange(totalPages, { replace: true }) } - }, [currentPage, totalPages, handlePageChange]) + }, [currentPage, totalPages, handlePageChange, isLoading, ordersData]) return (
diff --git a/src/pages/pager/hooks/usePagerFilters.ts b/src/pages/pager/hooks/usePagerFilters.ts index 9ee5666..a80f1f5 100644 --- a/src/pages/pager/hooks/usePagerFilters.ts +++ b/src/pages/pager/hooks/usePagerFilters.ts @@ -1,21 +1,18 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; const DEFAULT_PAGE = 1; const DEFAULT_LIMIT = 10; export const usePagerFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; const filteredData = useMemo(() => { diff --git a/src/pages/paymentMethods/hooks/usePaymentMethodFilters.ts b/src/pages/paymentMethods/hooks/usePaymentMethodFilters.ts index 0c33ab0..ffa72fc 100644 --- a/src/pages/paymentMethods/hooks/usePaymentMethodFilters.ts +++ b/src/pages/paymentMethods/hooks/usePaymentMethodFilters.ts @@ -1,5 +1,6 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; import type { GetRestaurantPaymentMethodsParams } from "../types/Types"; const DEFAULT_PAGE = 1; @@ -7,7 +8,7 @@ const DEFAULT_LIMIT = 10; export const usePaymentMethodFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -25,11 +26,7 @@ export const usePaymentMethodFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/product/hooks/useProductFilters.ts b/src/pages/product/hooks/useProductFilters.ts index a4483ec..694384c 100644 --- a/src/pages/product/hooks/useProductFilters.ts +++ b/src/pages/product/hooks/useProductFilters.ts @@ -1,5 +1,6 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; import type { GetProductsParams } from "../types/Types"; const DEFAULT_PAGE = 1; @@ -7,7 +8,7 @@ const DEFAULT_LIMIT = 10; export const useProductFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -25,11 +26,7 @@ export const useProductFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/report/hooks/useReportFilters.ts b/src/pages/report/hooks/useReportFilters.ts index 09a15ee..bd23355 100644 --- a/src/pages/report/hooks/useReportFilters.ts +++ b/src/pages/report/hooks/useReportFilters.ts @@ -1,12 +1,13 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; const DEFAULT_PAGE = 1; const DEFAULT_LIMIT = 10; export const useReportFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -28,11 +29,7 @@ export const useReportFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/review/hooks/useReviewFilters.ts b/src/pages/review/hooks/useReviewFilters.ts index d420d8f..4252f16 100644 --- a/src/pages/review/hooks/useReviewFilters.ts +++ b/src/pages/review/hooks/useReviewFilters.ts @@ -1,12 +1,13 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; const DEFAULT_PAGE = 1; const DEFAULT_LIMIT = 10; export const useReviewFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -32,11 +33,7 @@ export const useReviewFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return { diff --git a/src/pages/roles/hooks/useRolesFilters.ts b/src/pages/roles/hooks/useRolesFilters.ts index 912bbc2..e9c9981 100644 --- a/src/pages/roles/hooks/useRolesFilters.ts +++ b/src/pages/roles/hooks/useRolesFilters.ts @@ -1,12 +1,13 @@ import { useState, useMemo } from 'react' import type { FilterValues } from '@/components/Filters' +import { useUrlPagination } from '@/hooks/useUrlPagination' const DEFAULT_PAGE = 1 const DEFAULT_LIMIT = 10 export const useRolesFilters = () => { const [filters, setFilters] = useState({}) - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE) + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE) const [limit] = useState(DEFAULT_LIMIT) const apiParams = useMemo(() => { @@ -24,11 +25,7 @@ export const useRolesFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters) - setCurrentPage(DEFAULT_PAGE) - } - - const handlePageChange = (page: number) => { - setCurrentPage(page) + resetPage() } return { diff --git a/src/pages/schedule/hooks/useScheduleFilters.ts b/src/pages/schedule/hooks/useScheduleFilters.ts index a729ebc..8595c44 100644 --- a/src/pages/schedule/hooks/useScheduleFilters.ts +++ b/src/pages/schedule/hooks/useScheduleFilters.ts @@ -1,12 +1,13 @@ import { useState, useMemo } from 'react' import type { FilterValues } from '@/components/Filters' +import { useUrlPagination } from '@/hooks/useUrlPagination' const DEFAULT_PAGE = 1 const DEFAULT_LIMIT = 10 export const useScheduleFilters = () => { const [filters, setFilters] = useState({}) - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE) + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE) const [limit] = useState(DEFAULT_LIMIT) const apiParams = useMemo(() => { @@ -24,11 +25,7 @@ export const useScheduleFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters) - setCurrentPage(DEFAULT_PAGE) - } - - const handlePageChange = (page: number) => { - setCurrentPage(page) + resetPage() } return { diff --git a/src/pages/shipmentMethod/hooks/useShipmentMethodFilters.ts b/src/pages/shipmentMethod/hooks/useShipmentMethodFilters.ts index 9edff85..11ef244 100644 --- a/src/pages/shipmentMethod/hooks/useShipmentMethodFilters.ts +++ b/src/pages/shipmentMethod/hooks/useShipmentMethodFilters.ts @@ -1,5 +1,6 @@ import { useState, useMemo } from "react"; import type { FilterValues } from "@/components/Filters"; +import { useUrlPagination } from "@/hooks/useUrlPagination"; import type { GetRestaurantShipmentMethodsParams } from "../types/Types"; const DEFAULT_PAGE = 1; @@ -7,7 +8,7 @@ const DEFAULT_LIMIT = 10; export const useShipmentMethodFilters = () => { const [filters, setFilters] = useState({}); - const [currentPage, setCurrentPage] = useState(DEFAULT_PAGE); + const { currentPage, handlePageChange, resetPage } = useUrlPagination(DEFAULT_PAGE); const [limit] = useState(DEFAULT_LIMIT); const apiParams = useMemo(() => { @@ -25,11 +26,7 @@ export const useShipmentMethodFilters = () => { const handleFiltersChange = (newFilters: FilterValues) => { setFilters(newFilters); - setCurrentPage(DEFAULT_PAGE); - }; - - const handlePageChange = (page: number) => { - setCurrentPage(page); + resetPage(); }; return {