mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-25 10:51:13 -05:00
feat: Implement full Phase 3 API optimizations
This commit is contained in:
@@ -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', {
|
||||
|
||||
Reference in New Issue
Block a user