"use client"; import React, { useState, useEffect } from "react"; import { FaStar } from "react-icons/fa"; const API_BASE = process.env.NEXT_PUBLIC_API_BASE_URL; const RequestDetailsModal = ({ request, onClose }) => { const [details, setDetails] = useState(null); // полная заявка из API const [loading, setLoading] = useState(true); const [loadError, setLoadError] = useState(""); const isDone = request.status === "Выполнена"; const isRejected = request.status === "Отклонена"; const [rating, setRating] = useState(0); const [review, setReview] = useState(""); const [rejectFeedback, setRejectFeedback] = useState(""); // подгружаем детальную заявку /requests/{id}[file:519] useEffect(() => { const fetchDetails = async () => { if (!API_BASE) { setLoadError("API_BASE_URL не задан"); setLoading(false); return; } const saved = typeof window !== "undefined" ? localStorage.getItem("authUser") : null; const authUser = saved ? JSON.parse(saved) : null; const accessToken = authUser?.accessToken; if (!accessToken) { setLoadError("Вы не авторизованы"); setLoading(false); return; } try { const res = await fetch(`${API_BASE}/requests/${request.id}`, { headers: { Accept: "application/json", Authorization: `Bearer ${accessToken}`, }, }); if (!res.ok) { let msg = "Не удалось загрузить заявку"; try { const data = await res.json(); if (data.error) msg = data.error; } catch { const text = await res.text(); if (text) msg = text; } setLoadError(msg); setLoading(false); return; } const data = await res.json(); // RequestDetail[file:519] setDetails(data); setLoading(false); } catch (e) { setLoadError(e.message || "Ошибка сети"); setLoading(false); } }; fetchDetails(); }, [request.id]); const handleStarClick = (value) => { setRating(value); }; const handleSubmit = () => { console.log("Оставить отзыв:", { id: request.id, status: request.status, rating, review, rejectFeedback, }); onClose(); }; // подготовка текстов из details (без изменения верстки) const fullDescription = details?.description || request.description || "Описание отсутствует"; const addressLine = details ? [details.address, details.city].filter(Boolean).join(", ") : null; const requesterName = details?.requester?.first_name ? `${details.requester.first_name} ${details.requester.last_name || ""}`.trim() : details?.requester?.email; const requestTypeName = details?.request_type?.name; return (
Заявка от {request.createdAt}
{request.date}
{request.time}
{request.title}
{/* Блок с полной информацией о заявке */}Загрузка информации о заявке...
)} {loadError && !loading && ({loadError}
)} {!loading && !loadError && ( <> {requestTypeName && (Тип: {requestTypeName}
)} {addressLine && (Адрес: {addressLine}
)} {details?.urgency && (Срочность:{" "} {details.urgency}
)} {requesterName && (Заявитель: {requesterName}
)} {details?.contact_phone && (Телефон:{" "} {details.contact_phone}
)} {details?.contact_notes && (Комментарий к контакту:{" "} {details.contact_notes}
)}Описание:{" "} {fullDescription}
> )}Отзыв
Причина отказа
{request.rejectReason}
Ваш комментарий
Оценить волонтера