import React, { useContext, useEffect, useState } from "react"; import { Box, Button, IconButton, TextField, Tooltip, Typography, } from "@mui/material"; import { useDispatch } from "react-redux"; import axios from "axios"; import { Grid } from "../components/grid/Grid"; import { CLOSE_MODAL, LOADING_END, LOADING_START, OPEN_MODAL, } from "../lib/redux/slices/appSlice"; import ResponsiveTable from "../components/responsive-table/ResponsiveTable"; import { getFaUserRole } from "../utils/getFaUserRole"; import { useNavigate } from "react-router-dom"; import persianDate from "persian-date"; import useUserProfile from "../features/authentication/hooks/useUserProfile"; import CommentsDisabledIcon from "@mui/icons-material/CommentsDisabled"; import { AppContext } from "../contexts/AppContext"; import { CloseTicketService } from "../features/ticket/services/create-ticket"; import personalTicketImage from "../../src/assets/images/Ticket1.png"; import publicTicketImage from "../../src/assets/images/ticket2.png"; import ClosedTicketImage from "../../src/assets/images/ClosedTicketImage.png"; const TicketList = () => { const navigate = useNavigate(); const handleTextChange = (event) => { setTextValue(event.target.value); }; const [role] = useUserProfile(); const isAdmin = () => { if ( role.includes("CityOperator") || role.includes("ProvinceOperator") || role.includes("AdminX") || role.includes("Supporter") || role.includes("SuperAdmin") ) { return true; } else { return false; } }; const [data, setData] = useState([]); const [totalRows, setTotalRows] = useState(0); const [perPage, setPerPage] = useState(10); const [textValue, setTextValue] = useState(""); const [page, setPage] = useState(1); const [tableData, setTableData] = useState([]); const [openNotif] = useContext(AppContext); const [value, setValue] = useState("0"); const [selectedTicket, setSelectedTicket] = useState("0"); const [unreadMessages, setUnredMessages] = useState([]); // const [ticketCounts, setTicketCounts] = useState({ // personal: 0, // public: 0, // closed: 0, // }); // const handleChange = (event, newValue) => { // setValue(newValue); // }; const fetchApiData = async (page) => { let response; try { dispatch(LOADING_START()); let query = `ticket/?search=filter&value=${textValue}&page=${page}&page_size=${perPage}`; if (value === "0") query += `&type=single&status=open`; else if (value === "1") query += `&type=public&status=open`; else if (value === "2") query += `&status=closed`; response = await axios.get(query); dispatch(LOADING_END()); setData(response.data.results); setTotalRows(response.data.count); } catch { dispatch(LOADING_END()); } }; const dispatch = useDispatch(); const handlePageChange = (page) => { fetchApiData(page); setPage(page); }; const handlePerRowsChange = (perRows) => { setPerPage(perRows); setPage(1); }; const updateTable = () => { fetchApiData(page !== 0 ? page : 1); }; useEffect(() => { fetchApiData(1); }, [dispatch, perPage, value]); useEffect(() => { let unread = []; const d = data?.map((item, i) => { if (item?.unreadMessage) { unread[i] = true; } else { unread[i] = false; } return [ page === 1 ? i + 1 : i + (perPage * page) / 2 + 1, item?.ticketId, item.typeTicket === "single" ? "شخصی" : "همگانی", `${item?.role ? getFaUserRole(item?.role) : ""} (${ item?.user?.fullname })`, item?.title, `${ item?.status === "open" ? `باز${item?.readOnly === true ? " (فقط خواندنی)" : ""}` : item?.status === "answered" ? "پاسخ داده شده" : "بسته" }`, item.toUser.length ? item?.toUser?.map( (option, index) => `${option?.fullname} ${ index + 1 !== item?.toUser?.length ? " - " : "" }` ) : item?.toRole?.map( (option, index) => `${getFaUserRole(option.name)} ${ index + 1 !== item?.toRole?.length ? " - " : "" }` ), `${new persianDate(new Date(item?.createDate)).format( "dddd DD MMMM" )} (${new Date(item?.createDate).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", hour12: false, })})`, {isAdmin() && ( { dispatch( OPEN_MODAL({ title: "از بستن تیکت اطمینان دارید؟", content: ( در صورت بستن تیکت امکان باز کردن مجدد آن وجود ندارد! ), }) ); }} > )} , ]; }); setTableData(d); setUnredMessages(unread); }, [data]); const handleSubmit = async (event) => { event.preventDefault(); dispatch(LOADING_START()); try { let query = `ticket/?search=filter&value=${textValue}&page=1&page_size=${perPage}`; if (value === "0") query += `&type=single`; else if (value === "1") query += `&type=public`; else if (value === "2") query += `&status=closed`; const response = await axios.get(query); setData(response.data.results); setTotalRows(response.data.count); dispatch(LOADING_END()); } catch (error) { console.error("Error fetching data:", error); } }; const handleTicketTypeSelect = (type) => { setValue(type); setSelectedTicket(type); }; return ( <> تیکت های من {/* */} handleTicketTypeSelect("0")} gap={1} > Personal Tickets تیکت های شخصی handleTicketTypeSelect("1")} gap={1} > Public Tickets تیکت های همگانی handleTicketTypeSelect("2")} gap={1} > Closed Tickets تیکت‌های بایگانی {/* Closed Tickets تیکت های بسته شده: {ticketCounts.closed} */} {value === "0" && (
)} {value === "1" && (
)} {value === "2" && (
)}
); }; export default TicketList;