"use client"; import { Box, Tab, Tabs, Snackbar, Alert, CircularProgress, Typography } from "@mui/material"; import { useState, useCallback, useEffect } from "react"; import { useTranslation } from "react-i18next"; import { AllPickedStockTakeListReponse, getApproverStockTakeRecords } from "@/app/api/stockTake/actions"; import PickerCardList from "./PickerCardList"; import PickerStockTake from "./PickerStockTake"; import PickerReStockTake from "./PickerReStockTake"; import ApproverStockTakeAll from "./ApproverStockTakeAll"; type ViewScope = "picker" | "approver-all"; const StockTakeTab: React.FC = () => { const { t } = useTranslation(["inventory", "common"]); const [tabValue, setTabValue] = useState(0); const [selectedSession, setSelectedSession] = useState(null); const [viewMode, setViewMode] = useState<"details" | "reStockTake">("details"); const [viewScope, setViewScope] = useState("picker"); const [approverSession, setApproverSession] = useState(null); const [approverLoading, setApproverLoading] = useState(false); const [snackbar, setSnackbar] = useState<{ open: boolean; message: string; severity: "success" | "error" | "warning" }>({ open: false, message: "", severity: "success", }); const handleCardClick = useCallback((session: AllPickedStockTakeListReponse) => { setSelectedSession(session); setViewMode("details"); }, []); const handleReStockTakeClick = useCallback((session: AllPickedStockTakeListReponse) => { setSelectedSession(session); setViewMode("reStockTake"); setViewScope("picker"); }, []); const handleBackToList = useCallback(() => { setSelectedSession(null); setViewMode("details"); }, []); const handleSnackbar = useCallback((message: string, severity: "success" | "error" | "warning") => { setSnackbar({ open: true, message, severity, }); }, []); useEffect(() => { if (tabValue !== 1) return; setApproverLoading(true); getApproverStockTakeRecords() .then((records) => { const list = Array.isArray(records) ? records : []; setApproverSession(list[0] ?? null); }) .catch((e) => { console.error(e); setApproverSession(null); }) .finally(() => setApproverLoading(false)); }, [tabValue]); if (selectedSession && viewScope === "picker") { return ( {viewScope === "picker" && ( tabValue === 0 ? ( viewMode === "reStockTake" ? ( ) : ( ) ) : null )} setSnackbar({ ...snackbar, open: false })} > setSnackbar({ ...snackbar, open: false })} severity={snackbar.severity}> {snackbar.message} ); } return ( { setTabValue(newValue); if (newValue === 0) { setViewScope("picker"); } else { setViewScope("approver-all"); } }} sx={{ mb: 2 }} > {tabValue === 0 && ( { setViewScope("picker"); handleCardClick(session); }} onReStockTakeClick={handleReStockTakeClick} /> )} {tabValue === 1 && ( {approverLoading ? ( ) : approverSession ? ( ) : ( {t("No data")} )} )} {tabValue === 2 && ( {approverLoading ? ( ) : approverSession ? ( ) : ( {t("No data")} )} )} setSnackbar({ ...snackbar, open: false })} > setSnackbar({ ...snackbar, open: false })} severity={snackbar.severity}> {snackbar.message} ); }; export default StockTakeTab;