import * as React from "react";
import Button from "@mui/material/Button";
import Dialog from "@mui/material/Dialog";
import AppBar from "@mui/material/AppBar";
import Toolbar from "@mui/material/Toolbar";
import IconButton from "@mui/material/IconButton";
import Typography from "@mui/material/Typography";
import CloseIcon from "@mui/icons-material/Close";
import Slide from "@mui/material/Slide";
import ZoomInIcon from "@mui/icons-material/ZoomIn";
import ZoomOutIcon from "@mui/icons-material/ZoomOut";
import RotateRightIcon from "@mui/icons-material/RotateRight";
import { Box } from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import ArrowForwardIcon from "@mui/icons-material/ArrowForward";
import TextInputField from "./TextInputField";
import { notification, Space } from "antd";
import { toast, ToastContainer } from "react-toastify";
import { useEffect, useState } from "react";
import LoadingContainer from "./LoadingContainer";
const Transition = React.forwardRef(function Transition(props, ref) {
return ;
});
export default function DummyDuplicatesPreview({
type,
barcode,
dummyDuplicatesData,
setIsDialogOpen,
}) {
const [open, setOpen] = React.useState(false);
const [api, contextHolder] = notification.useNotification();
const [scaleWidthValue, setScaleWidthValue] = React.useState(80);
const [rotateValue, setRotateValue] = React.useState(0);
const [partAResults, setPartAResults] = React.useState([]);
const [partCResults, setPartCResults] = React.useState([]);
const [isLoading, setIsLoading] = React.useState(false);
const [partAImageIndex, setPartAImageIndex] = React.useState(0);
const [partCImageIndex, setPartCImageIndex] = React.useState(0);
const [inputBarcode, setInputBarcode] = useState(null);
const [inputSerialNo, setInputSerialNo] = useState(null);
const [inputSubjectCode, setInputSubjectCode] = useState(null);
const [inputRegisterNumber, setInputRegisterNumber] = useState(null);
const [partAImageS3Path, setPartAImageS3Path] = useState(null);
const [partCImageS3Path, setPartCImageS3Path] = useState(null);
const [loadingText, setLoadingText] = useState(null);
const [isUpdated, setIsUpdated] = useState(false);
const openNotification = (pauseOnHover) => () => {
api.open({
message: "Notification Title",
description: "Record Updated Successfully ....",
showProgress: true,
pauseOnHover,
});
};
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
setIsDialogOpen(false);
setTimeout(() => {
document.body.style.overflow = "auto";
const barcodeCardEle = document.getElementById(barcode);
console.log("barcodeCardEle ======== ", barcodeCardEle);
if (barcodeCardEle) {
if (isUpdated) {
barcodeCardEle.classList.add("completed");
} else {
barcodeCardEle.classList.add("visited");
}
}
}, 100);
};
React.useEffect(() => {
handleClickOpen();
}, []);
useEffect(() => {
if (partAResults.length > 0 && partAImageIndex <= partAResults.length) {
setPartAImageS3Path(partAResults[partAImageIndex]?.s3_path);
}
}, [partAResults]);
useEffect(() => {
console.log("fetchDuplicateBarcodeInfo .........");
const fetchDuplicateBarcodeInfo = async () => {
setIsLoading(true);
console.log("fetching barcode info 12.....");
setLoadingText(`Fetching Barcode Info : ${barcode}`);
try {
const response = await fetch(
`${
import.meta.env.VITE_REACT_APP_BACKEND_URL
}/fetchDummyDuplicateBarcodeInfo`,
{
method: "POST",
body: JSON.stringify({
type,
barcode,
}),
headers: {
"Content-Type": "application/json",
},
}
);
const responseData = await response.json();
setIsLoading(false);
setLoadingText(null);
console.log("Barcode info Response Data ==== ", responseData);
if (responseData?.status == "success") {
console.log("success");
setIsLoading(false);
setPartAResults(responseData?.part_a_results);
setPartCResults(responseData?.part_c_results);
}
} catch (error) {
setIsLoading(false);
setLoadingText(null);
throw new Error(error);
}
};
fetchDuplicateBarcodeInfo();
}, []);
const ZoomInImage = () => {
console.log("Zooming In Image ....");
const elements = document.getElementsByClassName("scanned-img");
for (var ele of elements) {
console.log("Ele is : ", ele);
const newScaleWidthValue = scaleWidthValue + 10;
setScaleWidthValue(newScaleWidthValue);
// ele.style.transform = `scale(${newScaleValue})`;
ele.style.width = `${newScaleWidthValue}%`;
}
};
const ZoomOutImage = () => {
console.log("Zooming Out Image ....");
const elements = document.getElementsByClassName("scanned-img");
for (var ele of elements) {
console.log("Ele is : ", ele);
const newScaleWidthValue = scaleWidthValue - 10;
setScaleWidthValue(newScaleWidthValue);
// ele.style.transform = `scale(${newScaleValue})`;
ele.style.width = `${newScaleWidthValue}%`;
}
};
const RotateImageLeft = () => {
const elements = document.getElementsByClassName("scanned-img");
for (var ele of elements) {
console.log("Ele is : ", ele);
const newRotateValue = rotateValue - 90;
setRotateValue(newRotateValue);
ele.style.transform = `rotate(${newRotateValue}deg)`;
}
};
const RotateImageRight = () => {
const elements = document.getElementsByClassName("scanned-img");
for (var ele of elements) {
console.log("Ele is : ", ele);
const newRotateValue = rotateValue + 90;
setRotateValue(newRotateValue);
ele.style.transform = `rotate(${newRotateValue}deg)`;
}
};
useEffect(() => {
if (partAResults.length > 0 && partAImageIndex <= partAResults.length) {
setLoadingText(null);
setIsLoading(true);
setInputBarcode(null);
setInputRegisterNumber(null);
setInputSubjectCode(null);
setPartAImageS3Path(null);
setInputSerialNo(null);
setTimeout(() => {
setInputBarcode(partAResults[partAImageIndex]?.barcode);
setInputRegisterNumber(partAResults[partAImageIndex]?.register_number);
setInputSubjectCode(partAResults[partAImageIndex]?.subject_code);
setPartAImageS3Path(partAResults[partAImageIndex]?.s3_path);
setInputSerialNo(partAResults[partAImageIndex]?.serial_no);
setIsLoading(false);
}, 500);
}
}, [dummyDuplicatesData, partAImageIndex]);
useEffect(() => {
console.log("part c image index changing ....", partCImageIndex);
if (partCResults.length > 0 && partCImageIndex <= partCResults.length) {
console.log("into if ..");
setPartCImageS3Path(null);
setTimeout(() => {
setPartCImageS3Path(partCResults[partCImageIndex]?.s3_path);
}, 5000);
}
}, [partCImageIndex]);
useEffect(() => {
if (partAImageS3Path) {
const fetchPartAImageData = async () => {
setIsLoading(true);
console.log("fetching Image info .....");
try {
const response = await fetch(
`${
import.meta.env.VITE_REACT_APP_BACKEND_URL
}/fetchPartAS3PathInfo`,
{
method: "POST",
body: JSON.stringify({
partAImageS3Path,
}),
headers: {
"Content-Type": "application/json",
},
}
);
const responseData = await response.json();
setIsLoading(false);
if (responseData?.status === "success") {
const imageInfo = responseData?.image_info;
console.log("Image info ====== ", imageInfo);
if (imageInfo && imageInfo.length > 0) {
setInputBarcode(imageInfo[0]?.barcode);
setInputRegisterNumber(imageInfo[0]?.register_number);
setInputSubjectCode(imageInfo[0]?.subject_code);
}
}
} catch (error) {
setIsLoading(false);
console.error("Error fetching barcode info:", error);
} finally {
setIsLoading(false);
}
};
fetchPartAImageData();
}
}, [partAImageS3Path]);
const updateDuplicateRecordData = async () => {
const regex = /^\d+(_\d+)?$/;
console.log("Regex ===== ", regex);
if (!regex.test(inputBarcode)) {
alert("Please enter valid Barcode");
return;
}
try {
setIsLoading(true);
const response = await fetch(
`${
import.meta.env.VITE_REACT_APP_BACKEND_URL
}/updateDuplicateRecordData`,
{
method: "POST",
body: JSON.stringify({
DuplicatePartAbarcode: barcode,
inputBarcode,
inputRegisterNumber,
inputSerialNo,
inputSubjectCode,
partAS3Path: partAResults[partAImageIndex]?.s3_path,
partCS3Path: partCResults[partCImageIndex]?.s3_path,
}),
headers: {
"Content-Type": "application/json",
},
}
);
const responseData = await response.json();
setIsLoading(false);
console.log("Response Data ==== ", responseData);
if (responseData?.status == "success") {
console.log("Updated successfully ....");
if (responseData?.duplicate_record) {
alert(`Already a record with barcode is present : ${inputBarcode}`);
} else {
console.log("showing notification ...");
toast.success("Record updated Successfully ..");
setIsUpdated(true);
}
}
} catch (error) {
setIsLoading(false);
throw new Error(error);
}
};
return (
{isLoading && }
);
}