Fix ride credit filtering

This commit is contained in:
gpt-engineer-app[bot]
2025-10-16 15:00:21 +00:00
parent d0d4003f8e
commit 3283e47b25

View File

@@ -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));