mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 02: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 () => {
|
const fetchCredits = async () => {
|
||||||
try {
|
try {
|
||||||
setLoading(true);
|
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
|
let query = supabase
|
||||||
.from('user_ride_credits')
|
.from('user_ride_credits')
|
||||||
.select(`
|
.select(`
|
||||||
@@ -48,23 +62,41 @@ export function RideCreditsManager({ userId }: RideCreditsManagerProps) {
|
|||||||
`)
|
`)
|
||||||
.eq('user_id', userId);
|
.eq('user_id', userId);
|
||||||
|
|
||||||
if (filterCategory !== 'all') {
|
// Apply ride ID filter if category filter is active
|
||||||
query = query.eq('rides.category', filterCategory);
|
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') {
|
if (sortBy === 'date') {
|
||||||
query = query.order('first_ride_date', { ascending: false, nullsFirst: false });
|
query = query.order('first_ride_date', { ascending: false, nullsFirst: false });
|
||||||
} else if (sortBy === 'count') {
|
} else if (sortBy === 'count') {
|
||||||
query = query.order('ride_count', { ascending: false });
|
query = query.order('ride_count', { ascending: false });
|
||||||
} else if (sortBy === 'name') {
|
} 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;
|
const { data, error } = await query;
|
||||||
if (error) throw error;
|
if (error) throw error;
|
||||||
|
|
||||||
// Type assertion since the query returns properly structured data
|
let processedData = (data || []) as UserRideCredit[];
|
||||||
setCredits((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) {
|
} catch (error) {
|
||||||
console.error('Error fetching ride credits:', error);
|
console.error('Error fetching ride credits:', error);
|
||||||
toast.error(getErrorMessage(error));
|
toast.error(getErrorMessage(error));
|
||||||
|
|||||||
Reference in New Issue
Block a user