diff --git a/.env b/.env index 36eab8a..fc26a2e 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ VITE_TOKEN_NAME = 'dsc_token' VITE_REFRESH_TOKEN_NAME = 'dsc_refresh_token' -VITE_BASE_URL = 'https://api.danakcorp.com' -# VITE_BASE_URL = 'http://192.168.1.124:4000' \ No newline at end of file +# VITE_BASE_URL = 'https://api.danakcorp.com' +VITE_BASE_URL = 'http://192.168.0.216:4000' \ No newline at end of file diff --git a/src/langs/fa.json b/src/langs/fa.json index 22e0bbb..57be8c4 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -427,7 +427,7 @@ "callback": { "title_success": "پرداخت موفق بود!", "desc_success": "پرداخت شما با موفقیت انجام شد. از خرید شما متشکریم!", - "order_number": "شماره سفارش", + "order_number": "کد رهگیری", "amount": "مبلغ پرداختی", "date": "تاریخ", "back": "بازگشت", diff --git a/src/pages/home/Home.tsx b/src/pages/home/Home.tsx index 870d69d..69f101d 100644 --- a/src/pages/home/Home.tsx +++ b/src/pages/home/Home.tsx @@ -10,7 +10,7 @@ import { Carousel } from "@material-tailwind/react"; import { useGetAds } from '../ads/hooks/useAdsData' import { AdsDisplayLocation, AdsItemType } from '../ads/types/AdsTypes' import { Pages } from '../../config/Pages' -import { useGetQuikAccess } from './hooks/useHomeData' +import { useGetDashboardSummary, useGetQuikAccess } from './hooks/useHomeData' import { QuikAccessItemType } from './types/HomeTypes' import ServiceItem from '../../components/ServiceItem' import PageLoading from '../../components/PageLoading' @@ -22,6 +22,7 @@ const Home: FC = () => { const { t } = useTranslation('global') const getAds = useGetAds(AdsDisplayLocation.HOMEPAGE_TOP) const getQuikAccess = useGetQuikAccess() + const getDashboard = useGetDashboardSummary() return ( @@ -29,7 +30,7 @@ const Home: FC = () => { داناک | پیشخوان { - getAds.isPending || getQuikAccess.isPending ? + getAds.isPending || getQuikAccess.isPending || getDashboard.isPending ?
@@ -78,7 +79,7 @@ const Home: FC = () => { title={t('home.myservice')} icon={} color='#00D16C' - count={4} + count={getDashboard.data?.data?.subscriptionCount} description={t('home.active_service')} link={Pages.services.mine} /> @@ -87,7 +88,7 @@ const Home: FC = () => { title={t('home.ticket')} icon={} color='#FF7B00' - count={4} + count={getDashboard.data?.data?.ticketCount} description={t('home.unread_messages')} link={Pages.ticket.list} /> @@ -96,7 +97,7 @@ const Home: FC = () => { title={t('receip.receip')} icon={} color='#0047FF' - count={4} + count={getDashboard.data?.data?.invoiceCount} description={t('home.receip')} link={Pages.receipts.index} /> @@ -105,7 +106,7 @@ const Home: FC = () => { title={t('home.announcement')} icon={} color='#FF0000' - count={4} + count={getDashboard.data?.data?.announcementCount} description={t('home.unread_announcement')} link={Pages.announcement.list} /> diff --git a/src/pages/home/hooks/useHomeData.ts b/src/pages/home/hooks/useHomeData.ts index dc6acec..564d0b3 100644 --- a/src/pages/home/hooks/useHomeData.ts +++ b/src/pages/home/hooks/useHomeData.ts @@ -14,6 +14,13 @@ export const useGetQuikAccess = () => { }); }; +export const useGetDashboardSummary = () => { + return useQuery({ + queryKey: ["dashboard-summary"], + queryFn: () => api.getDashboardSummary(), + }); +}; + export const useRemoveQuikAccess = () => { return useMutation({ mutationFn: (variables: string) => api.removeQuikAccess(variables), diff --git a/src/pages/home/service/HomeService.ts b/src/pages/home/service/HomeService.ts index 16cc9c8..aa7daf8 100644 --- a/src/pages/home/service/HomeService.ts +++ b/src/pages/home/service/HomeService.ts @@ -12,6 +12,11 @@ export const getQuikAccess = async () => { return data; }; +export const getDashboardSummary = async () => { + const { data } = await axios.get(`/dashboards/summary`); + return data; +}; + export const removeQuikAccess = async (serviceId: string) => { const { data } = await axios.delete( `/subscriptions/${serviceId}/remove-quick-access` diff --git a/src/pages/notification/Notification.tsx b/src/pages/notification/Notification.tsx index b810aa1..47851a5 100644 --- a/src/pages/notification/Notification.tsx +++ b/src/pages/notification/Notification.tsx @@ -12,19 +12,22 @@ import InfiniteScroll from 'react-infinite-scroll-component'; import MoonLoader from "react-spinners/MoonLoader" import Button from '../../components/Button'; import { toast } from 'react-toastify'; +import { useGetDashboardSummary } from '../home/hooks/useHomeData'; const Notifications: FC = () => { const { t } = useTranslation('global'); const ref = useOutsideClick(() => setShowModal(false)); const [activeTab, setActiveTab] = useState<'all' | 'read' | 'unread'>('all'); const [showModal, setShowModal] = useState(false); - const { data, fetchNextPage, hasNextPage, refetch } = useGetNotification(); + const { data, fetchNextPage, hasNextPage, refetch } = useGetNotification(activeTab); const readAll = useReadAll() const posts = data?.pages.flatMap((page) => page.data?.notifications) || []; + const getDashboard = useGetDashboardSummary() const handleAllRead = () => { readAll.mutate(undefined, { onSuccess: () => { + getDashboard.refetch() refetch() toast.success(t('success')) } @@ -33,7 +36,12 @@ const Notifications: FC = () => { return (
- setShowModal(!showModal)} size={18} color="black" /> +
setShowModal(!showModal)} className='relative cursor-pointer'> + +
+ {getDashboard.data?.data?.notificationCount} +
+
{showModal && (
diff --git a/src/pages/notification/hooks/useNotificationData.ts b/src/pages/notification/hooks/useNotificationData.ts index 458a6b8..b5cac39 100644 --- a/src/pages/notification/hooks/useNotificationData.ts +++ b/src/pages/notification/hooks/useNotificationData.ts @@ -1,15 +1,14 @@ import * as api from "../service/NotificationService"; import { useInfiniteQuery, useMutation } from "@tanstack/react-query"; -export const useGetNotification = () => { +export const useGetNotification = (status: "all" | "read" | "unread") => { return useInfiniteQuery({ - queryKey: ["notifications"], - queryFn: ({ pageParam = 1 }) => api.getNotifications(pageParam), // فراخوانی API برای گرفتن داده‌ها + queryKey: ["notifications", status], + queryFn: ({ pageParam = 1 }) => api.getNotifications(pageParam, status), // فراخوانی API برای گرفتن داده‌ها initialPageParam: 1, // صفحه اول به طور پیشفرض getNextPageParam: (lastPage) => { const currentPage = lastPage.data?.pager.page; const totalPages = lastPage.data?.pager.totalPages; - console.log("hasNextPage check: ", currentPage, totalPages); // بررسی وضعیت صفحات return currentPage < totalPages ? currentPage + 1 : undefined; }, diff --git a/src/pages/notification/service/NotificationService.ts b/src/pages/notification/service/NotificationService.ts index 17bab36..8427851 100644 --- a/src/pages/notification/service/NotificationService.ts +++ b/src/pages/notification/service/NotificationService.ts @@ -1,7 +1,14 @@ import axios from "../../../config/axios"; -export const getNotifications = async (page: number) => { - const { data } = await axios.get(`/notifications?page=${page}`); +export const getNotifications = async ( + page: number, + status: "all" | "read" | "unread" +) => { + let query = ``; + if (status !== "all") { + query = `&isRead=${status === "read" ? 1 : 0}`; + } + const { data } = await axios.get(`/notifications?page=${page}${query}`); return data; }; diff --git a/src/pages/payment/CallBack.tsx b/src/pages/payment/CallBack.tsx index 1043640..715f259 100644 --- a/src/pages/payment/CallBack.tsx +++ b/src/pages/payment/CallBack.tsx @@ -3,11 +3,13 @@ import { FC } from 'react' import { useTranslation } from 'react-i18next' import { NumberFormat } from '../../config/func' import Button from '../../components/Button' -import { useSearchParams } from "react-router-dom"; +import { useNavigate, useSearchParams } from "react-router-dom"; import moment from 'moment-jalaali' +import { Pages } from '../../config/Pages' const CallBack: FC = () => { + const navigate = useNavigate(); const [searchParams] = useSearchParams(); const { t } = useTranslation('global') @@ -94,6 +96,7 @@ const CallBack: FC = () => {
) diff --git a/src/pages/receipts/Detail.tsx b/src/pages/receipts/Detail.tsx index be0cca8..d5c17cf 100644 --- a/src/pages/receipts/Detail.tsx +++ b/src/pages/receipts/Detail.tsx @@ -177,7 +177,7 @@ const ReceiptsDetail: FC = () => { {t('receip.factor_number')}
- {getInvoce.data?.data?.invoice.id} + {moment(getInvoce.data?.data?.invoice.createdAt).format('jYYYY') + '-' + getInvoce.data?.data?.invoice.numericId}
diff --git a/src/pages/receipts/List.tsx b/src/pages/receipts/List.tsx index 40c18db..b6d292d 100644 --- a/src/pages/receipts/List.tsx +++ b/src/pages/receipts/List.tsx @@ -86,10 +86,10 @@ const ReceiptsList: FC = () => { { - getInvoices.data?.data?.invoices?.map((item: ReceiptItemType, index: number) => { + getInvoices.data?.data?.invoices?.map((item: ReceiptItemType) => { return ( - + {/* */}
diff --git a/src/pages/receipts/types/ReceiptTypes.ts b/src/pages/receipts/types/ReceiptTypes.ts index 3a95a60..bb23126 100644 --- a/src/pages/receipts/types/ReceiptTypes.ts +++ b/src/pages/receipts/types/ReceiptTypes.ts @@ -16,6 +16,7 @@ export type ReceiptItemType = { dueDate: string; status: "PENDING" | "PAID" | "CANCELED" | "EXPIRED"; paidAt: string; + numericId: string; }; export type ReceiptDetailItemType = {