mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-25 02:11:12 -05:00
feat: Implement comprehensive entity filtering
This commit is contained in:
@@ -38,10 +38,18 @@ export interface FilterState {
|
||||
parkType: string;
|
||||
status: string;
|
||||
country: string;
|
||||
states?: string[];
|
||||
cities?: string[];
|
||||
operators?: string[];
|
||||
propertyOwners?: string[];
|
||||
minRating: number;
|
||||
maxRating: number;
|
||||
minRides: number;
|
||||
maxRides: number;
|
||||
minCoasters?: number;
|
||||
maxCoasters?: number;
|
||||
minReviews?: number;
|
||||
maxReviews?: number;
|
||||
openingYearStart: number | null;
|
||||
openingYearEnd: number | null;
|
||||
}
|
||||
@@ -56,10 +64,18 @@ const initialFilters: FilterState = {
|
||||
parkType: 'all',
|
||||
status: 'all',
|
||||
country: 'all',
|
||||
states: [],
|
||||
cities: [],
|
||||
operators: [],
|
||||
propertyOwners: [],
|
||||
minRating: 0,
|
||||
maxRating: 5,
|
||||
minRides: 0,
|
||||
maxRides: 1000,
|
||||
minCoasters: 0,
|
||||
maxCoasters: 100,
|
||||
minReviews: 0,
|
||||
maxReviews: 1000,
|
||||
openingYearStart: null,
|
||||
openingYearEnd: null,
|
||||
};
|
||||
@@ -144,6 +160,34 @@ export default function Parks() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// States filter
|
||||
if (filters.states && filters.states.length > 0) {
|
||||
if (!park.location?.state_province || !filters.states.includes(park.location.state_province)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Cities filter
|
||||
if (filters.cities && filters.cities.length > 0) {
|
||||
if (!park.location?.city || !filters.cities.includes(park.location.city)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Operators filter
|
||||
if (filters.operators && filters.operators.length > 0) {
|
||||
if (!park.operator?.id || !filters.operators.includes(park.operator.id)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Property owners filter
|
||||
if (filters.propertyOwners && filters.propertyOwners.length > 0) {
|
||||
if (!park.property_owner?.id || !filters.propertyOwners.includes(park.property_owner.id)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Rating filter
|
||||
const rating = park.average_rating || 0;
|
||||
if (rating < filters.minRating || rating > filters.maxRating) {
|
||||
@@ -156,6 +200,22 @@ export default function Parks() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Coaster count filter
|
||||
if (filters.minCoasters !== undefined && filters.maxCoasters !== undefined) {
|
||||
const coasterCount = park.coaster_count || 0;
|
||||
if (coasterCount < filters.minCoasters || coasterCount > filters.maxCoasters) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Review count filter
|
||||
if (filters.minReviews !== undefined && filters.maxReviews !== undefined) {
|
||||
const reviewCount = park.review_count || 0;
|
||||
if (reviewCount < filters.minReviews || reviewCount > filters.maxReviews) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Opening year filter
|
||||
if (filters.openingYearStart || filters.openingYearEnd) {
|
||||
const openingYear = park.opening_date ? parseInt(park.opening_date.split('-')[0]) : null;
|
||||
|
||||
Reference in New Issue
Block a user