feat: Implement full Phase 3 API optimizations

This commit is contained in:
gpt-engineer-app[bot]
2025-10-30 23:02:26 +00:00
parent 46ca1c29bc
commit 0091584677
18 changed files with 654 additions and 243 deletions

View File

@@ -1,4 +1,5 @@
import { useState, useEffect } from 'react';
import { useState } from 'react';
import { useUserReviews } from '@/hooks/reviews/useUserReviews';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
import { Badge } from '@/components/ui/badge';
@@ -43,62 +44,11 @@ interface UserReviewsListProps {
}
export function UserReviewsList({ userId, reviewCount }: UserReviewsListProps) {
const [reviews, setReviews] = useState<ReviewWithEntity[]>([]);
const [loading, setLoading] = useState(true);
const [filter, setFilter] = useState<'all' | 'parks' | 'rides'>('all');
const [sortBy, setSortBy] = useState<'date' | 'rating'>('date');
useEffect(() => {
fetchReviews();
}, [userId, filter, sortBy]);
const fetchReviews = async () => {
try {
setLoading(true);
let query = supabase
.from('reviews')
.select(`
id,
rating,
title,
content,
visit_date,
wait_time_minutes,
helpful_votes,
moderation_status,
created_at,
parks:park_id (id, name, slug),
rides:ride_id (
id,
name,
slug,
parks:park_id (name, slug)
)
`)
.eq('user_id', userId);
if (filter === 'parks') {
query = query.not('park_id', 'is', null);
} else if (filter === 'rides') {
query = query.not('ride_id', 'is', null);
}
if (sortBy === 'date') {
query = query.order('created_at', { ascending: false });
} else {
query = query.order('rating', { ascending: false });
}
const { data, error } = await query;
if (error) throw error;
setReviews(data || []);
} catch (error: unknown) {
toast.error(getErrorMessage(error));
} finally {
setLoading(false);
}
};
// Use cached user reviews hook
const { data: reviews = [], isLoading: loading } = useUserReviews(userId, filter, sortBy);
const formatDate = (dateString: string) => {
return new Date(dateString).toLocaleDateString('en-US', {