"use client"; import React, { useEffect, useState } from "react"; import { FaBell, FaUser } from "react-icons/fa"; import TabBar from "../components/TabBar"; import RequestDetailsModal from "../components/ModeratorRequestDetailsModal"; const API_BASE = process.env.NEXT_PUBLIC_API_BASE_URL; const statusMap = { pending_moderation: { label: "На модерации", color: "#E9D171" }, approved: { label: "Принята", color: "#94E067" }, in_progress: { label: "В процессе", color: "#E971E1" }, completed: { label: "Выполнена", color: "#71A5E9" }, cancelled: { label: "Отменена", color: "#FF8282" }, rejected: { label: "Отклонена", color: "#FF8282" }, }; const HistoryRequestPage = () => { const [requests, setRequests] = useState([]); const [selectedRequest, setSelectedRequest] = useState(null); const [moderatorName, setModeratorName] = useState("Модератор"); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const getAccessToken = () => { if (typeof window === "undefined") return null; const saved = localStorage.getItem("authUser"); const authUser = saved ? JSON.parse(saved) : null; return authUser?.accessToken || null; }; // профиль модератора useEffect(() => { const fetchProfile = async () => { if (!API_BASE) return; const token = getAccessToken(); if (!token) return; try { const res = await fetch(`${API_BASE}/users/me`, { headers: { Accept: "application/json", Authorization: `Bearer ${token}`, }, }); if (!res.ok) return; const data = await res.json(); const fullName = [data.first_name, data.last_name].filter(Boolean).join(" ").trim() || data.email; setModeratorName(fullName); } catch { // дефолт остаётся } }; fetchProfile(); }, []); // список заявок на модерации useEffect(() => { const fetchRequestsForModeration = async () => { if (!API_BASE) { setError("API_BASE_URL не задан"); setLoading(false); return; } const token = getAccessToken(); if (!token) { setError("Вы не авторизованы"); setLoading(false); return; } try { // ЗДЕСЬ ИСПРАВЬ ЭНДПОИНТ ПОД СВОЙ БЭК: const res = await fetch(`${API_BASE}/moderation/requests/pending`, { method: "GET", headers: { Accept: "application/json", Authorization: `Bearer ${token}`, }, }); const text = await res.text(); let data = null; if (text) { try { data = JSON.parse(text); } catch { data = null; } } if (!res.ok) { let msg = "Не удалось загрузить заявки"; if (data && typeof data === "object" && data.error) { msg = data.error; } else if (text) { msg = text; } setError(msg); setLoading(false); return; } const list = Array.isArray(data) ? data : []; // только pending_moderation const pending = list.filter( (item) => item.status && item.status.request_status === "pending_moderation" ); const mapped = pending.map((item) => { const rawStatus = item.status?.request_status || "pending_moderation"; const m = statusMap[rawStatus] || { label: rawStatus, color: "#E2E2E2", }; const created = new Date(item.created_at); const createdAt = created.toLocaleDateString("ru-RU"); const time = created.toLocaleTimeString("ru-RU", { hour: "2-digit", minute: "2-digit", }); return { id: item.id, title: item.title, description: item.description, status: m.label, statusColor: m.color, createdAt, date: createdAt, time, address: item.address, city: item.city, urgency: item.urgency, rawStatus, }; }); setRequests(mapped); setLoading(false); } catch (e) { setError(e.message || "Ошибка сети"); setLoading(false); } }; fetchRequestsForModeration(); }, []); const handleOpen = (req) => setSelectedRequest(req); const handleClose = () => setSelectedRequest(null); return (
{/* Header */}

{moderatorName}

Активные Заявки

{error && (

{error}

)} {/* Список заявок */}
{loading && (

Загрузка заявок...

)} {!loading && requests.length === 0 && !error && (

Заявок на модерации пока нет

)} {requests.map((req) => ( ))}
{selectedRequest && ( )}
); }; export default HistoryRequestPage;