"use client"; import { Alert, Button, Chip, Paper, Stack, TextField, Typography, } from "@mui/material"; import QrCodeScannerIcon from "@mui/icons-material/QrCodeScanner"; import SearchIcon from "@mui/icons-material/Search"; import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useQrCodeScannerContext } from "../QrCodeScannerProvider/QrCodeScannerProvider"; type ScanBarProps = { onTrace: (params: { stockInLineId?: number; lotNo?: string; itemCode?: string; }) => void; loading: boolean; lastLotNo?: string; }; /** FP-MTMS Version Checklist | Functions Ref. No. 12 | v1.0.0 | 2026-07-17 */ const ItemTracingScanBar: React.FC = ({ onTrace, loading, lastLotNo, }) => { const { t } = useTranslation("itemTracing"); const scanner = useQrCodeScannerContext(); const [scanMode, setScanMode] = useState<"idle" | "wedge">("idle"); const [itemCode, setItemCode] = useState(""); const [lotNo, setLotNo] = useState(""); const [scanError, setScanError] = useState(null); const startWedgeScan = useCallback(() => { setScanError(null); setScanMode("wedge"); scanner.resetScan(); scanner.startScan(); }, [scanner]); const stopWedgeScan = useCallback(() => { scanner.stopScan(); scanner.resetScan(); setScanMode("idle"); }, [scanner]); useEffect(() => { if (scanMode !== "wedge") return; const itemId = scanner.result?.itemId; const stockInLineId = scanner.result?.stockInLineId; if (!itemId || !stockInLineId) return; setScanError(null); stopWedgeScan(); onTrace({ stockInLineId: Number(stockInLineId) }); }, [scanMode, scanner.result, onTrace, stopWedgeScan]); const handleManualSearch = () => { const code = itemCode.trim(); const lot = lotNo.trim(); if (!code || !lot) return; onTrace({ itemCode: code, lotNo: lot }); }; return ( {lastLotNo && ( )} {scanError && ( setScanError(null)}> {scanError} )} {scanMode === "wedge" && ( {t("scanReady")} )} {t("manualSearch")} setItemCode(e.target.value)} disabled={loading} fullWidth /> setLotNo(e.target.value)} disabled={loading} fullWidth /> ); }; export default ItemTracingScanBar;