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 () => {
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));