diff --git a/src/pages/catalogue/hooks/useCatalogueData.ts b/src/pages/catalogue/hooks/useCatalogueData.ts new file mode 100644 index 0000000..19a95c3 --- /dev/null +++ b/src/pages/catalogue/hooks/useCatalogueData.ts @@ -0,0 +1,8 @@ +import { useMutation } from "@tanstack/react-query"; +import * as api from "../service/CatalogueService"; + +export const usePurchaseInitate = () => { + return useMutation({ + mutationFn: api.purchaseInitate, + }); +}; diff --git a/src/pages/catalogue/service/CatalogueService.ts b/src/pages/catalogue/service/CatalogueService.ts new file mode 100644 index 0000000..515ed4d --- /dev/null +++ b/src/pages/catalogue/service/CatalogueService.ts @@ -0,0 +1,10 @@ +import axios from "@/config/axios"; +import type { PurchaseInitiate } from "../types/Types"; + +export const purchaseInitate = async (params: PurchaseInitiate) => { + const { data } = await axios.post( + `/admin/catalogue/purchase/initiate`, + params, + ); + return data; +}; diff --git a/src/pages/catalogue/types/Types.ts b/src/pages/catalogue/types/Types.ts index 79411c7..c36b713 100644 --- a/src/pages/catalogue/types/Types.ts +++ b/src/pages/catalogue/types/Types.ts @@ -11,3 +11,7 @@ export type CatalogItemType = { export type CatalogResponseType = BaseResponse; export type CatalogByIdResponseType = BaseResponse; + +export type PurchaseInitiate = { + count: number; +}; diff --git a/src/shared/SideBar.tsx b/src/shared/SideBar.tsx index 3abbea0..10b9d7a 100644 --- a/src/shared/SideBar.tsx +++ b/src/shared/SideBar.tsx @@ -12,6 +12,7 @@ import { useLocation } from 'react-router-dom' import { useSharedStore } from './store/sharedStore' import { clx } from '../helpers/utils' import { Paths } from '../config/Paths' +import BuyCatalog from './components/BuyCatalog' const SideBar: FC = () => { @@ -62,6 +63,7 @@ const SideBar: FC = () => {
+
{
-
+ +
} title="خروج" diff --git a/src/shared/components/BuyCatalog.tsx b/src/shared/components/BuyCatalog.tsx new file mode 100644 index 0000000..c1850ca --- /dev/null +++ b/src/shared/components/BuyCatalog.tsx @@ -0,0 +1,63 @@ +import { useState, type FC } from 'react' +import Button from '@/components/Button' +import DefaulModal from '@/components/DefaulModal' +import Input from '@/components/Input' +import { toast } from '@/components/Toast' +import { usePurchaseInitate } from '@/pages/catalogue/hooks/useCatalogueData' +import { extractErrorMessage } from '@/helpers/utils' + +const BuyCatalog: FC = () => { + + const [showModal, setShowModal] = useState(false) + const [count, setCount] = useState(0) + const { mutate, isPending } = usePurchaseInitate() + + const handlePurchaseInitate = () => { + if (count > 0) { + mutate({ count: count }, { + onSuccess: (data) => { + console.log(data); + + }, + onError: (error) => { + toast(extractErrorMessage(error), 'error') + } + }) + } else { + toast('تعداد را انتخاب کنید') + } + } + + return ( +
+
+ +
+ + setShowModal(false)} + isHeader + title_header='خرید کاتالوگ' + > +
+ setCount(+e.target.value)} + /> +
+
+ +
+
+
+ ) +} + +export default BuyCatalog \ No newline at end of file