import { Autocomplete, Box, Button, CircularProgress, FormControl, Grid, Modal, ModalProps, TextField, Typography, } from "@mui/material"; import { GridToolbarContainer } from "@mui/x-data-grid"; import { FooterPropsOverrides, GridColDef, GridRowSelectionModel, useGridApiRef, } from "@mui/x-data-grid"; import { useCallback, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import StyledDataGrid from "../StyledDataGrid"; import SearchResults, { Column, defaultPagingController, } from "../SearchResults/SearchResults"; import { ByItemsSummary, ConsoPickOrderResult, PickOrderLine, PickOrderResult, } from "@/app/api/pickOrder"; import { useRouter, useSearchParams } from "next/navigation"; import ConsolidatePickOrderItemSum from "./ConsolidatePickOrderItemSum"; import ConsolidatePickOrderSum from "./ConsolidatePickOrderSum"; import { GridInputRowSelectionModel } from "@mui/x-data-grid"; import { fetchConsoDetail, fetchConsoPickOrderClient, releasePickOrder, ReleasePickOrderInputs, } from "@/app/api/pickOrder/actions"; import { EditNote } from "@mui/icons-material"; import { fetchNameList, NameList } from "@/app/api/user/actions"; import { useField } from "@mui/x-date-pickers/internals"; import { FormProvider, SubmitErrorHandler, SubmitHandler, useForm, } from "react-hook-form"; import { pickOrderStatusMap } from "@/app/utils/formatUtil"; interface Props { filterArgs: Record; } const style = { position: "absolute", top: "50%", left: "50%", transform: "translate(-50%, -50%)", bgcolor: "background.paper", pt: 5, px: 5, pb: 10, width: 1500, }; interface DisableButton { releaseBtn: boolean; removeBtn: boolean; } const ConsolidatedPickOrders: React.FC = ({ filterArgs }) => { const { t } = useTranslation("pickOrder"); const router = useRouter(); const apiRef = useGridApiRef(); const [filteredPickOrders, setFilteredPickOrders] = useState( [] as ConsoPickOrderResult[], ); const [isLoading, setIsLoading] = useState(false); const [modalOpen, setModalOpen] = useState(false); //change back to false const [consoCode, setConsoCode] = useState(); ///change back to undefined const [revertIds, setRevertIds] = useState([]); const [totalCount, setTotalCount] = useState(); const [usernameList, setUsernameList] = useState([]); const [byPickOrderRows, setByPickOrderRows] = useState< Omit[] | undefined >(undefined); const [byItemsRows, setByItemsRows] = useState( undefined, ); const [disableRelease, setDisableRelease] = useState(true); const formProps = useForm(); const errors = formProps.formState.errors; const openDetailModal = useCallback((consoCode: string) => { setConsoCode(consoCode); setModalOpen(true); }, []); const closeDetailModal = useCallback(() => { setModalOpen(false); setConsoCode(undefined); }, []); const onDetailClick = useCallback( (pickOrder: any) => { console.log(pickOrder); const status = pickOrder.status; if (pickOrderStatusMap[status] >= 3) { router.push(`/pickorder/detail?consoCode=${pickOrder.consoCode}`); } else { openDetailModal(pickOrder.consoCode); } }, [router, openDetailModal], ); const columns = useMemo[]>( () => [ { name: "id", label: t("Detail"), onClick: onDetailClick, buttonIcon: , }, { name: "consoCode", label: t("consoCode"), }, { name: "status", label: t("status"), }, ], [], ); const [pagingController, setPagingController] = useState( defaultPagingController, ); // pass conso code back to assign // pass user back to assign const fetchNewPageConsoPickOrder = useCallback( async ( pagingController: Record, filterArgs: Record, ) => { setIsLoading(true); const params = { ...pagingController, ...filterArgs, }; const res = await fetchConsoPickOrderClient(params); if (res) { console.log(res); setFilteredPickOrders(res.records); setTotalCount(res.total); } setIsLoading(false); }, [], ); useEffect(() => { fetchNewPageConsoPickOrder(pagingController, filterArgs); }, [fetchNewPageConsoPickOrder, pagingController, filterArgs]); const isReleasable = useCallback((itemList: ByItemsSummary[]): boolean => { let isReleasable = true; for (const item of itemList) { isReleasable = item.requiredQty >= item.availableQty; if (!isReleasable) return isReleasable; } return isReleasable; }, []); const fetchConso = useCallback( async (consoCode: string) => { const res = await fetchConsoDetail(consoCode); const nameListRes = await fetchNameList(); if (res) { console.log(res); setByPickOrderRows(res.pickOrders); // for testing // for (const item of res.items) { // item.availableQty = 1000; // } setByItemsRows(res.items); setDisableRelease(isReleasable(res.items)); } else { console.log("error"); console.log(res); } if (nameListRes) { console.log(nameListRes); setUsernameList(nameListRes); } }, [isReleasable], ); const closeHandler = useCallback>( (...args) => { closeDetailModal(); // reset(); }, [closeDetailModal], ); const onChange = useCallback( (event: React.SyntheticEvent, newValue: NameList) => { console.log(newValue); formProps.setValue("assignTo", newValue.id); }, [], ); const onSubmit = useCallback>( async (data, event) => { console.log(data); try { const res = await releasePickOrder(data); console.log(res); console.log(res.status); if (res.status === 200) { router.push(`/pickorder/detail?consoCode=${data.consoCode}`); } else { console.log(res); } } catch (error) { console.log(error); } }, [releasePickOrder], ); const onSubmitError = useCallback>( (errors) => {}, [], ); const handleConsolidate_revert = useCallback(() => { console.log(revertIds); }, [revertIds]); useEffect(() => { if (consoCode) { fetchConso(consoCode); formProps.setValue("consoCode", consoCode); } }, [consoCode]); return ( <> {isLoading ? ( ) : ( items={filteredPickOrders} columns={columns} pagingController={pagingController} setPagingController={setPagingController} totalCount={totalCount} /> )} {consoCode != undefined ? ( {consoCode} option.name} options={usernameList} onChange={onChange} renderInput={(params) => } /> ) : undefined} ); }; export default ConsolidatedPickOrders;