From a3537e5a6668b4fff4ce1124cdaa83e92b160541 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Wed, 8 Oct 2025 12:48:44 +0330 Subject: [PATCH] reason return --- src/pages/orders/ReturnCategories.tsx | 74 ++++-------- .../components/ModalCreateReturnReason.tsx | 106 ++++++++++++++++++ src/pages/orders/hooks/useOrderData.ts | 19 ++++ src/pages/orders/service/OrderService.ts | 21 +++- src/pages/orders/types/Types.ts | 26 +++++ 5 files changed, 195 insertions(+), 51 deletions(-) create mode 100644 src/pages/orders/components/ModalCreateReturnReason.tsx diff --git a/src/pages/orders/ReturnCategories.tsx b/src/pages/orders/ReturnCategories.tsx index 54ad9e8..7254f11 100644 --- a/src/pages/orders/ReturnCategories.tsx +++ b/src/pages/orders/ReturnCategories.tsx @@ -1,29 +1,21 @@ -import { type FC, useState } from 'react' +import { type FC } from 'react' +import ModalCreateReturnReason from './components/ModalCreateReturnReason' +import { useGetReturnReasons, useDeleteReturnReason } from './hooks/useOrderData' +import { type ReturnReasonType } from './types/Types' import PageLoading from '../../components/PageLoading' import Error from '../../components/Error' -import PaginationUi from '../../components/PaginationUi' import Td from '../../components/Td' import TrashWithConfrim from '../../components/TrashWithConfrim' -import { Edit } from 'iconsax-react' -import { Link } from 'react-router-dom' -import Button from '@/components/Button' -import { useNavigate } from 'react-router-dom' -import { type ReturnCategoryType, type PagerType } from './types/Types' const ReturnCategories: FC = () => { - const [currentPage, setCurrentPage] = useState(1); - // TODO: Add category data fetching hook - const isLoading = false; - const error = null; - const refetch = () => { }; - // TODO: Add delete mutation - const deleteCategoryMutation = { isPending: false, mutateAsync: async (_id: string) => { } }; - const navigate = useNavigate(); + const { data: returnReasonsData, isLoading, error, refetch } = useGetReturnReasons() + const deleteReturnReasonMutation = useDeleteReturnReason(); - // Mock data for now - const categories: ReturnCategoryType[] = []; - const pager: PagerType = { page: currentPage, limit: 10, totalPages: 1, totalItems: 0, prevPage: null, nextPage: null }; + const handleDeleteReturnReason = async (reasonId: string) => { + await deleteReturnReasonMutation.mutateAsync(reasonId); + refetch() + }; if (isLoading) { return ( @@ -36,63 +28,52 @@ const ReturnCategories: FC = () => { if (error) { return (
- +
); } - const handleDeleteCategory = async (categoryId: string) => { - await deleteCategoryMutation.mutateAsync(categoryId); - refetch() - }; + const returnReasons = returnReasonsData?.results?.reasons || []; return (
-
- {categories.length === 0 ? ( + {returnReasons.length === 0 ? ( ) : ( - categories.map((category: any) => ( - - + @@ -102,13 +83,6 @@ const ReturnCategories: FC = () => {
- +
- هیچ دسته‌بندی مرجوعی یافت نشد + هیچ دلیل بازگشتی یافت نشد
- + returnReasons.map((reason: ReturnReasonType) => ( +
+
- - {category.status} + + فعال
- - - - handleDeleteCategory(category.id)} - isLoading={deleteCategoryMutation.isPending} + onDelete={() => handleDeleteReturnReason(reason._id)} + isLoading={deleteReturnReasonMutation.isPending} />
- - { - setCurrentPage(page); - }} - />
) } diff --git a/src/pages/orders/components/ModalCreateReturnReason.tsx b/src/pages/orders/components/ModalCreateReturnReason.tsx new file mode 100644 index 0000000..bdee49b --- /dev/null +++ b/src/pages/orders/components/ModalCreateReturnReason.tsx @@ -0,0 +1,106 @@ +import Button from '@/components/Button' +import DefaulModal from '@/components/DefaulModal' +import Input from '@/components/Input' +import Select from '@/components/Select' +import Switch from '@/components/Switch' +import { useState, type FC } from 'react' +import type { CreateReturnReasonType } from '../types/Types' +import { useCreateReturnReason } from '../hooks/useOrderData' +import { useFormik } from 'formik' +import * as Yup from 'yup' +import { useGetFines } from '@/pages/payment/hooks/usePaymentData' + +const ModalCreateReturnReason: FC = () => { + + const [open, setOpen] = useState(false) + const createReturnReasonMutation = useCreateReturnReason() + const { data: finesData } = useGetFines() + + const formik = useFormik({ + initialValues: { + fineRule: '', + title: '', + is_mandatory_picture: false, + }, + validationSchema: Yup.object({ + fineRule: Yup.string().required('انتخاب قانون جریمه الزامی است'), + title: Yup.string().required('عنوان دلیل بازگشت الزامی است'), + is_mandatory_picture: Yup.boolean(), + }), + onSubmit: async (values) => { + try { + await createReturnReasonMutation.mutateAsync(values) + setOpen(false) + formik.resetForm() + } catch (error) { + console.error('خطا در ایجاد دلیل بازگشت:', error) + } + }, + }) + + return ( +
+