"use client"; import React, { useState } from "react"; import { FaTimesCircle } from "react-icons/fa"; const API_BASE = process.env.NEXT_PUBLIC_API_BASE_URL; const AcceptPopup = ({ request, isOpen, onClose }) => { const [loading, setLoading] = useState(false); const [error, setError] = useState(""); if (!isOpen || !request) return null; const title = request.title; const description = request.description || "Описание недоступно. Откройте заявку для подробностей."; const baseAddress = request.address || "Адрес не указан"; const city = request.city ? `, ${request.city}` : ""; const place = `${baseAddress}${city}`; let deadline = "Не указано"; if (request.desired_completion_date) { const d = new Date(request.desired_completion_date); if (!Number.isNaN(d.getTime())) { const datePart = d.toLocaleDateString("ru-RU", { day: "2-digit", month: "2-digit", }); const timePart = d.toLocaleTimeString("ru-RU", { hour: "2-digit", minute: "2-digit", }); deadline = `${datePart}, ${timePart}`; } } const phone = request.contact_phone || request.phone; const contactNotes = request.contact_notes || request.contactNotes; const urgencyText = (() => { switch (request.urgency) { case "low": return "Низкая"; case "medium": return "Средняя"; case "high": return "Высокая"; case "urgent": return "Срочно"; default: return null; } })(); const getAccessToken = () => { if (typeof window === "undefined") return null; const saved = localStorage.getItem("authUser"); const authUser = saved ? JSON.parse(saved) : null; return authUser?.accessToken || null; }; // тут полностью логика отклика const handleClick = async () => { if (!API_BASE || !request.id) { setError("Некорректная заявка (нет id)"); return; } const accessToken = getAccessToken(); if (!accessToken) { setError("Вы не авторизованы"); return; } try { setLoading(true); setError(""); console.log("POST отклик", { url: `${API_BASE}/requests/${request.id}/responses`, requestId: request.id, }); const res = await fetch(`${API_BASE}/requests/${request.id}/responses`, { method: "POST", headers: { "Content-Type": "application/json", Accept: "application/json", Authorization: `Bearer ${accessToken}`, }, // по схеме тело обязательно, просто пустой объект допустим [file:598] body: JSON.stringify({}), }); 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; } console.error("Ответ API /responses:", msg); setError(msg); setLoading(false); return; } await res.json(); // VolunteerResponse [file:598] setLoading(false); onClose(); } catch (e) { setError(e.message || "Ошибка сети"); setLoading(false); } }; return (
{title}
{/* Только время выполнить до */}{description}
{urgencyText && (Срочность: {urgencyText}
)} {phone && (Телефон: {phone}
)} {contactNotes && (Комментарий к контакту: {contactNotes}
)} {error && ({error}
)}Данные:
Место: {place}