order: stop polling when the order has "closed" or "canceled_by_customer" status.
This commit is contained in:
@@ -8,7 +8,6 @@ import {
|
|||||||
Progress,
|
Progress,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import Ads2 from "components/Ads/Ads2";
|
|
||||||
import { CancelOrderBottomSheet } from "components/CustomBottomSheet/CancelOrderBottomSheet";
|
import { CancelOrderBottomSheet } from "components/CustomBottomSheet/CancelOrderBottomSheet";
|
||||||
import LocationIcon from "components/Icons/LocationIcon";
|
import LocationIcon from "components/Icons/LocationIcon";
|
||||||
import InvoiceIcon from "components/Icons/order/InvoiceIcon";
|
import InvoiceIcon from "components/Icons/order/InvoiceIcon";
|
||||||
@@ -19,7 +18,7 @@ import ProHeader from "components/ProHeader/ProHeader";
|
|||||||
import ProText from "components/ProText";
|
import ProText from "components/ProText";
|
||||||
import ProTitle from "components/ProTitle";
|
import ProTitle from "components/ProTitle";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useNavigate, useParams } from "react-router-dom";
|
import { useNavigate, useParams } from "react-router-dom";
|
||||||
import {
|
import {
|
||||||
@@ -48,6 +47,26 @@ export default function OrderPage() {
|
|||||||
const hasRefetchedRef = useRef(false);
|
const hasRefetchedRef = useRef(false);
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [isRateOrderOpen, setIsRateOrderOpen] = useState(false);
|
const [isRateOrderOpen, setIsRateOrderOpen] = useState(false);
|
||||||
|
|
||||||
|
// Track order details in state to trigger re-evaluation of polling
|
||||||
|
const [lastOrderDetails, setLastOrderDetails] = useState<any>(null);
|
||||||
|
|
||||||
|
// Compute polling interval based on order status
|
||||||
|
const pollingInterval = useMemo(() => {
|
||||||
|
const orderDetailsToCheck = lastOrderDetails;
|
||||||
|
if (orderDetailsToCheck?.status) {
|
||||||
|
const hasClosedOrCanceled = orderDetailsToCheck.status.some(
|
||||||
|
(status: any) =>
|
||||||
|
status?.alias === "closed" ||
|
||||||
|
status?.alias === "canceled_by_customer",
|
||||||
|
);
|
||||||
|
if (hasClosedOrCanceled) {
|
||||||
|
return 0; // Stop polling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 10000; // Continue polling
|
||||||
|
}, [lastOrderDetails]);
|
||||||
|
|
||||||
const { data: orderDetails } = useGetOrderDetailsQuery(
|
const { data: orderDetails } = useGetOrderDetailsQuery(
|
||||||
{
|
{
|
||||||
orderID: orderId || "",
|
orderID: orderId || "",
|
||||||
@@ -56,10 +75,19 @@ export default function OrderPage() {
|
|||||||
{
|
{
|
||||||
skip: !orderId,
|
skip: !orderId,
|
||||||
// return it t0 60000 after finish testing
|
// return it t0 60000 after finish testing
|
||||||
pollingInterval: 10000,
|
// Stop polling if order is closed or canceled
|
||||||
|
pollingInterval,
|
||||||
refetchOnMountOrArgChange: true,
|
refetchOnMountOrArgChange: true,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Update state when orderDetails changes to trigger polling re-evaluation
|
||||||
|
useEffect(() => {
|
||||||
|
if (orderDetails) {
|
||||||
|
setLastOrderDetails(orderDetails);
|
||||||
|
}
|
||||||
|
}, [orderDetails]);
|
||||||
|
|
||||||
const hasClosedStatus = orderDetails?.status?.some(
|
const hasClosedStatus = orderDetails?.status?.some(
|
||||||
(status) => status?.alias === "closed",
|
(status) => status?.alias === "closed",
|
||||||
);
|
);
|
||||||
@@ -73,7 +101,6 @@ export default function OrderPage() {
|
|||||||
setIsSplitBillParticipantsBottomSheetOpen,
|
setIsSplitBillParticipantsBottomSheetOpen,
|
||||||
] = useState(false);
|
] = useState(false);
|
||||||
|
|
||||||
|
|
||||||
// Get restaurant subdomain for refetching
|
// Get restaurant subdomain for refetching
|
||||||
const restaurantSubdomain = restaurant?.subdomain;
|
const restaurantSubdomain = restaurant?.subdomain;
|
||||||
const { refetch: refetchRestaurantDetails } = useGetRestaurantDetailsQuery(
|
const { refetch: refetchRestaurantDetails } = useGetRestaurantDetailsQuery(
|
||||||
@@ -293,7 +320,7 @@ export default function OrderPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{isInProgress ? (
|
{isInProgress ? (
|
||||||
<Flex gap="small" wrap justify="center">
|
<Flex gap="small" wrap justify="center" style={{ marginTop: 16 }}>
|
||||||
<Tooltip title="3 done / 3 in progress / 4 to do">
|
<Tooltip title="3 done / 3 in progress / 4 to do">
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
|||||||
Reference in New Issue
Block a user