diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 737dc5b..1c85e45 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,10 +2,10 @@ - - - + + + diff --git a/components/CartDrawer.jsx b/components/CartDrawer.jsx index 1df8152..0bb7b48 100644 --- a/components/CartDrawer.jsx +++ b/components/CartDrawer.jsx @@ -2,110 +2,113 @@ // کشوی (Drawer) سبد خرید: نمایش آیتم‌های انتخابی، تغییر تعداد، جمع کل، و دکمه پرداخت (placeholder). -import { Drawer, Button, Empty, InputNumber, message } from 'antd'; -import { DeleteOutlined } from '@ant-design/icons'; -import { useSelector, useDispatch } from 'react-redux'; +import {Drawer, Button, Empty, InputNumber, message} from 'antd'; +import {DeleteOutlined} from '@ant-design/icons'; +import {useSelector, useDispatch} from 'react-redux'; import { - selectCartItems, - selectCartTotal, - selectIsDrawerOpen, - closeDrawer, - removeFromCart, - incrementQty, - decrementQty, + selectCartItems, + selectCartTotal, + selectIsDrawerOpen, + closeDrawer, + removeFromCart, + incrementQty, + decrementQty, } from '@/store/cartSlice'; -import { useLanguage } from '@/app/context/LanguageContext'; +import {useLanguage} from '@/app/context/LanguageContext'; +import api from "@/lib/axios"; function toLocaleNumber(n, locale) { - return n.toLocaleString(locale === 'fa' ? 'fa-IR' : 'en-US'); + return n.toLocaleString(locale === 'fa' ? 'fa-IR' : 'en-US'); } export default function CartDrawer() { - const dispatch = useDispatch(); - const isOpen = useSelector(selectIsDrawerOpen); - const items = useSelector(selectCartItems); - const total = useSelector(selectCartTotal); - const { t, locale, dir } = useLanguage(); + const dispatch = useDispatch(); + const isOpen = useSelector(selectIsDrawerOpen); + const items = useSelector(selectCartItems); + const total = useSelector(selectCartTotal); + const {t, locale, dir} = useLanguage(); - const currencySuffix = locale === 'fa' ? ' ریال' : ' Rials'; + const currencySuffix = locale === 'fa' ? ' ریال' : ' Rials'; - const handleCheckout = async () => { - // ------------------------------------------------------------------- - // TODO: Connect to payment gateway API. - // - // import axios from 'axios'; - // - // try { - // const { data } = await axios.post('/api/payment/create', { - // items: items.map((i) => ({ id: i.id, qty: i.qty })), - // totalAmount: total, - // }); - // window.location.href = data.paymentRedirectUrl; - // } catch (err) { - // message.error('...'); - // } - // ------------------------------------------------------------------- - message.info(t.cart.checkoutToast); - }; + const handleCheckout = async () => { + // ------------------------------------------------------------------- + // TODO: Connect to payment gateway API. - return ( - dispatch(closeDrawer())} - open={isOpen} - width={400} - > - {items.length === 0 ? ( - {t.cart.empty}} className="mt-16" /> - ) : ( -
- {items.map((item) => ( -
- {item.name} -
-

{item.name}

-

- {toLocaleNumber(item.priceNumeric, locale)} - {currencySuffix} -

-
- { - if (val > item.qty) dispatch(incrementQty(item.id)); - else if (val < item.qty) dispatch(decrementQty(item.id)); - }} - className="w-16" - /> -
-
-
- ))} + // try { + // const { data } = await axios.post('/api/payment/create', { + // items: items.map((i) => ({ id: i.id, qty: i.qty })), + // totalAmount: total, + // }); + // window.location.href = data.paymentRedirectUrl; + // } catch (err) { + // message.error('...'); + // } -
-
- {t.cart.total} - + // api() <===> todo : use this func to fetch ... + + // ------------------------------------------------------------------- + message.info(t.cart.checkoutToast); + }; + + return ( + dispatch(closeDrawer())} + open={isOpen} + width={400} + > + {items.length === 0 ? ( + {t.cart.empty}} className="mt-16"/> + ) : ( +
+ {items.map((item) => ( +
+ {item.name} +
+

{item.name}

+

+ {toLocaleNumber(item.priceNumeric, locale)} + {currencySuffix} +

+
+ { + if (val > item.qty) dispatch(incrementQty(item.id)); + else if (val < item.qty) dispatch(decrementQty(item.id)); + }} + className="w-16" + /> +
+
+
+ ))} + +
+
+ {t.cart.total} + {toLocaleNumber(total, locale)} - {currencySuffix} + {currencySuffix} -
- -
-
- )} - - ); +
+ +
+
+ )} +
+ ); } diff --git a/components/ChatWidget.jsx b/components/ChatWidget.jsx index 03a6e0a..788c9b6 100644 --- a/components/ChatWidget.jsx +++ b/components/ChatWidget.jsx @@ -38,6 +38,8 @@ export default function ChatWidget() { // import axios from 'axios'; // const { data } = await axios.post('/api/chat', { message: text }); // setMessages((prev) => [...prev, { from: 'bot', text: data.reply }]); + // api() <===> todo : use this func to fetch ... + // ----------------------------------------------------------------- setTimeout(() => { setMessages((prev) => [...prev, { from: 'bot', text: t.chat.fallbackReply }]); diff --git a/components/TicketForm.jsx b/components/TicketForm.jsx index 40105df..6a561bb 100644 --- a/components/TicketForm.jsx +++ b/components/TicketForm.jsx @@ -23,6 +23,9 @@ export default function TicketForm() { // message.error('...'); // return; // } + + // api() <===> todo : use this func to fetch ... + // ------------------------------------------------------------------- console.log('Ticket submitted (placeholder):', values); message.success(t.ticket.successMsg);