mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:51:12 -05:00
Fix ride credit filtering
This commit is contained in:
@@ -29,6 +29,20 @@ export function RideCreditsManager({ userId }: RideCreditsManagerProps) {
|
||||
const fetchCredits = async () => {
|
||||
try {
|
||||
setLoading(true);
|
||||
|
||||
// First, get ride IDs that match the category filter (if any)
|
||||
let rideIdsToFilter: string[] | null = null;
|
||||
if (filterCategory !== 'all') {
|
||||
const { data: filteredRides, error: rideError } = await supabase
|
||||
.from('rides')
|
||||
.select('id')
|
||||
.eq('category', filterCategory);
|
||||
|
||||
if (rideError) throw rideError;
|
||||
rideIdsToFilter = filteredRides.map(r => r.id);
|
||||
}
|
||||
|
||||
// Build main query
|
||||
let query = supabase
|
||||
.from('user_ride_credits')
|
||||
.select(`
|
||||
@@ -47,24 +61,42 @@ export function RideCreditsManager({ userId }: RideCreditsManagerProps) {
|
||||
)
|
||||
`)
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (filterCategory !== 'all') {
|
||||
query = query.eq('rides.category', filterCategory);
|
||||
|
||||
// Apply ride ID filter if category filter is active
|
||||
if (rideIdsToFilter && rideIdsToFilter.length > 0) {
|
||||
query = query.in('ride_id', rideIdsToFilter);
|
||||
} else if (rideIdsToFilter && rideIdsToFilter.length === 0) {
|
||||
// No rides match the category - return empty
|
||||
setCredits([]);
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Apply sorting
|
||||
if (sortBy === 'date') {
|
||||
query = query.order('first_ride_date', { ascending: false, nullsFirst: false });
|
||||
} else if (sortBy === 'count') {
|
||||
query = query.order('ride_count', { ascending: false });
|
||||
} else if (sortBy === 'name') {
|
||||
query = query.order('rides(name)', { ascending: true });
|
||||
// Note: Can't order by joined table - we'll sort client-side
|
||||
query = query.order('created_at', { ascending: false });
|
||||
}
|
||||
|
||||
|
||||
const { data, error } = await query;
|
||||
if (error) throw error;
|
||||
|
||||
// Type assertion since the query returns properly structured data
|
||||
setCredits((data || []) as UserRideCredit[]);
|
||||
let processedData = (data || []) as UserRideCredit[];
|
||||
|
||||
// Sort by name client-side if needed
|
||||
if (sortBy === 'name') {
|
||||
processedData.sort((a, b) => {
|
||||
const nameA = a.rides?.name || '';
|
||||
const nameB = b.rides?.name || '';
|
||||
return nameA.localeCompare(nameB);
|
||||
});
|
||||
}
|
||||
|
||||
setCredits(processedData);
|
||||
} catch (error) {
|
||||
console.error('Error fetching ride credits:', error);
|
||||
toast.error(getErrorMessage(error));
|
||||
|
||||
Reference in New Issue
Block a user