From 6866832a18d672ef680381770590d35fe60201a9 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Thu, 23 Apr 2026 21:39:58 +0800 Subject: [PATCH] putaway fix --- src/components/PutAwayScan/PutAwayScan.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/PutAwayScan/PutAwayScan.tsx b/src/components/PutAwayScan/PutAwayScan.tsx index 1a46e35..96a932e 100644 --- a/src/components/PutAwayScan/PutAwayScan.tsx +++ b/src/components/PutAwayScan/PutAwayScan.tsx @@ -10,7 +10,7 @@ import { Stack, Typography, } from "@mui/material"; - import { useCallback, useEffect, useMemo, useState } from "react"; + import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import ReactQrCodeScanner, { ScannerConfig, } from "../ReactQrCodeScanner/ReactQrCodeScanner"; @@ -20,7 +20,7 @@ import { import { QrCodeInfo } from "@/app/api/qrcode"; import { Check, QrCodeScanner, Warehouse } from "@mui/icons-material"; import { useTranslation } from "react-i18next"; - import { useSearchParams } from "next/navigation"; + import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { useQrCodeScannerContext } from "../QrCodeScannerProvider/QrCodeScannerProvider"; import PutAwayModal from "./PutAwayModal"; import { PutAwayRecord } from "."; @@ -35,6 +35,9 @@ type ScanStatusType = "pending" | "scanning" | "retry"; const PutAwayScan: React.FC = ({ warehouse }) => { const { t } = useTranslation("putAway"); const searchParams = useSearchParams(); + const pathname = usePathname(); + const router = useRouter(); + const deepLinkConsumedRef = useRef(false); const [scanDisplay, setScanDisplay] = useState("pending"); const [openPutAwayModal, setOpenPutAwayModal] = useState(false); @@ -105,11 +108,18 @@ const PutAwayScan: React.FC = ({ warehouse }) => { /** Deep link from nav alert: /putAway?stockInLineId=… */ useEffect(() => { - if (!stockInLineIdQ) return; + if (!stockInLineIdQ || deepLinkConsumedRef.current) return; const id = parseInt(stockInLineIdQ, 10); if (!Number.isFinite(id) || id <= 0) return; + deepLinkConsumedRef.current = true; setScannedSilId((prev) => (prev === id ? prev : id)); - }, [stockInLineIdQ]); + + // Consume deep link once, then remove it from URL + const nextParams = new URLSearchParams(searchParams.toString()); + nextParams.delete("stockInLineId"); + const nextQuery = nextParams.toString(); + router.replace(nextQuery ? `${pathname}?${nextQuery}` : pathname); + }, [stockInLineIdQ, pathname, router, searchParams]); // Get Scanned Values useEffect(() => {