import React, { useContext, useEffect, useState } from "react"; import { Grid } from "../../../../components/grid/Grid"; import ResponsiveTable from "../../../../components/responsive-table/ResponsiveTable"; import { reportsList } from "./reportList"; import { AppContext } from "../../../../contexts/AppContext"; import moment from "moment"; import { DatePicker } from "@mui/x-date-pickers"; import { Button, IconButton, TextField, Typography } from "@mui/material"; import { SPACING } from "../../../../data/spacing"; import { useDispatch, useSelector } from "react-redux"; import { adminXGetReportStatusService } from "../../services/admin-x-get-report-status-service"; import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl"; import ManageSearchIcon from "@mui/icons-material/ManageSearch"; export const AdminCExcelStatus = () => { const [tableData, setTableData] = useState([]); const userKey = useSelector((state) => state.userSlice?.userProfile?.key); const authToken = useSelector((state) => state.userSlice?.authToken); const [loadingIndex, setLoadingIndex] = useState(null); const [allReports, setAllReports] = useState([]); const [update, setUpdate] = useState(false); const [, , selectedDate1, setSelectedDate1, selectedDate2, setSelectedDate2] = useContext(AppContext); const dispatch = useDispatch(); useEffect(() => { const currentDate = moment(new Date()).format("YYYY-MM-DD"); setSelectedDate1(currentDate); setSelectedDate2(currentDate); }, [setSelectedDate1, setSelectedDate2]); useEffect(() => { const newData = reportsList.map((report) => ({ ...report, status: "", })); setAllReports(newData); }, []); function replaceUrlParams(url, date1, date2, role, key, token) { if (!url || typeof url !== "string") { return url || ""; } const [baseUrl, queryString] = url.split("?"); if (!queryString) { return url; } const params = new URLSearchParams(queryString); if (params.has("date1")) { params.set("date1", date1); } if (params.has("date2")) { params.set("date2", date2); } if (params.has("start")) { params.set("start", date1); } if (params.has("end")) { params.set("end", date2); } if (params.has("role")) { params.set("role", role); } if (params.has("token")) { params.set("token", token); } if (params.has("key")) { params.set("key", key); } return `${baseUrl}?${params.toString()}`; } const handleCheckAll = async () => { const updatedData = [...allReports]; for (let i = 0; i < allReports.length; i++) { setLoadingIndex(i); try { const response = await dispatch( adminXGetReportStatusService({ url: replaceUrlParams( allReports[i]?.url, selectedDate1, selectedDate2, getRoleFromUrl(), userKey, authToken ), }) ); if (response?.payload?.data?.status) { updatedData[i].status = response.payload.data.status; } } catch (error) { console.error("Error fetching report status:", error); } } setLoadingIndex(null); setAllReports(updatedData); setUpdate((prevUpdate) => !prevUpdate); }; const handleSingleCheck = async (index) => { setLoadingIndex(index); try { const response = await dispatch( adminXGetReportStatusService({ url: replaceUrlParams( allReports[index]?.url, selectedDate1, selectedDate2, getRoleFromUrl(), userKey, authToken ), }) ); const newData = [...allReports]; if (response?.payload?.data?.status) { newData[index].status = response.payload.data.status; } setAllReports(newData); } catch (error) { console.error("Error fetching report status:", error); } finally { setLoadingIndex(null); } }; useEffect(() => { const d = allReports.map((item, i) => [ i + 1, item?.title || "", item?.url ? item.url.split("/")[0] : "", handleSingleCheck(i)} disabled={loadingIndex === i} > , item?.status ? ( ({item.status}){" "} {parseInt(item.status) === 200 || item.status === "200" ? "سالم" : "مشکل دارد"} ) : ( "-" ), ]); setTableData(d); }, [allReports, loadingIndex, update]); return ( ( )} value={selectedDate1} onChange={(e) => { setSelectedDate1(moment(e).format("YYYY-MM-DD")); }} /> ( )} value={selectedDate2} onChange={(e) => { setSelectedDate2(moment(e).format("YYYY-MM-DD")); }} /> ); };