import { useState, useEffect, useMemo } from "react"; import { useNavigate } from "react-router-dom"; import { getImageUrl } from "../config/authConstants"; import { useAuthContext } from "../context/AuthContext"; import Sidebar from "../components/Sidebar"; import AppTopBar from "../components/layout/AppTopBar"; import { ProfileModal } from "../components/profile"; import AuthModal from "../components/AuthModal"; import RulesModal from "./RulesModal"; import ReviewCard from "../components/reviews/ReviewCard"; import ReviewForm from "../components/reviews/ReviewForm"; import RatingSummary from "../components/reviews/RatingSummary"; import { useReviews } from "../hooks/useReviews"; import "../styles/reviews.css"; import { useTranslation } from 'react-i18next'; export default function ReviewsPage() { const { t } = useTranslation(); const navigate = useNavigate(); const { user, token, isAuthenticated } = useAuthContext(); const [sidebarOpen, setSidebarOpen] = useState(false); const [profileModalOpen, setProfileModalOpen] = useState(false); const [authModalOpen, setAuthModalOpen] = useState(false); const [rulesModalOpen, setRulesModalOpen] = useState(false); const profileData = useMemo(() => { if (!user) return {}; const nameParts = (user.name || "").trim().split(/\s+/); return { login: user.login || "", firstName: user.firstName || nameParts[0] || "", lastName: user.lastName || nameParts.slice(1).join(" ") || "", email: user.email || "", phone: user.phone || "", avatar: getImageUrl(user.avatar), id: user.id, }; }, [user]); const { reviews, loading, error, submitting, submitError, loadReviews, submitReview, avgRating, distribution, } = useReviews({ token, isAuthenticated, onAuthRequired: () => setAuthModalOpen(true), authorFallbackName: profileData.firstName || t('reviews.you'), }); useEffect(() => { loadReviews(); }, [loadReviews]); return (
{t('reviews.loginPrompt')}