diff --git a/src/pages/criticisms/Detail.tsx b/src/pages/criticisms/Detail.tsx index dd03b13..9fde2a1 100644 --- a/src/pages/criticisms/Detail.tsx +++ b/src/pages/criticisms/Detail.tsx @@ -30,7 +30,7 @@ const CriticismsDetail: FC = () => {
{t('criticisms.criticism')} - {' #' + getDetail.data?.data?.criticism?.numericId} + {/* {' #' + getDetail.data?.data?.criticism?.numericId} */}
diff --git a/src/pages/criticisms/List.tsx b/src/pages/criticisms/List.tsx index 20ea975..5a1ab49 100644 --- a/src/pages/criticisms/List.tsx +++ b/src/pages/criticisms/List.tsx @@ -2,19 +2,19 @@ import { type FC, useState } from 'react' import { useDeleteCriticismsDetail, useGetCriticismsList } from './hooks/useCriticismsData' // import { useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' -import { Eye, Trash } from 'iconsax-react' +import { Eye } from 'iconsax-react' import { Paths } from '../../config/Paths' import type { CriticismsItemTypes } from './types/CriticismsTypes' import moment from 'moment-jalaali' -import DefaulModal from '../../components/DefaulModal' import Table from '../../components/Table' import type { ColumnType } from '../../components/types/TableTypes' +import TrashWithConfrim from '@/components/TrashWithConfrim' +import { toast } from '@/shared/toast' +import { extractErrorMessage } from '@/config/func' const CriticismsList: FC = () => { - const [itemId, setItemId] = useState('') const [page, setPage] = useState(1) - const [openConfrim, setOpenConfrim] = useState(false) const getCriticismsList = useGetCriticismsList(page) const deleteCriticisms = useDeleteCriticismsDetail() @@ -36,28 +36,19 @@ const CriticismsList: FC = () => { return translations[key] || key; }; - const handleDelete = (id?: string, confrim: boolean = false) => { - if (confrim) { - - deleteCriticisms.mutate(itemId, { - onSuccess: () => { - getCriticismsList.refetch() - setOpenConfrim(false) - setItemId('') - } - }) - } else if (id) { - setItemId(id) - setOpenConfrim(true) - } + const handleDelete = (id: string) => { + deleteCriticisms.mutate(id, { + onSuccess: () => { + getCriticismsList.refetch() + }, + onError: (error) => { + toast(extractErrorMessage(error), 'error') + } + }) } // Define table columns const columns: ColumnType[] = [ - { - title: t('criticisms.number'), - key: 'numericId', - }, { title: t('criticisms.title_criticisms'), key: 'title', @@ -76,9 +67,14 @@ const CriticismsList: FC = () => { title: t('detail'), key: 'detail', render: (item) => ( - - - +
+ + + + handleDelete(item.id)} + /> +
), }, ]; @@ -93,13 +89,6 @@ const CriticismsList: FC = () => { columns={columns} data={getCriticismsList.data?.data?.criticisms} isLoading={getCriticismsList.isPending} - rowActions={(item) => [ - { - label: t('delete'), - onClick: () => handleDelete(String(item.id)), - icon: , - } - ]} pagination={{ currentPage: page, totalPages: getCriticismsList.data?.data?.pager?.totalPages || 1, @@ -107,31 +96,6 @@ const CriticismsList: FC = () => { }} /> - setOpenConfrim(false)} - isHeader={true} - title_header={t('delete_confirmation')} - > -
-

{t('are_you_sure_delete')}

-
- - -
-
-
) } diff --git a/src/pages/criticisms/hooks/useCriticismsData.ts b/src/pages/criticisms/hooks/useCriticismsData.ts index e301cf4..55b4579 100644 --- a/src/pages/criticisms/hooks/useCriticismsData.ts +++ b/src/pages/criticisms/hooks/useCriticismsData.ts @@ -1,130 +1,23 @@ import { useMutation, useQuery } from "@tanstack/react-query"; -// import * as api from "../service/CriticismsService"; -import type { CriticismsItemTypes } from "../types/CriticismsTypes"; - -// Static data for development -const staticCriticismsData = { - data: { - criticisms: [ - { - id: "1", - numericId: "1001", - title: "مشکل در سیستم پرداخت", - content: - "سلام، من در هنگام پرداخت با مشکل مواجه شدم. سیستم پرداخت به درستی کار نمی‌کند و پس از وارد کردن اطلاعات کارت، خطای عجیبی نمایش داده می‌شود. لطفاً این مشکل را بررسی کنید.", - createdAt: new Date("2024-01-15T10:30:00"), - isRead: false, - files: [ - { id: "f1", fileUrl: "https://example.com/files/payment-error.png" }, - { id: "f2", fileUrl: "https://example.com/files/screenshot.jpg" }, - ], - }, - { - id: "2", - numericId: "1002", - title: "کیفیت محصول مطابق انتظار نبود", - content: - "محصولی که سفارش دادم کیفیت مناسبی نداشت و با توضیحات ارائه شده در سایت مطابقت نداشت. انتظار داشتم کیفیت بهتری داشته باشد.", - createdAt: new Date("2024-01-14T14:20:00"), - isRead: true, - files: [ - { id: "f3", fileUrl: "https://example.com/files/product-photo.jpg" }, - ], - }, - { - id: "3", - numericId: "1003", - title: "تاخیر در ارسال سفارش", - content: - "سفارش من با تاخیر زیادی ارسال شد. زمان تحویل اعلام شده رعایت نشد و این موضوع باعث نارضایتی من شده است.", - createdAt: new Date("2024-01-13T09:15:00"), - isRead: false, - files: [], - }, - { - id: "4", - numericId: "1004", - title: "مشکل در پشتیبانی آنلاین", - content: - "سیستم چت آنلاین سایت به درستی کار نمی‌کند و نمی‌توانم با پشتیبانی ارتباط برقرار کنم. لطفاً این مشکل را حل کنید.", - createdAt: new Date("2024-01-12T16:45:00"), - isRead: true, - files: [ - { id: "f4", fileUrl: "https://example.com/files/chat-error.png" }, - ], - }, - { - id: "5", - numericId: "1005", - title: "پیشنهاد بهبود رابط کاربری", - content: - "رابط کاربری سایت نیاز به بهبود دارد. منوها کمی پیچیده هستند و یافتن محصولات مورد نظر دشوار است. پیشنهاد می‌کنم طراحی ساده‌تری استفاده کنید.", - createdAt: new Date("2024-01-11T11:30:00"), - isRead: false, - files: [], - }, - ] as CriticismsItemTypes[], - pager: { - totalPages: 2, - currentPage: 1, - totalItems: 5, - }, - }, -}; +import * as api from "../service/CriticismsService"; export const useGetCriticismsList = (page: number) => { - // Commented out API call - using static data instead - // return useQuery({ - // queryKey: ["criticisms", page], - // queryFn: () => api.getCriticismsList(page), - // }); - - return { - data: staticCriticismsData, - isPending: false, - isLoading: false, - refetch: () => Promise.resolve(staticCriticismsData), - }; + return useQuery({ + queryKey: ["criticisms", page], + queryFn: () => api.getCriticismsList(page), + }); }; export const useDeleteCriticismsDetail = () => { - // Commented out API call - using mock function instead - // return useMutation({ - // mutationFn: (id: string) => api.deleteCriticisms(id), - // }); - - return { - mutate: (id: string, options?: { onSuccess?: () => void }) => { - // Mock delete - just call onSuccess after a brief delay - setTimeout(() => { - if (options?.onSuccess) { - options.onSuccess(); - } - }, 500); - }, - isPending: false, - }; + return useMutation({ + mutationFn: (id: string) => api.deleteCriticisms(id), + }); }; export const useGetDetailCriticisms = (id: string) => { - // Commented out API call - using static data instead - // return useQuery({ - // queryKey: ["criticisms", id], - // queryFn: () => api.getCriticismsDetail(id), - // enabled: !!id, - // }); - - const criticism = staticCriticismsData.data.criticisms.find( - (item) => item.id === id - ); - - return { - data: { - data: { - criticism: criticism || null, - }, - }, - isPending: false, - isLoading: false, - }; + return useQuery({ + queryKey: ["criticisms", id], + queryFn: () => api.getCriticismsDetail(id), + enabled: !!id, + }); }; diff --git a/src/pages/criticisms/service/CriticismsService.ts b/src/pages/criticisms/service/CriticismsService.ts index 34a1785..7f2d257 100644 --- a/src/pages/criticisms/service/CriticismsService.ts +++ b/src/pages/criticisms/service/CriticismsService.ts @@ -1,17 +1,16 @@ -// API service functions commented out - using static data instead -// import axios from "../../../config/axios"; +import axios from "@/config/axios"; -// export const getCriticismsList = async (page: number) => { -// const { data } = await axios.get(`/criticisms?page=${page}`); -// return data; -// }; +export const getCriticismsList = async (page: number) => { + const { data } = await axios.get(`/admin/criticisms?page=${page}`); + return data; +}; -// export const getCriticismsDetail = async (id: string) => { -// const { data } = await axios.get(`/criticisms/${id}`); -// return data; -// }; +export const getCriticismsDetail = async (id: string) => { + const { data } = await axios.get(`/admin/criticisms/${id}`); + return data; +}; -// export const deleteCriticisms = async (id: string) => { -// const { data } = await axios.delete(`/criticisms/${id}`); -// return data; -// }; +export const deleteCriticisms = async (id: string) => { + const { data } = await axios.delete(`/admin/criticisms/${id}`); + return data; +};